Oracle CDC

 1Oracle 11g

1)同步模式

--初始化参数

--为了JVM的管理

ALTER SYSTEM SET JAVA_POOL_SIZE=50000000 SCOPE=BOTH;

 

--第二步,创建表空间、用户并授权

--Oracle官方建议自定义表空间,以便管理和控制,否则使用默认的系统表空间USERS大小有限制,会出问题

CREATE TABLESPACE ts_cdcpub  DATAFILE 'cdc11gsync.dbf' SIZE 200M AUTOEXTEND ON MAXSIZE 1000M;

CREATE USER cdcpub IDENTIFIED BY cdcpub DEFAULT TABLESPACE ts_cdcpub QUOTA UNLIMITED ON SYSTEM QUOTA UNLIMITED ON SYSAUX;

--为建立cdc的基础权限

GRANT CREATE SESSION TO cdcpub;

GRANT CREATE TABLE TO cdcpub;

GRANT CREATE JOB TO cdcpub;

GRANT SELECT ANY TABLE TO cdcpub;

GRANT UNLIMITED TABLESPACE TO cdcpub;

--数据字典视图和包的权限

GRANT SELECT_CATALOG_ROLE TO cdcpub;

GRANT EXECUTE_CATALOG_ROLE TO cdcpub;

 

2)异步模式

 

--第一步,初始化参数

declare

  job_queue_processes_num  number;  --作业队列数量,限制了执行作业的进程数

  streams_pool_size_num    number;  --streams池大小,用于缓存流进程在数据库间移动/复制数据时使用的队列消息。

  processes_num            number;  --进程数,限制能够连接到SGA的操作系统进程数

  sessions_num             number;  --会话数,限制了对指定实例的并发登陆数

  parallel_max_servers_num number;  --并发服务数,限制并发进程数

begin

  execute immediate ('alter system set java_pool_size = 50000000');  --java_pool_size参数控制java池的的大小,指定用于java开发时内存,官方建议值为50M

  execute immediate ('alter system set undo_retention = 3600');  --undo_retention参数用以控制事务提交以后undo信息保留的时间,单位为秒,官方建议值为3600秒,即1个小时

 

  select value into streams_pool_size_num from v$parameter where name = 'streams_pool_size';

  if (streams_pool_size_num >= 52428800) then

    streams_pool_size_num := streams_pool_size_num + 22020096*i;                                            --替换此处i为计划建立cdc的数量

  else

    streams_pool_size_num := 52428800 + 22020096*i;                                                                                            --替换此处i为计划建立cdc的数量

  end if;

  execute immediate ('alter system set streams_pool_size = '|| streams_pool_size_num||' scope=spfile');  --需重启数据库实例后,该参数生效

 

  select value into processes_num from v$parameter where name = 'processes';

  processes_num := processes_num + 7*i;                                                                                                                       --替换此处i为计划建立cdc的数量

  execute immediate ('alter system set processes = '||processes_num||' scope=spfile');                   --需重启数据库实例后,该参数生效

 

  select value into job_queue_processes_num from v$parameter where name = 'job_queue_processes';

  job_queue_processes_num:=job_queue_processes_num+2;

  if(job_queue_processes_num <1000) then

  execute immediate ('alter system set job_queue_processes ='|| job_queue_processes_num);

  end if;

  select value into sessions_num from v$parameter where name = 'sessions';

  sessions_num := sessions_num + 2*i;                                                                                                                           --替换此处i为计划建立cdc的数量

  execute immediate ('alter system set sessions ='|| sessions_num||' scope=spfile');                             --需重启数据库实例后,该参数生效

 

  select value into parallel_max_servers_num from v$parameter where name = 'parallel_max_servers';

  parallel_max_servers_num := parallel_max_servers_num + 5*i;                                                --替换此处i为计划建立cdc的数量

  execute immediate ('alter system set parallel_max_servers = '||parallel_max_servers_num);

end;

 

--第二步,打开日志归档模式(若已经是归档模式,可跳过),在sqlplus中运行

1)SQL>SHUTDOWN NORMAL/IMMEDIATE;

2)SQL>STARTUP MOUNT;

3)SQL>ALTER DATABASE ARCHIVELOG;

4)SQL>ALTER DATABASE OPEN;

 

--第三步,在归档模式下打开强制日志和补充日志

ALTER DATABASE FORCE LOGGING;

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

--补充日志记录监控表的所有列值,schema.tablename为需要捕获表的架构和名称(若监控多个表,需要执行多次)

ALTER TABLE schema.tablename ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

 

--第四步,创建表空间、用户并授权

--建议自定义表空间,以便管理和控制存储,否则使用默认的系统表空间USERS大小有限制,会出问题

CREATE TABLESPACE ts_cdcpub DATAFILE 'cdc11gasync.dbf' SIZE 200M  AUTOEXTEND ON MAXSIZE 1000M;

CREATE USER cdcpub IDENTIFIED BY cdcpub DEFAULT TABLESPACE ts_cdcpub QUOTA UNLIMITED ON SYSTEM QUOTA UNLIMITED ON SYSAUX;

--为建立cdc的基础权限

GRANT CREATE SESSION TO cdcpub;

GRANT CREATE TABLE TO cdcpub;

GRANT CREATE SEQUENCE TO cdcpub;

GRANT UNLIMITED TABLESPACE TO cdcpub;

--需要DBA权限

GRANT DBA TO cdcpub;

--访问数据字典视图和包的权限

GRANT SELECT_CATALOG_ROLE TO cdcpub;

GRANT EXECUTE_CATALOG_ROLE TO cdcpub;

--Streams的管理权限

BEGIN DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(GRANTEE => 'cdcpub'); END;

 

--第五步,准备源表,schema.tablename为需要捕获表的架构和名称(若监控多个表,需要执行多次)

--若出现增量数据长时间没有捕获的情况,请重新执行这一步

BEGIN  DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(TABLE_NAME =>'schema.tablename'); END;

 

猜你喜欢

转载自chblog.iteye.com/blog/1887064
今日推荐