SQLPLUS>ALTER DATABASE DATAFILE 2 ONLINE;
ALTER DATABASE DATAFILE 2 ONLINE
*
ERROR 位于第 1 行:
ORA-01190: 控制文件或數(shù)據(jù)文件2來自于最后一個(gè) 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ù),否則不能成功(實(shí)驗(yàn)了)
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)啟動(dò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′;
會(huì)話已更改。
SQLPLUS>SHUTDOWN IMMEDIATE
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
Oracle 例程已經(jīng)關(guān)閉。
SQLPLUS>STARTUP MOUNT;
Oracle 例程已經(jīng)啟動(dò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ì)恢復(fù)。
上面這一步很重要,雖然不做這個(gè)操作也能打開數(shù)據(jù)庫,但是我們是要用RESETLOGS來打開數(shù)據(jù)庫,否則仍然將其它數(shù)據(jù)文件聯(lián)機(jī)的時(shí)候
仍然會(huì)報(bào)ORA-01189.
然后將數(shù)據(jù)文件狀態(tài)聯(lián)機(jī)。
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)恢復(fù)了,接下來的工作就簡單了:
將臨時(shí)表空間文件找回:
SQLPLUS>ALTER TABLESPACE TEMP ADD TEMPFILE ‘E:\Oracle9i\ORA9I\TEMP01.DBF’ REUSE;
表空間已更改。
將UNDO管理方式改成自動(dòng)
SQLPLUS>ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO SCOPE=SPFILE;
系統(tǒng)已更改。
SQLPLUS>ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS SCOPE=SPFILE;
系統(tǒng)已更改。
用EXP導(dǎo)出數(shù)據(jù),重建數(shù)據(jù)庫。
總結(jié):剛解決完的時(shí)候,有點(diǎn)不敢相信竟然解決了。因?yàn)檫@種由SYSTEM表空間造成的ORA-01189這個(gè)錯(cuò)誤,我一直以為只能通過DUL來解決了。
在網(wǎng)上也同樣找不到真正解決的資料,一般都是解決ORA-01190的。這兩個(gè)問題的區(qū)別在于,創(chuàng)建控制文件的時(shí)候如果不產(chǎn)生01189(用resetlogs選項(xiàng))那么創(chuàng)建時(shí)不用將其它的數(shù)據(jù)文件去掉,而且打開數(shù)據(jù)庫的時(shí)候只要設(shè)置_allow_resetlogs_corruption就可以了,另外也不用adjust_scn來修改change#。于是在自己的機(jī)器上又做了幾次實(shí)驗(yàn):
1關(guān)掉數(shù)據(jù)庫;
2備份SYSTEM表空間;
3打開數(shù)據(jù)庫;
4切換日志;
5關(guān)數(shù)據(jù)庫;
6替換舊的SYSTEM表空間。
模擬出了同樣的問題。然后用同樣的方法解決了。
本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|