执行完全介质恢复有以下三个步骤:
1、启动数据库到加载状态:
RMAN> STARTUP MOUNT;
2、执行恢复操作(恢复分两步,有先有后的)
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP;
3、打开数据库:
RMAN> ALTER DATABASE OPEN;
恢复表空间
RMAN> SQL 'ALTER TABLESPACE jweb OFFLINE IMMEDIATE';
RMAN> RESTORE TABLESPACE jweb;
RMAN> RECOVER TABLESPACE jweb;
RMAN> SQL 'ALTER TABLESPACE jweb ONLINE';
恢复数据文件
RMAN>SQL 'ALTER DATABASE DATAFILE 10 OFFLINE';
RMAN> RESTORE DATAFILE 10;
RMAN> RECOVER DATAFILE 10;
RMAN>SQL 'ALTER DATABASE DATAFILE 10 ONLINE';
如果由于磁盘损坏导致数据文件无法访问,那么恢复时数据文件可能无法再恢复到原路径,
必须在执行RESTORE命令之前,给数据文件指定新的路径,方式如下:
RMAN>SQL 'ALTER DATABASE DATAFILE 3 OFFLINE;
RMAN> RUN {
2>SET NEWNAME FOR DATAFILE 3 to 'f:\oracle\oradata \newdb\sysaux01.dbf';
3>RESTORE DATAFILE 3;
4>SWITCH DATAFILE 3;
5>RECOVER DATAFILE 3;
6> }
RMAN>SQL 'ALTER DATABASE DATAFILE 3 ONLINE;
恢复归档日志文件
RMAN> RESTORE ARCHIVELOG SEQUENCE BETWEEN 20 AND 30;
默认情况下,RMAN将归档文件恢复到初始化参数LOG_ARCHIVE_DEST_1指定的路径下,
有时候我们希望将恢复出来的归档文件存储到其他路径下,而不要与当前系统正在生成的归档文件混在一起,
那么可以在执行RESTORE命令前,通过SET ARCHIVELOG DESTINATION TO命令设置归档的新路径,
例如:
RMAN>
RUN{
2>SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG';
3> RESTORE ARCHIVELOG SEQUENCE BETWEEN 35 AND 40;
4> }
这样,恢复出来的SEQUENCE序号为35~40的归档文件就将被存储到F:\oracle\backup\arclog目录下。
同一个RUN块中允许同时出现多个SET ARCHIVELOG命令,也就是说可以通过在不同位置设置不同的归档路径的方式,
将归档恢复到不同的目录,例如:
RMAN> RUN{
2> SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG1';
3> RESTORE ARCHIVELOG SEQUENCE BETWEEN 15 AND 20;
4> SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG2';
5> RESTORE ARCHIVELOG SEQUENCE BETWEEN 21 AND 30;
6> SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG3';
7> RESTORE ARCHIVELOG SEQUENCE BETWEEN 31 AND 40;
8> }
恢复控制文件
从自动备份中恢复
RMAN> SET DBID=1415261003;
RMAN>STARTUP NOMOUNT
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
执行上述语句后,备份集中的控制文件会被恢复到初始化参数CONTROL_FILES指定的路径下。
恢复至指定路径下:
RMAN> RESTORE CONTROLFILE to 'f:\oracle\newdb\control01.ctl' FROM AUTOBACKUP;
RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ' F:\ORACLE\BACKUP\%F';
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> SET DBID=1415261003;
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM 'f:\oracle\backup\c-1415261003-20090413-00';
RMAN>SQL 'ALTER DATABASE OPEN RESETLOGS';
恢复服务器端初始化参数文件(SPFILE)
在启动数据库之前,必须首先通过SET命令设置DBID:
RMAN> SET DBID=1415261003;
启动数据库到NOMOUNT状态:
RMAN> STARTUP NOMOUNT;
初始化参数文件默认保存在$ORACLE_HOME\database或$ORACLE_HOME\db目录下,当然你也可以手动指定路径,既可以指定恢复到的路径,
也可以同时指定备份文件的路径,例如:
RMAN> RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM AUTOBACKUP;
或
RMAN>RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM ' /data/orabackup/c-1415261003-20090413-00';
注 意
执行恢复操作时如果实例正在运行中,就不能覆盖当前的SPFILE,但可以通过TO子句将SPFILE恢复到其他路径下。
归档模式有备份,丢失数据文件的恢复
丢失数据文件后下一次启动时只能停留在MOUNT状态
执行恢复
SET ORACLE_SID=jssbook
RMAN TARGET /
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
RMAN> ALTER DATABASE OPEN;
归档模式无备份,丢失数据文件的恢复
1、用户管理的备份和恢复方式
执行修复
首先要通过ALTER DATABASE CREATE DATAFILE命令重建一个该文件,如果是由于磁盘损坏导致的数据文件丢失,
可能原路径已经无法访问,可以在创建数据文件时,指定一个新的路径。当然这里由于是模拟丢失,原路径仍然可用,
因此仍然在原路径下创建同名文件:
SQL> ALTER DATABASE CREATE DATAFILE 'F:\ORACLE\ORADATA \JSSBOOK\BOOKS01.DBF'
2 as 'F:\ORACLE\ORADATA\JSSBOOK\BOOKS01.DBF';
SQL> RECOVER DATAFILE 6;
2、运用RMAN方式进行恢复
RMAN> RESTORE DATAFILE 6;
RMAN> RECOVER DATAFILE 6;
RMAN> alter database open;
丢失控制文件的恢复
目标数据库控制文件丢失,无法启动到MOUNT状态,此处必须首先指定DBID:
RMAN> SET DBID=1415261003
前面创建备份时都是在NOCATALOG模式下进行的,因此备份信息、备份设置等都是存储在目标数据库的控制文件中,
现在控制文件丢失,相当于前面的一些配置也丢失了,
用SHOW ALL命令查看,可见所有配置均恢复成了默认值,例如:
RMAN> SHOW ALL;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
ONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
此时要恢复控制文件,不能直接使用RESTORE CONTROLFILE FROM AUTOBACKUP命令,
因为自动备份的设置也丢失了,并且此时也是在NOCATALOG模式下,
无法配置CONTROLFILE AUTOBACKUP的相关属性,因此选择显式指定控制文件备份集的方式恢复控制文件。执行命令如下:
RMAN> RESTORE CONTROLFILE FROM 'f:\oracle\backup
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
丢失非当前的联机重做日志文件
查询当前的联机重做日志,例如:
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,MEMBERS,ARCHIVED, STATUS FROM V$LOG;
注意该视图中的STATUS列,该列标识的联机重做日志组的状态,共有6个可选值:
UNUSED:表示重未用过。一般刚刚创建或OPEN RESETLOGS打开后,联机重做日志组为这一状态。
CURRENT:表示当前的。
ACTIVE:表示活动的。虽然不是当前状态,但也有可能正被使用或要被使用,比如CRASH RECOVERY时可能存在这种状态的联机重做日志组。
CLEARING:日志正在清空,当执行ALTER DATABASE CLEAR LOGFILE语句时该日志组会变为这种状态,语句执行完后,操作的日志组状态变为UNUSED。
CLEARING_CURRENT:日志正在清空,但是由于清空时出错如I/O设备无法访问,导致清空工作不能顺序完成,则该日志组就会被置于这种状态。
INACTIVE:不活动状态,表示该组日志中的内容已经被归档或顺利写入数据文件,该组日志可被继续重用。
从上述查询结果中可以看出,GROUP 3的联机重做日志组为当前状态,然后再查询V$lOGFILE视图,即可看到联机重做日志组对应的日志文件了:
SQL> SELECT GROUP#,MEMBER FROM V$LOGFILE;
开始恢复
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
SQL> ALTER DATABASE OPEN;
非当前的联机重做日志文件损坏,其修复过程还是很简单的,并且操作过程安全,不会造成数据丢失。
丢失当前的联机重做日志文件
SQL> SHUTDOWN ABORT
SQL> STARTUP MOUNT;
SQL> host del F:\ORACLE\ORADATA\JSSBOOK\REDO03.LOG
SQL> ALTER DATABASE OPEN;
尝试直接修复联机重做日志文件
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;
丢失的重做日志文件中包含必备的重做信息,无法被CLEAR。
执行不完全恢复
ALTER SYSTEM SET "_ALLOW_RESETLOGS_CORRUPTION"= TRUE SCOPE=SPFILE;
ALLOW_RESETLOGS_CORRUPTION是一个隐藏参数,设置该参数值为TRUE后,Oracle在OPEN时会跳过一些一致性的检查。
SQL> startup mount
对数据库进行不完全恢复:
SQL> RECOVER DATABASE UNTIL CANCEL;
SQL> ALTER DATABASE OPEN RESETLOGS;
强烈建议马上通过EXPORT逻辑导出的方式执行一次FULL EXPORT。然后新建数据库,再通过IMPORT导入之前导出的二进制文件。
1、启动数据库到加载状态:
RMAN> STARTUP MOUNT;
2、执行恢复操作(恢复分两步,有先有后的)
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE DELETE ARCHIVELOGS SKIP TABLESPACE TEMP;
3、打开数据库:
RMAN> ALTER DATABASE OPEN;
恢复表空间
RMAN> SQL 'ALTER TABLESPACE jweb OFFLINE IMMEDIATE';
RMAN> RESTORE TABLESPACE jweb;
RMAN> RECOVER TABLESPACE jweb;
RMAN> SQL 'ALTER TABLESPACE jweb ONLINE';
恢复数据文件
RMAN>SQL 'ALTER DATABASE DATAFILE 10 OFFLINE';
RMAN> RESTORE DATAFILE 10;
RMAN> RECOVER DATAFILE 10;
RMAN>SQL 'ALTER DATABASE DATAFILE 10 ONLINE';
如果由于磁盘损坏导致数据文件无法访问,那么恢复时数据文件可能无法再恢复到原路径,
必须在执行RESTORE命令之前,给数据文件指定新的路径,方式如下:
RMAN>SQL 'ALTER DATABASE DATAFILE 3 OFFLINE;
RMAN> RUN {
2>SET NEWNAME FOR DATAFILE 3 to 'f:\oracle\oradata \newdb\sysaux01.dbf';
3>RESTORE DATAFILE 3;
4>SWITCH DATAFILE 3;
5>RECOVER DATAFILE 3;
6> }
RMAN>SQL 'ALTER DATABASE DATAFILE 3 ONLINE;
恢复归档日志文件
RMAN> RESTORE ARCHIVELOG SEQUENCE BETWEEN 20 AND 30;
默认情况下,RMAN将归档文件恢复到初始化参数LOG_ARCHIVE_DEST_1指定的路径下,
有时候我们希望将恢复出来的归档文件存储到其他路径下,而不要与当前系统正在生成的归档文件混在一起,
那么可以在执行RESTORE命令前,通过SET ARCHIVELOG DESTINATION TO命令设置归档的新路径,
例如:
RMAN>
RUN{
2>SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG';
3> RESTORE ARCHIVELOG SEQUENCE BETWEEN 35 AND 40;
4> }
这样,恢复出来的SEQUENCE序号为35~40的归档文件就将被存储到F:\oracle\backup\arclog目录下。
同一个RUN块中允许同时出现多个SET ARCHIVELOG命令,也就是说可以通过在不同位置设置不同的归档路径的方式,
将归档恢复到不同的目录,例如:
RMAN> RUN{
2> SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG1';
3> RESTORE ARCHIVELOG SEQUENCE BETWEEN 15 AND 20;
4> SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG2';
5> RESTORE ARCHIVELOG SEQUENCE BETWEEN 21 AND 30;
6> SET ARCHIVELOG DESTINATION TO 'F:\ORACLE\BACKUP\ARCLOG3';
7> RESTORE ARCHIVELOG SEQUENCE BETWEEN 31 AND 40;
8> }
恢复控制文件
从自动备份中恢复
RMAN> SET DBID=1415261003;
RMAN>STARTUP NOMOUNT
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
执行上述语句后,备份集中的控制文件会被恢复到初始化参数CONTROL_FILES指定的路径下。
恢复至指定路径下:
RMAN> RESTORE CONTROLFILE to 'f:\oracle\newdb\control01.ctl' FROM AUTOBACKUP;
RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ' F:\ORACLE\BACKUP\%F';
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> SET DBID=1415261003;
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM 'f:\oracle\backup\c-1415261003-20090413-00';
RMAN>SQL 'ALTER DATABASE OPEN RESETLOGS';
恢复服务器端初始化参数文件(SPFILE)
在启动数据库之前,必须首先通过SET命令设置DBID:
RMAN> SET DBID=1415261003;
启动数据库到NOMOUNT状态:
RMAN> STARTUP NOMOUNT;
初始化参数文件默认保存在$ORACLE_HOME\database或$ORACLE_HOME\db目录下,当然你也可以手动指定路径,既可以指定恢复到的路径,
也可以同时指定备份文件的路径,例如:
RMAN> RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM AUTOBACKUP;
或
RMAN>RESTORE SPFILE TO '/tmp/spfileTEMP.ora' FROM ' /data/orabackup/c-1415261003-20090413-00';
注 意
执行恢复操作时如果实例正在运行中,就不能覆盖当前的SPFILE,但可以通过TO子句将SPFILE恢复到其他路径下。
归档模式有备份,丢失数据文件的恢复
丢失数据文件后下一次启动时只能停留在MOUNT状态
执行恢复
SET ORACLE_SID=jssbook
RMAN TARGET /
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
RMAN> ALTER DATABASE OPEN;
归档模式无备份,丢失数据文件的恢复
1、用户管理的备份和恢复方式
执行修复
首先要通过ALTER DATABASE CREATE DATAFILE命令重建一个该文件,如果是由于磁盘损坏导致的数据文件丢失,
可能原路径已经无法访问,可以在创建数据文件时,指定一个新的路径。当然这里由于是模拟丢失,原路径仍然可用,
因此仍然在原路径下创建同名文件:
SQL> ALTER DATABASE CREATE DATAFILE 'F:\ORACLE\ORADATA \JSSBOOK\BOOKS01.DBF'
2 as 'F:\ORACLE\ORADATA\JSSBOOK\BOOKS01.DBF';
SQL> RECOVER DATAFILE 6;
2、运用RMAN方式进行恢复
RMAN> RESTORE DATAFILE 6;
RMAN> RECOVER DATAFILE 6;
RMAN> alter database open;
丢失控制文件的恢复
目标数据库控制文件丢失,无法启动到MOUNT状态,此处必须首先指定DBID:
RMAN> SET DBID=1415261003
前面创建备份时都是在NOCATALOG模式下进行的,因此备份信息、备份设置等都是存储在目标数据库的控制文件中,
现在控制文件丢失,相当于前面的一些配置也丢失了,
用SHOW ALL命令查看,可见所有配置均恢复成了默认值,例如:
RMAN> SHOW ALL;
using target database control file instead of recovery catalog
RMAN configuration parameters are:
ONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
此时要恢复控制文件,不能直接使用RESTORE CONTROLFILE FROM AUTOBACKUP命令,
因为自动备份的设置也丢失了,并且此时也是在NOCATALOG模式下,
无法配置CONTROLFILE AUTOBACKUP的相关属性,因此选择显式指定控制文件备份集的方式恢复控制文件。执行命令如下:
RMAN> RESTORE CONTROLFILE FROM 'f:\oracle\backup
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
丢失非当前的联机重做日志文件
查询当前的联机重做日志,例如:
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,MEMBERS,ARCHIVED, STATUS FROM V$LOG;
注意该视图中的STATUS列,该列标识的联机重做日志组的状态,共有6个可选值:
UNUSED:表示重未用过。一般刚刚创建或OPEN RESETLOGS打开后,联机重做日志组为这一状态。
CURRENT:表示当前的。
ACTIVE:表示活动的。虽然不是当前状态,但也有可能正被使用或要被使用,比如CRASH RECOVERY时可能存在这种状态的联机重做日志组。
CLEARING:日志正在清空,当执行ALTER DATABASE CLEAR LOGFILE语句时该日志组会变为这种状态,语句执行完后,操作的日志组状态变为UNUSED。
CLEARING_CURRENT:日志正在清空,但是由于清空时出错如I/O设备无法访问,导致清空工作不能顺序完成,则该日志组就会被置于这种状态。
INACTIVE:不活动状态,表示该组日志中的内容已经被归档或顺利写入数据文件,该组日志可被继续重用。
从上述查询结果中可以看出,GROUP 3的联机重做日志组为当前状态,然后再查询V$lOGFILE视图,即可看到联机重做日志组对应的日志文件了:
SQL> SELECT GROUP#,MEMBER FROM V$LOGFILE;
开始恢复
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
SQL> ALTER DATABASE OPEN;
非当前的联机重做日志文件损坏,其修复过程还是很简单的,并且操作过程安全,不会造成数据丢失。
丢失当前的联机重做日志文件
SQL> SHUTDOWN ABORT
SQL> STARTUP MOUNT;
SQL> host del F:\ORACLE\ORADATA\JSSBOOK\REDO03.LOG
SQL> ALTER DATABASE OPEN;
尝试直接修复联机重做日志文件
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;
丢失的重做日志文件中包含必备的重做信息,无法被CLEAR。
执行不完全恢复
ALTER SYSTEM SET "_ALLOW_RESETLOGS_CORRUPTION"= TRUE SCOPE=SPFILE;
ALLOW_RESETLOGS_CORRUPTION是一个隐藏参数,设置该参数值为TRUE后,Oracle在OPEN时会跳过一些一致性的检查。
SQL> startup mount
对数据库进行不完全恢复:
SQL> RECOVER DATABASE UNTIL CANCEL;
SQL> ALTER DATABASE OPEN RESETLOGS;
强烈建议马上通过EXPORT逻辑导出的方式执行一次FULL EXPORT。然后新建数据库,再通过IMPORT导入之前导出的二进制文件。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23513800/viewspace-664865/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23513800/viewspace-664865/