Oracle備庫當機啟動解決方案

Halburt發表於2019-05-06

簡介

ORA-10458: standby database requires recovery ORA-01196: 檔案 1 由於介質恢復會話失敗而不一致 ORA-01110: 資料檔案 1: 'XXXXXXXXXXXXXXXXXX\XXXXX1.DBF'

一個專案做了Oracle主從資料庫同步,通過Dataguard實現,從庫伺服器當機,再開機的時候,從庫無法啟動,報“ORA-01196: 檔案 1 由於介質恢復會話失敗而不一致”這個錯誤,具體日誌資訊如下:

ORA-10458: standby database requires recovery
ORA-01196: 檔案 1 由於介質恢復會話失敗而不一致
ORA-01110: 資料檔案 1: 'XXXXXXXXXXXXXXXXXX\XXXXX1.DBF'
複製程式碼

正常啟動的順序應該是先啟動備庫再啟動主庫。由於從庫當機導致有段時間日誌未同步,主備不一致,從庫無法啟動。

參考資料

blog.csdn.net/linux_wang1…

恢復前準備

備份主庫

備份主庫資料【/home/oracle/backup/20190506/】

mkdir /home/oracle/backup/20190506
複製程式碼
   sqlplus / as sysdba
  SQL> create directory data_dir as '/home/oracle/backup/20190506';
複製程式碼
 expdp SYSTEM/密碼@orcl schemas=使用者名稱 dumpfile=bak20190506.dmp directory=data_dir logfile=bak20190506.log;
複製程式碼

檢查日誌檔案

恢復之前需要了解當前備庫的資料庫檔案、日誌檔案,檢視主備庫是否一致【如不一致需要拷貝】。

SQL> set linesize 300
SQL> col MEMBER for a60
SQL> select type,member from v$logfile;
複製程式碼

image.png

檢查資料庫檔案

SQL> select name from v$datafile;
複製程式碼

image.png

備庫恢復

關閉備庫,並啟動了例項,載入資料庫,但是資料庫沒有開啟。開啟日誌程式

shutdown immediate
startup mount;
alter database recover managed standby database using current logfile disconnect from session;
複製程式碼

主庫操作

alter system switch logfile; 強制日誌切換,不一定就歸檔當前的重做日誌檔案(若自動歸檔開啟,就歸檔前的重做日誌,若自動歸檔沒有開啟,就不歸檔當前重做日誌。)

alter system switch logfile;
複製程式碼

多操作幾次,操作之後,稍等一段時間,時間視網速而定,過一段時間後,在主庫上查詢一下同步情況:

select name,sequence#,archived,applied from v$archived_log order by sequence#;
複製程式碼

如果返回結果"APPLIED"都是“YES”或者只有最後一個是“NO”的話,說明全部歸檔日誌全部已經歸檔完了 ,此時到備庫上上操作

啟動備庫

alter database recover managed standby database cancel;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
複製程式碼

相關文章