这部分描述了在数据库没有打开的情况执行完全恢复。
可以在一个操作中恢复所有损坏的数据文件,也可以在单独的操作中,执行每个损坏的数据文件的个别的恢复。
练习:还原和恢复损坏的或丢失的数据文件
|
--1. 如果数据库是OPEN状态,查询V$RECOVER_FILE来确定哪一个数据文件必须被恢复和为什么被恢复。 -- 如果你计划执行完全恢复而不是时间点恢复,则可以只恢复需要恢复的数据文件,而不是整个数据库。 -- 对于时间点恢复,必须还原和恢复所有的数据文件,除非执行的是TSPITR。 -- 也可以使用闪回数据库,但闪回数据库也是影响所有的数据文件并回退整个数据库到过去的时间点。 -- 可以查询V$RECOVER_FILE视图,列出需要恢复的数据文件的编号、状态和错误信息 SELECT FILE#, ERROR, ONLINE_STATUS, CHANGE#, TIME FROM V$RECOVER_FILE;
--注意:你不能在介质失败影响到了数据文件之后,在控制文件是被还原的或重新创建的情况下, 使用V$RECOVER_FILE. -- 因为被还原的或重新创建的控制文件不包含更新V$RECOVER_FILE视图所需要的准确的信息。
-- 也可以对V$DATAFILE和V$TABLESPACE视图通过文件编号进行连接操作,来查看数据文件和表空间的名称。 -- ERROR列列出了每个需要恢复的数据文件的问题。 COL DF# FORMAT 999 COL DF_NAME FORMAT A35 COL TBSP_NAME FORMAT A7 COL STATUS FORMAT A7 COL ERROR FORMAT A10 COL CHANGE# FORMAT 99999999 SELECT r.FILE# AS df#, d.NAME AS df_name, t.NAME AS tbsp_name, d.STATUS, r.ERROR, r.CHANGE#, r.TIME FROM V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t WHERE t.TS# = d.TS# AND d.FILE# = r.FILE#;
--2. 查询V$ARCHIVED_LOG和V$RECOVERY_LOG视图,确定哪些归档重做日志文件是需要的。 -- V$ARCHIVED_LOG列出所有的归档重做日志的文件名,而V$RECOVERY_LOG只列出数据库执行介质恢复所需要的归档重做日志。 -- V$RECOVERY_LOG也包含可能的文件的名称,这个名称基于通过LOG_ARCHIVE_FORMAT参数指定的命名的惯例。 -- 注意:V$RECOVERY_LOG只有在数据文件需要介质恢复的时候才被填充. 因此这个视图对于计划的恢复是没用的,例如从用户错误的恢复. -- 如果数据文件需要恢复,但数据文件的备份不存在,则你需要从数据文件被添加到数据库开始后产生的所有redo信息。
--3. 如果所有的归档日志在默认的位置可用,则跳转到第4步 -- 如果一些归档日志必须被还原并且有足够的空间可以被使用,则还原需要的归档重做日志文件到LOG_ARCHIVE_DEST_1参数指定的位置 -- 当在介质恢复的过程中数据库会自动定位正确的日志文件. -- 如果没有足够的空间则可以还原部分或所有的归档重做日志文件到其它的位置. cp /disk2/arch/* $ORACLE_HOME/oradata/trgt/arch
--4. 如果数据库处于打开状态,则关闭数据库 SHUTDOWN IMMEDIATE --5. 检查介质确定问题的来源.如果引起介质失败的硬件问题是暂时的并且如果数据并没有损坏(如磁盘或控制器电源失败),则不需要介质恢复 -- 打开数据库,恢复正常的操作. 如果不能修复问题,则继续第6步 --6. 如果数据文件永久地损坏了,则找到损坏的文件的最近的备份,只还原被介质失败损坏的数据文件.不要还原未损坏的数据文件或联机重做日志. -- 例如ORACLE_HOME/oradata/trgt/users01.dbf是唯一损坏的数据文件,并且找到/backup/users01_10_24_02.dbf是该文件最近的备份 --7. 使用操作系统工具来还原数据文件到默认的位置 cp /backup/users01_10_24_06.dbf $ORACLE_HOME/oradata/trgt/users01.dbf -- 使用下面的指导来确定将数据文件恢复到哪里 -- a. 如果硬件问题被修复了,则可以还原数据文件到默认的位置,然后还原归档重做日志到默认的位置并开始恢复。 -- b. 如果硬件问题仍然存在,就不以还原数据文件到原始的位置,则需要还原数据文件到一个替代的存储设备, -- 使用ALTER DATABASE RENAME FILE通知控制文件这些文件新位置. -- c. 如果还原数据文件到裸设备或分区,则使用的技术与还原文件到文件系统是类似的。 -- 要清楚文件在裸设备上的命名的惯例并使用支持裸设备的操作系统工具 --8. 使用管理员权限连接到数据库,然后MOUNT数据库但不OPEN STARTUP MOUNT --9. 如果还原一个或多个数据文件到替代的位置,然后更新控制文件来反映新的数据文件的名称. ALTER DATABASE RENAME FILE '?/oradata/trgt/users01.dbf' TO '/disk2/users01.dbf'; --10. 获得所有数据文件的名称和状态,这些文件通常和控制文件在一起,也可以查询V$DATAFILE视图 SELECT NAME,STATUS FROM V$DATAFILE; --11. 确定所有需要恢复的数据文件联机. 唯一的例外是被正常脱机的表空间中的数据文件或只读表空间中的数据文件. ALTER DATABASE DATAFILE '/oracle/dbs/tbs_10.f' ONLINE; -- 如果指定的数据文件已经联机,则数据库会忽略这个语句. 如果希望创建一个脚本来使所有的一次全部联机 SPOOL onlineall.sql SELECT 'ALTER DATABASE DATAFILE '''||name||''' ONLINE;' FROM V$DATAFILE; SPOOL OFF
SQL> @onlineall --12. 如果还原归档日志文件到替代的位置,则可以在介质恢复之前使用SET LOGSOURCE命令指定新的位置 -- 也可以跳过该步,在RECOVER命令中直接指定位置. 注意:覆盖redo log source不会影响到正在被归档的联机重做日志组的归档重做日志目的地。
SET LOGSOURCE /tmp --13. 恢复数据库、表空间、数据文件 --13.1 整个数据库 RECOVER AUTOMATIC DATABASE --13.2 恢复指定的表空间 RECOVER AUTOMATIC TABLESPACE users --13.3 恢复指定的数据文件 RECOVER AUTOMATIC DATAFILE '?/oradata/trgt/users01.dbf'; -- 如果没有选择自动应用归档重做日志,则必须接受或拒绝每一个提示的日志.如果进行自动恢复,则数据库会自动地应用日志. -- 恢复继续进行,只到所有需要归档日志和联机重做日志已经被应用到被还原的数据文件.当介质恢复结束后,数据库会给出通知. Media recovery complete. --如果不需要归档重做日志来完成介质恢复,则数据会应用所有必要的联机重做日志文件并且结束恢复. --14. 恢复结束之后,打开数据库 ALTER DATABASE OPEN; --15. 在归档日志被应用并确定每个归档日志文件在脱机的存储上仍然存在后,就可以删除还原的归档日志文件的备份来释放空间了. $ rm /tmp/*.arc |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1101151/ ,如需转载,请注明出处,否则将追究法律责任。