概述

还原点(Restore Point)是10gR2推出的一个新特性,是与数据库时间戳或SCN关联的。还原点可以用于将表或数据库闪回到还原点指定的时间。还原点分为正常还原点和保证还原点两种类型

正常还原点

创建正常还原点会将还原点分配给SCN或者特定时间点。控制文件存储还原点和SCN的名称。
如果使用闪回功能或者基于时间点的恢复,则可以使用还原点而不是时间戳或SCN。以下命令支持恢复点的使用:

  • RMAN中的RECOVER DATABASE和FLASHBACK DATABASE命令
  • FLASHBACK TABLE语句

正常还原点是轻量级的。控制文件可以维护数千个正常还原点,而不会对数据库造成重大影响。如果没有手动删除,控制文件会自动管理,无需持续维护。

保证还原点

与正常还原点一样,保证还原点也充当SCN的别名。主要区别在于保证还原点永远不会超出控制文件的限制,必须手动删除。
即使禁用了闪回日志,保证还原点也可以确保数据库闪回至还原点SCN状态。如果启用了闪回日志,则保证还原点会强制保留闪回数据库到还原点之后任何SCN所需的闪回日志.因此,如果启用了闪回日志记录,则可以将数据库还原到还原点之后任何的SCN点,而不仅限于一个SCN。

语法

先决条件

  • 要创建或删除一个正常还原点,您必须具有SELECT ANY DICTIONARY或者FLASHBACK ANY TABLE特权。要创建或删除有保证的还原点,您必须拥有SYSDBA系统权限。
  • 要查看或使用还原点,您必须具有SELECT ANY DICTIONARY或FLASHBACK ANY TABLE系统特权或SELECT_CATALOG_ROLE角色。
  • 您可以在主数据库或备用数据库上创建还原点。数据库可以打开,也可以挂载但不能打开。如果安装了数据库,那么它必须在挂载之前一直关闭,除非它是物理备用数据库。
  • 创建保证还原点之前,您必须创建了快速恢复区域。在创建还原点之前,您不需要启用闪回数据库。ARCHIVELOG如果您要创建有保证的还原点,数据库必须处于模式下。

创建还原点

create

字段 含义 备注说明
restore_point 指定还原点的名称,最多由128个字符组成 数据库可以至少保留20148个还原点。正常还原点保留时间由CONTROL_FILE_RECORD_KEEP_TIME参数控制,默认为7天。保证还原点需手工删除
AS OF Clause 指定时间戳或SCN 如果指定TIMESTAMP,则expr必须是一个有效的日期时间表达式,以解析过去的时间。如果指定SCN,则expr过去必须是数据库中的有效SCN
PRESERVE 指定必须明确手工删除还原点
GUARANTEE FLASHBACK DATABASE 创建保证还原点选项 1、无论DB_FLASHBACK_RETENTION_TARGET初始化参数设置如何,保证还原点都可使您确定性地将数据库刷新到还原点。闪回能力取决于快速恢复区有足够的空间。 2、保证还原点仅保证数据库将维护足够的闪回日志以将数据库闪回到保证的还原点。它并不保证数据库将具有足够的撤销将任何表闪回到相同的还原点 3、保证还原点需要明确手工删除,因此为占用大量快速恢复区空间,因此需谨慎使用

删除还原点

drop

查看还原点

可在RMAN中列出单个还原点或所有还原点

LIST RESTORE POINT restore_point_name ;
LIST RESTORE POINT ALL;

查看还原点具体信息

SQL> SELECT NAME,SCN,TIME,DATABASE_INCARNATION#,
GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE FROM V$RESTORE_POINT;

示例

创建正常还原点

SQL> CREATE RESTORE POINT good_data;
  
SQL> SELECT salary FROM employees WHERE employee_id = 108;
  
  SALARY
----------
  12000
  
SQL> UPDATE employees SET salary = salary*10
WHERE employee_id = 108;
  
SQL> SELECT salary FROM employees
WHERE employee_id = 108;
  
  SALARY
----------
  120000
  
SQL> COMMIT;
  
SQL> FLASHBACK TABLE employees TO RESTORE POINT good_data;
  
SQL> SELECT salary FROM employees
 WHERE employee_id = 108;
  
  SALARY
----------
  12000

创建保证还原点

SQL> CREATE RESTORE POINT before_upgrade GUARANTEE FLASHBACK DATABASE;

删除还原点

SQL> DROP RESTORE POINT good_data;