iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
自我挑戰組

IT工作中曾遇到的問題系列 第 13

Oracle Data Guard Archive Gap

  • 分享至 

  • xImage
  •  

Oracle primary DB與standby DB之間是透過ADSL網路,有一次因為電信維修,中斷網路,時間還蠻長的。而在網路恢復之後,卻一直沒有恢復同步。

檢查standby DB的alert log,發現有下列的錯誤:

Media Recovery Waiting for thread 1 sequence 72754
Fetching gap sequence in thread 1, gap sequence 72754-72756
Mon Aug 02 19:52:33 2021
FAL[client]: Failed to request gap sequence
 GAP - thread 1 sequence 72754-72756
 DBID 259219464 branch 847381128
FAL[client]: All defined FAL servers have been attempted.
------------------------------------------------------------
Check that the CONTROL_FILE_RECORD_KEEP_TIME initialization
parameter is defined to a value that's sufficiently large
enough to maintain adequate log switch information to resolve
archivelog gaps.
------------------------------------------------------------

在standby DB執行下列的SQL,可以查詢到缺少的日誌

SQL> select * from v$archive_gap;

THREAD#   LOW_SEQUENCE#   HIGH_SEQUENCE#  
-------   -------------   --------------
1         72754           72756

發生原因在於因為電信維修而網路中斷,所以沒有即時同步,但是primary DB的archive log又已經移至其他,所以standby DB於primary DB中找不到對應的日誌檔案72754、72755、72756

此時先將archive log(72754、72755、72756)複製到standby DB中,再將它們註冊到standby DB,standby DB就會開始恢復它們。

在standby DB輸入下列的語法來註冊

ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/PROD_72754.arc';     

如果需要恢復的日誌檔很多,則可以改用下列的SQL來產生相應的語法:

select 'ALTER DATABASE REGISTER PHYSICAL LOGFILE ''/tmp/'||substr(name,35)||''';' from v$archived_log where  SEQUENCE#>=72754 and SEQUENCE#<=72756 and thread#=1 and NAME<>'standby service name';

將缺少的日誌都補上後,standby DB就可以正常與primary DB同步了。

因為DB的作業平台是Solaris,所以附上scp的語法,記錄一下檔案傳遞的方法:

scp 來源檔案 <遠端帳號>@<遠端伺服器>:<遠端目錄>

例:scp PROD_72754.arc PROD_72754.arc oracle@192.168.1.22:/tmp,指令輸入之後,系統會提示要求密碼,密碼正確檔案就會開始傳輸

本文參考我的Blog:https://blog.twtnn.com/


上一篇
利用python來將SQLite的資料轉成Word
下一篇
連線Oracle DB的第三方程式出現ora-01012: not logged on
系列文
IT工作中曾遇到的問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言