【問題處理】ORA-01157 ORA-01110
問題說明
今天一個客戶反映,資料庫透過RMAN 還原後,起庫報 ORA-01157 和 01110 錯誤
SQL> startup;
ORACLE instance started.
Total System Global Area 16034911968 bytes
Fixed Size 22533664 bytes
Variable Size 9898578976 bytes
Database Buffers 6039796776 bytes
Redo Buffers 73197552 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 44 - see DBWR trace file
ORA-01110: data file 44 : '/u0 1 / app/oracle /oradata/ users02 .dbf'
原因分析
ORA-01157 錯誤一般是因為後臺程式無法找到其中一個資料檔案,或者資料檔案已經在使用中,無法鎖定它。此時資料庫將禁止對該檔案的訪問,其他檔案不會受到影響。然而,開啟資料庫的例項需要訪問所有線上資料檔案,如果有資料檔案存在上述問題,將會報 ORA-01157 錯誤。
ORA-01157 錯誤通常跟 ORA-01110 錯誤一起出現,可能是 Oracle 作業系統層錯誤,在 background_dump_dest 會生產一個 DBWR 跟蹤檔案,跟蹤檔案可能會有以下資訊
ORA-01157: cannot identify/lock data file
44
- see DBWR trace file
ORA-01110: data file
44
: '/u0
1
/
app/oracle
/oradata/
users02
.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
解決方法
情況一:資料檔案存在,但是Oracle 找不到它
在這種情況下,資料檔案可能在作業系統層面被重新命名,或者被移動到其他的目錄位置。對於這種情況,需要restore 和 recover 該資料檔案,或將資料檔案移動到原始位置
情況二:資料檔案不存在,或者資料檔案已經被物理刪除或損壞,Oracle 無法識別它
例如,資料檔案可能被截斷或覆蓋,在這種情況下將會伴隨ORA-27046 錯誤 ORA-27046: file size is not a multiple of logical block size In this case 。
在這種情況下,使用者可以有兩個選擇:
1. 重建該檔案所屬的表空間
這個選項適用於users/index/temporary 表空間。如果表空間是 system 表空間,這就相當於是重建資料庫。這種方法最適合臨時表空間,因為臨時表空間不包含重要資料。如果表空間最近的匯出物件是可用的,或者表空間的表可以透過其他方式進行載入,這種辦法會很有幫助。
重建表空間的步驟如下:
1) 啟動到mount 狀態
SQL> startup mount;
2) offline 該資料檔案
如果是歸檔模式
SQL> alter database datafile 'filename' offline;
如果是非歸檔模式
SQL> alter database datafile 'filename' offline drop;
3) 開啟資料庫
SQL> alter database open;
4) 刪除該表空間
SQL> drop tablespace tablespace_name including contents and datafiles;
5) 重新建立該表空間
SQL> create tablespace tablespace_name datafile 'filename' size xxx;
6) 將表空間物件物件重新匯入
使用匯入指令碼重新匯入該表空間內的物件。
2. 使用正常恢復程式恢復該資料檔案
對於業務表空間、索引表空間,重新建立不太可能。如果有備份和完整的歸檔日誌情況下,這種是推薦的方法。如果資料庫處於非歸檔模式,只有當要應用到資料檔案的日誌在redo log 範圍內,才能成功進行恢復,這種方法對於只讀表空間比較理想。
步驟如下:
1) 資料庫啟動到mount 狀態
SQL> startup mount;
2) 執行查詢(歸檔模式)
SQL> SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE# FROM V$LOG V1, V$LOGFILE V2 WHERE V1.GROUP# = V2.GROUP# ;
這個查詢將列出所有的redo log 和他們各自的順序和最先更改的編號
3) 執行查詢(非歸檔模式)
SQL> SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
如果CHANGE# 大於日誌的最小 FIRST_CHANGE# ,則可以恢復資料檔案;如果 CHANGE# 小於日誌的最小 FIRST_CHANGE# ,則無法恢復資料檔案
4) 恢復資料檔案
SQL> recover datafile 'filename';
5) 確認提示的每個日誌,直到收到 “ Media Recovery Complete ” ,如果提示輸入不存在的歸檔日誌, Oracle 可能需要一個或多個 redolog 來進行恢復。
6) 開啟資料庫
SQL> alter database open;
---- end ----
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2754982/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-01110,ORA-01157錯誤處理
- ora-01110處理
- 處理問題的方法
- perl中文處理問題
- 漢字處理問題?
- xml處理的問題XML
- 貨品問題處理
- [git] git問題處理Git
- golang json處理問題GolangJSON
- 併發問題處理方式
- ASMCMD處理問題一則ASM
- mysql的處理能力問題MySql
- RMAN處理split block問題BloC
- mysql問題處理兩則MySql
- Oracle啟動問題處理Oracle
- mysql 問題處理二則MySql
- Oracle壞塊問題處理Oracle
- 資料處理--pandas問題
- veritas環境Oracle ORA-01157異常處理-orastarOracleAST
- 如何處理 No DMARC Record Found 問題
- PHP 開發版本問題處理PHP
- MySQL:亂碼問題處理流程MySql
- JVM問題分析處理手冊JVM
- Linux 問題處理集錦Linux
- 處理SQLServer errorlog滿問題SQLServerError
- 如何處理HTTP 503故障問題?HTTP
- gc buffer busy acquire問題處理GCUI
- 記憶體分配問題處理記憶體
- RDSforMySQLMysqldump常見問題和處理ORMMySql
- ORA-00942問題處理
- crontab 問題檢查與處理
- ORA-38760 問題處理方法
- 一個NBU問題的處理
- Lotus notes問題與處理
- HTML + CSS處理常見問題HTMLCSS
- Java 大資料量處理問題Java大資料
- mysql的處理能力問題(2)MySql
- crontab對oracle操作問題處理Oracle