【問題處理】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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE ORA-01110: ORA-27072: 處理Oracle
- golang json處理問題GolangJSON
- [git] git問題處理Git
- 併發問題處理方式
- Linux 問題處理集錦Linux
- 處理SQLServer errorlog滿問題SQLServerError
- 資料處理--pandas問題
- Ubuntu處理依賴問題Ubuntu
- PHP 開發版本問題處理PHP
- 【故障處理】TNS-04610問題
- JVM問題分析處理手冊JVM
- gc buffer busy acquire問題處理GCUI
- oracle SP2-問題處理Oracle
- 記憶體分配問題處理記憶體
- 如何處理 No DMARC Record Found 問題
- 如何處理HTTP 503故障問題?HTTP
- MySQL:亂碼問題處理流程MySql
- 【問題處理】IPC Send timeout detected
- oracle ORA-01180 ORA-01110(rman恢復問題)Oracle
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- 二、Git 問題彙總及處理Git
- Redis 快取常見問題處理Redis快取
- Oracle日常問題處理ORA-04031Oracle
- .net異常處理的效能問題
- ORACLE問題處理十個指令碼Oracle指令碼
- repmgr 叢集雙主問題處理
- SpringBoot 2.6.7 處理跨域的問題Spring Boot跨域
- RAC磁碟頭損壞問題處理
- SpringBoot 2.7.0 處理跨域的問題Spring Boot跨域
- 問題:mybatis like 佔位符處理MyBatis
- options 請求跨域問題處理跨域
- Oracle 11g Data Guard 增加資料檔案報錯:ORA-01111、ORA-01110、ORA-01157Oracle
- 【Weblogic】java.lang.UnsupportedClassVersionError問題處理方案WebJavaError
- 三、實戰系列問題處理集中營
- 瀏覽器相容問題處理總結瀏覽器
- 處理分頁的result型別問題型別
- linux處理oracle問題常用命令LinuxOracle
- 【Linux】curl: (35) SSL connect error問題處理LinuxError