一、完全恢复
前提条件
a、要有全备份
b、要有全备份以来所有的归档日志、当前的联机日志和当前的控制文件。
1、recover database;
适用条件:
a、数据库处于mount 状态
b、多个数据文件需要恢复
2、recover tablespace data_tbs;
a、数据处于OPEN和MOUNT状态都可以,但必须保证data_tbs处于脱机状态(只有在OPEN状态下,才能使data_tbs脱机)
b、表空间内多个数据文件需要恢复
c、由于SYSTEM、UNDO表空间不能脱机,所以不能用此命令恢复
3、recover datafile '/oradata/orcl/data.dbf';
a、数据库处于MOUNT和OPEN状态都可以
b、数据库处于MOUNT状态时,数据文件处于联机和脱机状态都可以,数据库处于OPEN状态时,数据文件必须处于 脱机状态
二、不完全恢复
前提条件
a、必须备份好,当前数据库的数据文件、控制文件、日志文件,以防止第一次不完全恢复不成功。
b、在进行恢复前,必须复制所以备份的数据文件
c、不完全恢复成功后,必须以RESETLOGS方式打开数据库
1、基于时间点的恢复
recover database until time '2008-07-31 11:20:20';
2、基于取消的恢复
recover database until cancel;
3、基于SCN的恢复
recover database until change SCN;
4、基于备份控制文件的恢复
recover database ...using backup controlfile;
三、控制文件的恢复
1、利用创建的控制文件副本
a、在操作系统下,直接拷贝副本至目标位置,再利用基本备份控制文件的恢复的方式来恢复
2、重建控制文件
a、启动数据库处于NOMOUNT状态下
b、创建脚本,重建控制文件如下:
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/orcl/redo01.log' SIZE 50M,
GROUP 2 '/oradata/orcl/redo02.log' SIZE 50M,
GROUP 3 '/oradata/orcl/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oradata/orcl/system01.dbf',
'/oradata/orcl/undotbs01.dbf',
'/oradata/orcl/sysaux01.dbf',
'/oradata/orcl/users01.dbf',
'/oradata/orcl/data.dbf',
'/oradata/orcl/data_tmp.dbf'
CHARACTER SET UTF8
;
RECOVER DATABASE
ALTER DATABASE OPEN;
c、在nomount状态下,执行上命令
四、日志文件的恢复
1、如果日志组中有多个成员,其中一个日志文件损坏可以用先删除,后增加的方法就可以了
a、alter database drop logfile member '/oradata/orcl/redo1.log' ; //删除日志
b、alter database add logfile member '/oradata/orcl/redo1.log' to group 1;//增加新日志
2、如果日志组中所有成员都损坏
a、重启数据库至MOUNT状态下
b、select * from v$logfile; //查看日志信息
c、select * from v$log //查看日志的状态
d、如果日志是非当前状态
alter database clear logfile group 1; //已经归档
alter database clear unarchived logfile group 1; //未归档
e、如果日志是当前(current)状态
e1、数据库正常关闭
alter database until cancel;
alter database open resetlogs;
e2、数据库非正常关闭,只能做不完全的恢复。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14873291/viewspace-416175/ ,如需转载,请注明出处,否则将追究法律责任。