【問題處理】ORA-00376 file xx cannot be read at this time
問題說明
在執行備份恢復時,出現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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cannot read prpperty ‘start‘ of undefined(問題記錄)Undefined
- Go 自定義日期時間格式解析解決方案 - 解決 `parsing time xx as xx: cannot parse xx as xx` 錯誤Go
- create index ORA-00376 處理方法Index
- iis 0x80070032 Cannot read configuration file because it exceeds the maximum file size
- 【問題處理】ORA-01113 file xxx need media recovery
- [20200416]ORA-01187 cannot read from file because it failed verification tests.AI
- linux登入locale告警-bash: warning: setlocale: LC_TIME: cannot change的處理方法Linux
- Cannot read property ‘aDataSort‘ of undefinedUndefined
- 等待事件db file sequential read、db file scattered read和direct read的區別事件
- vue 中引用echarts 初始化init undefind問題(Cannot read property ‘init‘ of undefined)VueEchartsUndefined
- ./XXX.XX: error while loading shared libraries: libGLEW.so.2.1: cannot open shared object file: NoErrorWhileObject
- read content in a text file in pythonPython
- Oracle:db file scattered readOracle
- golang json處理問題GolangJSON
- [git] git問題處理Git
- js提示Cannot read property ‘replace‘ of undefinedJSUndefined
- linux系統中安裝jdk出現bash: ./java: cannot execute binary file 問題LinuxJDKJava
- PG: Estimate last modified or read time of a tableAST
- 大量time-wait的處理方法AI
- 併發問題處理方式
- Linux 問題處理集錦Linux
- 處理SQLServer errorlog滿問題SQLServerError
- 資料處理--pandas問題
- Ubuntu處理依賴問題Ubuntu
- db file scattered read等待事件事件
- db file sequential read等待事件事件
- 【等待事件】db file sequential read事件
- 【等待事件】db file scattered read事件
- macOS 無法sudo建立資料夾返回Read-only file system問題解決Mac
- ORA-19815: WARNING: db_recovery_file_dest_size閃回區爆滿問題處理
- echarts:Uncaught TypeError: Cannot read property '0' of undefinedEchartsErrorUndefined
- 前端報錯:cannot read property length of undefined前端Undefined
- PHP 開發版本問題處理PHP
- 【故障處理】TNS-04610問題
- JVM問題分析處理手冊JVM
- gc buffer busy acquire問題處理GCUI
- oracle SP2-問題處理Oracle
- 記憶體分配問題處理記憶體