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;
系統(tǒng)已更改。
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.
然后將數據文件狀態(tài)聯機。
SQLPLUS>ALTER DATABASE DATAFILE 2,3,4,5,6,7,8,9,10,11,12 ONLINE;
數據庫已更改。
打開數據庫。
SQLPLUS>ALTER DATABASE OPEN RESETLOGS;
數據庫已更改。
查看V$DATAFILE,文件狀態(tài)已經是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;
系統(tǒng)已更改。
SQLPLUS>ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS SCOPE=SPFILE;
系統(tǒng)已更改。
用EXP導出數據,重建數據庫。
總結:剛解決完的時候,有點不敢相信竟然解決了。因為這種由SYSTEM表空間造成的ORA-01189這個錯誤,我一直以為只能通過DUL來解決了。
在網上也同樣找不到真正解決的資料,一般都是解決ORA-01190的。這兩個問題的區(qū)別在于,創(chuàng)建控制文件的時候如果不產生01189(用resetlogs選項)那么創(chuàng)建時不用將其它的數據文件去掉,而且打開數據庫的時候只要設置_allow_resetlogs_corruption就可以了,另外也不用adjust_scn來修改change#。于是在自己的機器上又做了幾次實驗:
1關掉數據庫;
2備份SYSTEM表空間;
3打開數據庫;
4切換日志;
5關數據庫;
6替換舊的SYSTEM表空間。
模擬出了同樣的問題。然后用同樣的方法解決了。
本文出自:億恩科技【www.allwellnessguide.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|