从 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