ORACLE热备份恢复手册
1. 概要
1.1. 本文的目的
为了模拟测试oracle热备份的各种恢复情况,同时给以后工程人员一些实施借鉴,特地整理了本文档,在其中记录各种恢复的情况,以方便恢复时使用。
1.2. 系统概况
系统环境:hp unix11 oracle 9201
数据情况:一个系统文件、3个联机日志、一个回滚段表空、一个undo表空间、其他的数据文件,数据库当前使用undo。
备份方式:热备份
备份文件:数据文件、归档日志、控制文件、初始化文件。
2. 恢复情况介绍
2.1. 模拟回滚表空间损坏丢失
当初设计时系统就同时并存了两种回滚段管理模式,目的就是当其中的一个出现问题的话,就可以立刻恢复。Undo与8i时回滚段比,它的优势是自动管理回滚段,简化了管理工作。
下面介绍回滚表空间数据文件损坏时的恢复方式:
假设在undo表空间数据文件损坏时拥有所有的备份,系统存在回滚段表空间。
在数据库运行状态下删除undo表空间数据文件。
此时如果向数据库中写入数据,会出现如下错误:
SQL> exec sp_insert_del;
BEGIN sp_insert_del; END;
*
ERROR at line 1:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/opt/oradata/openview/RBS2_1.dbf'
ORA-27041: unable to open file
HP-UX Error: 2: No such file or directory
Additional information: 3
ORA-06512: at "DBBACKUP.SP_INSERT_DEL", line 9
ORA-06512: at line 1
此时需要作的是修改数据库初始化参数,将他修改成为使用rollback_segment,同时将数据库加载,
SQL>startup mount pfile ='/opt/oracle/admin/openview/initopenview.ora'
然后删除回滚表空间的数据文件
SQL>alter database defile 4 offline off;
SQL>alter database open;
但是数据库启动后,察看如下信息,发现有大量属于回滚表空间的回滚段
SQL>select * from dba_rollback_segs;
此时如果想恢复原来的回滚表空间,需要修改初始化文件,在其中加入隐含参数_CORRUPTED_ROLLBACK_SEGMENTS,在其中加入回滚表空间的回滚段后,重新启动数据库,然后删除回滚表空间
SQL>drop tablespace undo2 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
重新创建回滚表空间后,修改初始化参数后,然后重新启动数据库即可。
总结:当回滚表空间发生损坏时,需要将系统重新启动,这是必须的,对于24小时系统来说,这无疑是极为不利的一种情况,在这种情况下,需要的是双机热备的系统来保证系统24小时不间断运行。当出现系统崩溃的情况时,毫无疑问,需要备份机立即切换来保证系统运行,然后及时恢复生产系统。
2.2. 模拟非系统数据文件丢失
当非系统数据文件损坏时,有三种恢复方式,一种是拥有数据文件备份、归档日志备份以及其他的相关文件,此时可以做到的是完全的恢复;一种是有数据文件备份,但是归档日志不全;一种是没有数据文件备份,此时就需要将系统down下,然后恢复。
下面介绍第一种情况的恢复:
在数据库运行状态下删除数据文件,如果此时系统没有down机,那么采用以下方式恢复
SQL> alter database datafile '/opt/oradata/openview/ts_iptool_1.dbf' offline;
Database altered.
将备份文件拷贝回来,将数据文件online,提示需要恢复数据文件。
SQL> alter database datafile '/opt/oradata/openview/ts_iptool_1.dbf' online;
alter database datafile '/opt/oradata/openview/ts_iptool_1.dbf' online
*
ERROR at line 1:
ORA-01113: file 19 needs media recovery
ORA-01110: data file 19: '/opt/oradata/openview/ts_iptool_1.dbf'
执行媒体恢复,可以将数据文件online,由于有所有的归档日志和联机日志都存在,因此没有数据丢失。
SQL> recover datafile '/opt/oradata/openview/ts_iptool_1.dbf';
Media recovery complete.
SQL> alter database datafile '/opt/oradata/openview/ts_iptool_1.dbf' online;
Database altered.
总结:在数据库运行状态下,如果有数据文件损坏不能读取时,数据库不至于down下,此时如果发现的话,在拥有所有备份和归档日志、联机日志的情况下,可以及时恢复。
当数据库已经宕下时,需要在数据加载时恢复,将数据文件拷贝到正确的位置后,恢复步骤如下:
SQL> startup mount
SQL> recover database;
SQL>alter database open;
总结:在这种情况下,对于24小时系统来说是一个损失,为了保证系统的正确运行,需要双机备份来保证系统的高可用性。
仅仅拥有数据文件和部分归档日志的恢复:
如果数据库处于打开状态时,先将数据文件offline