首页 > 数据库 > Oracle > Oracle手工不完全恢复(一):使用当前控制文件
实验环境
操作系统:CentOS 7.1
数据库:Oracle 11.2.0.4
目录
示例一:基于SCN或时间点的恢复----恢复过去某个时间误删除的表
示例二:当前日志组损坏,造成数据库崩溃
示例三:归档日志丢失或损坏
示例一:基于SCN或时间点的恢复----恢复过去某个时间误删除的表
环境:
(1)提前对数据库做一次全库冷备份;
(2)在seiang用户下有一张test1表隶属于seiang表空间;
定位错误操作发生的时间或SCN:logminer
SYS@seiang11g>host cp /u01/app/oracle/UMAN_Backup/*.dbf /u01/app/oracle/oradata/OraDB11g
--根据挖掘出来的SCN(1914743),执行数据的不完全恢复
SYS@seiang11g>recover database until change 1914743;
Media recovery complete.
或则是(SYS@seiang11g>recover database until time 2017-08-02 11:32:53;)
--恢复完成后,查看当前日志序号为54
SYS@seiang11g>select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 52 INACTIVE
3 54 CURRENT
2 53 INACTIVE
--查看数据文件头的SCN,是恢复后最新的SCN
SYS@seiang11g>select file#,name,checkpoint_change# from v$datafile_header;
FILE# NAME CHECKPOINT_CHANGE#
---------- ------------------------------------------------------------ ------------------
1 /u01/app/oracle/oradata/OraDB11g/system01.dbf 1914743
2 /u01/app/oracle/oradata/OraDB11g/sysaux01.dbf 1914743
3 /u01/app/oracle/oradata/OraDB11g/undotbs01.dbf 1914743
4 /u01/app/oracle/oradata/OraDB11g/users01.dbf 1914743
5 /u01/app/oracle/oradata/OraDB11g/example01.dbf 1914743
6 /u01/app/oracle/oradata/OraDB11g/rman01.dbf 1914743
7 /u01/app/oracle/oradata/OraDB11g/seiang01.dbf 1914743
8 /u01/app/oracle/oradata/OraDB11g/wjq01.dbf 1914743
9 /u01/app/oracle/oradata/OraDB11g/wjqbest01.dbf 1914743
--使用resetlogs打开数据库
SYS@seiang11g>alter database open resetlogs;
Database altered.
--查看当前日志序号从1开始记录,之前的归档日志全部作废
SYS@seiang11g>select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 1 CURRENT
2 0 UNUSED
3 0 UNUSED
--删除的test1表恢复成功
SYS@seiang11g>select * from seiang.test1;
ID NAME AGE
---------- ------------------------------------------------------------ ----------
1 wjq 23
2 seiang 24
恢复原理:
1.冷备份的数据文件*.dbf比现在要旧,那么数据文件的scn肯定就比现在的小;
2.使用日志挖掘方法,在日志中找出删表时的scn或时间戳;
3.在数据库shutdown的状态下,用冷备份的数据文件*.dbf,覆盖现在的*.dbf文件;保证数据文件完整性;
4.启动数据库到mount下,恢复到日志挖掘的SCN或时间点(利用日志对数据文件重做一次)
5.以resetlogs方式打开数据库,以前的日志就被覆盖了;示例二:当前日志组损坏,造成数据库崩溃
环境:
(1)提前对数据库做一次全库冷备份;
(2)在seiang用户下有一张test1表隶属于seiang表空间;
[oracle@seiang11g
OraDB11g]$ cp
/u01/app/oracle/UMAN_Backup/*.dbf ./
示例三:归档日志丢失或损坏
环境:
(1)提前有一套完成的数据文件的冷备份;
(2)在seiang用户下有一张test1表隶属于seiang表空间;--关闭数据库 ,还原所有冷备份的数据文件
SYS@seiang11g>shutdown abort
ORACLE instance shut down.
SYS@seiang11g>host cp /u01/app/oracle/UMAN_Backup/*.dbf /u01/app/oracle/oradata/OraDB11g/
作者:SEian.G(苦练七十二变,笑对八十一难)
ITPUB:http://blog.itpub.net/31015730/
51CTO:http://seiang.blog.51cto.com/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31015730/viewspace-2142995/ ,如需转载,请注明出处,否则将追究法律责任。