1. 程式人生 > >Oracle主從同步、雙向同步的配置[轉]

Oracle主從同步、雙向同步的配置[轉]

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

(把主資料庫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身份登入

1

sqlplus / as sysdba

  2)  設定引數

1

2

3

4

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

2

3

4

1.shutdown immediate

2.startup

3.$lsnrctl start(一般都會提示監聽已經啟動)

<span style="color: #ff0000">(windows服務中也可手動啟動監聽)<br></span>

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

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

1

archive log list;

  2) 歸檔設定

1

2

3

4

5

6

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管理使用者(在主從資料庫都執行以下操作) 

1

2

3

4

5

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許可權.

1

<span style="color: #ff0000">(Drop舊的表空間方法:drop tablespace tbs_stream including contents;)</span> <br><br>

5.主資料庫網路環境設定 (就是在主資料庫中增加一個從資料庫的連線服務)

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

2)新建連線orcl的dblink 

1

2

3

4

5

6

7

8

9

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 [email protected];  --測試dblink是否有效 

6.從資料庫網路環境設定 (就是在從資料庫中增加一個主資料庫的連線服務)

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

 

2)新建連線obpm的dblink 

1

2

3

4

5

6

7

8

9

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 [email protected];  --測試dblink是否有效

7.主資料庫流佇列建立 (可在plsql中的SQL中執行,登入名應為strmadmin)

1

2

3

4

5

connect strmadmin/strmadmin  --以strmadmin身份,登入主資料庫。

begin

dbms_streams_adm.set_up_queue(queue_table => 'obpm_queue_table',queue_name => 'obpm_queue');

end;

/

8.從資料庫流佇列建立

1

2

3

4

5

connect strmadmin/strmadmin  --以strmadmin身份,登入從資料庫。

begin

dbms_streams_adm.set_up_queue(queue_table => 'orcl_queue_table',queue_name => 'orcl_queue');

end;

/

9.主資料庫建立捕獲程序 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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命令介面中執行)(這兩個路徑須一致)

1

exp strmadmin/[email protected] file='C:\Ora\crm.dmp' object_consistent=y rows=y

在從資料庫新建strmadmin 

1

imp strmadmin/[email protected] file='C:\Ora\crm.dmp' ignore=y commit=y streams_instantiation=y full=y

11.主資料庫建立傳播程序 

1

2

3

4

5

6

7

8

9

10

11

12

13

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 => '[email protected]',

include_dml => true,

include_ddl => true,

include_tagged_lcr => false,

source_database => 'obpm',

inclusion_rule => true);

end;/

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

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

1

2

3

4

5

6

begin

dbms_aqadm.alter_propagation_schedule(

queue_name => 'obpm_queue',

destination => 'orcl',

latency => 0);

end;/

12.從資料建立應用程序 

1

2

3

4

5

6

7

8

9

10

11

12

13

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)從資料庫啟動應用程序 

1

2

3

4

5

connect strmadmin/strmadmin

begin

dbms_apply_adm.start_apply(

apply_name => 'apply_orcl');

end;/

2)主資料庫啟動捕獲程序 

1

2

3

4

5

connect strmadmin/strmadmin

begin

dbms_capture_adm.start_capture(

capture_name => 'capture_obpm');

end;/

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

 

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

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

 

雙向同步配置:

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

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

1

archive log list;

 2)  歸檔設定

1

2

3

4

5

6

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 )建立捕獲程序

1

2

3

4

5

6

7

8

9

10

11

12

13

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命令介面中執行)(這兩個路徑須一致)

1

exp strmadmin/[email protected] file='C:\Ora\crm.dmp' object_consistent=y rows=y

在主資料庫(obpm)新建strmadmin

1

imp strmadmin/[email protected] file='C:\Ora\crm.dmp' ignore=y commit=y streams_instantiation=y full=y

4.從資料庫(orcl)建立傳播程序

1

2

3

4

5

6

7

8

9

10

11

12

13

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 => '[email protected]',

include_dml => true,

include_ddl => true,

include_tagged_lcr => false,

source_database => 'orcl',

inclusion_rule => true);

end;/

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

1

2

3

4

5

6

7

begin

dbms_aqadm.alter_propagation_schedule(

queue_name => 'orcl_queue',

destination => 'obpm',

destination_queue => 'obpm_queue',

latency => 5);

end;/

5.主資料(obpm)建立應用程序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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)啟動應用程序

1

2

3

4

5

6

connect strmadmin/strmadmin

begin

dbms_apply_adm.start_apply(

apply_name => 'apply_obpm');

end;

/

2)從資料庫(orcl)啟動捕獲程序

1

2

3

4

5

6

connect strmadmin/strmadmin

begin

dbms_capture_adm.start_capture(

capture_name => 'capture_orcl');

end;

/

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

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

15.停止stream

1)主資料庫停止Capture程序

1

2

3

4

5

6

connect strmadmin/strmadmin

begin

dbms_capture_adm.stop_capture(

capture_name => 'capture_obpm');

end;

/

2)從資料庫停止Apply程序

1

2

3

4

5

6

connect strmadmin/strmadmin

begin

dbms_apply_adm.stop_apply(

apply_name => 'apply_orcl');

end;

/

16.清除所有配置資訊 

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

1

2

connect strmadmin/strmadmin

exec DBMS_STREAMS_ADM.remove_streams_configuration();

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

以strmadmin身份,登入主資料庫,執行如下語句:

1

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身份,登入主資料庫,執行如下語句:

1

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身份,登入從資料庫,執行如下語句:

1

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進行查詢;

錯誤原因:

1

select error_message,error_creation_time from dba_apply_error order by error_creation_time desc;

1

select from dba_apply_error order by error_creation_time desc;

會出現:

(使用者沒有例項化)

這時候需要重新在從資料庫這邊系統的cmd中執行例項化使用者即可:

1

exp strmadmin/[email protected] file='C:\Ora\crm.dmp' object_consistent=y rows=y 

第三步:

從資料庫停止Apply程序

1

2

3

4

5

6

connect strmadmin/strmadmin

begin

dbms_apply_adm.stop_apply(

apply_name => 'apply_orcl');

end;

/

從資料庫啟動應用程序

1

2

3

4

5

6

connect strmadmin/strmadmin

begin

dbms_apply_adm.start_apply(

apply_name => 'apply_orcl');

end;

/

 這樣就解決了出現的問題。出現問題的原因是在第10步的例項化使用者沒成功(檢視windows資料夾下有沒有建立“crm.dmp”檔案,如果沒有建立,則說明例項化使用者不成功,重啟後則會出現此錯誤)

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

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

轉自:

http://www.cnblogs.com/hooly/p/8178570.html