用户自定义的数据库修复

** 用户自定义的数据库恢复 **

** 一、 ** ** 自动应用重做日志 **

1、 利用 SET AUTORECOVERY 命令自动应用重做日志

完成对数据文件的修复操作

SQL>STARTUP MOUNT; 启动实例并加载数据库

SQL>SET AUTORECOVERY ON 启用重做日志自动应用功能

SQL>RECOVER DATABASE 恢复指定表空间、数据文件或整个数据库

SQL>ALTER DATABASE OPEN; 完成恢复后打开数据库

2、 利用 RECOVERY AUTOMATIC 命令自动应用重做日志

完成对数据文件的修复操作

SQL>STARTUP MOUNT; 启动实例并加载数据库

SQL>RECOVER AUTOMATIC DATABASE

SQL>ALTER DATABASE OPEN; 完成恢复后打开数据库

** 二、 ** ** 不归档模式下的数据库介质恢复 **

1、 将数据库恢复到原来的位置上

SQL>SHUTDOWN IMMEDIATE 如果数据库仍然处于打开状态,关闭数据库;

将数据库文件恢复到原来的位置上,利用最近一次建立的一致性完全备份对整个数据库进行恢复,必须对所有的数据文件与控制文件进行修复;

SQL>RECOVER DATABASE UNTIL CANCEL

SQL>CANCEL

SQL>ALTER DATABASE OPEN RESETLOGS; 将当前重做日志顺序号设置为 1 。

2、 将数据库恢复到新的位置上

SQL>SHUTDOWN IMMEDIATE 如果数据库仍然处于打开状态,关闭数据库;

将数据库文件恢复到新的位置上,利用最近一次建立的一致性完全备份对整个数据库进行恢复,必须对所有的数据文件与控制文件进行修复;

对初始化参数文件中的 CONTROL_FILES 参数进行编辑,使它执行保存在新位置中修复后的控制文件;

SQL>STARTUP MOUNT

如果修复后的数据库文件处于新的位置,必须利用 ALTER DATABASE RENAME FILE 语句对控制文件进行修改,使它指向新位置中修复后的数据文件。如:

SQL>ALTER DATABASE RENAME FILE ‘I:\ora9i\oradata\system01.dbf’ TO ‘K:\oracle\oradata\system01.dbf’;

SQL>RECOVER DATABASE UNTIL CANCEL

SQL>CANCEL

SQL>ALTER DATABASE OPEN RESETLOGS; 将当前重做日志顺序号设置为 1 。

** 三、 ** ** 归档模式下的完全介质恢复 **

1、 关闭状态下的完全恢复

SQL>SHUTDOWN ABORT (如果数据库处于打开状态,将它强行关闭)

将数据文件恢复到原来的位置上,如果介质故障无法排除,需要将数据文件恢复到其它位置上;

利用备份修复丢失或损坏的数据文件,也可利用 ALTER DATABASE CREATE DATAFILE 语句重建一个空白的数据文件替换对视或损坏的数据文件;

SQL>STARTUP MOUNT

如果修复后的数据文件不在原来的位置上,需要使用 ALTER DATABASE RENAME FILE …TO … 语句在控制文件中更新它们的信息

SQL>SELECT name,status FROM V$DATAFILE; 查询数据文件的名称和状态

SQL>ALTER DATABASE DATAFILE … ONLINE; 将脱机数据文件改未联机

SQL>RECOVER DATABASE 或 SQL>RECOVER TABLESPACE users

或 SQL>RECOVER DATAFILE ‘I:\ora9i\oradata\users0.dbf;

SQL>ALTER DATABASE OPEN;

2、 打开状态下的完全介质恢复

SQL>SELECT d.file# f#,d.name,d.status,h.status from v$datafile d,v$datafile_header h

WHERE d.file#=h.file#; 查询哪些数据文件被自动设置为脱机状态;

SQL>ALTER TABLESPACE users OFFLINE TEMPORARY; 将包含损坏数据文件的表空间设置为脱机状态;

将数据文件恢复到原来的位置上,如果介质故障无法排除,需要将数据文件恢复到其它位置上;

利用备份修复丢失或损坏的数据文件;

如果修复后的数据文件不在原来的位置上,需要使用 ALTER DATABASE RENAME FILE …TO … 语句在控制文件中更新它们的信息

SQL>RECOVER TABLESPACE users AUTOMATIC 对包含损坏数据文件的脱机表空间进行恢复;

SQL>ALTER TABLESPACE users ONLINE;

** 四、 ** ** 归档模式下的不完全介质恢复 **

1、 不完全恢复的操作准则;

在恢复前后都对数据库进行完全备份

完成不完全介质恢复后,检查数据库是否已经恢复到了目标时刻下的状态;

完成不完全介质恢复后,将归档重做日志文件移动到其它位置保存。

2、 基于时间的不完全恢复

对数据库进行一次完全备份,包括控制文件和所有的联机重做日志文件

SQL>SHUTDOWN ABORT

确定不完全介质恢复的目标时间,即你需要将数据库恢复到哪个时刻下的状态,然后确定需要使用哪些备份来对数据进行修复,数据库修复所使用的控制文件备份应当能够正确反映出目标时刻下数据库的物理结构,所使用的数据文件备份应当是在目标时刻之前创建的,而且必须修复所有的数据文件,

如果没有在目标时刻之前建立的数据文件备份,需要重新创建空白的数据文件

如果在数据库中包含在目标时刻之后建立的数据文件,不要对这个数据文件进行修复,因为在完成不完全恢复后的数据库中根本不应当存在这个数据文件;

将数据文件恢复到原来的位置上,如果介质故障无法排除,则恢复到其它位置上;

利用选定的备份文件修复所有的控制文件和数据文件;

SQL>STARTUP MOUNT 启动实例并加载数据库;

如果修复后的数据文件不在它们原来的位置上,需使用 ALTER DATABASE RENAME FILE … TO … 语句在控制文件中更新它们的信息;

SQL>SELECT name,status FROM V$DATAFILE; 确定所有数据文件都处于联机

SQL>ALTER DATABASE DATAFILE … ONLINE ;将数据文件恢复为联机;

SQL>RECOVER DATABASE UNTIL TIME ‘2004-02-01:12:30:30’

如果控制文件是利用备份修复的,必须在 RECOVER 名利中指定 USING BACKUP CONTROLFILE 子句;

SQL>ALTER DATABASE OPEN RESETLOGS;

立即对数据库进行一次完全备份。

3、 基于撤销的不完全恢复

SQL>RECOVER DATABASE UNTIL CANCEL

其它步骤同基于时间的不完全恢复

4、 基于 SCN 的不完全恢复

在进行基于 SCN 的不完全恢复时, oracle 会在应用了所有具有小于等于指定 SCN 的事务的重做记录之后终止恢复过程

** RESETLOGS ** ** 选项 **

在如下三种情况下,必须使用 RESETLOGS 选项打开数据库:

1、 在执行任何类型的不完全介质恢复之后;

2、 在使用备份修复控制文件后(在 RECOVER 命令中使用 USING BACKUP CONTROLFILE 子句);

在没有联机重做日志文件备份的情况下对不归档数据库进行完全恢复之后。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus