Oracle主從同步、雙向同步的配置


(本教程展示了Windows環境的oracle數據庫主從同步,Linux環境一樣也可以)

(把主數據庫obpm 和從數據庫orcl 用實際的數據庫名給替換掉)

配置主從同步后,再配置雙向同步,可能會有表數據重疊,建議在配置雙向同完成后,再導入表數據!)

備注:主、從數據庫都用淡藍色標記了,方便查找替換。

1.環境介紹

  主數據庫SID : obpm
  操作系統 :    win 2003 
  IP地址   :  192.168.0.1 
  Global_name : 
  oracle version: 10.2.0.1 

  從數據庫SID: orcl 
  操作系統 :    win 2003 
  IP地址   :  192.168.0.2 
  Global_name : 
  oracle version: 10.2.0.1 

 

2.在主/從數據庫設置初始化參數(在主從數據庫都執行以下操作)

以as sysdba身份,可在sqlplus中執行
  1)  以dba身份登錄

sqlplus / as sysdba

  2)  設置參數

alter system set aq_tm_processes=2 scope=both;   ---啟用對隊列消息的時間監視 
alter system set global_names=true scope=both;   ---設置全局名稱為true 
alter system set undo_retention=3600 scope=both;   --設置回滾段時間,默認是900 
alter system set streams_pool_size=25M scope=spfile; --sga設置為自動調整情況下不需設置該參數 

  3)重啟動兩個數據庫,重啟方式:

1.shutdown immediate
2.startup
3.$lsnrctl start(一般都會提示監聽已經啟動)
(windows服務中也可手動啟動監聽)

3.設置主數據庫(obpm )為歸檔mode (以as sysdba身份,可在sqlplus中執行)

  1)  --查是否歸檔,如是歸檔,請忽略第3點 

 archive log list;

  2) 歸檔設置

 shutdown immediate;
 startup mount;
 alter database archivelog;
 alter system set LOG_ARCHIVE_DEST_1='LOCATION=C:\Ora\arc\';  ---設置歸檔目錄 (執行此句后,在Windows系統文件夾中看看arc文件夾有沒有創建成功,如果沒有,則手動創建,在執行此語句)
 alter database open;
 alter system switch logfile; --相應目錄檢查是否生成arc文件 (如果提示數據庫沒開啟,則先執行alter database open;)

 

4.主/從數據新建stream管理用戶(在主從數據庫都執行以下操作) 

 sqlplus / as sysdba;
 create tablespace tbs_stream datafile 'C:\Ora\tbs_stream01.dbf' size 2000m autoextend on maxsize unlimited segment space management auto; ---創建主環境的Stream專用表空間
 execute dbms_logmnr_d.set_tablespace('tbs_stream'); --將logminer的數據字典從system表空間轉移到新建的表空間,防止撐滿system表空間 
 create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp;  --創建用戶 
 grant dba to strmadmin;  --直接給dba權限. 
(Drop舊的表空間方法:drop tablespace tbs_stream including contents;) 

5.主數據庫網絡環境設置 (就是在主數據庫中增加一個從數據庫的連接服務)

1)主數據庫中添加從數據庫的配置。(通過oracle圖形工具net configuration manager配置,服務名為從數據庫名orcl並測試與從數據庫是否連通

2)新建連接orcl的dblink 

create public database link orcl connect to strmadmin IDENTIFIED BY strmadmin
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SID= orcl)
)
)';

測試dblink:select sysdate from dual@orcl;  --測試dblink是否有效 

 

6.從數據庫網絡環境設置 (就是在從數據庫中增加一個主數據庫的連接服務)

 1)從數據庫中添加主數據庫的配置。(通過oracle圖形工具net configuration manager配置,服務名為主數據庫名obpm,並測試與從數據庫是否連通

 

2)新建連接obpm的dblink 

create public database link obpm connect to strmadmin IDENTIFIED BY strmadmin
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = obpm)
)
)';

測試dblink:select sysdate from dual@obpm;  --測試dblink是否有效

 

7.主數據庫流隊列創建 (可在plsql中的SQL中執行,登錄名應為strmadmin

connect strmadmin/strmadmin  --以strmadmin身份,登錄主數據庫。 
begin
dbms_streams_adm.set_up_queue(queue_table => 'obpm_queue_table',queue_name => 'obpm_queue');
end;
/

 

8.從數據庫流隊列創建

connect strmadmin/strmadmin  --以strmadmin身份,登錄從數據庫。
begin
dbms_streams_adm.set_up_queue(queue_table => 'orcl_queue_table',queue_name => 'orcl_queue');
end;
/

  

9.主數據庫創建捕獲進程 

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'capture',
streams_name => 'capture_obpm',
queue_name => 'strmadmin.obpm_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
/

  

10.從數據庫實例化strmadmin用戶 (win在CMD命令界面中執行)(這兩個路徑須一致)

exp strmadmin/strmadmin@obpm file='C:\Ora\crm.dmp' object_consistent=y rows=y

在從數據庫新建strmadmin 

imp strmadmin/strmadmin@orcl file='C:\Ora\crm.dmp' ignore=y commit=y streams_instantiation=y full=y

  

11.主數據庫創建傳播進程 

connect strmadmin/strmadmin --以strmadmin身份,登錄主數據庫。 
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'strmadmin',
streams_name => 'obpm_to_orcl',
source_queue_name => 'strmadmin.obpm_queue',
destination_queue_name => 'strmadmin.orcl_queue@orcl',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'obpm',
inclusion_rule => true);
end;
/

注意:此段語句執行可能會報錯,如果報錯,不用管,繼續執行后面的。

修改propagation休眠時間為0,表示實時傳播LCR,latency以秒為單位 

begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'obpm_queue',
destination => 'orcl',
latency => 0);
end;
/

 

12.從數據創建應用進程 

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'apply',
streams_name => 'apply_orcl',
queue_name => 'strmadmin.orcl_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'obpm',
inclusion_rule => true);
end;
/

  

13.啟動Stream

1)從數據庫啟動應用進程 

connect strmadmin/strmadmin
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_orcl');
end;
/

2)主數據庫啟動捕獲進程 

connect strmadmin/strmadmin
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_obpm');
end;
/

 

14.現在就可以進行測試了,在crm用戶中作何一個測試表新增數據,刪除數據,增加表,修改表結構,進行同步測試

 

備注:以上就是主從同步的所有配置,接下來配置雙向同步

雙向同步前請測試,主從單向同步是否成功!若成功,則下面進行雙向同步,若不成功,則拉到下面的“問題檢查解決方法處排查問題,主從同步成功后在進行雙向同步!!!”

 

雙向同步配置:

 

1.設置從數據庫(orcl )為歸檔mode (以as sysdba身份,可在sqlplus中執行)

 

 1)  查是否歸檔,如是歸檔,請忽略第3點

archive log list;

 2)  歸檔設置

shutdown immediate; 
startup mount; 
alter database archivelog; 
alter system set LOG_ARCHIVE_DEST_1='LOCATION=C:\Ora\arc\';  ---設置歸檔目錄 (執行此句后,在Windows系統文件夾中看看arc文件夾有沒有創建成功,如果沒有,則手動創建,在執行此語句)
alter database open;
alter system switch logfile; --相應目錄檢查是否生成arc文件 (如果提示數據庫沒開啟,則先執行alter database open;)    

 

2.從數據庫(orcl )創建捕獲進程

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'capture',
streams_name => 'capture_orcl',
queue_name => 'strmadmin.orcl_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
/

  

3.主數據庫(obpm)實例化strmadmin用戶 (win在CMD命令界面中執行)(這兩個路徑須一致)

exp strmadmin/strmadmin@orcl file='C:\Ora\crm.dmp' object_consistent=y rows=y

在主數據庫(obpm)新建strmadmin

imp strmadmin/strmadmin@obpm file='C:\Ora\crm.dmp' ignore=y commit=y streams_instantiation=y full=y

  

4.從數據庫(orcl)創建傳播進程

connect strmadmin/strmadmin --以strmadmin身份,登錄從數據庫。
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'strmadmin',
streams_name => 'orcl_to_obpm',
source_queue_name => 'strmadmin.orcl_queue',
destination_queue_name => 'strmadmin.obpm_queue@obpm',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'orcl',
inclusion_rule => true);
end;
/

修改propagation休眠時間為0,表示實時傳播LCR,latency以秒為單位

begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'orcl_queue',
destination => 'obpm',
destination_queue => 'obpm_queue',
latency => 5);
end;
/

 

5.主數據(obpm)創建應用進程

connect strmadmin/strmadmin
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'strmadmin',
streams_type => 'apply',
streams_name => 'apply_obpm',
queue_name => 'strmadmin.obpm_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'orcl',
inclusion_rule => true);
end;
/

  

6.啟動Stream

1)主數據庫(obpm)啟動應用進程

connect strmadmin/strmadmin
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_obpm');
end;
/

2)從數據庫(orcl)啟動捕獲進程

connect strmadmin/strmadmin
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_orcl');
end;
/

 

以上就是雙向同步的配置,雙向同步完成后,測試是否成功,若不成功,則用下面的“‘主從同步’問題檢查解決方法把主從數據庫名稱調換檢查”

主從同步’問題檢查解決方法:

 

15.停止stream

1)主數據庫停止Capture進程

connect strmadmin/strmadmin
begin
dbms_capture_adm.stop_capture(
capture_name => 'capture_obpm');
end;
/

2)從數據庫停止Apply進程

connect strmadmin/strmadmin
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_orcl');
end;
/

 

16.清除所有配置信息 

1)按上述方法停止capture,applya進程 
 2)分別在主從數據庫執行以下語句

connect strmadmin/strmadmin 
exec DBMS_STREAMS_ADM.remove_streams_configuration();

  

17.如何知道捕捉(Capture)進程是否運行正常?

strmadmin身份,登錄主數據庫,執行如下語句:

SELECT CAPTURE_NAME,QUEUE_NAME,RULE_SET_NAME,NEGATIVE_RULE_SET_NAME,STATUS FROM DBA_CAPTURE;

  如果STATUS狀態是ENABLED,表示Capture進程運行正常
  如果STATUS狀態是DISABLED,表示Capture進程處於停止狀態,只需重新啟動即可
  如果STATUS狀態是ABORTED,表示Capture進程非正常停止,查詢相應的ERROR_NUMBER、ERROR_MESSAGE列可以得到詳細的信息;同時,Oracle會在跟蹤文件中記錄該信息。

 

18. 如何知道Captured LCR是否有傳播?

strmadmin身份,登錄主數據庫,執行如下語句:

SELECT CAPTURE_NAME, QUEUE_NAME, STATUS, CAPTURED_SCN, APPLIED_SCN FROM DBA_CAPTURE;

  如果APPLIED_SCN小於CAPTURED_SCN,則表示在主數據庫一端,要么LCR沒有被dequeue,要么Propagation進程尚未傳播到從數據庫一端。

  如果出現此情況,主庫進程重啟下,看看 APPLIED_SCN和CAPTURED_SCN是否相等,若相等,再重啟下從庫進程即可。

 

19.如何知道Appy進程是否運行正常

strmadmin身份,登錄從數據庫,執行如下語句:

SELECT apply_name, apply_captured, status FROM dba_apply; 

  如果STATUS狀態是ENABLED,表示Apply進程運行正常; 
  如果STATUS狀態是DISABLED,表示Apply進程處於停止狀態,只需重新啟動即可; 
  如果STATUS狀態是ABORTED,表示Apply進程非正常停止,查詢相應的ERROR_NUMBER、ERROR_MESSAGE列可以得到詳細的信息; 
  同時,可以查詢DBA_APPLY_ERROR視圖,了解詳細的Apply錯誤信息。 
  其它錯誤請跟蹤alter.log

 

注意:

第一步:如果在重啟操作系統,或者數據庫后,出現主從數據庫無法同步的情況時,請用17,18,,19步的方法查看;

第二步:在19步查詢出現“ABORTED”時,請用SELECT apply_name, apply_captured, ERROR_NUMBER, ERROR_MESSAGE, status FROM dba_apply進行查詢;

錯誤原因:

select error_message,error_creation_time from dba_apply_error order by error_creation_time desc;
select * from dba_apply_error order by error_creation_time desc;

會出現:

(用戶沒有實例化)

這時候需要重新在從數據庫這邊系統的cmd中執行實例化用戶即可:

exp strmadmin/strmadmin@obpm file='C:\Ora\crm.dmp' object_consistent=y rows=y 

第三步:

從數據庫停止Apply進程

connect strmadmin/strmadmin
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_orcl');
end;
/

從數據庫啟動應用進程

connect strmadmin/strmadmin
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_orcl');
end;
/

 這樣就解決了出現的問題。出現問題的原因是在第10步的實例化用戶沒成功(查看windows文件夾下有沒有創建“crm.dmp”文件,如果沒有創建,則說明實例化用戶不成功,重啟后則會出現此錯誤)

 

 以上就是Oracle主從同步和雙向同步的配置,和常見問題的解決方法,一般來說只要按照上面步驟一步一步走,應該沒有問題。

 注意的是sql語句后面粘貼復制經常會出現空格,有空格會報錯,這點經常會不小心遇到。遇到問題不用擔心,按照上面的方法進行排查即可,如果真的配錯了,執行清除命令重新配置即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM