不完全恢复
指的恢复到某一个时间点,在这个时间点scn之后的操作会全部消失
recover datafile until scn xxxx;
recover database until scn xxxx;
recover database until sequence xx;--恢复到哪个日志文件截止
recover database until xx;--恢复到哪个时间点
--此时,数据文件头上的scn会小于控制文件的scn号,需要resetlogs才能打开数据库。
alter database open resetlogs;
--当resetlogs打开后,数据库会重置redo日志,redo文件也会重建。控制文件的scn回退到与数据文件一致。
sys@ORCL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------
1 1 0 52428800 1 YES UNUSED 0
2 1 0 52428800 1 YES UNUSED 0
3 1 1 52428800 1 NO CURRENT 13808014 17-7月 -13
--resetlog的模式,若为了恢复数据,建议在其他机器上进行恢复,然后同步到生产环境中。
当前状态的在线重做日志文件丢失(不存在备份)
需要不完全恢复,原理就是使用数据库备份恢复,然后利用日志(重做日志和在线重做日志)恢复到最大的scn,即当前状态的在线重做日志的上一个
已备份的日志截止scn。
最后需要recover database until cancel命令打开数据库。 即恢复到输入cancel的那一刻
通过
alter database open resetlog;--打开数据库
--当非当前日志(状态为inactive)丢失,或损坏时,不会影响数据库,因为事务都已经写入数据库
alter database drop logfile group 3;
alter database clear logfile group 3;
alter database add logfile group 2 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG' size 50m;
--简单测试了下,当shutdown abort后,数据库不会做checkpoint,所以日志文件状态仍为active,当active的非当前日志丢失后,
--无法通过restore恢复,恢复后仍会提示logfile不存在,也无法drop掉,提示实例恢复仍需要。
--当resetlog恢复后,resetlog备份集仍可以使用。它会自动跳过resetlog之后的日志文件,及使用resetlog之后重置的日志文件进行恢复。
--当控制文件损坏,恢复的方法有两种
1.利用trace语句备份的控制文件进行恢复
alter database backup controlfile to trace as 'c:\a.txt';--生成控制文件的备份至c盘的a.txt文件
alter database backup controlfile to trace as 'c:\a.txt' resetlogs;--生成resetlog模式的控制信息
alter database backup controlfile to trace as 'c:\a.txt' noresetlogs;--生成noresetlog模式的控制信息
--NORESETLOGS选项生成的控制文件语句仅仅用在 当前版本的在线日志是可用的状态。
--RESTLOGS选项用在在线日志不可用的状态
alter database backup control file to trace;--备份到控制文件到trace文件中。
生成的trace文件信息如下:
STARTUP NOMOUNT --nomount状态打开数据库,因为控制文件损坏
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16 --最大日志文件数
MAXLOGMEMBERS 3 --日志文件的镜像最多有三个,此参数在10g不起作用,限制不住
MAXDATAFILES 100 --控制文件预留的空间大小,要能保留100个数据文件的记录。当增大此数,会自动增加控制文件的大小
MAXINSTANCES 8 --最大的实例个数,实际上可以超过8个
MAXLOGHISTORY 292 --日志的历史的条数限制
LOGFILE --日志文件
GROUP 1 (
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG',
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\LOG\REDO04.LOG'
) SIZE 50M,
GROUP 2 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG' SIZE 50M,
GROUP 3 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG' SIZE 50M
DATAFILE
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF',
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF',
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF',
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF',
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF',
'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF'
CHARACTER SET ZHS16GBK --字符集
;
select * from $archived_log;--归档日志的信息
select * from v$log_history;--日志i切换就记录,当非归档模式,也可以从此查看
创建日志镜像
alter database add logfile member 'F:\oracle\product\10.2.0\oradata\orcl\LOG\redo04.log' to group 1;
--当增加数据文件,或者增加日志文件时,建议通过trace的方式备份下控制文件。
2.利用rman catalog模式下,恢复控制文件
只能启动到nomount状态,控制文件损坏,Oracle无法判断其target DB,因为一个catalog DB对应多个target DB。
需要通过DBID告诉Oracle需要恢复那个target DB。
rman target sys/system@orcl catalog rman/rman@test
set dbid=xxxxxxxx
list backup of controlfile;
restore controlfile--Oracle通过以下参数寻找恢复控制文件的位置 show parameter control_files
--恢复后,启动到mount状态会发现控制文件的checkpoint_change#比数据文件的checkpoint_change#小。
需要以下命令进行启动
recover database using backup controlfile;--告诉Oracle此控制文件是旧的
auto--输入auto,Oracle会自动根据备份的archive log进行恢复,但不是真正恢复,应该是Oracle内部在做检查
--直到恢复到当前联机日志,提示找不到备份文件。这是因为控制文件损坏,Oracle不知道这些信息
再次输入
recover database using backup controlfile;
--需要手工指定当前联机日志文件的位置。
F:\oracle\product\10.2.0\oradata\orcl\REDO01.LOG
--最后输入以下命令,打开数据库
alter database open with resetlogs;
一致性备份指冷备份,shutdown之后的os copy
select
* from v$flash_recovery_area_usage;
--闪回恢复区存放以下几类文件
1.控制文件(CONTROL FILE AUTOBACKUP)
2.在线日志
3.归档日志
4.rman 备份片
5.rman image copy 备份(COPY DATAFILE 4 to 'C:\xx.dbf')
6.闪回日志
show parameter db_recovery;
select * from v$flash_recovery_area_usage;
--监控闪回恢复区的大小
--数据库失败的类型
1.实例失败
2.数据库失败 --媒介失败