【問題處理】ORA-00376 file xx cannot be read at this time

恩強Boy發表於2021-02-03

問題說明

在執行備份恢復時,出現ORA-00376 報錯

ORA-00376: file 45  cannot be read at this time

ORA-01110: data file 45 : / u01/app/oracle/oradata/user02 .dbf'

ORA-376 通常和 ORA-01110 一起出現,會給出 Oracle 無法讀取的檔案的名稱。 ORA-376 意在說明 Oracle 無法讀取到該檔案,檔案很有可能是 offline 了。

原因分析

可能發生的原因如下

1.  表空間或資料檔案offline

2.  資料檔案在作業系統級別不存在

3.  資料檔案被備份軟體鎖定

4.  對於UNIX Linux 系統, ulimit 設定不正確

5.  活動事務的回滾段不可用

6.  可能的其他原因

解決方法

解決方法需針對上述情況一一說明

情況一:表空間或資料檔案offline

1)  執行下面查詢,查詢表空間狀態

SQL> select tablespace_name,status from dba_tablespaces;

2)  執行下面查詢,查詢資料檔案狀態

SQL> select file#,name,status,enabled from v$datafile;

3)  如果表空間offline ,則需要 online

SQL> alter tablespace tablespace_name online;

4)  如果資料檔案offline ,則需要 online

SQL> alter database datafile file_number online;

在這種情況下,需要透過歸檔日誌進行recover 操作,否則會報 ORA-01113 ORA-01110 錯誤。可以使用以下命令進行 recover

SQL> recover datafile file_number;

SQL> alter database datafile file_number online;

情況二:資料檔案在作業系統級別不存在

在這種情況下,我們可以刪除資料檔案並重新建立表空間。這種方法只適用於非系統表空間(包括sysaux )和非 undo 表空間。

1)  offline 該表空間的其他資料檔案

SQL> alter database datafile file_number offline drop;

2)  刪除表空間

SQL> drop tablespace tablespace_name including contents;

3)  重新建立表空間

SQL> create tablespace tablespace_name datafile file_name size xxx;

情況三:資料檔案被備份軟體鎖定

在這種情況下,某些平臺備份軟體可能會鎖定資料檔案,阻止了Oracle 訪問該資料檔案。檢查是否有正在執行的備份軟體,把備份軟體停掉,釋放鎖,然後重新啟動資料庫。

情況四:對於UNIX Linux 系統, ulimit 設定不正確

如果沒有正確設定ulimit 引數,可能會導致以下錯誤

ORA-00376: file 66  cannot be read at this time

ORA-01110: data file 66 : ' /u01/app/oracle/oradata/idfe01 .dbf'

Error: 27: File too large

在這種情況下,解決的方案就是增加ulimit 設定大小,如下

$ ulimit -f <number>

增加了ulimit 之後,就可以使資料檔案 online 之後重啟資料庫。

情況五:活動事務的回滾段不可用

ORA-376 錯誤可能導致以下情況

- 由於關機或系統崩潰,導致資料庫關閉

- 由於磁碟損壞等硬體問題導致回滾段表空間中的資料檔案丟失

- 在刪除 rollback_segments 引數後,資料庫最後啟動

- 回滾資料檔案 offline drop

- 開啟資料庫

在這種情況下,使用ORA-376 發生的原因是: Oracle 自動執行恢復,使所有的資料檔案處於一致狀態,所以它需要 redolog undo 段的資訊。如果在這個過程中資料檔案需要包含回滾段資訊,但是發現該資料檔案處於 offline 狀態, Oracle 將會發出 ORA-376 錯誤。

這種錯誤發生的解決方法是:

如果回滾資料檔案依然可用,執行以下命令:

1)  將回滾段重新包含在pfile 檔案

2)  啟動資料庫至mount

SQL> startup mount;

3)  將該資料檔案online

SQL> alter database datafile file_number online;

4)  執行recover

SQL> recover datafile file_number;

5)  開啟資料庫

SQL> alter database open;

情況六:可能的其他原因

1.  回滾段資料檔案是存在的,但是Oracle 在啟動資料庫時候報 ORA-376 錯誤。資料庫處於非歸檔模式,沒有備份

在這種情況下,需要檢視Oracle 需要哪些檔案來恢復資料庫。如果 Oracle 只需要 redologs ,那麼資料庫是可以恢復開啟的,而不會丟失資料。

解決方法如下

1)  執行以下查詢確定redologs 的序列號

SQL> select v1.group#,member,sequence#,first_change# from v$log v1, v$logfile v2 where v1.group# = v2.group#;

2)  嘗試恢復資料庫

SQL> recover database until cancel;

3)  再次注意序列號。忽略建議的日誌檔名,這個名稱會以歸檔日誌的形式出現,但這實際上是尚未歸檔的redolog 的名稱。如果查詢結果中的最低序列號與 Oracle 恢復資料庫所需的序列號相同,則可以恢復資料庫。只需要從 redolog 列表中複製準確的路徑和檔名,作為 recover database 命令所需的檔名。對每個 redolog 重複執行此過程。直到 Oracle 在恢復結束時返回“ recovery completed ”。

4)  開啟資料庫

SQL> alter database open;

5)  如果報ORA-1589 錯誤,執行以下命令

SQL> alter database open noresetlogs;

2.  shutdown abort 然後重啟伺服器

在伺服器重啟之前,處於歸檔模式的資料庫被shutdown abort

資料庫會報以下錯誤

ORA-01545: rollback segment %s  specified not available

ORA-01595: error freeing extent (%s) of rollback segment (%s))

ORA-00376: file %s cannot be read at this time

解決方法如下

1)  正常關閉資料庫

SQL> shutdown immediate;

2)  編輯pfile 檔案,並從 ROLLBACK_SEGMENTS 引數中的回滾段列表中註釋有問題的回滾段。

3)  啟動資料庫至mount

SQL> startup mount;

4)  執行以下語句查詢哪些檔案需要恢復

SQL> select * from v$recover_file;

5)  執行以下語句,查詢需要恢復的回滾段

SQL> select usn,status from v$rollstat where status != 'ONLINE';

6)  恢復資料檔案

SQL> recover datafile ' 絕對路徑檔名' ;

7)  執行以下語句找出哪些資料檔案處於offline

SQL> select name,status from v$datafile where status != 'ONLINE';

8)  將上面查詢的結果online

SQL> alter database datafile file_number online;

9)  確保所有的資料檔案都是online

SQL> select file#, name, status from v$datafile;

10)  執行以下語句檢視哪些回滾段處於offline

SQL> select usn,status from v$rollstat where status != 'ONLINE';

11)  將查詢出的回滾段online

SQL> alter rollback segment seg_name online;

12)  確保所有回滾段都是online

SQL> select usn,status from v$rollstat;

13)  正常關閉資料庫

SQL> shutdown immediate;

14)  編輯pfile 檔案,取消註釋掉的 ROLLBACK_SEGMENTS 引數的列

15)  啟動資料庫

SQL> startup;

 

 

---- end ----

 

 

 

 

 

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2755626/,如需轉載,請註明出處,否則將追究法律責任。

相關文章