« Oracle HowTo:如何查看各个表空间的自由空间 | Blog首页 | Statspack之十二-db file scattered read-DB文件分散读取 »
丢失所有文件、拥有全备份,缺少后增加的文件
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2004/10/recover_backup_missing_datafile.html
链接:https://www.eygle.com/archives/2004/10/recover_backup_missing_datafile.html
演示几种情况,不做过多说明.
归档模式
拥有所有归档文件及日志文件,丢失所有数据文件及控制文件,后增加的文件无备份,丢失这个文件,拥有控制文件及所有其他文件的历史
备份,以下是一种恢复情况.
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 进行的 指定日志: { |
注意:由于使用的是备份的控制文件进行恢复,该文件中不包含后增加的文件,恢复过程中会缺省的赋予一个文件名,本案例时: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 进行的 指定日志: { |
总结:
此案例丢失控制文件,从备份控制文件进行恢复,在进行恢复中,会向控制文件中以缺省规则增加文件,我们可以通过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 |
一系列的move操作后,egyle目录里就是原来bak内的所有文件了,应该可以顺利open的(当然是不会有test01.dbf什么事的)。请问recover database using backup controlfile until cancel;操作是从哪里获TEST01.DBF'的信息的
>>(当然是不会有test01.dbf什么事的)
什么意思?
eygle这个是从备份中COPY过来的。。是存在的,不存在咋恢复。。我是这样测试才成功的