RMAN实战16:ORACLE数据库的不完全恢复和闪回
来源:互联网 发布:令狐冲打少林寺知乎 编辑:程序博客网 时间:2024/06/05 00:34
不完全恢复指的是无法恢复所有已经提交的事务,无法对数据库应用所有的重做日志。通常有两种情景:1.必须的重做日志丢失或者损坏 2.有意将数据库会滚到过去的某个时间点。有两种方式组成:恢复数据+恢复已经提交的事务。可采用的手段有两种:RMAN(restore database until)和FLASHBACK DATABASE。
RESTORE DATABASE UNTIL
可以根据下列标示恢复到过去的时间点:
1. 时间
2. SCN
3. 日志序列号
4. 恢复点
UNTIL的作用:加入这个命令让RMAN从最新的备份集合镜像副本中获取所有数据文件,通过UNTIL RMAN可以确定哪个备份集中含有执行恢复操作的所需要的数据文件。
数是据文件的信息在v
sys@CYANG> select file#, status, fuzzy, 2 error, checkpoint_change#, 3 to_char(checkpoint_time,'dd-mon-rrrr hh24:mi:ss') as checkpoint_time 4 from v$datafile_header; FILE# STATUS FUZ ERROR CHECKPOINT_CHANGE# CHECKPOINT_TIME---------- ------- --- ----------- ------------------ ------------------------- 1 ONLINE YES 4840160 28-12月-2015 18:52:35 2 ONLINE NO 2453693 02-9月 -2015 00:18:43 3 ONLINE YES 4840160 28-12月-2015 18:52:35 4 ONLINE NO 2453693 02-9月 -2015 00:18:43 5 ONLINE YES 4840160 28-12月-2015 18:52:35 6 ONLINE YES 4840160 28-12月-2015 18:52:35 7 ONLINE NO 4622783 23-12月-2015 20:08:42 8 ONLINE NO 4622783 23-12月-2015 20:08:42 9 ONLINE NO 4622783 23-12月-2015 20:08:42 10 ONLINE NO 4622783 23-12月-2015 20:08:42 12 ONLINE YES 4840160 28-12月-2015 18:52:35已选择 11 行。sys@CYANG>
执行不完全恢复需要满足的条件
- 数据库在归档模式下
- 拥有数据库文件的良好备份
- 拥有将数据库恢复到指定时间点所需的所有重做日志
- 处于mount模式
在执行恢复过程中,RMAN先应用所有可用的增量备份,然后应用存储在磁盘上的所有归档重做日志文件,如果这些归档重做日志文件没有储存在磁盘上,RMAN就会重试从备份集获取它们。
基于时间得恢复操作
$ rman target /RMAN> startup mount;RMAN> restore database until time"to_date('15-jan-2013 12:20:00', 'dd-mon-rrrr hh24:mi:ss')";RMAN> recover database until time"to_date('15-jan-2013 12:20:00', 'dd-mon-rrrr hh24:mi:ss')";RMAN> alter database open resetlogs;
基于日志序列号的恢复操作
RMAN-06053: unable to perform media recovery because of missing logRMAN-06025: no backup of archived log for thread 1 with sequence 19...--如果遇到了如上报错则需要进行序列恢复$ rman target /RMAN> startup mount;RMAN> restore database until sequence 19;RMAN> recover database until sequence 19;RMAN> alter database open resetlogs;
基于SCN的恢复操作
如果知道具体的SCN可以进行SCN的恢复,可以通过以下方式获取SCN
- Logminer 确定ddl和dml命令的SCN
- 告警日志
- 跟踪文件
- v
log、v log_history、v$archive_log 视图的FRIST_CHANGE#列
确定了SCN后用如下命令恢复,注意这里恢复的都是小于某个SCN的值,其他的恢复方式也是。
$ rman target /RMAN> startup mount;RMAN> restore database until scn 95019865425;RMAN> recover database until scn 95019865425;RMAN> alter database open resetlogs;
基于还原点的恢复
可以创建于类似快照的的标志,将数据库恢复到某个快照时刻,也叫作还原点恢复,分为两种:标准和担保。二者的差异是担保还原点不会从控制文件中自动清除,但是可以手动删除。
其实还原点恢复也是基于SCN的恢复,就是在还原点处标记一个SCN。以上基于日志序列、时间得恢复本质上都是基于SCN的恢复,SCN是数据专用的时间标识。
创建一个还原点
--创建一个还原点SQL> create restore point MY_RP;--查看数据库当期的SCNSQL> select current_scn from v$database;--查看还原点信息SQL> select name, scn from v$restore_point;
进行还原点恢复
$ rman target /RMAN> startup mount;RMAN> restore database until restore point MY_RP;RMAN> recover database until restore point MY_RP;RMAN> alter database open resetlogs;
12C新功能:基于表的恢复
从ORACLE 12C 开始,有了通过rman备份恢复某个表的功能,表级别恢复使用了临时辅助实例和数据泵。
--创建临时实例使用的文件存放的目录$ mkdir /tmp/oracle--创建数据泵存储数据文件用到的目录$ mkdir /tmp/recover--进行恢复recover table mv_maint.invuntil scn 4689805auxiliary destination '/tmp/oracle'datapump destination '/tmp/recover';
恢复完毕后刚才创建的两个目录下产生的文件会被自动删除。
闪回功能
数据库的闪回功能从10G开始配置,能进行库级别的闪回也能进行表级别的闪回。
恢复已经drop的表
从10G开始配置了闪回功能,使用闪回表功能可以不需要实现FRA,数据库闪回也不是必须的。
--确认参数开启SQL> show parameter recyclebin--drop表SQL> drop table inv;--查看回收站SQL> show recyclebin;OBJECT_NAME ORIGINAL_NAM TYPE----------------------------------- ------------ -------------------------BIN$0zIqhEFjcprgQ4TQTwq2uA==$0 INV_PK INDEXBIN$0zIqhEFkcprgQ4TQTwq2uA==$0 INV_TRIG TRIGGERBIN$0zIqhEFlcprgQ4TQTwq2uA==$0 INV TABLE--用下面的这视图也可看回收站的东东SQL>select object_name, original_name, type from recyclebin;--进行表恢复SQL> flashback table inv to before drop;--这样恢复索引1SQL> select index_name from user_indexes where table_name='INV';INDEX_NAME-------------------------------------------------BIN$0zIqhEFjcprgQ4TQTwq2uA==$0--这样恢复索引2SQL> alter index "BIN$0zIqhEFjcprgQ4TQTwq2uA==$0" rename to inv_pk;--恢复到别的名字SQL> flashback table inv to before drop rename to inv_bef;
将表恢复到过去的时间点
下面做个不成功的演示来证明,在某些高级别的用户下(例如sys)是不支持闪回的,可以自己创建一个用户演示下,不出意外应该木问题的。
sys@CYANG> create table test11 (id number,name varchar(10));表已创建。sys@CYANG> insert into test11 values(1,'aa');已创建 1 行。sys@CYANG> insert into test11 values(2,'bb');已创建 1 行。sys@CYANG> insert into test11 values(3,'cc');已创建 1 行。sys@CYANG> commit 2 ;提交完成。sys@CYANG> select * from test11; ID NAME---------- ---------- 1 aa 2 bb 3 ccsys@CYANG> select current_scn from v$database;CURRENT_SCN----------- 4849456sys@CYANG> alter table test11 enable row movement;表已更改。sys@CYANG> select current_scn from v$database;CURRENT_SCN----------- 4849484sys@CYANG> insert into test11 values(4,'dd');已创建 1 行。sys@CYANG> commit;提交完成。sys@CYANG>sys@CYANG> select * from test11; ID NAME---------- ---------- 1 aa 2 bb 3 cc 4 ddsys@CYANG> flashback table test11 to scn 4849456 2 ;flashback table test11 to scn 4849456 *第 1 行出现错误:ORA-08185: 用户 SYS 不支持闪回sys@CYANG>
将表闪回到时间戳
SQL> alter table inv enable row movement;SQL> flashback table inv to timestamp(sysdate-1/96) ;SQL> flashback table inv to timestampto_timestamp('14-jan-13 12:07:33','dd-mon-yy hh24:mi:ss');
将表闪回到还原点
SQL> create restore point point_a;--如果没有针对此表启用行迁移功能则启用SQL> alter table inv enable row movement;SQL> flashback table inv to restore point point_a;
闪回数据库
条件:
1. 闪回数据库必须使用FRA
2. 启用归档
3. 启用闪回数据库功能
例子演示:
sys@CYANG> archive log list;数据库日志模式 存档模式自动存档 启用存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 6下一个存档日志序列 8当前日志序列 8sys@CYANG> show parameter db_recoveryNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string C:\app\oracle\fast_recovery_ar eadb_recovery_file_dest_size big integer 12G--开启闪回sys@CYANG> alter database flashback on;数据库已更改。--查看下恢复时间,以min为单位sys@CYANG> show parameter db_flashNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_flash_cache_file stringdb_flash_cache_size big integer 0db_flashback_retention_target integer 1440#看下闪回日志sys@CYANG> select name, log#, thread#, sequence#, bytes from v$flashback_database_logfile;NAME---------------------------------------------------------------------------------------------------- LOG# THREAD# SEQUENCE# BYTES---------- ---------- ---------- ----------C:\APP\ORACLE\FAST_RECOVERY_AREA\CYANG\FLASHBACK\O1_MF_C82D8M69_.FLB 1 1 1 52428800C:\APP\ORACLE\FAST_RECOVERY_AREA\CYANG\FLASHBACK\O1_MF_C82D8OT3_.FLB 2 1 1 52428800--看可以恢复的SCN范围sys@CYANG> select 2 oldest_flashback_scn 3 ,to_char(oldest_flashback_time,'dd-mon-yy hh24:mi:ss') 4 from v$flashback_database_log;OLDEST_FLASHBACK_SCN TO_CHAR(OLDEST_FLASHBAC-------------------- ----------------------- 4849843 28-12月-15 20:54:43-- 创建还原点sys@CYANG> create restore point flash_1;还原点已创建。--演示下闪回sys@CYANG> shutdown immediate;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。sys@CYANG> startupORACLE 例程已经启动。Total System Global Area 1560281088 bytesFixed Size 3046032 bytesVariable Size 939525488 bytesDatabase Buffers 603979776 bytesRedo Buffers 13729792 bytes数据库装载完毕。数据库已经打开。-- 在闪回的时候必须处于mont状态sys@CYANG> flashback database to restore point flash_1;flashback database to restore point flash_1*第 1 行出现错误:ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。sys@CYANG> shutdown abortORACLE 例程已经关闭。sys@CYANG> startup mountORACLE 例程已经启动。Total System Global Area 1560281088 bytesFixed Size 3046032 bytesVariable Size 939525488 bytesDatabase Buffers 603979776 bytesRedo Buffers 13729792 bytes数据库装载完毕。sys@CYANG> flashback database to restore point flash_1;闪回完成。sys@CYANG> alter database open resetlogs;数据库已更改。--关闭闪回sys@CYANG> alter database flashback off;数据库已更改。sys@CYANG>
- RMAN实战16:ORACLE数据库的不完全恢复和闪回
- Oracle RMAN -不完全恢复
- Oracle基于RMAN的不完全恢复
- RMAN的不完全恢复
- Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)
- Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)
- RMAN实战12:ORACLE数据块坏块的检查和恢复
- ORACLE数据库不完全恢复
- 用户管理的和基于RMAN的不完全恢复
- Oracle rman备份和还原恢复数据库
- rman恢复Oracle数据库
- 傻瓜式实战Oracle 10g RMAN之数据库备份和恢复
- ORACLE的不完全恢复
- ORACLE 11G rman恢复数据库实战纪实
- Oracle数据库10g备份和恢复:RMAN和闪回技术
- rman 时间点的不完全恢复
- RMAN基于时间点的不完全恢复
- RMAN 的向前滚动式不完全恢复
- error LNK2038 RuntimeLibrary 不匹配的解决
- (一〇一)第七章编程练习(附①至⑦章学习笔记下载链接)
- java面试题
- iOS---打印
- 第一篇从今天的ArrayAdapter开始
- RMAN实战16:ORACLE数据库的不完全恢复和闪回
- 网络编程中的spring-servlet.xml文件
- Android开发之多线程编程Thread和Runnable使用
- 如何成为数据分析师
- Java基础十大方向
- hive udaf开发入门和运行过程详解
- SQL Server DBA面试知识点(三)--SQL Server如何实现高可用性
- 计算机组成原理课程设计-基本模型机的设计与实现
- Theano-Deep Learning Tutorials 笔记:Getting Started