今天做dataguard切換的時候,由於log_archive_dest_2參數在備庫上的配置錯誤,導致從主庫切換到備庫後(此時備庫是主庫),從備庫(當前切換後的主庫)無法傳送到原主庫(當前切換後的備庫)。
原主庫db_unique_name:pr_prov
原備庫db_unique_name:dr_prov
有pr_prov切換到dr_prov,切換後,在dr_prov上發現日誌不會傳到pr_prov上。
dr_prov:
在pr_prov上看,日誌只能到48
嘗試在dr_prov上執行alter system switch logfile ;
也只是dr_prov上日誌序號增大一個,pr_prov上不會有任何變化。此時猜測主庫上的日誌發送進程估計沒了。
查詢了一下,發下確定沒有了LNS進程,該進程在主庫上負責啓動網絡傳送歸檔日誌到備庫。繼續查看alert日誌,發現有日誌報錯。
PING[ARC2]: Heartbeat failed to connect to standby 'dr_prov'. Error is 16047.
Thu Mar 19 10:38:16 2020
db_recovery_file_dest_size of 4977 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
FAL[server, ARC3]: Error 16047 creating remote archivelog file 'dr_prov'
FAL[server, ARC3]: FAL archive failed, see trace file.
ARCH: FAL archive failed. Archiver continuing
ORACLE Instance prov - Archival Error. Archiver continuing.
發現上面飄紅的'dr_prov'很扎眼,因爲現在的主庫是dr_prov,他的standby應該是pr_prov。所以配置該參數的就是log_archive_dest_2,一查詢該參數果然配置錯了
alter system set log_archive_dest_2='SERVICE=pr_prov LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pr_prov' scope=both;
我之前就是上面圖片中紅框裏面的內容寫成了dr_prov。
改過之後,lns進程還是不會自己起來,需要手工log_archive_dest_state_2參數改成defer,然後在改成enable即可。
SQL> show parameter archive
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2 string enable
SQL> select process,status from v$managed_standby;
PROCESS STATUS
--------- ------------
ARCH CLOSING
ARCH CLOSING
ARCH CONNECTED
ARCH CLOSING
SQL> alter system set log_archive_dest_state_2=defer ;
System altered.
SQL> alter system set log_archive_dest_state_2=enable ;
System altered.
SQL> select process,status from v$managed_standby;
PROCESS STATUS
--------- ------------
ARCH CLOSING
ARCH CLOSING
ARCH CLOSING
ARCH CLOSING
LNS WRITING
可以看到lns進程已經起來了。查看主庫日誌傳送情況和備庫應用情況。
dr_prov
SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_34_1034939605.dbf 34 YES
/oradata/provarch/1_35_1034939605.dbf 35 YES
/oradata/provarch/1_36_1034939605.dbf 36 YES
/oradata/provarch/1_37_1034939605.dbf 37 YES
/oradata/provarch/1_38_1034939605.dbf 38 YES
/oradata/provarch/1_39_1034939605.dbf 39 YES
/oradata/provarch/1_40_1034939605.dbf 40 YES
/oradata/provarch/1_41_1034939605.dbf 41 YES
/oradata/provarch/1_42_1034939605.dbf 42 YES
/oradata/provarch/1_43_1034939605.dbf 43 YES
/oradata/provarch/1_44_1034939605.dbf 44 YES
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_45_1034939605.dbf 45 YES
/oradata/provarch/1_46_1034939605.dbf 46 YES
/oradata/provarch/1_47_1034939605.dbf 47 YES
/oradata/provarch/1_48_1034939605.dbf 48 YES
/oradata/provarch/1_49_1034939605.dbf 49 NO
pr_prov 49 YES
/oradata/provarch/1_50_1034939605.dbf 50 NO
pr_prov 50 YES
/oradata/provarch/1_51_1034939605.dbf 51 NO
pr_prov 51 YES
/oradata/provarch/1_52_1034939605.dbf 52 NO
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
pr_prov 52 YES
/oradata/provarch/1_53_1034939605.dbf 53 NO
pr_prov 53 NO
25 rows selected.
SQL>
pr_prov:
SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/fast_recovery_area/PROV/archivelog/2020_0 21 YES
3_13/o1_mf_1_21_h6q4jbkp_.arc
/oradata/fast_recovery_area/PROV/archivelog/2020_0 22 YES
3_14/o1_mf_1_22_h6s098gq_.arc
/oradata/fast_recovery_area/PROV/archivelog/2020_0 23 YES
3_15/o1_mf_1_23_h6vk4yz3_.arc
/oradata/fast_recovery_area/PROV/archivelog/2020_0 24 YES
3_16/o1_mf_1_24_h6y1zmz7_.arc
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_25_1034939605.dbf 25 YES
/oradata/provarch/1_26_1034939605.dbf 26 YES
/oradata/provarch/1_27_1034939605.dbf 27 YES
/oradata/provarch/1_28_1034939605.dbf 28 YES
/oradata/provarch/1_29_1034939605.dbf 29 YES
/oradata/provarch/1_30_1034939605.dbf 30 YES
/oradata/fast_recovery_area/PROV/archivelog/2020_0 31 YES
3_16/o1_mf_1_31_h6yh53q7_.arc
/oradata/provarch/1_32_1034939605.dbf 32 YES
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_33_1034939605.dbf 33 YES
/oradata/provarch/1_34_1034939605.dbf 34 YES
dr_prov 34 YES
dr_prov 35 YES
/oradata/provarch/1_35_1034939605.dbf 35 YES
/oradata/provarch/1_36_1034939605.dbf 36 YES
dr_prov 36 YES
dr_prov 37 YES
/oradata/provarch/1_37_1034939605.dbf 37 YES
/oradata/provarch/1_38_1034939605.dbf 38 YES
dr_prov 38 YES
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
dr_prov 39 YES
/oradata/provarch/1_39_1034939605.dbf 39 YES
dr_prov 40 YES
/oradata/provarch/1_40_1034939605.dbf 40 YES
dr_prov 41 YES
/oradata/provarch/1_41_1034939605.dbf 41 YES
/oradata/provarch/1_42_1034939605.dbf 42 YES
dr_prov 42 YES
dr_prov 43 YES
/oradata/provarch/1_43_1034939605.dbf 43 YES
dr_prov 44 YES
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_44_1034939605.dbf 44 YES
dr_prov 45 YES
/oradata/provarch/1_45_1034939605.dbf 45 YES
dr_prov 46 YES
/oradata/provarch/1_46_1034939605.dbf 46 YES
dr_prov 47 YES
/oradata/provarch/1_47_1034939605.dbf 47 YES
/oradata/provarch/1_48_1034939605.dbf 48 YES
dr_prov 48 NO
/oradata/provarch/1_49_1034939605.dbf 49 YES
/oradata/provarch/1_50_1034939605.dbf 50 YES
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_51_1034939605.dbf 51 YES
/oradata/provarch/1_52_1034939605.dbf 52 YES
/oradata/provarch/1_53_1034939605.dbf 53 IN-MEMORY
48 rows selected.
在主庫上切換日誌
SQL> alter system switch logfile ;
System altered.
SQL>
測試數據:
備庫: