ora-01190和ora-01110的解決方法


 

SQLPLUS>ALTER DATABASE DATAFILE 2 ONLINE;
ALTER DATABASE DATAFILE 2 ONLINE
*
ERROR 位於第 1 行:
ORA-01190: 控制文件或數據文件2來自於最后一個 RESETLOGS 之前
ORA-01110: 數據文件 2: 'E:\ORACLE9I\ORA9I\UNDOTBS01.DBF'
 
接下來由於V$DATAFILE中的CHECKPOINT_CHANGE#仍然大於V$RECOVER_FILE中的CHANGE#,決定用ADJUST_SCN來調整SCN. 首先需要設置_allow_resetlogs_corruption參數,否則不能成功(實驗了)
 
SQLPLUS>ALTER SYSTEM SET "_allow_resetlogs_corruption"=TRUE SCOPE=SPFILE;
系統已更改。
SQLPLUS>SHUTDOWN IMMEDIATE
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQLPLUS>STARTUP MOUNT;
ORACLE 例程已經啟動。
Total System Global Area 135339940 bytes
Fixed Size 454564 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
 
SQLPLUS>ALTER DATABASE OPEN;
數據庫已更改。
SQLPLUS>ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME ADJUST_SCN LEVEL 1';
會話已更改。
SQLPLUS>SHUTDOWN IMMEDIATE
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQLPLUS>STARTUP MOUNT;
ORACLE 例程已經啟動。
Total System Global Area 135339940 bytes
Fixed Size 454564 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
SQLPLUS>SELECT TS#,FILE#,NAME,STATUS,CHECKPOINT_CHANGE# FROM V$DATAFILE;
TS# FILE# NAME STATUS CHECKPOINT_CHANGE#
---- ----- ---------------------------------------- ------- ------------------
0 1 E:\ORACLE9I\ORA9I\SYSTEM01.DBF SYSTEM 1041478416
1 2 E:\ORACLE9I\ORA9I\UNDOTBS01.DBF OFFLINE 0
3 3 E:\ORACLE9I\ORA9I\DRSYS01.DBF OFFLINE 0
4 4 E:\ORACLE9I\ORA9I\INDX01.DBF OFFLINE 0
5 5 E:\ORACLE9I\ORA9I\TOOLS01.DBF OFFLINE 0
6 6 E:\ORACLE9I\ORA9I\USERS01.DBF OFFLINE 0
7 7 E:\ORACLE9I\ORA9I\XDB01.DBF OFFLINE 0
8 8 E:\ORACLE9I\ORA9I\OEM_REPOSITORY.DBF OFFLINE 0
13 9 E:\ORACLE9I\ORADATA\GAXZTEMP.DB OFFLINE 0
14 10 E:\ORACLE9I\ORADATA\GAXZUSR.DB OFFLINE 0
15 11 E:\ORACLE9I\ORADATA\GAXZRBS.DB OFFLINE 0
TS# FILE# NAME STATUS CHECKPOINT_CHANGE#
---- ----- ---------------------------------------- ------- ------------------
16 12 E:\ORACLE9I\ORADATA\GAXZWEB.DB OFFLINE 0
已選擇12行。
SQLPLUS>SELECT * FROM V$RECOVER_FILE;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
----- ------- ------- -------------------- --------------- ----------
2 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
3 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
4 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
5 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
6 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
7 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
8 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
9 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
10 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
11 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
12 OFFLINE OFFLINE WRONG FILE CREATE 37667 18-12月-04
已選擇11行。

SQLPLUS>RECOVER UNTIL CANCEL;
完成介質恢復。
 
上面這一步很重要,雖然不做這個操作也能打開數據庫,但是我們是要用RESETLOGS來打開數據庫,否則仍然將其它數據文件聯機的時候
仍然會報ORA-01189.
然后將數據文件狀態聯機。
SQLPLUS>ALTER DATABASE DATAFILE 2,3,4,5,6,7,8,9,10,11,12 ONLINE;
數據庫已更改。
打開數據庫。
SQLPLUS>ALTER DATABASE OPEN RESETLOGS;
數據庫已更改。
查看V$DATAFILE,文件狀態已經是ONLINE了。
TS# FILE# NAME STATUS CHECKPOINT_CHANGE#
--- ----- ---------------------------------------- ------- ------------------
0 1 E:\ORACLE9I\ORA9I\SYSTEM01.DBF SYSTEM 1041478418
1 2 E:\ORACLE9I\ORA9I\UNDOTBS01.DBF ONLINE 1041478418
3 3 E:\ORACLE9I\ORA9I\DRSYS01.DBF ONLINE 1041478418
4 4 E:\ORACLE9I\ORA9I\INDX01.DBF ONLINE 1041478418
5 5 E:\ORACLE9I\ORA9I\TOOLS01.DBF ONLINE 1041478418
6 6 E:\ORACLE9I\ORA9I\USERS01.DBF ONLINE 1041478418
7 7 E:\ORACLE9I\ORA9I\XDB01.DBF ONLINE 1041478418
8 8 E:\ORACLE9I\ORA9I\OEM_REPOSITORY.DBF ONLINE 1041478418
13 9 E:\ORACLE9I\ORADATA\GAXZTEMP.DB ONLINE 1041478418
14 10 E:\ORACLE9I\ORADATA\GAXZUSR.DB ONLINE 1041478418
15 11 E:\ORACLE9I\ORADATA\GAXZRBS.DB ONLINE 1041478418
TS# FILE# NAME STATUS CHECKPOINT_CHANGE#
--- ----- ---------------------------------------- ------- ------------------
16 12 E:\ORACLE9I\ORADATA\GAXZWEB.DB ONLINE 1041478418
 
至此,數據庫已經恢復了,接下來的工作就簡單了: 將臨時表空間文件找回: SQLPLUS>ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE9i\ORA9I\TEMP01.DBF' REUSE;
表空間已更改。
將UNDO管理方式改成自動
SQLPLUS>ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO SCOPE=SPFILE;
系統已更改。
SQLPLUS>ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS SCOPE=SPFILE;
系統已更改。
用EXP導出數據,重建數據庫。

總結:剛解決完的時候,有點不敢相信竟然解決了。因為這種由SYSTEM表空間造成的ORA-01189這個錯誤,我一直以為只能通過DUL來解決了。 在網上也同樣找不到真正解決的資料,一般都是解決ORA-01190的。這兩個問題的區別在於,創建控制文件的時候如果不產生01189(用resetlogs選項)那么創建時不用將其它的數據文件去掉,而且打開數據庫的時候只要設置_allow_resetlogs_corruption就可以了,另外也不用adjust_scn來修改change#。於是在自己的機器上又做了幾次實驗:
1關掉數據庫;
2備份SYSTEM表空間;
3打開數據庫;
4切換日志;
5關數據庫;
6替換舊的SYSTEM表空間。
 
模擬出了同樣的問題。然后用同樣的方法解決了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM