丟失所有檔案、擁有全備份,缺少後增加的檔案

liuya1985liuya發表於2007-12-27

演示幾種情況,不做過多說明.

歸檔模式

擁有所有歸檔檔案及日誌檔案,丟失所有資料檔案及控制檔案,後增加的檔案無備份,丟失這個檔案,擁有控制檔案及所有其他檔案的歷史
備份,以下是一種恢復情況.

1.測試,移除當前所有檔案

從備份中恢復資料檔案及控制檔案(丟失後增加的檔案)

 

SQL> startup;
ORACLE 例程已經啟動。

Total System Global Area   47259136 bytes
Fixed Size                   454144 bytes
Variable Size              29360128 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> archive log start;
已處理的語句
SQL> archive log list;
資料庫日誌模式            存檔模式
自動存檔             啟用
存檔終點            e:\oracle\ora92\RDBMS
最早的概要日誌序列     30
下一個存檔日誌序列   32
當前日誌序列           32
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF
E:\ORACLE\ORADATA\EYGLE\UNDOTBS01.DBF
E:\ORACLE\ORADATA\EYGLE\EYGLE01.DBF

SQL> create tablespace test datafile 'e:\oracle\oradata\eygle\test01.dbf'
  2  size 5m;

表空間已建立。


SQL> alter system switch logfile;

系統已更改。

SQL> create table t tablespace test as select * from dba_users;

表已建立。

SQL> alter system switch logfile;

系統已更改。

SQL> shutdown abort;
ORACLE 例程已經關閉。
SQL> exit
從Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production中斷開

E:\Oracle\oradata\eygle>mv TEST01.DBF bak 

E:\Oracle\oradata\eygle>mkdir bak2

E:\Oracle\oradata\eygle>mv *.* bak2

E:\Oracle\oradata\eygle>ls
bak   bak2

E:\Oracle\oradata\eygle>mv bak\*.* . --從備份中恢復

E:\Oracle\oradata\eygle>ls
CONTROL01.CTL  CONTROL03.CTL  REDO01.LOG     REDO03.LOG     TEMP01.DBF     UNDOTBS01.DBF  bak2
CONTROL02.CTL  EYGLE01.DBF    REDO02.LOG     SYSTEM01.DBF   TEST01.DBF     bak            sqlnet.log

E:\Oracle\oradata\eygle>mv TEST01.DBF bak --移除後增加的這個檔案

E:\Oracle\oradata\eygle>ls
CONTROL01.CTL  CONTROL03.CTL  REDO01.LOG     REDO03.LOG     TEMP01.DBF     bak            sqlnet.log
CONTROL02.CTL  EYGLE01.DBF    REDO02.LOG     SYSTEM01.DBF   UNDOTBS01.DBF  bak2

 

2.開始恢復

 

 

E:\Oracle\oradata\eygle>sqlplus "sys/oracle as sysdba"

SQL*Plus: Release 9.2.0.5.0 - Production on 星期三 10月 13 23:50:06 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已連線到空閒例程。

SQL> startup mount;
ORACLE 例程已經啟動。

Total System Global Area   47259136 bytes
Fixed Size                   454144 bytes
Variable Size              29360128 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 134694 (在 10/13/2004 22:14:13 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00032.001
ORA-00280: 更改 134694 對於執行緒 1 是按序列 # 32 進行的


指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00283: 恢復會話因錯誤而取消
ORA-01244: 未命名的資料檔案由介質恢復新增至控制檔案
ORA-01110: 資料檔案 4: 'E:\ORACLE\ORADATA\EYGLE\TEST01.DBF'


ORA-01112: 未啟動介質恢復


SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
E:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF
E:\ORACLE\ORADATA\EYGLE\UNDOTBS01.DBF
E:\ORACLE\ORADATA\EYGLE\EYGLE01.DBF
E:\ORACLE\ORA92\DATABASE\UNNAMED00004
       

 

注意:由於使用的是備份的控制檔案進行恢復,該檔案中不包含後增加的檔案,恢復過程中會預設的賦予一個檔名,本案例時:UNNAMED00004

3.更改檔名稱繼續恢復

 

 
SQL> alter database create datafile 'E:\ORACLE\ORA92\DATABASE\UNNAMED00004'
 as 'E:\ORACLE\ORADATA\EYGLE\TEST01.DBF';

資料庫已更改。

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 134923 (在 10/13/2004 22:40:10 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00032.001
ORA-00280: 更改 134923 對於執行緒 1 是按序列 # 32 進行的


指定日誌: {=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 134967 (在 10/13/2004 22:40:40 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00033.001
ORA-00280: 更改 134967 對於執行緒 1 是按序列 # 33 進行的
ORA-00278: 此恢復不再需要日誌檔案 'E:\ORACLE\ORA92\RDBMS\ARC00032.001'


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:\Oracle\oradata\eygle\bak2\REDO03.LOG
ORA-00279: 更改 134998 (在 10/13/2004 22:41:05 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00034.001
ORA-00280: 更改 134998 對於執行緒 1 是按序列 # 34 進行的
ORA-00278: 此恢復不再需要日誌檔案 'E:\Oracle\oradata\eygle\bak2\REDO03.LOG'


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:\Oracle\oradata\eygle\bak2\REDO01.LOG
ORA-00279: 更改 155020 (在 10/13/2004 22:44:30 生成) 對於執行緒 1 是必需的
ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00035.001
ORA-00280: 更改 155020 對於執行緒 1 是按序列 # 35 進行的
ORA-00278: 此恢復不再需要日誌檔案 'E:\Oracle\oradata\eygle\bak2\REDO01.LOG'


指定日誌: {=suggested | filename | AUTO | CANCEL}
E:\Oracle\oradata\eygle\bak2\REDO02.LOG
已應用的日誌。
完成介質恢復。


SQL> alter database open resetlogs;

資料庫已更改。

SQL>

總結:

此案例丟失控制檔案,從備份控制檔案進行恢復,在進行恢復中,會向控制檔案中以預設規則增加檔案,我們可以通過CREATE AS方式修改控制檔案中記錄.
繼續應用所有歸檔和日誌檔案可以完成恢復.

原文地址:http://www.eygle.com/archives/2004/10/recover_backup_missing_datafile.html

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

相關文章