ITPub博客

Oracle CDC部署流程

原创 作者:tangyunoracle 时间:2014-01-12 23:28:10 0 删除 编辑
一、ORACLE环境检查
查oracle数据库版本(>9.2.0.4.0).
select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE        10.2.0.1.0        Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

查oracle是否安装CDC component 支持.
select * from v$option;
PARAMETER
VALUE
Change Data Capture
TRUE

二、查初始化参数支持
select name,value/1024/1024 "Size (MB)" from v$parameter
where name in('java_pool_size','sga_max_size','shared_pool_size'
,'job_queue_processes');
NAME
Size (MB)
shared_pool_size
200
sga_max_size
881.0716553
java_pool_size
64
job_queue_processes
10


这里如果是10g以上版本的话java_pool_size和shared_pool_size会为0,这个因为10g以上都是由SGA_TARGET自动管理内存使用的,这样就不用设置shared_pool_size和java_pool_size等参数的大小,他们会根据需要自动的进行调整的。我们一般都是才用10g以上的版本。

查CDC用户是否具有如下权限(用户名根据现场情况确定)
-- Grant/Revoke object privileges
grant select on SYS.CHANGE_TABLES to TY_CDC;
grant select on SYS.DBA_SUBSCRIBED_TABLES to TY_CDC;
grant execute on SYS.DBMS_CDC_PUBLISH to TY_CDC;
grant execute on SYS.DBMS_CDC_SUBSCRIBE to TY_CDC;
-- Grant/Revoke role privileges
grant execute_catalog_role to TY_CDC;
grant select_catalog_role to TY_CDC;
-- Grant/Revoke system privileges
grant create any sequence to TY_CDC;
grant create database link to TY_CDC;
grant create procedure to TY_CDC;
grant create session to TY_CDC;
grant create synonym to TY_CDC;
grant create table to TY_CDC;
grant create tablespace to TY_CDC;
grant create trigger to TY_CDC;
grant create view to TY_CDC;
grant debug connect session to TY_CDC;
grant unlimited tablespace to TY_CDC;

在资源库上建立相应的表
这里需要在资源库TYGMCC用户下建立相应的表来接收同步过来的数据。
在TYGMCC用户下执行:00crt_all_tabs_to_TYGMCC.sql;

这里最好顺便建立相应的试图,可以再资源库执行查询:
SELECT 'CREATE OR REPLACE VIEW V_'||TABLE_NAME||' AS SELECT * FROM '||TABLE_NAME||';' FROM USER_TABLES WHERE INSTR(TABLE_NAME,'GMCC')=1;
把查询结果在COMMAND窗口中执行。
这里可以在TYGMCC用户下执行:00crt_all_views_to_TYGMCC.sql;


四、开始安装
创建CDC用户的数据库对象.
首先在TY_CDC用户下创建数据链路并测试链路是否连通建立脚本可以参考crt_dababase_link.txt文件:
1). 目标链路TARGET_LINK
2). 连接数据链路TO_TY
在TY_CDC测试是否连通:
select * from dual@TO_TY;
注意:这里数据链路都必须先修改相应的连接串以及用户名和密码。

Create table,index,sequence,synonym,view,function,procedure,etc
在TY_CDC用户下执行:01crt_all_objects.sql和01crt_lob_views.sql;

装载初始化数据到三张配置表b_cfg_table、b_cfg_bgx、b_cfg_sjy。
b_cfg_table表数据主要用于CDC变化表的生成,及数据刷新CDC_REFRESH_RECORD时用。
b_cfg_bgx表数据为ETL的发起点,CDC_ETL启动时会遍历此表。
b_cfg_sjy此表主要用于ETL过程中动态装配生成SQL语句。
在TY_CDC用户下执行:02crt_4cfg_data_all.sql;

根据TY_CDC用户进行相关栏目的重置:
在TY_CDC用户下执行:
update b_cfg_table set schema='TY_GMCC',view_name=null,handle=null where schema='TY_GMCC';
commit;


注意:这里红色的需要改成我们要监控的用户名,这里是以烟台的参考,其他地市则需要改成相应的用户名。

把对应表的查询权限授给TY_CDC用户
在TY用户下执行: 03grt_privs_frm_TY.sql;

在TY_CDC用户下创建同义词
在TY_CDC用户下执行查询:
SELECT 'CREATE OR REPLACE SYNONYM '||TABLE_NAME||' FOR '||SCHEMA||'.'||TABLE_NAME||';' FROM B_CFG_TABLE;
把查询结果在TY_CDC用户下的COMMAND窗口执行;

创建变化表, 检查是否存在多余的订阅及检查是否检测到数据变化.
该步骤中, cdc_cfg_setchangetable只能执行一次,如果有失败或者异常应先清除已存在的用户订阅,然后再生新订阅.否则,后期维护过程中会造成订阅过的历史数据清理不掉,而导致CDC使用的表空间膨胀.
在TY_CDC用户下执行:exec cdc_cfg_setchangetable;

检查是否存在多次重复订阅:
select count(1),source_table_name from user_subscribed_tables group by source_table_name;
清除订阅的语句如下:
select 'exec dbms_cdc_publish.drop_subscriber_view('||handle||','||''''||source_schema_name||''''||','||''''||source_table_name||''''||');' from user_subscribed_tables;


五、创建JOB
这里CDC创建变化表会自动创建一个JOB,这里我们先在TY_CDC用户下执行:
select 'exec sys.dbms_job.remove('||job||');
commit;' dele from user_jobs;
把查询结果在TY_CDC用户下的COMMAND窗口下执行。
在TY_CDC用户下创建JOB:
declare
  job number;
begin
  sys.dbms_job.submit(job       => job,
                      what      => 'CDC_MANAGER(''1'');',
                      next_date => trunc(sysdate + 1) + 1 / 1440,
                      interval  => 'decode(trunc(to_char(sysdate,' || '''' ||
                                   'HH24' ||
                                   ''') / 12),1,trunc(sysdate+1)+1/1440,trunc(sysdate)+12/24)+1/1440',
                      instance  => 1);
  commit;
  --sys.dbms_job.run(job,true);
  sys.dbms_job.submit(job       => job,
                      what      => 'dbms_cdc_publish.purge;',
                      next_date => trunc(sysdate + 1) + 5 / 24,
                      interval  => 'trunc(sysdate+1)+5/24',
                      instance  => 1);
  commit;
  --sys.dbms_job.run(job,true);
  --print job;
end;
/
这里指定JOB创建在第一个实例上,以便以后的维护和管理。

六、数据同步

完成了CDC的部署以后需要把业务库中现有数据同步到资源库中。鉴于业务库现在数据量比较少,所以这里采用直接刷新的方式让CDC把数据同步过来,这样做同时还可以测试一下CDC的速度。
同步TY的数据:
select 'update '||table_name||' set '||table_column||'='||table_column||';
commit;',schema from b_cfg_table t where instr(schema,'TY')=8;
把查询结果拿到TY用户下的COMMAND窗口中执行。

=================End================================
请登录后发表评论 登录
全部评论
有空写写一写,没空看一看。。。 微信号:tangyun0925
  • 博文量
    112
  • 访问量
    1701292