这种方式的日志有以下重要的影响:
1.可用的块镜像可以在使用flashback database时将数据文件的内容还原到受保护还原点所对应的状态但不能使用flashback database将数据库还原到受保护还原点与当前时间之间的某个时间点。只有当对闪回数据库启用日志才行。如果你需要将数据库还原到一个中间时间点,你只能使用数据库按时间点恢复。
2.因为每个数据块的改变只会被记录一次,当闪回日志被禁用时受保护还原点的日志所使用的空间要比正常闪回日志所使用的空间小。可以按天或周来维护受保护的还原点而不必关注当闪回数据库启用后闪回日志的增长。记录受保护的还原点的日志所产生的性能在禁用闪回数据库日志的情况下影响是很小的。
如果你主要是将数据库还原到受保护还原点所创建的时间点,那么通常关闭闪回数据库日志只使用受保护还原点更有效。例如当正计划在生产数据库服务器上对应用进行升级,在升级开始之前创建一个受保护的还原点,如果升级过程最终失败,可以使用flashback database撤消改变,而不用从备份中进行还原。
使用受保护还原点的闪回数据库日志
?如果闪回数据库被启用并且定义了一个或多个受保护的还原点,那么数据库执行正常闪回日志时,会对性能有些影响。根据数据库的工作模式闪回区可能会产生较大的空间压力。然而,不像正常的闪回数据库日志,闪回区总是要保留为了使用flashback database将数据库还原到最早的当前受保护还原点时所需要的闪回日志。闪回日志如果要求满足受保护还原点恢复就不会因为空间压力而被删除。
在这种情况下对于flashback database可以将数据库恢复到闪回窗口中的任意时间点和特定的受保护的还原点所对应的状态,但你必须监控制闪回区的空间使用。
使用正常和受保护还原点
使用受保护还原点的要求
?为了支持使用受保护还原点,数据库必须满足下面的要求:
1.compatible参数必须设置为10.2或更高版本
2.数据库必须运行在归档模式下。flashback database操作将数据库还原到受保护的还原点时要求使用一直到还原点以来的归档重做日志。
4.如果没有启用闪回数据库,当创建第一个受保护的还原点心(或者如果所有之前创建的受保护的还原点已经被删除后)那么数据库必须处于mount状态,不能是open状态。
注意:在使用正常的还原点没有特殊的要求。
创建正常和受保护还原点
?为了创建正常或受保护还原点,使用create restore point语句,并给还原点提供了一个名称并指定它是受保护还原点还是正常还原点(默认值)。
在创建还原点时数据库可以处于open或mount状态。如果是mount状态,那么必须已经完全关闭(物理备库除外)。
下面的命令用来创建一个正常还原点
SQL> create restore point before_truncate;
Restore point created.
下面的命令用来创建一个受保护还原点
SQL> create restore point before_truncate guarantee flashback database;
create restore point before_truncate guarantee flashback database
*
ERROR at line 1:
ORA-38784: Cannot create restore point 'BEFORE_TRUNCATE'.
ORA-38787: Creating the first guaranteed restore point requires mount mode when flashback database is off.
根据错误提示可以看出当数据库没有启用flashback database时想要创建受保护的还原点只能在mount状态下创建。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area? 327155712 bytes
Fixed Size? ? ? ? ? ? ? ? ? 1273516 bytes
Variable Size? ? ? ? ? ? 138412372 bytes
Database Buffers? ? ? ? ? 184549376 bytes
Redo Buffers? ? ? ? ? ? ? ? 2920448 bytes
Database mounted.
SQL> create restore point before_truncate guarantee flashback database;
Restore point created.
SQL> col name for a20
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
? 2? GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
? 3? FROM V$RESTORE_POINT;
NAME? ? ? ? ? ? ? ? ? ? ? ? SCN TIME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DATABASE_INCARNATION# GUARANTEE_FLASHBACK_DATABASE STORAGE_SIZE
-------------------- ---------- ----------------------------------- --------------------- ---------------------------- ------------
BEFORE_TRUNCATE? ? ? ? 2849315 27-JAN-15 02.40.56.000000000 PM? ? ? ? ? ? ? ? ? ? ? ? 2 YES? ? ? ? ? ? ? ? ? ? ? ? ? 8192000
?
显示还原点
?为了查看当前定义的还原点,可以使用v$restore_point控制文件视图:
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
FROM V$RESTORE_POINT;
SQL> col name for a20
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
? 2? GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
? 3? FROM V$RESTORE_POINT;
NAME? ? ? ? ? ? ? ? ? ? ? ? SCN TIME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DATABASE_INCARNATION# GUARANTEE_FLASHBACK_DATABASE STORAGE_SIZE
-------------------- ---------- ----------------------------------- --------------------- ---------------------------- ------------
BEFORE_TRUNCATE? ? ? ? 2849315 27-JAN-15 02.40.56.000000000 PM? ? ? ? ? ? ? ? ? ? ? ? 2 YES?