Oracle

Oracle 12c - 邏輯上有重做組但物理上沒有 - 數據庫無法打開

  • January 5, 2022

我的企業經理有一個 Oracle 12c 數據庫。

由於數據庫已關閉,我無法連接到企業管理器。

我打開了監聽器。但是,數據庫仍保持掛載模式。當我想以讀寫模式打開數據庫時,出現如下錯誤:

SQL> alter database open;

第 1 行的錯誤:

ORA-00313: 為執行緒 1 的日誌組 3 的成員打開失敗

ORA-00312: 線上日誌 3 執行緒 1: ‘/path/of/redo/redo03.log’

ORA-27037: 無法獲取文件狀態

Linux-x86_64 錯誤:2:沒有這樣的文件或目錄附加資訊:3

當我轉到redo03的文件位置時,沒有redo03。

所以這是邏輯上的,但不是物理上的。

有一些查詢和結果:

SQL> col member format a50
SQL> select group#, type, member from v$logfile;

   GROUP# TYPE    MEMBER
---------- ------- --------------------------------------------------
        3 ONLINE  /path/of/redo/redo03.log
        2 ONLINE  /path/of/redo/redo02.log
        1 ONLINE  /path/of/redo/redo01.log
        4 ONLINE  /path/of/redo/redo04.log

SQL> select group#, thread#, sequence#, bytes/1024/1024, members, status from v$log;

   GROUP#    THREAD#  SEQUENCE# BYTES/1024/1024    MEMBERS STATUS
---------- ---------- ---------- --------------- ---------- ----------------
        1          1      61525              50          1 INACTIVE
        4          1          0              50          1 UNUSED
        3          1      61527              50          1 CURRENT
        2          1      61526              50          1 INACTIVE

我嘗試這樣做:創建重做組 4。刪除重做組 3 並重新創建重做組 3。

創建重做組 4 沒有問題。我在下面使用了這個命令:

alter database add logfile thread 1 group 4 '/path/of/redo/redo04.log' size 50m;

但是當我想刪除第 3 組時,它會給出如下錯誤:

SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
ALTER DATABASE DROP LOGFILE GROUP 3
*

第 1 行的錯誤:

ORA-01623: 日誌 3 是實例 dbname(執行緒 1)的目前日誌 - 無法刪除

ORA-00312: 線上日誌 3 執行緒 1: ‘/path/of/redo/redo03.log’

我想嘗試禁用重做組連接的執行緒,然後我想刪除重做組3。但它給出的錯誤如下:

SQL> select thread#, status, enabled from v$thread;

  THREAD# STATUS ENABLED
---------- ------ --------
        1 OPEN   PUBLIC


SQL> alter database disable thread 1;
alter database disable thread 1
*

第 1 行的錯誤:

ORA-01109: 數據庫未打開

當我嘗試切換日誌文件時,它給出的錯誤如下:

SQL> alter system switch logfile;
alter system switch logfile
*

第 1 行的錯誤:

ORA-01109: 數據庫未打開

我試圖清除並刪除日誌文件組。它給出的錯誤如下:

SQL> alter database clear unarchived logfile group 3;
alter database clear unarchived logfile group 3
*

第 1 行的錯誤:

ORA-01624: 實例 dbname(執行緒 1)的崩潰恢復需要日誌 3

ORA-00312: 線上日誌 3 執行緒 1: ‘/path/of/redo/redo03.log’

我嘗試恢復數據庫,然後使用以下命令打開:

rman taget /

recover database;

20 年 7 月 9 日開始恢復

使用通道 ORA_DISK_1

開始媒體恢復

RMAN-08187:警告:媒體恢復直到 SCN <scn_number> 完成 20 年 7 月 9 日完成恢復

   exit;
   
   sqlplus / as sysdba
   
   SQL&gt; alter database open resetlogs;
   alter database open resetlogs
   *

第 1 行的錯誤:

ORA-01194: 文件 1 需要更多恢復才能保持一致

ORA-01110: 數據文件 1: ‘/path/of/file/system01.dbf’

exit;

rman target /

recover datafile 1;

20 年 7 月 9 日開始使用目標數據庫控製文件而不是恢復目錄分配的通道進行恢復:ORA_DISK_1 通道 ORA_DISK_1:SID=<sid_number> 設備類型=DISK

啟動媒體恢復 媒體恢復失敗

RMAN-00571:

===========================================================

RMAN-00569:

=============== 錯誤消息堆棧跟隨 ===============

RMAN-00571:============================================== ==============

RMAN-03002:<time_of_today> 的恢復命令失敗

ORA-00283:由於錯誤而取消了恢復會話 RMAN-11003:在 SQL 語句的解析/執行期間失敗:alter database recovery if needed datafile 1

ORA-00283: 恢復會話因錯誤而取消

ORA-00313: 為執行緒 1 的日誌組 3 的成員打開失敗 ORA-00312: 線上日誌 3 執行緒 1: ‘/path/of/file/redo03.log’

ORA-27037: 無法獲取文件狀態

Linux-x86_64 錯誤:2:沒有這樣的文件或目錄附加資訊:3

因此; 邏輯上有一個重做組 3,但沒有物理文件。我確信沒有人刪除該文件,因為我使用 linux 系統上的 history 命令檢查了它。我無法打開數據庫,因為找不到重做組 3。我無法切換日誌文件,無法禁用thead,無法刪除重做組3 並重新創建它。請問你能幫忙嗎?

最好的祝福,

…邏輯上有一個重做組 3,但沒有物理文件。

不是一個好地方。

我確信沒有人刪除該文件,因為我使用 linux 系統上的 history 命令檢查了它。

然而,您現在看到了一個失去的文件,Oracle之前已將重做數據寫入其中,並且確實要求返回以便在啟動過程中執行實例恢復。顯然,您不是唯一可以“訪問”該數據庫的人。

嘗試打開數據庫並重置線上重做日誌。

從 MOUNTED 狀態:

alter database open resetlogs ; 

Oracle應該為自己重新創建失去的重做日誌文件。

我確信沒有人刪除該文件,因為我使用 linux 系統上的 history 命令檢查了它。

這並不能保證任何事情。

您失去了目前的日誌文件組。您可以在此處找到恢復步驟:

失去線上重做日誌組的所有成員後恢復

具體這部分:

失去活動的聯機重做日誌組

請記住,這需要您備份數據庫。

引用自:https://dba.stackexchange.com/questions/270674