Oracle 19c新特性-RESTORE POINTS FROM PRIMARY TO STANDBY和AUTOMATIC FLASHBACK OF STANDBY DATABASE

版权声明:本文为Buddy Yuan原创文章,转载请注明出处。原文地址:Oracle 19c新特性-RESTORE POINTS FROM PRIMARY TO STANDBY和AUTOMATIC FLASHBACK OF STANDBY DATABASE
在Oracle 19c上的data guard,可以帮助我们自动复制主库上的还原点到备库上。同时还可以帮助我们在主库直接flashback database,open resetlogs之后,备库也能应用应用。这简化了RESETLOGS在主服务器上进行操作后的备用服务器管理。
在使用还原点这个新特性需要注意以下几点限制:
1.主数据库和备用数据库上的兼容参数都必须为19.0.0或更大
2.由于通过重做日志进行了还原点复制,因此主数据库必须是OPEN状态下的。而备用数据库上的MRP进程需要运行才能进行复制。
3.备用数据库上不应有任何同名的还原点。

我们来首先测试一下这些功能,首先在主库创建一个还原点test_respoint。

[oracle@primary ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jun 10 14:49:46 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


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

SQL> select name,database_role from v$database;
NAME					 DATABASE_ROLE
---------------------------------------- ----------------
DB193H1 				 PRIMARY

SQL> create restore point test_respoint guarantee flashback database;
Restore point created.

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

       SCN NAME 			  TIME					   REP
---------- ------------------------------ ---------------------------------------- ---
   3379448 TEST_RESPOINT		  11-JUN-20 08.24.55.000000000 AM	   NO

在查看备库,可以发现test_respoint已经被复制过来。在v$restore_point视图中有个字段叫REPLICATED,主库是NO,备库显示YES。而且备库的还原点名字自动加上了“_PRIMARY”后缀。

SQL> set linesize 175 pagesize 1000
SQL> col name format a40
SQL> col time format a40

SQL> select name,database_role from v$database;
NAME					 DATABASE_ROLE
---------------------------------------- ----------------
DB193H1 				 PHYSICAL STANDBY

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

       SCN NAME 				    TIME				     REP
---------- ---------------------------------------- ---------------------------------------- ---
   3379448 TEST_RESPOINT_PRIMARY		    11-JUN-20 08.24.55.000000000 AM	     YES

接下来我们来试试flashback database的功能。首先我们需要看一下主库和备库的FLASHBACK是否都处于打开状态,如果不是我们可以先打开这个功能。

SQL> select FLASHBACK_ON from v$database;

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

停止我们的主库,执行lashback database to RESTORE POINT操作,open resetlogs一切顺利。

[oracle@primary admin]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jun 10 15:20:41 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


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

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 2147481656 bytes
Fixed Size		    8898616 bytes
Variable Size		  486539264 bytes
Database Buffers	 1644167168 bytes
Redo Buffers		    7876608 bytes
Database mounted.

SQL> flashback database to RESTORE POINT test_respoint;
Flashback complete.

SQL> alter database open resetlogs;
Database altered.

此时查看备库一直报错ORA-19909。日志也没办法应用。通过查看ora-19909发现基本上都是data guard产生了新的化身(new incarnation),一般需这种错误是主库中的化身和备库不一致导致的,需要要我们到RMAN下面指定和主库一样的化身(incarnation),

2020-06-11T08:33:36.277971+08:00
Errors in file /u01/app/oracle/diag/rdbms/db193h1_stdby/DB193H1/trace/DB193H1_mrp0_7375.trc:
ORA-19909: datafile 1 belongs to an orphan incarnation
ORA-01110: data file 1: '/u02/oradata/DB193H1_STDBY/datafile/o1_mf_system_hg2y0646_.dbf'

[oracle@primary ~]$ rman target /
RMAN> list incarnation of database;

using target database control file instead of recovery catalog

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       DB193H1  2407161464       PARENT  1          17-APR-19guangfang
2       2       DB193H1  2407161464       PARENT  1920977    03-JUN-20
3       3       DB193H1  2407161464       PARENT  3158799    10-JUN-20
4       4       DB193H1  2407161464       PARENT  3269801    10-JUN-20
5       5       DB193H1  2407161464       CURRENT 3379450    11-JUN-20

[oracle@standby onlinelog]$ rman target /
RMAN> list incarnation of database;

using target database control file instead of recovery catalog

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       DB193H1  2407161464       PARENT  1          17-APR-19
2       2       DB193H1  2407161464       PARENT  1920977    03-JUN-20
3       3       DB193H1  2407161464       PARENT  3158799    10-JUN-20
4       4       DB193H1  2407161464       PARENT  3269801    10-JUN-20
5       5       DB193H1  2407161464       CURRENT 3379450    11-JUN-20

而此时怪异就在主库和备库的化身(incarnation)基本是一致的。于是我们又到官方文档上查了一下,发现文档中说“A standby database that is in a mounted state can automatically follow the primary database after a RESETLOGS operation on the primary. ”此时我们的主库不是mount状态。对啊,只有在mount的状态我们才能执行flashback database命令。我真是脑子不好使,于是我把备库停下来再启动到mount状态,神奇的事情发生了。观察日志上面的报错已经不报了,此时会显示Flashback Restore Start和Flashback Media Recovery Start。

2020-06-11T08:33:56.283705+08:00
MRP0 (PID:7375): Recovery coordinator performing automatic flashback of database to SCN:0x00000000003390f8 (3379448)
Flashback Restore Start
Flashback Restore Complete
Flashback Media Recovery Start
2020-06-11T08:33:56.508797+08:00
Setting recovery target incarnation to 4
2020-06-11T08:33:56.518677+08:00
 Started logmerger process
2020-06-11T08:33:56.556674+08:00
Parallel Media Recovery started with 2 slaves
2020-06-11T08:33:56.666413+08:00
stopping change tracking
2020-06-11T08:33:56.715869+08:00
Media Recovery Log /u01/app/oracle/DB193H1_STDBY/archivelog/2020_06_11/o1_mf_1_13_hg2ythg4_.arc
2020-06-11T08:33:56.875276+08:00
Incomplete Recovery applied until change 3379448 time 06/11/2020 08:24:55
2020-06-11T08:33:56.878279+08:00
Flashback Media Recovery Complete
2020-06-11T08:33:56.933695+08:00
stopping change tracking
2020-06-11T08:33:56.949951+08:00
Setting recovery target incarnation to 5
2020-06-11T08:33:56.964968+08:00
 Started logmerger process
2020-06-11T08:33:56.974818+08:00
PR00 (PID:7410): Managed Standby Recovery starting Real Time Apply
2020-06-11T08:33:57.009092+08:00
Parallel Media Recovery started with 2 slaves
2020-06-11T08:33:57.117122+08:00
Media Recovery start incarnation depth : 1, target inc# : 5, irscn : 3379449
stopping change tracking
2020-06-11T08:33:57.137816+08:00
TT02 (PID:7416): LOG_FILE_NAME_CONVERT is not defined, stop clearing ORLs
2020-06-11T08:33:57.282084+08:00
PR00 (PID:7410): Media Recovery Log /u01/app/oracle/DB193H1_STDBY/archivelog/2020_06_11/o1_mf_1_13_hg2ythg4_.arc
2020-06-11T08:33:57.394111+08:00
PR00 (PID:7410): Media Recovery Log /u01/app/oracle/DB193H1_STDBY/archivelog/2020_06_11/o1_mf_1_1_hg2ytgrw_.arc
2020-06-11T08:33:57.480722+08:00
PR00 (PID:7410): Media Recovery Log /u01/app/oracle/DB193H1_STDBY/archivelog/2020_06_11/o1_mf_1_2_hg2yyrwy_.arc
PR00 (PID:7410): Media Recovery Waiting for T-1.S-3 (in transit)
2020-06-11T08:33:57.678427+08:00
Recovery of Online Redo Log: Thread 1 Group 5 Seq 3 Reading mem 0
  Mem# 0: /u02/oradata/DB193H1_STDBY/onlinelog/o1_mf_5_hg2y142y_.log

成功之后,我在开启了实时应用和read only,此时在查询v$dataguard_stats,apply lag和transport lag都显示正常。

SQL> select * from v$dataguard_stats;
SOURCE_DBID SOURCE_DB_UNIQU NAME		      VALUE		   UNIT 			  TIME_COMPUTED 		 DATUM_TIME		  CON_ID
----------- --------------- ------------------------- -------------------- ------------------------------ ------------------------------ -------------------- ----------
 2407161464 DB193H1	    transport lag	      +00 00:00:00	   day(2) to second(0) interval   06/11/2020 08:41:19		 06/11/2020 08:41:18	       0
 2407161464 DB193H1	    apply lag		      +00 00:00:00	   day(2) to second(0) interval   06/11/2020 08:41:19		 06/11/2020 08:41:18	       0
 2407161464 DB193H1	    apply finish time	      +00 00:00:00.000	   day(2) to second(3) interval   06/11/2020 08:41:19					       0
	  0		    estimated startup time    8 		   second			  06/11/2020 08:41:19					       0

此时在查询DG Broker的状态,也显示正常。

DGMGRL> SHOW CONFIGURATION;

Configuration - db_broker_config

  Protection Mode: MaxPerformance
  Members:
  db193h1       - Primary database
    db193h1_stdby - Physical standby database 

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 30 seconds ago)

具体的细节可以参考官方文档https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-252097AC-3070-43B6-88D8-919AE27F97AD

分享到: 更多

Post a Comment

Your email is never published nor shared. Required fields are marked *