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資料表空間。
類比出了同樣的問題。然後用同樣的方法解決了。