Oracle CDC部署

一、ORACLE環境檢查
查oracle數據庫版本(>9.2.0.4.0).
select * from vversion;BANNEROracleDatabase10gEnterpriseEditionRelease10.2.0.1.0ProdPL/SQLRelease10.2.0.1.0ProductionCORE10.2.0.1.0ProductionTNSfor32bitWindows:Version10.2.0.1.0ProductionNLSRTLVersion10.2.0.1.0ProductionoracleCDCcomponent.selectfromv 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================================
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章