如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
如何恢复自上次备份添加了数据文件的数据库HOW TO RECOVER A DATABASE HAVING ADDED A DATAFILE SINCE THE LAST BACKUP
———————————————————————–
此公告概述了恢复自上次备份添加了数据文件的数据库所需的步骤。部分A适用于Oracle版本7.x。部分B仅适用于Oracle版本7.3.x及以上。
尝试使用此公告之前请通读所有步骤和警告。
A. 当前控制文件,数据文件备份存在(Oracle release 7.x)
===================================================================
数据文件的有效(热或冷)备份存在,除了自创建备份其创建的数据文件。当前控制文件存在。
数据库在归档日志模式(参见本页底部的说明note (c))。
1. 从上次热或冷备份中仅还原数据文件(那些丢失或损坏的文件)。当前(所有)联机重做日志和控制文件必须完好无损。
2. Mount数据库
3. 使用‘ALTER DATABASE CREATE DATAFILE’ 命令创建一个新数据文件。
a. 可以使用与原始文件相同的名称创建数据文件。例如,
SQLDBA> alter database create datafile
2> ‘/dev1/oracle/dbs/testtbs.dbf’;
Statement processed.
b. 可以使用与原始文件名称不同的文件名来创建数据文件。
如果由于磁盘故障原始文件丢失且故障的磁盘仍不可用,可以选择这个方法;新文件会在另一个设备上被创建。例如,
SQLDBA> alter database create datafile
2> ‘/dev1/oracle/dbs/testtbs.dbf’
3> as
4> ‘/dev2/oracle/dbs/testtbs.dbf’;
Statement processed.
以上命令在dev2设备上创建新数据文件。文件的创建使用来自原始文件,储存在控制文件中的信息。该命令隐式重命名了控制文件中的文件名。
注:在重建丢失的数据文件时,指定正确的文件名很重要。如果你指定了现有的Oracle数据文件,该数据文件将被初始化且其本身需要恢复。
4. 恢复数据库。
SQLDBA> recover database
ORA-00279: Change 6677 generated at 06/03/97 15:20:24 needed for thread 1
ORA-00289: Suggestion : /dev1/oracle/dbs/arch/arch000074.arc
ORA-00280: Change 6677 for thread 1 is in sequence #74
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
此时,恢复步骤会等待用户提供所需的关于归档日志文件的名称和位置的信息。例如,AUTO 指示Oracle应用建议的重做日志以及其他恢复数据文件所需的。
Applying suggested logfile…
Log applied.
:
:
<Application of further redo logs>
:
:
Media recovery complete.
5. 打开数据库
SQLDBA> alter database open;
Statement processed.
B. 旧的控制文件,无数据文件的备份(Oracle release 7.3.x 及以上)
=======================================================================
数据文件的有效(热或冷)备份存在,除了自创建备份起创建的数据文件。控制文件是来自新数据文件创建之前的备份。数据库在归档日志模式(参见本页底部的说明note (c))。
注:从Oracle8i 起,‘svrmgrl’ 被SQL*Plus替换
所以‘SVRMGR>’ prompt被 ‘SQL>’替换
1. 从上次热或冷备份中还原数据文件(那些丢失或损坏的文件)。同时还原控制文件的旧备份。当前联机重做日志必须完好。
2. Mount数据库
3. 启动媒体恢复,指定备份控制文件
SVRMGR> recover database using backup controlfile
ORA-00279: Change 6677 generated at 06/03/97 15:20:24 needed for thread 1
ORA-00289: Suggestion : /dev1/oracle/dbs/arch/arch000074.arc
ORA-00280: Change 6677 for thread 1 is in sequence #74
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
此时,应用请求的归档日志。最终Oracle会遇到重做被应用到不存在的数据文件。恢复会话会退出显示以下信息,且会将用户返回到Server Manager prompt:
ORA-00283: Recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 5: ‘/dev1/oracle/dbs/testtbs.dbf’
4. 重建丢失的数据文件。要这样操作,从v$datafile select相关文件名:
SVRMGR> select name from v$datafile where file#=5;
NAME
——————————————————-
UNNAMED0005
Now recreate the file:
SVRMGR> alter database create datafile
2> ‘UNNAMED0005’
3> as
4> ‘/dev1/oracle/dbs/testtbs.dbf’;
5. 重启恢复
SVRMGR> recover database using backup controlfile
ORA-00279: Change 6747 generated at 09/24/97 16:57:18 needed for thread 1
ORA-00289: Suggestion : /dev1/oracle/dbs/arch/arch000079.arc
ORA-00280: Change 6747 for thread 1 is in sequence #79
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
应用请求的归档日志。Oracle8之前,恢复必须应用在数据文件创建当时的完整日志(在以上示例中,这会是日志序列79)。恢复到该日志结束前的时间点会导致错误:
ORA-01196: file 1 is inconsistent due to a failed media recovery session
ORA-01110: data file 1: ‘/dev1/oracle/dbs/systbs.dbf’
如果发生了这个问题,重新恢复数据库并确认应用了完整日志(以及其他所需的重做)。从Oracle8.0其不再有这个限制。
最终,Oracle会请求与当前联机日志相关的归档日志。它这么做是因为(备份)控制文件不知道当前日志序列。如果尝试应用建议的日志,恢复会话会退出显示以下信息:
ORA-00308: cannot open archived log ‘/dev1/oracle/dbs/arch/arch000084.arc’
ORA-07360: sfifi: stat error, unable to obtain information about file.
SVR4 Error: 2: No such file or directory
此时,只要重启恢复会话并应用当前联机日志。最佳操作方法是逐个应用联机重做日志直到Oracle完成媒体恢复:
SVRMGR> recover database using backup controlfile
ORA-00279: Change 6763 generated at 09/24/97 16:57:59 needed for thread 1
ORA-00289: Suggestion : /dev1/oracle/dbs/arch/arch000084.arc
ORA-00280: Change 6763 for thread 1 is in sequence #84
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/dev1/oracle/dbs/log2.dbf
Log applied.
Media recovery complete.
6. 打开数据库
SVRMGR> alter database open resetlogs;
必须使用resetlogs 选项来重新同步控制文件。
注:
======
a) 不论数据库是干净或不干净(aborted )关闭都可以使用这些技。
b) 如果使用不完全恢复技术(基于时间,基于cancel,或基于更改)恢复了数据库,且被恢复到数据文件被原始创建前的时间点,当数据库被打开时数据文件的任何引用会被从数据库中删除。
Oracle处理这个情况如下:
– ‘alter database create datafile….’ 命令为数据文件在控制文件中创建了一个引用。
– 在应用重做,即为数据文件在file$字典表中创建对应行之前,不完全恢复终止。
– 当数据库被打开,Oracle检测到file$和控制文件间的不一致性,倾向于file$来解决,从控制文件中删除条目。
c) 即使数据库不在归档日志模式下也可以使用该技术来恢复数据文件。但这取决于所需的重做在联机重做日志中可用。
Comment