Oracle不完全恢复
Sql代码
不完全恢复
指的恢复到某一个时间点在这个时间点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
YES UNUSED
YES UNUSED
NO CURRENT 月
resetlog的模式若为了恢复数据建议在其他机器上进行恢复然后同步到生产环境中
当前状态的在线重做日志文件丢失(不存在备份)
需要不完全恢复原理就是使用数据库备份恢复然后利用日志(重做日志和在线重做日志)恢复到最大的scn即当前状态的在线重做日志的上一个
已备份的日志截止scn
最后需要recover database until cancel命令打开数据库 即恢复到输入cancel的那一刻
通过
alter database open resetlog;打开数据库
当非当前日志(状态为inactive)丢失或损坏时不会影响数据库因为事务都已经写入数据库
alter database drop logfile group ;
alter database clear logfile group ;
alter database add logfile group F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG size m;
简单测试了下当shutdown abort后数据库不会做checkpoint所以日志文件状态仍为active当active的非当前日志丢失后
无法通过restore恢复恢复后仍会提示logfile不存在也无法drop掉提示实例恢复仍需要
当resetlog恢复后resetlog备份集仍可以使用它会自动跳过resetlog之后的日志文件及使用resetlog之后重置的日志文件进行恢复
当控制文件损坏恢复的方法有两种
利用trace语句备份的控制文件进行恢复
alter database backup controlfile to trace as c:\atxt;生成控制文件的备份至c盘的atxt文件
alter database backup controlfile to trace as c:\atxt resetlogs;生成resetlog模式的控制信息
alter database backup controlfile to trace as c:\atxt noresetlogs;生成noresetlog模式的控制信息
NORESETLOGS选项生成的控制文件语句仅仅用在 当前版本的在线日志是可用的状态
RESTLOGS选项用在在线日志不可用的状态
alter database backup control file to trace;备份到控制文件到trace文件中
生成的trace文件信息如下:
STARTUP NOMOUNT nomount状态打开数据库因为控制文件损坏
CREATE CONTROLFILE REUSE DATABASE ORCL NORESETLOGS ARCHIVELOG
MAXLOGFILES 最大日志文件数
MAXLOGMEMBERS 日志文件的镜像最多有三个此参数在g不起作用限制不住
MAXDATAFILES 控制文件预留的空间大小要能保留个数据文件的记录当增大此数会自动增加控制文件的大小
MAXINSTANCES 最大的实例个数实际上可以超过个
MAXLOGHISTORY 日志的历史的条数限制
LOGFILE 日志文件
GROUP (
F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG
F:\ORACLE\PRODUCT\\ORADATA\ORCL\LOG\REDOLOG
) SIZE M
GROUP F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG SIZE M
GROUP F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG SIZE M
DATAFILE
F:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSTEMDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\UNDOTBSDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSAUXDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\USERSDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\EXAMPLEDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\TESTDBF
CHARACTER SET ZHSGBK 字符集
;
select * from $archived_log;归档日志的信息
select * from v$log_history;日志i切换就记录当非归档模式也可以从此查看
创建日志镜像
alter database add logfile member F:\oracle\product\\oradata\orcl\LOG\redolog to group ;
当增加数据文件或者增加日志文件时建议通过trace的方式备份下控制文件
利用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 controlfileOracle通过以下参数寻找恢复控制文件的位置 show parameter control_files
恢复后启动到mount状态会发现控制文件的checkpoint_change#比数据文件的checkpoint_change#小
需要以下命令进行启动
recover database using backup controlfile;告诉Oracle此控制文件是旧的
auto输入autoOracle会自动根据备份的archive log进行恢复但不是真正恢复应该是Oracle内部在做检查
直到恢复到当前联机日志提示找不到备份文件这是因为控制文件损坏Oracle不知道这些信息
再次输入
recover database using backup controlfile;
需要手工指定当前联机日志文件的位置
F:\oracle\product\\oradata\orcl\REDOLOG
最后输入以下命令打开数据库
alter database open with resetlogs;
一致性备份指冷备份shutdown之后的os copy
select
* from v$flash_recovery_area_usage;
闪回恢复区存放以下几类文件
控制文件(CONTROL FILE AUTOBACKUP)
在线日志
归档日志
rman 备份片
rman image copy 备份(COPY DATAFILE to C:\xxdbf)
闪回日志
show parameter db_recovery;
select * from v$flash_recovery_area_usage;
监控闪回恢复区的大小
数据库失败的类型
实例失败
数据库失败 媒介失败