Oracle闪回数据库

Posted 小陈的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle闪回数据库相关的知识,希望对你有一定的参考价值。

//
Oracle 11g
//



Oracle闪回技术


Oracle闪回技术是一种数据恢复技术,具有恢复时间快,不适用备份文件的特点。它使得数据库可以回到过去的某个状态。可以满足用户逻辑错误的快速恢复。需要注意闪回技术仅仅对逻辑恢复有效,如果是数据文件损坏必须使用介质恢复。


那么,Before闪回技术,数据库逻辑错误是怎么恢复的呢?

数据库的逻辑恢复都是采用基于时间点的恢复,通过备份恢复数据库到过去指定的时间点,这种恢复方式需要使用备份并使用适当的归档日志完成,恢复时间取决于备份文件的复制时间和日志的应用时间。如果是很大的数据库可能会恢复很长时间,对于众多的数据库应用系统来说,这是不可忍受的。而使用闪回技术,则可以更快速、便捷地恢复用户错误或者数据库逻辑错误。



1闪回级别是什么?


闪回级别也可以理解为闪回粒度,针对闪回删除以及闪回数据库可以定义两种数据库的闪回级别,即表级闪回以及数据库级闪回。

·数据库级闪回:数据库级闪回允许将整个数据库恢复到过去的某个时间点,数据库级的恢复在以下几种情况下使用。当误删一个用户,或者误截断一个表时可以采用数据库级的闪回恢复。


·表级闪回:表级闪回可以将表闪回到过去某个时间点,或恢复到过去某个SCN,从而闪回删除通过DROP指令删除的表。


·事务级闪回:该级闪回显示了用户事务的每个DML操作,并给出闪回的DML指令,比如DELETE操作对应的就是INSERT操作,通过对一个事务的闪回,可以恢复用户误操作的事务。



2闪回数据库


闪回数据库是什么?

闪回数据库是一种快速的数据库恢复方案,这种恢复是基于用户的逻辑错误,比如对表中的数据做了错误的修改,插入了大流量错误数据、删除了一个用户等,此时往往需要将数据库恢复到修改之前的某个时间点。

Oracle闪回技术使用闪回日志来恢复用户的逻辑错误,这种恢复只针对用户逻辑错误的恢复,而不涉及整个数据库的恢复,恢复更具有针对性而且恢复时间大大减少。

闪回日志由Oracle自动创建,并存储在闪回恢复区中,由闪回恢复区管理。既然闪回日志由闪回恢复区管理,那么就不能保证闪回日志被保存的数据的可靠性。因为一旦快闪恢复区空间不足,会自动删除旧的闪回日志文件以腾出空间。在Oracle中快闪恢复去中备份文件的存储优先。所以为了保存尽可能多的闪回日志数据,最好将闪回恢复去设置大些

在上图的闪回缓冲区(Flashback Buffer)的变化数据将按照一定的时间间隔,顺序地被写入闪回日志中,一旦闪回则将利用相反的操作恢复修改。注意将闪回缓冲区中的数据写入闪回日志的操作由RVWR进程负责。启动闪回数据库后该进程会自动启动。



启动闪回数据库

Oracle默认不启动闪回数据库,如果需要启动闪回数据库特性,必须将数据库设置为归档模式,并启用闪回恢复区,因为闪回日志文件存放在闪回恢复区中。如果在RAC环境下,必须将闪回恢复区存储在集群文件或ASM文件中。


Step1:查看数据库归档状态:

Oracle(十一)闪回数据库


Step2:DB_RECOVERY_FILE_DEST参数指定的储存目录值为快速恢复区,确定归档的操作系统存储位置。

Oracle(十一)闪回数据库


Step3:查看db_flashback_retention_target参数,是一个以分钟为单位的数字,默认1440分钟,表示将数据库闪回到过去的时间。即从当前开始计算最大可以把数据库闪回到过去的时间。

Oracle(十一)闪回数据库


Step4:v$flashback_database_log评估快闪恢复区的空间。

Oracle(十一)闪回数据库


Step5:启动闪回数据库

Oracle(十一)闪回数据库



关闭闪回数据库

默认情况下,只要启动了闪回数据库特性,数据库的永久表空间都会受到闪回数据库保护。如果不希望某个表空间受闪回数据保护,可以禁用对某个表空间的闪回特性。(mount状态

Oracle(十一)闪回数据库

注意:如果想要重新启动该表空间使其继续启用闪回数据库特性,可以通过alter tablespace users flashback on,但是数据库一定要启动到mount状态



闪回数据库的方法

闪回数据库可以使用RMAN方法,也可以使用SQL指令方法。

METHOD1:RMAN方法

RMAN> flashback database to time = to_date('2018-12-12 00:00:00', 'YYYY-MM-DD HH23:MI:SS');

RMAN> flashback database to scn = 638832;

RMAN> flashback database to sequence = 345 thread = 1;


METHOD2:SQL指令

SQL> flashback database to timestamp(sysdate-1/24)

SQL> flashback database to scn 678854




使用闪回数据库

模拟逻辑错误,并且闪回数据库恢复。

Step1:创建用户vfast

Oracle(十一)闪回数据库


Step2:创建一个表并插入数据


Oracle(十一)闪回数据库



Step3:删除用户vfast

Oracle(十一)闪回数据库

利用动态数据字典查看闪回日志信息,视图记录了闪回日志区域可以闪回到的最早SCN以及最早时间,并且评估了所需要闪回恢复区的大小。

Oracle(十一)闪回数据库


Step4:查询可以闪回的最早时间,并且评估所需闪回恢复区的大小。

Oracle(十一)闪回数据库


Step5:使用闪回技术将数据库闪回到用户删除前的时间点

Oracle(十一)闪回数据库

Oracle(十一)闪回数据库


Step6:开启数据库,并重置日志文件

Oracle(十一)闪回数据库

注意:使用resetlogs打开数据库后,闪回数据仍然有效。我们仍然可以闪回到resetlogs以前的某一个时间点。

我们还可以闪回数据库到某个SCN(步骤同上)。

SQL>flashback database to scn 



监控闪回数据库

由于无法保证一定可以闪回到从现在开始到参数db_flashback_database_target指定时间段内的任意时间点,所以在闪回前最好使用数据字典v$flashback_database_log来查询可以闪回到的最小scn号以及可以闪回到的时间点。

Oracle(十一)闪回数据库


查看当前系统的SCN号

Oracle(十一)闪回数据库


监视闪回日志写入数据的各种开销的字典视图:

Oracle(十一)闪回数据库


注意:闪回数据库不保证数据回到过去的某个时间点,因为闪回日志是由快闪恢复区维护的,而快闪恢复区是备份文件优先存储,即如果由于备份的需要空间不足,就会删除部分闪回日志文件。所以虽然定义了参数db_flashback_retention_target,但是Oracle只是尽力保证恢复到该参数指定的从现在开始某个时间段内的数据。

所以需要监控快闪恢复区的空间变化,在必要时候增加快闪恢复区的空间。



闪回数据库的限制

以下几种情况不可使用闪回数据库:

·如果数据文件被删除或缩短

·如果在闪回时间范围内复原或重建了一个控制文件

·在resetlogs操作之前

·表空间被删除





END


小陈今天的分享就到这里啦!

期待下一期的邂逅!





以上是关于Oracle闪回数据库的主要内容,如果未能解决你的问题,请参考以下文章

oracle闪回特性

Oracle 闪回 找回数据的实现方法

oracle闪回区介绍与监控

Oracle闪回技术详解

Oracle闪回技术详解

Oracle-闪回技术