在Oracle建立CDC
2015-08-18 15:44
507 查看
主要流程参见:
/article/1330376.html
由于本人对Oracle陌生的紧,所以犯了很多错误,感谢朋友们的大力支持。
记下碰到的错误和解决方法:
1. 数据库必须是在archivelog模式,否则后面激活变更集会报错。
将数据库从NoArchiveLog转成ArchiveLog过程参见 http://blog.csdn.net/fengyifei11228/article/details/6049357
需要通过CRT远程连接到服务器,服务器上连实例命令为:sqlplus sys / as sysdba
若本机,命令为:sqlplus sys/mima@pacs as sysdba
通过Oracle命令新建文件夹命令为:host md abc就是在当前路径新建个abc文件夹。
2.ALTER TABLE scott.t1 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
//要加columns
3.GRANT
EXECUTE on DBMS_CDC_PUBLISH TO cdcpub; //需要sys权限
4.EXECUTE
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(GRANTEE => 'cdcpub'); //需要在Oracle的命令窗口中运行
5.将放在Job里10秒一次。
问题在于这样创建CDC实在太复杂,SQLServer的变更表都是自动创建的,而Oracle都要手工去建。
接下来测试一下其他字符集,或者多表CDC的情况。
最后附上所有代码:
/article/1330376.html
由于本人对Oracle陌生的紧,所以犯了很多错误,感谢朋友们的大力支持。
记下碰到的错误和解决方法:
1. 数据库必须是在archivelog模式,否则后面激活变更集会报错。
将数据库从NoArchiveLog转成ArchiveLog过程参见 http://blog.csdn.net/fengyifei11228/article/details/6049357
需要通过CRT远程连接到服务器,服务器上连实例命令为:sqlplus sys / as sysdba
若本机,命令为:sqlplus sys/mima@pacs as sysdba
通过Oracle命令新建文件夹命令为:host md abc就是在当前路径新建个abc文件夹。
2.ALTER TABLE scott.t1 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
//要加columns
3.GRANT
EXECUTE on DBMS_CDC_PUBLISH TO cdcpub; //需要sys权限
4.EXECUTE
DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(GRANTEE => 'cdcpub'); //需要在Oracle的命令窗口中运行
5.将放在Job里10秒一次。
create or replace procedure test_jobproce as BEGIN DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW( subscription_name => 't1_sub'); END test_jobproce; declare test_job_really number; begin dbms_job.submit(test_job_really,'test_jobproce;',sysdate,'sysdate+1/8640'); commit; end; select * from dba_jobs;
问题在于这样创建CDC实在太复杂,SQLServer的变更表都是自动创建的,而Oracle都要手工去建。
接下来测试一下其他字符集,或者多表CDC的情况。
最后附上所有代码:
create user cdcpub identified by cdcpub;
create user subscriber1 identified by subscriber1
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER TABLE eapp.userinfo ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER USER cdcpub QUOTA UNLIMITED ON SYSTEM
QUOTA UNLIMITED ON SYSAUX;
GRANT CREATE SESSION TO cdcpub;
GRANT CREATE TABLE TO cdcpub;
GRANT CREATE TABLESPACE TO cdcpub;
GRANT UNLIMITED TABLESPACE TO cdcpub;
GRANT SELECT_CATALOG_ROLE TO cdcpub;
GRANT EXECUTE_CATALOG_ROLE TO cdcpub;
GRANT CREATE SEQUENCE TO cdcpub;
GRANT DBA TO cdcpub;
GRANT EXECUTE ON DBMS_CDC_PUBLISH TO cdcpub;
--EXECUTE DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(GRANTEE => 'cdcpub');
BEGIN
DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(TABLE_NAME => 'eapp.userinfo');
END;
BEGIN
DBMS_CDC_PUBLISH.CREATE_CHANGE_SET(
change_set_name => 'cdc_test_cs',
description => 'Change set for eapp.userinfo',
change_source_name => 'HOTLOG_SOURCE',
stop_on_ddl => 'y'
);
END;
BEGIN
DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE(
owner => 'cdcpub',
change_table_name => 't1_ct',
change_set_name => 'cdc_test_cs',
source_schema => 'eapp',
source_table => 'userinfo',
column_type_list =>'PATIENT_ID number,INP_NO number,NAME varchar2(150),NAME_PHONETIC varchar2(2000),SEX varchar2(20),DATA_OF_BIRTH number,BIRTHDATE DATE',
capture_values => 'both',
rs_id => 'y',
row_id => 'n',
user_id => 'n',
timestamp => 'n',
object_id => 'n',
source_colmap => 'n',
target_colmap => 'y',
options_string => '');
END;
BEGIN
DBMS_CDC_PUBLISH.ALTER_CHANGE_SET(
change_set_name => 'cdc_test_cs',
enable_capture => 'y');
END;
GRANT SELECT ON cdcpub.t1_ct TO subscriber1;
GRANT CREATE TABLE TO subscriber1;
GRANT CREATE SESSION TO subscriber1;
GRANT CREATE VIEW TO subscriber1;
GRANT UNLIMITED TABLESPACE TO subscriber1;
BEGIN
DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION(
change_set_name => 'cdc_test_cs',
description => 'Change data for t1',
subscription_name => 't1_sub');
END;
BEGIN
DBMS_CDC_SUBSCRIBE.SUBSCRIBE(
subscription_name => 't1_sub',
source_schema => 'eapp',
source_table => 'userinfo',
column_list => 'PATIENT_ID number,INP_NO number,NAME varchar2(150),NAME_PHONETIC varchar2(2000),SEX varchar2(20),DATA_OF_BIRTH number,BIRTHDATE DATE',
subscriber_view => 't1_view');
END;
BEGIN
DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION(
subscription_name => 't1_sub');
END;
BEGIN
DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW(
subscription_name => 't1_sub');
END;
select * from t1_view;
create or replace procedure test_jobproce as BEGIN DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW( subscription_name => 't1_sub'); END test_jobproce; declare test_job_really number; begin dbms_job.submit(test_job_really,'test_jobproce;',sysdate,'sysdate+1/8640'); commit; end; select * from dba_jobs;
相关文章推荐
- Oracle数据库索引
- oracle数据库的导入导出命令
- oracle 分区表的学习
- linux下oracle数据库自动备份
- oracle密码过期ORA-28002: 7天之后口令将过期的解决方法
- oracle运算符及单表查询
- Oracle数据创建虚拟列和复合触发器的方法
- Oracle报错:ORA-00845: MEMORY_TARGET not supported on this system
- linux下重启oracle服务:监听器和实例
- Oracle和DB2锁的 比较
- oracle读取文件
- Oracle 基础笔记1
- DB2 兼容 Oracle 11g测试
- Oracle 数据库12c新特性总结(一)
- Oracle 中查看用户建立的所有触发器
- Ubuntu14.04 安装 Oracle 11g R2 Express Edition
- 详细学习之java简单连接Oracle数据库
- Oracle数据库的基本操作及使用
- oracle数据库SQL语句详解
- Oracle 11g 空表解决方案