Oracle闪回数据库
Posted 小陈的技术博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle闪回数据库相关的知识,希望对你有一定的参考价值。
Oracle闪回技术
Oracle闪回技术是一种数据恢复技术,具有恢复时间快,不适用备份文件的特点。它使得数据库可以回到过去的某个状态。可以满足用户逻辑错误的快速恢复。需要注意闪回技术仅仅对逻辑恢复有效,如果是数据文件损坏必须使用介质恢复。
那么,Before闪回技术,数据库逻辑错误是怎么恢复的呢?
数据库的逻辑恢复都是采用基于时间点的恢复,通过备份恢复数据库到过去指定的时间点,这种恢复方式需要使用备份并使用适当的归档日志完成,恢复时间取决于备份文件的复制时间和日志的应用时间。如果是很大的数据库可能会恢复很长时间,对于众多的数据库应用系统来说,这是不可忍受的。而使用闪回技术,则可以更快速、便捷地恢复用户错误或者数据库逻辑错误。
1闪回级别是什么?
闪回级别也可以理解为闪回粒度,针对闪回删除以及闪回数据库可以定义两种数据库的闪回级别,即表级闪回以及数据库级闪回。
·数据库级闪回:数据库级闪回允许将整个数据库恢复到过去的某个时间点,数据库级的恢复在以下几种情况下使用。当误删一个用户,或者误截断一个表时可以采用数据库级的闪回恢复。
·表级闪回:表级闪回可以将表闪回到过去某个时间点,或恢复到过去某个SCN,从而闪回删除通过DROP指令删除的表。
·事务级闪回:该级闪回显示了用户事务的每个DML操作,并给出闪回的DML指令,比如DELETE操作对应的就是INSERT操作,通过对一个事务的闪回,可以恢复用户误操作的事务。
2闪回数据库
闪回数据库是什么?
闪回数据库是一种快速的数据库恢复方案,这种恢复是基于用户的逻辑错误,比如对表中的数据做了错误的修改,插入了大流量错误数据、删除了一个用户等,此时往往需要将数据库恢复到修改之前的某个时间点。
Oracle闪回技术使用闪回日志来恢复用户的逻辑错误,这种恢复只针对用户逻辑错误的恢复,而不涉及整个数据库的恢复,恢复更具有针对性而且恢复时间大大减少。
闪回日志由Oracle自动创建,并存储在闪回恢复区中,由闪回恢复区管理。既然闪回日志由闪回恢复区管理,那么就不能保证闪回日志被保存的数据的可靠性。因为一旦快闪恢复区空间不足,会自动删除旧的闪回日志文件以腾出空间。在Oracle中快闪恢复去中备份文件的存储优先。所以为了保存尽可能多的闪回日志数据,最好将闪回恢复去设置大些。
在上图的闪回缓冲区(Flashback Buffer)的变化数据将按照一定的时间间隔,顺序地被写入闪回日志中,一旦闪回则将利用相反的操作恢复修改。注意将闪回缓冲区中的数据写入闪回日志的操作由RVWR进程负责。启动闪回数据库后该进程会自动启动。
启动闪回数据库
Oracle默认不启动闪回数据库,如果需要启动闪回数据库特性,必须将数据库设置为归档模式,并启用闪回恢复区,因为闪回日志文件存放在闪回恢复区中。如果在RAC环境下,必须将闪回恢复区存储在集群文件或ASM文件中。
Step1:查看数据库归档状态:
Step2:DB_RECOVERY_FILE_DEST参数指定的储存目录值为快速恢复区,确定归档的操作系统存储位置。
Step3:查看db_flashback_retention_target参数,是一个以分钟为单位的数字,默认1440分钟,表示将数据库闪回到过去的时间。即从当前开始计算最大可以把数据库闪回到过去的时间。
Step4:v$flashback_database_log评估快闪恢复区的空间。
Step5:启动闪回数据库
关闭闪回数据库
默认情况下,只要启动了闪回数据库特性,数据库的永久表空间都会受到闪回数据库保护。如果不希望某个表空间受闪回数据保护,可以禁用对某个表空间的闪回特性。(mount状态)
注意:如果想要重新启动该表空间使其继续启用闪回数据库特性,可以通过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
Step2:创建一个表并插入数据
Step3:删除用户vfast
利用动态数据字典查看闪回日志信息,视图记录了闪回日志区域可以闪回到的最早SCN以及最早时间,并且评估了所需要闪回恢复区的大小。
Step4:查询可以闪回的最早时间,并且评估所需闪回恢复区的大小。
Step5:使用闪回技术将数据库闪回到用户删除前的时间点
Step6:开启数据库,并重置日志文件
注意:使用resetlogs打开数据库后,闪回数据仍然有效。我们仍然可以闪回到resetlogs以前的某一个时间点。
我们还可以闪回数据库到某个SCN(步骤同上)。
SQL>flashback database to scn
监控闪回数据库
由于无法保证一定可以闪回到从现在开始到参数db_flashback_database_target指定时间段内的任意时间点,所以在闪回前最好使用数据字典v$flashback_database_log来查询可以闪回到的最小scn号以及可以闪回到的时间点。
查看当前系统的SCN号
监视闪回日志写入数据的各种开销的字典视图:
注意:闪回数据库不保证数据回到过去的某个时间点,因为闪回日志是由快闪恢复区维护的,而快闪恢复区是备份文件优先存储,即如果由于备份的需要空间不足,就会删除部分闪回日志文件。所以虽然定义了参数db_flashback_retention_target,但是Oracle只是尽力保证恢复到该参数指定的从现在开始某个时间段内的数据。
所以需要监控快闪恢复区的空间变化,在必要时候增加快闪恢复区的空间。
闪回数据库的限制
以下几种情况不可使用闪回数据库:
·如果数据文件被删除或缩短
·如果在闪回时间范围内复原或重建了一个控制文件
·在resetlogs操作之前
·表空间被删除
小陈今天的分享就到这里啦!
期待下一期的邂逅!
以上是关于Oracle闪回数据库的主要内容,如果未能解决你的问题,请参考以下文章