最近按照書上的例子敲命令,部分是對控制文件的操作,可是誰料將控制文件移動之後,就出問題了。。。老是提醒我“文件比控制文件更新 - 舊的控制文件”,弄得我沒法用數據庫。
******************************************************************************************************************************************************************************************************
1.SQL> connect /as sysdba
2.SQL> shutdown abort 如果數據庫是打開狀態,強行關閉
3.SQL> startup
ORACLE 例程已經啓動。
Total System Global Area 293601280 bytes
Fixed Size 1248624 bytes
Variable Size 121635472 bytes
Database Buffers 167772160 bytes
Redo Buffers 2945024 bytes
數據庫裝載完畢。
ORA-01122: 數據庫文件 1 驗證失敗
ORA-01110: 數據文件 1: 'F:\ORACLE\PRODUCT\10.2.0\DB_1\ORADATA\ORCLDW\SYSTEM01.DBF'
ORA-01207: 文件比控制文件更新 - 舊的控制文件
4.SQL> alter database backup controlfile to trace as 'e:\controlfile';
數據庫已更改。
5.SQL> shutdown immediate 如果數據庫是打開狀態,則關閉
ORA-01109: 數據庫未打開
已經卸載數據庫
6.SQL> startup nomount;
ORACLE 例程已經啓動。
Total System Global Area 105979576 bytes
Fixed Size 454328 bytes
Variable Size 79691776 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
7.Editplus之類的編輯器打開在第4步生成的e:\controlfile'文件;
其實在這個文件中的已經告訴你咋樣恢復你的數據庫了,找到STARTUP NOMOUNT字樣(有好幾處),然後下面可以看到類似語句,這個文件有好幾個類似的生成控制文件語句,主要針對不同的環境執行不同的語句,象我的數據庫沒有做任何備份,也不是在歸檔模式,就執行這句(刪除其中的註釋行,刪除不需要的數據文件,中間不要有任何空行; 碰到錯誤執行SQL> shutdown abort ;SQL> startup
nomount; )
SQL>
CREATE CONTROLFILE REUSE DATABASE "ZFXFZB" RESETLOGS NOARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 680
LOGFILE
GROUP 1 'E:\ORACLE\ORADATA\ZFXFZB\REDO01.LOG' SIZE 100M,
GROUP 2 'E:\ORACLE\ORADATA\ZFXFZB\REDO02.LOG' SIZE 100M,
GROUP 3 'E:\ORACLE\ORADATA\ZFXFZB\REDO03.LOG' SIZE 100M
DATAFILE
'E:\ORACLE\ORADATA\ZFXFZB\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\UNDOTBS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\CWMLITE01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\DRSYS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\EXAMPLE01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\INDX01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\ODM01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\TOOLS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\USERS01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\XDB01.DBF',
'E:\ORACLE\ORADATA\ZFXFZB\ZFXFZB.ORA'
CHARACTER SET ZHS16GBK
;
執行上面這段語句,這個語句重建控制文件,然後你可以看着e:\controlfile'文件完成下面的恢復工作了,
8.SQL>RECOVER DATABASE (恢復指定表空間、數據文件或整個數據庫) ; 即使出現錯誤也可以正常使用。
SQL>ALTER DATABASE OPEN resetlogs; 。
9.SQL>ALTER DATABASE OPEN; 打開數據庫 。******************************************************************************************************************************************************************************************************以上內容是從網上找的,事實是,我按照上面的內容執行的時候,第7點的命令,出現了許多問號而且SQL>
shutdown abort ;SQL> startup nomount;之後,問號也沒消失。於是我沒有管問號,把第7點的命令執行了之後,就按照e:\controlfile中的命令執行,還是有問號,還是沒有管,而執行完了之後,依舊不能用scott連接。
於是SQL>exit從數據庫斷開,我覺得可能是因爲我改過控制文件的路徑,於是執行了下列命令:
1.SQL> alter system set control_files =
2 'F:\Oracle\product\10.2.0\oradata\orcl\CONTROL01.CTL',
3 'F:\Oracle\product\10.2.0\oradata\orcl\CONTROL02.CTL',
4 'F:\Oracle\product\10.2.0\oradata\orcl\CONTROL03.CTL' SCOPE=SPFILE;
系統已更改。
2.SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已經關閉。
3.SQL> startup pfile='F:\Oracle\product\10.2.0\db_1\database\initorcl.ora';
ORACLE 例程已經啓動。
Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 96469672 bytes
Database Buffers 188743680 bytes
Redo Buffers 7139328 bytes
數據庫裝載完畢。
ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
******************************************************************************************************************************************************************************************************
這裏,問題又來了,於是,在網上查了哈,原因如下:
日誌是連續的,而我做了不完全恢復,這樣之後,數據庫就無法使用未使用過的日誌,無法在未使用過的日誌基礎上繼續日誌序列。
解決:
SQL> alter database open resetlogs;
數據庫已更改。
更改之後,用scott登陸試試,
SQL> conn scott/tiger
已連接。
到此,一切OK了。。