各种情况下数据库恢复方式以及能否进行完全恢复
前提:已对数据库使用rman进行全库备份
1 仅丢失数据文件
可进行完全恢复、
恢复方法:
sql>startup mount;
rman>restore database;
rman>recover database;
sql>alter database open;
2 仅重做日志文件损坏
不能进行完全恢复,重做日志文件中的数据会丢失
恢复方法:
sql>startup mount;
sql>recover database until cancel;
sql>alter database open resetlogs;
3 丢失数据文件、控制文件、重做日志文件或者只丢失控制文件
不能进行完全恢复,重做日志文件中的数据会丢失
如果系统中存在多个实例,需要先设置环境变量
$export ORACLE_SID=oms
sql>startup --当前数据库只能启动到nomount状态
rman>restore controlfile from autobackup;--恢复控制文件
sql>alter database mount
rman>restore database;
sql>recover database using backup controlfile entil cancel;
sql>alter database open resetlogs;
4 丢失数据文件、重做日志文件、控制文件、初始化文件
不能进行完全恢复,重做日志文件中数据会丢失
如果系统中有多个实例,先设置环境变量
$export ORACLE_SID=oms
先使用安装数据库时产生的pfile文件启动数据库到nomount状态
sql>startup pfile='/u01/app/oracle/admin/oms/pfile/init.ora.210201018935';
然后进入rman环境恢复初始化文件
rman>restore spfile from autobackup;
关闭数据库,使用默认的spfile启动数据库
sql>shutdown abort;
sql>startup nomount;
进入rman环境恢复控制文件
rman>restore controlfile from autobackup;
sql>alter database mount;
rman>restore database;
sql>recover database using backup controlfile entil cancel;
sql>alter database open resetlogs;
5 数据库运行正常,但是想恢复到某一时间点时的状态
首先关闭数据库
rman>startup mount
rman>restore database
rman>sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"';
rman>recover database until time '20130706 06:30:38';
sql>alter database open resetlogs;
6 恢复数据库到某个SCN
SCN:system change number,系统改变号;
查询当前系统scn号
sql>select dbms_flashback.get_system_change_number from dual;
查看scn对应的时间
sql>select to_char(scn_to_timestamp(963959),'yyyy-mm-dd hh24:mi:ss') from dual;
可以从sys.smon_scn_time表查找某个时间对应的scn号
查看时间对应的scn
sql>select timestamp_to_scn(to_date('2013-07-06 08:00:01','yyyy-mm-dd hh24:mi:ss')) from dual;
恢复到scn1164808
sql>shutdown immediate
rman>startup mount
rman>restore database
rman>recover database until scn 1164808
rman>sql 'alter database open resetlogs';