SQLPLUS>ALTER DATABASE DATAFILE 2 ONLINE;
ALTER DATABASE DATAFILE 2 ONLINE
*
ERROR 位于第 1 行:
ORA-01190: 控制文件或數(shù)據(jù)文件2來自于最后一個 RESETLOGS 之前
ORA-01110: 數(shù)據(jù)文件 2: ‘E:\Oracle9I\ORA9I\UNDOTBS01.DBF’-
接下來由于V$DATAFILE中的CHECKPOINT_CHANGE#仍然大于V$RECOVER_FILE中的CHANGE#,決定用ADJUST_SCN來調(diào)整SCN.
首先需要設(shè)置_allow_resetlogs_corruption參數(shù),否則不能成功(實驗了)
SQLPLUS>ALTER SYSTEM SET “_allow_resetlogs_corruption”=TRUE SCOPE=SPFILE;
系統(tǒng)已更改。
SQLPLUS>SHUTDOWN IMMEDIATE
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
Oracle 例程已經(jīng)關(guān)閉。
SQLPLUS>STARTUP MOUNT;
Oracle 例程已經(jīng)啟動。
Total System Global Area 135339940
bytes
Fixed Size 454564
bytes
Variable Size 109051904
bytes
Database Buffers 25165824
bytes
Redo Buffers 667648
bytes
數(shù)據(jù)庫裝載完畢。
SQLPLUS>ALTER DATABASE OPEN;
數(shù)據(jù)庫已更改。
SQLPLUS>ALTER SESSION SET EVENTS ‘IMMEDIATE TRACE NAME ADJUST_SCN LEVEL 1′;
會話已更改。
SQLPLUS>SHUTDOWN IMMEDIATE
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
Oracle 例程已經(jīng)關(guān)閉。
SQLPLUS>STARTUP MOUNT;
Oracle 例程已經(jīng)啟動。
Total System Global Area 135339940
bytes
Fixed Size 454564
bytes
Variable Size 109051904
bytes
Database Buffers 25165824
bytes
Redo Buffers 667648
bytes
數(shù)據(jù)庫裝載完畢。
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;
完成介質(zhì)恢復。
上面這一步很重要,雖然不做這個操作也能打開數(shù)據(jù)庫,但是我們是要用RESETLOGS來打開數(shù)據(jù)庫,否則仍然將其它數(shù)據(jù)文件聯(lián)機的時候
仍然會報ORA-01189.
然后將數(shù)據(jù)文件狀態(tài)聯(lián)機。
SQLPLUS>ALTER DATABASE DATAFILE 2,3,4,5,6,7,8,9,10,11,12 ONLINE;
數(shù)據(jù)庫已更改。
打開數(shù)據(jù)庫。
SQLPLUS>ALTER DATABASE OPEN RESETLOGS;
數(shù)據(jù)庫已更改。
查看V$DATAFILE,文件狀態(tài)已經(jīng)是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
至此,數(shù)據(jù)庫已經(jīng)恢復了,接下來的工作就簡單了:
將臨時表空間文件找回:
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導出數(shù)據(jù),重建數(shù)據(jù)庫。
總結(jié):剛解決完的時候,有點不敢相信竟然解決了。因為這種由SYSTEM表空間造成的ORA-01189這個錯誤,我一直以為只能通過DUL來解決了。
在網(wǎng)上也同樣找不到真正解決的資料,一般都是解決ORA-01190的。這兩個問題的區(qū)別在于,創(chuàng)建控制文件的時候如果不產(chǎn)生01189(用resetlogs選項)那么創(chuàng)建時不用將其它的數(shù)據(jù)文件去掉,而且打開數(shù)據(jù)庫的時候只要設(shè)置_allow_resetlogs_corruption就可以了,另外也不用adjust_scn來修改change#。于是在自己的機器上又做了幾次實驗:
1關(guān)掉數(shù)據(jù)庫;
2備份SYSTEM表空間;
3打開數(shù)據(jù)庫;
4切換日志;
5關(guān)數(shù)據(jù)庫;
6替換舊的SYSTEM表空間。
模擬出了同樣的問題。然后用同樣的方法解決了。
本文出自:億恩科技【1tcdy.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|