Oracle Active Data Guard是目前用于避免任务关键型Oracle 数据库发生单点故障的最全面的解决方案。该解决方案能够在远程位置维护生产数据库的一个同步物理副本,从而以最简单和最经济的方式防止数据丢失和停机。如果生产数据库由于任何原因变为不可用,客户端连接可以迅速地(在某些配置中可以透明地)故障切换至同步副本以恢复服务。
Active Data Guard允许报告应用程序、即席查询和数据提取分流到生产数据库的只读副本,从而消除高昂的闲置冗余成本。Active Data Guard 与Oracle 数据库深度集成,并且完全专注于实时数据保护和可用性,避免了存储远程镜像或其他基于主机的复制解决方案存在的不利影响。
下面让我们先看下Oracle Data Guard从8i到19c的特性变化,然后做一下workshop。后面有一个完整的手册。
Oracle 8i特性https://docs.oracle.com/cd/A87860_01/doc/index.htm
Read-only physical standby database
Remote archiving of redo log files
引入参数DB_FILE_NAME_CONVERT,LOG_FILE_NAME_CONVERT
Oracle 9i特性
https://docs.oracle.com/cd/B10501_01/server.920/a96653/whatsnew.htm
https://docs.oracle.com/cd/A91202_01/901_doc/server.901/a88808/whatsnew.htm
开始支持Data Guard switchover
开始支持Logical standby databases
引入Data Guard Broker
引入STANDBY LOG FILE功能,实现了日志的实时传输
引入3种数据库保护模式:最大保护、最大可用和最大性能
Oracle 10g特性
https://docs.oracle.com/cd/B19306_01/server.102/b14239/whatsnew.htm
Fast-start failover,减少了人为参与的步骤,更便捷
Flashback Database(减少主备库failover时主库重建的复杂性,也可以通过standby database flashback特性来随时还原由于误操作丢失的数据)
Oracle 11g特性
https://docs.oracle.com/cd/E18283_01/server.112/e17022/whatsnew.htm
Active Data Guard,备库可以从mount状态启动到open read only,并且还可以对外提供只读服务,实现数据库的读写分离
Physical Standby支持滚动升级(transient logical standby)
支持异构的备库模式(需要具有相同的endian)
引用snapshot standby,可暂时用于测试
在ADG下主库或备库的坏块可以利用未损坏的块来完成自动修复
Flush redo到目标库
SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;(目标库需处于mount状态)支持从备库端对数据库进行备份,也支持rman duplicate直接从主库传输数据文件到备库来搭建灾备环境
Oracle 12c特性
12cR1
https://docs.oracle.com/database/121/SBYDB/release_changes.htm
可以向用户授予SYSDG特权,以便执行与Data Guard相关的操作。管理Data Guard环境不再需要完整的SYSDBA特权,但我们仍可以使用它。
Real time cascading
引入far sync实例,专门用于中转日志
GDS开始支持Data Guard平台
LOG_ARCHIVE_DEST_n 属性支持SYNC 和NOAFFIRM一起使用。如果使用了dg broker,这个模式名称为FASTSYNC
从12.1开始,
对于physical standby启用real time apply不需要使用using current logfile
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;对于logical standby可以通过immediate
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;引入dbms_rolling方式滚动升级数据库
12cR2
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sbydb/release-changes.html
Active Data Guard与Oracle sharding功能集成
Oracle Diagnostic Pack与Oracle Active Data Guard集成,可以对备库收集AWR报告
在主库上修改密码将会自动传播到备用数据库。对far sync实例不适用
引入STANDBY_DB_PRESERVE_STATES参数,用于物理备库切换或故障转移期间,将原主库会话同步保持到新主库,以减少对性能的影响。
NONE — No sessions on the standby are retained during a switchover/failover. This is the default value. ALL — User sessions are retained during switchover/failover. SESSION — User sessions are retained during switchover/failover.Oracle Active Data Guard(ADG)环境中的physical standby支持In-Memory列存储(INMEMORY_ADG_ENABLED)
多实例日志应用(Multi-Instance Redo Apply)
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE INSTANCES [ALL|integer];支持通过duplicate创建far sync实例
DUPLICATE TARGET DATABASE FOR FARSYNC FROM ACTIVE DATABASE; DUPLICATE TARGET DATABASE FOR FARSYNC BACKUP LOCATION '+DATA/BACKUP';引入DATA_GUARD_SYNC_LATENCY参数,指定LGRW等待第一个备库确认已收到重做日志的响应时间,单位为秒
引入ENABLED_PDBS_ON_STANDBY参数,可以指定那些PDB在物理备库上被创建和使用
DBMS_DBCOMP.DBCOMP存储过程执行块比较,以检测主数据库和一个或多个物理备用数据库之间的写入丢失或数据库不一致。 挂载或打开数据库时,可以在主数据库或物理备用数据库上执行DBCOMP过程。
declare Datafile_Name_or_Number varchar2(1000); Output_File varchar2(1000); begin dbms_output.enable(1000000); Datafile_Name_or_Number:= 'all' ; Output_File:='BlockCompareAll_'; sys.dbms_dbcomp.DBCOMP(Datafile_Name_or_Number, Output_File, true); end; SQL> SELECT target_desc, sofar, totalwork FROM V$SESSION_LONGOPS WHERE opname = 'BlockCompare';DG Broker支持多个自动故障转移目标
Oracle 18c特性
https://docs.oracle.com/en/database/oracle/oracle-database/18/sbydb/release-changes.html
https://docs.oracle.com/en/database/oracle/oracle-database/18/sbydb/managing-oracle-data-guard-physical-standby-databases.html
ADG环境中,支持全局临时表的创建
SQL> CREATE GLOBAL TEMPORARY TABLE gtt (a int); SQL> CREATE SEQUENCE g CACHE 10; INSERT INTO gtt VALUES (g.NEXTVAL); SELECT * FROM gtt;V$DATAGUARD_PROCESS替换V$MANAGED_STANDBY视图
如果备库出现问题,可以通过一条命令的方式刷新备库(RECOVER STANDBY DATABASE FROM SERVICE service_name)
数据库nologging扩展了两种新模式(Standby Nologging for Load Performance and Standby Nologging for Data Availability)用来提升性能,不会增加很多的日志量
SQL> ALTER DATABASE SET STANDBY NOLOGGING FOR DATA AVAILABILITY; SQL> ALTER DATABASE SET STANDBY NOLOGGING FOR LOAD PERFORMANCE;对于使用DBMS_ROLLING PL/SQL软件包执行的升级,Data Guard Broker的支持得到了增强,不需要再停止DG Broker就可以升级
Oracle 19c特性
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/release-changes.html
ADG环境中备库支持DML语句重定向,启用该特性后,会自动转到主库环境执行
主库flashback信息会自动同步到备库环境。当备库在mount状态时,如果主库使用flashback,备库也会跟着一起flashback
ADG环境中,无效对象执行时会自动编译
19c不在支持的功能
LOG_ARCHIVE_DEST_n初始化参数的MAX_CONNECTIONS属性不再支持
Extended Datatype Support (EDS)不再被支持. EDS支持的Oracle数据类型在Oracle Logical Standbys和Oracle Golden Gate继续提供支持
Active Data Guard实验环境
本次实验使用的基于Oracle Enterprise Linux 7.7,Oracle GI 19.4和Oracle Database 12.1.0.2构建的实验平台,主备数据库各两个节点。具体信息如下:
Data Guard小结
1. 建议配置DG Broker,这个太棒了
2. 主备库建议都启用flashback,这个在failover时很有用
3. 主备库文件convert参数要配置好
4. DG Broker中的validate功能很方便,可以比较主备的配置差别
5. 主备库SRL日志文件大小要一致
6. Physical Standby上temp表空间要处理好
7. PDB$SEED在read only下,也可以创建调整临时表空间
8. 如果使用了集群,。从12.1.0.2开始,无需再配置"_DGMGRL"或"_DGB"之类的服务名,这些都有集群管理
9. 如果是12.1之后的RAC,密码文件保存在磁盘组中。这个功能很好,如果主库更改密码,备库也会同步
10. duplicate farsyc实例更方便
11. 配置了DG Broker,RedoRoutes参数很方便
12. FASTSYNC对系统的性能更好,由SYNC和NAFFIRM组成
13. 在physical standby上通过recover standby database from service,很方便
14. 尽量不要启用fast failover
15. DML重定向功能很方便,很实用
16. Automatic flashback也很实用
17. 更多的功能和特性还是看白皮书
Reference
https://www.oracle.com/database/technologies/high-availability/oracle-database-maa-best-practices.html
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/oracle-data-guard-concepts.html
https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/managing-oracle-data-guard-broker-configuration-members.html
Master Note for Data Guard (Doc ID 1101938.1)
How to recreate shared ASM password file in 12c GI cluster (Doc ID 1929673.1)
How To Change ASM SYS PASSWORD ? (Doc ID 452076.1)
12c: Data Guard Physical Standby - Managing password files in a RAC Physical Standby (Doc ID 1984091.1)
Data Guard Physical Standby Changing the SYS password when a broker configuration exists (Doc ID 1199943.1)
Oracle Data Guard Broker and Static Service Registration (Doc ID 1387859.1)
https://docs.oracle.com/pdf/A32535_1.pdf (24 – 38)
https://docs.oracle.com/cd/A87860_01/doc/index.htm
https://docs.oracle.com/cd/B10501_01/server.920/a96653/whatsnew.htm
https://docs.oracle.com/cd/A91202_01/901_doc/server.901/a88808/whatsnew.htm
https://docs.oracle.com/cd/B19306_01/server.102/b14239/whatsnew.htm
https://docs.oracle.com/cd/E18283_01/server.112/e17022/whatsnew.htm
https://docs.oracle.com/database/121/SBYDB/release_changes.htm
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sbydb/release-changes.html
https://docs.oracle.com/en/database/oracle/oracle-database/18/sbydb/release-changes.html
https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/release-changes.html
https://www.oracle.com/technetwork/database/availability/client-failover-2280805.pdf
https://www.oracle.com/technetwork/cn/database/features/availability/active-data-guard-12c-best-practice-2162660-zhs.html
https://www.oracle.com/technetwork/cn/database/dataguardoverview-091578-zhs.html