oracle 10g-->11g schema級別下游實時捕獲stream配置
應業務需求,需要做一個報表資料庫,資料來源是正式庫的應用schema,目前的情況是主庫版本是oracle 10.2.0.5.0,而需要配置的目標庫,也就是報表庫資料庫版本是11.2.0.1.0,作業系統仍然是linux x86-64,昨天在測試環境進行了配置,詳細過程如下:
1.前期的引數設定等在此省略,詳細設定可見我之前的文章;
2.主要配置還是在目標庫進行,具體如下:
相應的使用者、表空間、授權等操作先執行,之後以strmadmin使用者登陸:
佇列設定:
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'strmadmin.DOWNSTREAM_Q_TABLE',
queue_name => 'strmadmin.DOWNSTREAM_Q',
STORAGE_CLAUSE => 'tablespace tbs_stream',
queue_user => 'STRMADMIN');
END;
/
建立應用程式:
BEGIN
DBMS_APPLY_ADM.CREATE_APPLY(
queue_name => 'DOWNSTREAM_Q',
apply_name => 'DOWNSTREAM_APPLY',
apply_captured => TRUE
);
END;
/
建立捕獲程式:
BEGIN
DBMS_CAPTURE_ADM.CREATE_CAPTURE(
queue_name => 'DOWNSTREAM_Q',
capture_name => 'DOWNSTREAM_CAPTURE',
rule_set_name => NULL,
start_scn => NULL,
source_database => 'uat',
use_database_link => true,
first_scn => NULL,
logfile_assignment => 'implicit'); -- Refer to Note below.
END;
/
It is at this point that we specifically focus on the logfile_assignment
parameter. We set this parameter to 'implicit' to instruct the CAPTURE
process to scan all redo log files added by redo transport services or
manually from the source database to the downstream database.
為捕獲程式新增規則:
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name => 'MYNET_APP',
streams_type => 'capture',
streams_name => 'downstream_capture',
queue_name => 'downstream_q',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'uat',
inclusion_rule => TRUE);
END;
/
例項化schema:
DECLARE
-- Variable to hold instantiation SCN value
iscn NUMBER;
BEGIN
-- Get current SCN from Source
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER@uat;
DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(
source_schema_name => 'MYNET_APP',
source_database_name => 'uat',
instantiation_scn => iscn,
recursive => TRUE);
END;
/
之後在作業系統層面進行資料的匯入:
impdp strmadmin directory = DPDATA1 network_link = uat schemas=mynet_app STREAMS_CONFIGURATION=Y table_exists_action=replace PARALLEL=2
匯入完畢之後,啟用應用程式:
exec DBMS_APPLY_ADM.START_APPLY(apply_name => 'DOWNSTREAM_APPLY');
啟動捕獲程式,並開啟實時捕獲:
exec DBMS_CAPTURE_ADM.START_CAPTURE(capture_name => 'DOWNSTREAM_CAPTURE');
BEGIN
DBMS_CAPTURE_ADM.SET_PARAMETER(
capture_name => 'DOWNSTREAM_CAPTURE',
parameter => 'downstream_real_time_mine',
value => 'y');
END;
/
至此配置基本結束,配置結束可進行相關查詢:
SQL> select CAPTURE_NAME,status,ERROR_MESSAGE from dba_capture
2 union all
3 SELECT apply_name,status,error_message from dba_apply;
CAPTURE_NAME STATUS ERROR_MESSAGE
------------------------------ -------- --------------------------------------------------------------------------------
DOWNSTREAM_CAPTURE ENABLED
DOWNSTREAM_APPLY ENABLED
在主庫進行dml或者ddl操作之後,archive log ,從庫的告警日誌會發現如下資訊:
RFS LogMiner: Registered logfile [/arch/1_9665_716985918.dbf] to LogMiner session id [18]
Fri Feb 24 09:45:40 2012
LOGMINER: End mining logfile for session 18 thread 1 sequence 9665, /oracle/oradata/myrpt/stdbyredo02.log
LOGMINER: Begin mining logfile for session 18 thread 1 sequence 9666, /oracle/oradata/myrpt/stdbyredo01.log
Fri Feb 24 09:48:26 2012
說明已經實時應用了!
有一點需要提醒大家的是,配置完了之後,目標庫是沒有propagation程式的,這點為什麼,原因很簡單,propagation程式主要是針對非下游捕獲而言的,目的是傳播捕獲程式捕獲到的redo變化資訊,然後傳送到目標庫,而現在capture和apply程式都位於目標庫,所以沒必要再建立propagation程式,還有當主庫進行大批量的更新操作時,即大事務,目標庫將很難應用起來,這也是stream的最大弊端,這次配置完之後,進行了測試,在主庫建立了一張十幾萬資料量的表,也很快就傳送到目標庫並應用,之後對該表進行全表更新,redo變化也傳遞到了目標庫,但是應用不了,如果該大事務無法應用,那之後的應用也將無法進行,相關查詢顯示,有活動的大事務:
SELECT t.xidusn||'.'||t.xidslt||'.'||t.xidsqn transaction_id ,message_count,t.first_message_create_time FROM DBA_APPLY_SPILL_TXN t;
就是之前的全表更新,解決方法主要就是忽略掉該事務,當然這也不是徹底的解決方法,我的做法是在目標庫修改了一些引數,然後該大事務開始應用,不過時間稍微有點長,大概10分鐘左右才完全應用,具體原因還在排查。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25618347/viewspace-717062/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle stream之schema級複製Oracle
- oracle10gr2-rac+dg基礎上配置downstream(表級別單向捕獲)Oracle
- Oracle GoldenGate 12c實時捕獲SQL Server資料OracleGoSQLServer
- ORACLE10g Stream表級複製配置Oracle
- 實時計算Flink——獨享模式上下游配置模式
- 給客戶通過streams配置了schema級別的同步
- Oracle Stream概述與配置Oracle
- ORACLE10g Stream使用者級複製配置Oracle
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- 如何實現對 Oracle 的實時資料捕獲和效能調優|Flink CDC 專題Oracle
- debezium-資料實時捕獲和傳輸管道(CDC)
- oracle異常捕獲程式碼(轉)Oracle
- Oracle 11G RAC ntp時間同步配置Oracle
- Oracle User 和 Schema 的區別Oracle
- javascript事件冒泡和事件捕獲型別JavaScript事件型別
- Oracle Stream配置詳細步驟Oracle
- jQuery捕獲jQuery
- Oracle CDC 變更資料捕獲技術Oracle
- oracle goldengate 遠端捕獲和投遞OracleGo
- Oracle Stream的安裝、配置和使用Oracle
- oracle 9i stream配置備記Oracle
- JavaScript 事件捕獲JavaScript事件
- 錯誤捕獲
- 實戰11g stream replication之table replication
- php 正規表示式捕獲組與非捕獲組PHP
- Oracle10G LOGMNR捕獲不到記錄Oracle
- oracle 11G dataguard配置Oracle
- 一步一步配置Oracle StreamOracle
- 捕獲程式Crash,讓你的APP告別閃退APP
- Action裡result型別Stream的引數配置型別
- 捕獲 React 異常React
- 捕獲cookie的值Cookie
- iOS異常捕獲iOS
- Swift速成:捕獲列表Swift
- 管理捕獲程式——流
- 【Mysql】捕獲線上sqlMySql
- 配置GoldenGate捕獲Replicat端資料應用異常Go
- oracle schema物件Oracle物件