闪回数据库和还原点是两种与数据恢复相关的功能,它们用来替代按时间点恢复来撤消对数据库的改变。闪回数据库能让你将整个数据库
闪回数据库和还原点是两种与数据恢复相关的功能,它们用来替代按时间点恢复来撤消对数据库的改变。闪回数据库能让你将整个数据库进行回滚,使用指定时间窗口来撤消对数据库的改变。这类似于数据库的按时间点恢复。
还原点提供了与闪回数据库相关的能力它是另一种恢复操作。受保护的还原点,在特定的情况下,提供了闪回数据库完整的功能,允许你选择一个SCN并强制要求闪回数据库对这个SCN是可用的。
还原点和闪回数据库可以单独使用也可以一起使用。在这两种情况下,RMAN的flashback database命令或者flashback database语句实际上将数据库还原到一个指定的SCN所对应的状态,例如:
flashback database to restore point 'before_upgrade';
flashback databasae to scn 202381;
闪回数据库
闪回数据库,可以通过RMAN的flashback database命令和SQL*Plus的flashback database语句来完成。能够将数据库快速的从逻辑数据错误或用户错误中进行恢复。
它类似于传统的按时间点恢复一样,能够将数据库还原到过去某个时间点的状态。闪回数据库比按时间点恢复来快很多,因为闪回数据库不需要从备份中还原数据文件和从归档重做日志文件中应用相应的改变。
闪回数据库能被用来撤消对数据库不需要的改变。而数据文件完好无损。这包括将数据库还原到之前数据库化身对应的状态。这将撤消open resetlogs操作。
闪回数据库使用它自己的日志机制,它会在闪回区中创建闪回日志。只有在闪回日志是可用时才能使用闪回数据库。因此如果要使用这个功能就必须对数据库进行设置让其创建相关的闪回日志。
为了启用闪回数据库,需要设置闪回区和设置闪回保留策略目标来指定能够将数据库还原到过去某个时间点。
从启用闪回数据库开始,在定期的时间间隔内,数据库将会把每个数据文件中发生改变的数据块复制到闪回日志中。这些数据块镜像以后可用来重构数据文件的内容。
当数据库使用闪回数据库将数据库还原到过去的某些目标时间点时,,自从还原时间点开始发生改变的每个数据块将从闪回日志中复制目标时间点对应的数据块。然后应用自数据块被复制到闪回日志时间点开始的重做日志。
注意:在整个时间跨度对于闪回日志相应的重做日志必须都是可用的。
闪回数据库窗口
在一定范围SCN之间有足够的闪回日志数据来支持flashback database命令这就叫闪回数据库窗口。如果闪回区的空间太小,通过设置保留策略当为了给新生成的闪回日志文件分配空间可能会删除过期的闪回日志。根据闪回区的大小,必须被保留的其它备份和需要的闪回日志数据,这可能造成闪回数据库窗口比闪回保留目标的时间要短。
注意:闪回保留目标是一个目标,不是一个绝对受保护能执行闪回数据库的目标。
如果闪回区的大小不能存储为了满足保留策略所需要的闪回日志和其它文件,比如归档重做日志和其它备份。那么为了存储其它文件从最早的SCN开始的闪回日志可能因为空间问题而被删除。
闪回数据库窗口不能对可用闪回日志中的最早SCN进行向前的扩展。闪回日志不能备份到闪回区之外的目录。因此为了增加可用的闪回日志来满足闪回数据窗口,所以要给闪回区可用的最大存储空间。
这里也有一些操作比如删除表空间或收缩数据文件,这些是不能通过闪回数据进行撤消的。在这些操作执行之后,闪回窗口就会立即从这些操作之后重新计算。
如果因为闪回数据库窗口不满足flashback database的要求,按时间点恢复可以最大程度的完成相似的任务。
使用受保护的还原点是唯一能保证你使用闪回数据库能将数据库还原点指定时间点或闪回窗口的方法。
正常还原点
通过指定时间点或SCN来作为还原点的名称来创建还原点,在执行有restore point子句的命令时使用这种标签或别名来指定SCN。
如果可能对你执行的任何操作执行撤消,那么可以创建一个正常的还原点。还原点名称和SCN会被记录到控制文件中。如果后面需要使用闪回数据库,闪回表或按时间点恢复,可以使用还原点名称来指示这个目标时间来代替一个时间表达式或SCN。在可能被撤消的操作执行前定义一个正常的还原点来消除需要手工记录SCN的需要,或在执行闪回查询时查找正确的SCN的需要。
正常还原点是非常轻量级的。控制文件可以包含上千个正常还原点而不会影响数据库的性能。正常还原点最终从控制文件中移除,而不是手工删除,那么它们将不再需要进行维护。
支持还原点的命令
在下面的上下文中还原点用来指定目标SCN:
1.RMAN的recover database和flashback database命令
2.SQL*Plus中的flashback database语句
注意:通常来说,受保护的还原点可以在任何使用正常还原点的操作中作为SCN的别名来使用。除非另有说明,否则正常还原点的使用方法也适用于受保护的还原点。
受保护的还原点
与正常还原点一样,受保护的还原点在恢复操作中也能作为SCN的别名。然而,它们也对闪回数据库提供了特定的功能。
在一个特定的SCN创建一个受保护的还原点可以强制通过执行闪回数据库能将数据库还原到这个SCN所处的状态,即使数据库没有启用闪回日志也能保证。如果闪回日志被启用,创建受保护的还原点强制闪回日志保留策略能满足将数据库闪回到创建受保护还原点后的任意时间点。
受保护还原点能用于将整个数据库还原到一个已知的状态良好的时间点,前提条件是闪回区有足够的空间来存储闪回日志。使用闪回数据库,受nologging操作影响的直接路径插入也能使用受保护的还原点来进行还原操作。
受保护的还原点替代存储快照
在实践中,受保护的还原点能够有效地替代存储快照,它通常用来在一些危险操作之前来保护数据库,比如大范围的更新,应用程序打补丁,或者升级。与创建快照或复制数据库再进行这些操作的相比,可以创建一个受保护的还原点然后执行这些危险操作,只要确只保留必要的闪回日志就行。
闪回数据库和受保护还原点的日志
闪回数据库和受保护还原点的日志是基于在改变应用前被捕获的数据块镜像,因此这些镜像能用来在执行flashback database命令时将数据文件还原到之前时间点所对应的状态。
正常闪回日志和受保护还原点的日志的主要差别就是日志是否会因为闪回区可用空间的压力而被删除。这些差别影响日志可用空间的使用和数据库的性能。
是否对闪回数据库,受保护的还原点启用日志都依赖于你的恢复目标,以及对性能的影响和这些功能对空间的使用。