1、Oracle 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;