eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« Oracle HowTo:如何查看各个表空间的自由空间 | Blog首页 | Statspack之十二-db file scattered read-DB文件分散读取 »

丢失所有文件、拥有全备份,缺少后增加的文件

演示几种情况,不做过多说明.

归档模式

拥有所有归档文件及日志文件,丢失所有数据文件及控制文件,后增加的文件无备份,丢失这个文件,拥有控制文件及所有其他文件的历史
备份,以下是一种恢复情况.

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方式修改控制文件中记录.
继续应用所有归档和日志文件可以完成恢复.

 


历史上的今天...
    >> 2010-10-14文章:
    >> 2009-10-14文章:
    >> 2008-10-14文章:
    >> 2007-10-14文章:
           我的新房 我的家
    >> 2006-10-14文章:
           有朋自远方来 不亦悦乎
    >> 2005-10-14文章:

无觅

By eygle on 2004-10-14 11:56 | Comments (3) | Backup&Recovery | 1280 |

3 Comments

一系列的move操作后,egyle目录里就是原来bak内的所有文件了,应该可以顺利open的(当然是不会有test01.dbf什么事的)。请问recover database using backup controlfile until cancel;操作是从哪里获TEST01.DBF'的信息的

>>(当然是不会有test01.dbf什么事的)

什么意思?

eygle这个是从备份中COPY过来的。。是存在的,不存在咋恢复。。我是这样测试才成功的


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com