全部控制檔案丟失後的完全恢復(轉)

lixianlinde發表於2013-02-01

全部控制檔案丟失後的完全恢復




分類: ORACLE
如果資料庫控制檔案做過映象,比如一個資料庫有3個控制檔案,丟失一個控制檔案的恢復非常的容易,如果所有控制檔案的丟失,那麼恢復起來就要相對的麻煩一些。

如果注意觀察下面的例子你會發現,即使沒有控制檔案的備份也是可以把資料庫恢復的。
當然,最好不要把自己置於某種複雜和未知的環境,對資料庫做控制檔案的備份是一個很容易的事情。

我們這裡通過使用者管理的方法來建立控制檔案的備份:
1.生成重建控制檔案和修復資料庫的指令碼,指令碼會放在$ORACLE_HOME/admin/$ORACLE_SID/udump路徑下,其中sid是資料庫例項名。
alter database backup controlfile to trace;
2.生成控制檔案的映象拷貝
alter database backup controlfile to '/home/oracle/c.bak'     ----引號部分是目錄和備份檔名


SQL> create table demo (x number,y number);
表已建立。
SQL> insert into demo values(1,100);
已建立 1 行。
SQL> insert into demo values(2,200);
已建立 1 行。
SQL> commit;
提交完成。
SQL> select * from demo;
         X          Y
---------- ----------
         1        100
         2        200
SQL> conn / as sysdba
SQL> shutdown immediate

在這個時候,刪掉所有的控制檔案!!
$ oracle@model /oradata/test> ls
control01.ctl  control03.ctl  redo01.log  redo03.log    system01.dbf  undotbs01.dbf
control02.ctl  example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf
$ oracle@model /oradata/test> rm -rf *.ctl
$ oracle@model /oradata/test> ls
example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf     users01.dbf
redo01.log     redo03.log  system01.dbf  undotbs01.dbf
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area  293601280 bytes
Fixed Size                  1248600 bytes
Variable Size             100663976 bytes
Database Buffers          184549376 bytes
Redo Buffers                7139328 bytes
ORA-00205: ?????????, ??????, ???????
SQL> select status from v$instance;
STATUS
---------------------
STARTED
從trace檔案中獲得以下的SQL語句,並複製建立:
-rw-r----- 1 oracle oinstall 6382 May 18 17:43 test_ora_4912.trc
我們之前備份的檔案生成的是:test_ora_4912.trc
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oradata/test/redo01.log'  SIZE 50M,
  GROUP 2 '/oradata/test/redo02.log'  SIZE 50M,
  GROUP 3 '/oradata/test/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/oradata/test/system01.dbf',
  '/oradata/test/undotbs01.dbf',
  '/oradata/test/sysaux01.dbf',
  '/oradata/test/users01.dbf',
  '/oradata/test/example01.dbf',
  '/home/oracle/mai_dbf/for_mai01.dbf',
  '/home/oracle/mai_dbf/for_mai02.dbf',
  '/home/oracle/mai_dbf/ts_test01.dbf'
CHARACTER SET ZHS16GBK;
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> recover database;
ORA-00283: ??????????
ORA-00264: ?????
資料庫不需要恢復的操作,所以報了上邊的錯誤。
SQL> alter database open;
由於我們重建了控制檔案,所以原來oracle資料庫的臨時表空間已經不能夠被使用了,在這裡我們需要對它進行重建:
SQL> select file_name from dba_temp_files;
no rows selected
SQL> alter tablespace temp add tempfile '/oradata/test/temp01.dbf' size 30M reuse;
SQL> select file_name from dba_temp_files;
FILE_NAME
---------------------------
/oradata/test/temp01.dbf
SQL> select * from demo;
         X          Y
---------- ----------
         1        100
         2        200

測試完成!!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24570973/viewspace-753762/,如需轉載,請註明出處,否則將追究法律責任。

相關文章