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
系統已更改。
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
數據庫裝載完畢。
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
數據庫裝載完畢。
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#
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表空間。
模擬出了同樣的問題。然后用同樣的方法解決了。