Oracle CDC部署流程
一、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================================
查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================================
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24930246/viewspace-1069835/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle cdc 非同步部署文件Oracle非同步
- Oracle_CDC整理2-部署Oracle
- FLINK CDC部署同步
- Oracle資料庫部署實施流程Oracle資料庫
- flowable流程部署
- PbootCMS部署流程boot
- flink-cdc實時同步(oracle to mysql)OracleMySql
- onnxruntime模型部署流程模型
- 小程式部署全流程
- CDC+PL/SQL或者CDC+kettle。SQL
- flowable流程引擎通過模型ID部署流程模型
- flowable流程引擎透過模型ID部署流程模型
- Oracle CDC 變更資料捕獲技術Oracle
- Linux部署專案流程Linux
- flowable 三種方式部署流程
- 使用flowable部署流程定義
- flowable 部署流程的三種方式
- Tomcat部署web專案流程TomcatWeb
- FLINK CDC同步
- Oracle_CDC整理3-參考及錯誤處理Oracle
- oracle11g_DBMS_CDC_PUBLISH_object change物件變化traceOracleObject物件
- 筆記:Gitlab-CI部署流程筆記Gitlab
- Python常見專案部署流程Python
- Centos 7.1+CDH5.7.2全部署流程CentOSH5
- [Flink/CDC/資料整合] 資料增量整合方案:Flink CDC
- Flink CDC實戰
- SQLServer CDC清理規則SQLServer
- SQLServer開啟CDC功能SQLServer
- ibm cdc簡介IBM
- ibm cdc 架構IBM架構
- 寶塔皮膚成功部署Django專案流程Django
- Laravel Envoy 安裝到部署完整流程Laravel
- devops系統自動化部署流程dev
- 前端Linux部署命令與流程記錄前端Linux
- Spark原始碼解析-Yarn部署流程(ApplicationMaster)Spark原始碼YarnAPPAST
- zabbix4.0服務端 部署全流程服務端
- Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生產實踐MongoDB
- oracle 主機部署Oracle