oracleDBA關於控制文件被移動的問題

最近按照書上的例子敲命令,部分是對控制文件的操作,可是誰料將控制文件移動之後,就出問題了。。。老是提醒我“文件比控制文件更新 - 舊的控制文件”,弄得我沒法用數據庫。

******************************************************************************************************************************************************************************************************

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了。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章