从 Oracle Database 19c 开始,DG 在主库上创建的还原点会自动复制到备库,这也是DG的新特性之一。
什么是还原点

还原点其实就是SCN的标签或别名,它分为两种类型:

正常还原点(Normal Restore Points ) 保证还原点(Guaranteed Restore Points )

还原点提供与闪回数据库和其他介质恢复操作相关的功能。 特别是,在系统改变号(SCN)上创建的保证还原点可以使用闪回数据库将数据库回滚到此SCN。 还原点功能和闪回数据库功能可以单独使用,也可以一起使用。

正常还原点

创建正常还原点会将还原点名称分配给SCN或特定时间点。 建的正常还原点,可以代替时间在将来用于操作撤销到特点时间点。 还原点的名称和SCN是存储在控制文件中的。 如果使用闪回功能或基于时间点的恢复,则可以使用还原点的名称而不是时间或SCN。

以下命令支持使用还原点:

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

创建正常还原点消除了事先手动记录SCN或通过使用闪回查询等功能确定事后的正确SCN。 正常还原点是轻量级的。 控制文件可以维护数千个正常还原点的记录,而不会对数据库性能产生重大影响。 如果不手动删除,正常还原点最终会从控制文件中老化,因此它们不需要持续维护。

保证还原点

保证还原点与正常还原点一样充当恢复操作中SCN的别名。 主要区别在于保证的还原点永远不会超出控制文件的范围,必须明确删除。它的使用和正常还原点没有区别。

需要注意的是,无论是否启动了闪回数据库功能,保证还原点都可以使用闪回数据库将数据库回滚到还原点SCN的状态。 如果启用了闪回日志记录,则保证还原点会强制保留从最早的保证还原点之后,闪回数据库闪回到任意SCN所需的闪回日志。 因此,如果启用了闪回日志记录,则可以将数据库闪回到开启保证还原点以后的任何SCN,而不是仅闪回到单个SCN。

12c以后,可以在CDB和PDB级别创建还原点

复制还原点

从 Oracle Database 19c 开始,在主数据库上创建的还原点会自动复制到备用数据库。

在备库上生成的还原点称为复制还原点。无论主库上的还原点是保证还原点还是正常还原点,备库相应的复制还原点始终是正常还原点。 备库上的复制还原点信息,是通过redo传输的备库的。所以会在备库应用日志完成才会出现。 复制还原点的名字有个特别的约定,在还原点名称后使用后缀_PRIMARY 如:主库还原点名称为:DBSTYLE,则备库复制还原点名称为:DBSTYLE_PRIMARY

需要注意: 如果备库存在同名的复制还原点,则主库的还原点不会在备库创建 删除主库上的还原点时,也会删除备库上相应的复制还原点。

演示请看以下的实验过程:

1. 查看是否创建过还原点,下面输出显示没有创建过还原点;

[oracle@sdedu ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 7 22:07:09 2019
Version 19.2.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.
Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.2.0.0.0

SQL> select * from v$restore_point;

no rows selected


2. 接下来创建还原点dbstyle_sd

SQL> create restore point dbstyle_sd;
Restore point created.

3. 通过 v$restore_point 动态性能视图查看还原点信息,其中正常还原点的 storage_size 为零,保证还原点的 storage_size 会显示所用空间 
SQL> select scn, guarantee_flashback_database, storage_size, name, replicated from v$restore_point;

         SCN GUA      STOR  NAME                                 REP
---------- ---- --------- ------------------------- ------
 2092260 NO               0 DBSTYLE_SD                      NO 


4. 主库创建还原点以后,经过日志同步过去后,可以看到备库也出现了还原点。备库还原点的名称为dbstyle_sd_primary ,说明使用了_primary后缀,同时replicated列显示YES,表明是复制得到的;

[oracle@sdrep ~]$  sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 7 11:11:28 2019
Version 19.2.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.2.0.0.0

SQL> select scn, guarantee_flashback_database, storage_size, name, replicated from v$restore_point;

         SCN GUA      STOR  NAME                                  REP
---------- ---- -------- --------------------------- ------
2092260 NO               0  DBSTYLE_SD_PRIMARY     YES


5. 现在可以在备库使用这个还原点,进行闪回和还原等操作。我们用 flashback 做测试,首先要确保备库打开闪回功能(开启闪回以后在创建还原点);

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
YES

备库开启闪回数据库的命令如下,在 recover 停掉后可以直接在备库执行;

SQL> alter database flashback on;
Database altered.

6. 接下来停掉recover过程后,可以在备库使用复制还原点对数据库进行闪回;

SQL> recover managed standby database cancel;
Media recovery complete.

SQL> flashback database to restore point dbstyle_sd_primary;
Flashback complete.

7. 闪回完成后,可以观察到当前备库的SCN和复制还原点的SCN一致

SQL> select current_scn from v$database;

      CURRENT_SCN
-------------------
                2092260

8. 再次开启recover,应用主库传过来的日志,SCN开始增加,说明备库日志应用正常。

SQL>  recover managed standby database disconnect from session;
Media recovery complete.

SQL> select current_scn from v$database;

        CURRENT_SCN
--------------------
                 2093938

9. 当然在备库直接创建还原点也是允许的,如下输出可以看到还原点dbstyle的replicated列显示的是NO,说明不是从主库复制所生成。

SQL> recover managed standby database cancel;
Media recovery complete.

SQL> create restore point dbstyle;
Restore point created.

SQL> select scn, guarantee_flashback_database, storage_size, name, replicated from v$restore_point;

         SCN  GUA     STOR  NAME                      REP
---------- ------- ------ ------------------------- ------
2092260 NO                0  DBSTYLE_SD_PRIMARY    YES
2093938 NO                0  DBSTYLE               NO

10. 回到主库,在创建一个还原点dbstyle

SQL> create restore point dbstyle;
Restore point created.

SQL> select scn, guarantee_flashback_database, storage_size, name, replicated from v$restore_point;

         SCN   GUA    STOR   NAME                          REP
---------- ------- ------ ------------------------ ------
2092260 NO               0   DBSTYLE_SD                    NO
2108821  NO               0   DBSTYLE                      NO

11. 在备库中再次查看还原点信息,观察到由于备库有和主库一样名称的还原点,主库创建的还原点dbstyle,不会同步到备库中;

SQL> select scn, guarantee_flashback_database, storage_size, name, replicated from v$restore_point;
         SCN GUA      STOR  NAME                    REP
---------- ------- ------ ------------------------- ------
 2092260 NO                0  DBSTYLE_SD_PRIMARY    YES
 2093938 NO                0  DBSTYLE               NO

12. 在主库中删除还原点;

SQL> drop restore point dbstyle_sd;
Restore point dropped.

SQL> drop restore point dbstyle;
Restore point dropped.

SQL> select scn, guarantee_flashback_database, storage_size, name, replicated from v$restore_point;
no rows selected

13. 在备库中查看还原点信息,可以看到主库复制过来的还原点已经同步删除,在备库中创建的还原点还存在;

SQL> select scn, guarantee_flashback_database, storage_size, name, replicated from v$restore_point;

          SCN GUA        STOR   NAME           REP
---------- ------- -------- ------------- -------
 2093938 NO                  0  DBSTYLE       NO

源网址:https://mp.weixin.qq.com/s?__biz=Mzg5OTA3MTIzMg==&mid=2247483830&idx=1&sn=611a9d665a08dd29d5054e31dd487834