【問題處理】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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【問題處理】ORA-01113 file xxx need media recovery
- 【問題處理】啟動OUI丟擲libXp.so.6: cannot open shared object file問題處理UIObject
- vue 踩坑記錄 cannot read property xxx of undefinedVueUndefined
- 【問題處理】IPC Send timeout detected
- can't create PID file問題處理
- create index ORA-00376 處理方法Index
- cannot read prpperty ‘start‘ of undefined(問題記錄)Undefined
- TypeError: Cannot read private member xxx from an object whose class did not declare itErrorObject
- 原始碼編譯rrdtool提示找不到xxx.pc類問題處理原始碼編譯
- Authentication failure 以及xxx is not in the sudoers file 問題的解決辦法AI
- (轉載)關於usr/bin/ld: cannot find -lxxx問題總結
- mysqld: File './binlog.~rec~' not found 問題解決處理MySql
- ORA-07445 ACCESS_VIOLATION,UNABLE_TO_READ問題處理
- 問題1.libXp.so.6: cannot open shared object file: No such file or directoryObject
- -bash: ulimit: max user processes: cannot modify limit: Operation not permitted問題的處理MIT
- CRS-0184: Cannot communicate with the CRS daemon. 問題處理
- VMware虛擬機器Reason: Failed to lock the file問題處理虛擬機AI
- Feign,HTTP連線超時問題SocketTimeoutException: Read timed outHTTPException
- ORA-01157: cannot identify/lock data file %s - see DBWR trace file的處理IDE
- /jre/lib/i386/libawt.so: libXp.so.6: cannot open shared object file問題處理Object
- (問題解決)Cannot set LC_CTYPE to default locale: No such file or directory
- Vue init webpack xxxx project 報錯處理(connect ETIMEDOUT 192.30.253.112)VueWebProject
- Go 自定義日期時間格式解析解決方案 - 解決 `parsing time xx as xx: cannot parse xx as xx` 錯誤Go
- ORACLE 9I RAC IPC Send timeout detected問題處理Oracle
- xxx cannot be resolved to a type
- ORA-01618: redo thread 2 is not enabled - cannot mount 問題處理thread
- 在 fish 終端下報錯 source: Error while reading file “xxx” 等問題ErrorWhile
- ./XXX.XX: error while loading shared libraries: libGLEW.so.2.1: cannot open shared object file: NoErrorWhileObject
- vue 中引用echarts 初始化init undefind問題(Cannot read property ‘init‘ of undefined)VueEchartsUndefined
- 處理問題的方法
- perl中文處理問題
- 漢字處理問題?
- xml處理的問題XML
- 貨品問題處理
- [git] git問題處理Git
- 解決db file sequential read與db file scattered read
- iis 0x80070032 Cannot read configuration file because it exceeds the maximum file size
- Oracle多塊讀設定問題:db_file_multiblock_read_countOracleBloC