ORACLE DG(1)基本配置

本文详细介绍了Oracle数据库的Data Guard配置,包括DG提供的服务进程、三种保护模式:最大可用、最大性能、最大保护模式,以及备库的分类、安装配置步骤、ADG的启用和限制。强调了主备库的同步模式、参数配置和日志应用的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://docs.oracle.com/cd/B28359_01/server.111/b28294/manage_ps.htm#i1007681

一些官方文档上的内容

DG提供的服务进程

Redo Transport Services
Transmit redo data from the primary system to the standby systems in the configuration
重主库将redo log传送的备库

Manage the process of resolving any gaps in the archived redo log files due to a
network failure
管理网络等原因发生的redo log丢失
 
Automatically detect missing or corrupted archived redo log files on a standby system
and automatically retrieve replacement archived redo log files from the primary
database or another standby database
自动检测备库上丢失或损坏的归档重做日志文件,并从主数据库或另一个备用数据库中自动检索替换的归档重做日志文件

ebb1ca0f87a2a5f6e43db962fe34eeaa.png

DG的三种保护模式
最大可用模式

这种模式在不影响Primary数据库可用前提下,提供最高级别的数据保护策略。其实现方式与最大保护模式类似,也是要求本地事务在提交前必须至少写入一台Standby数据库的Standby Redologs中,不过与最大保护模式不同的是,如果出现故障导致Standby数据库无法访问,Primary数据库并不会被Shutdown,而是自动转为最高性能模式,等Standby数据库恢复正常之后,Primary数据库又会自动转换成最高可用性模式。

最大性能模式

缺省模式。 这种模式在不影响Primary数据库性能前提下,提供最高级别的数据保护策略。事务可以随时提交,当前Primary数据库的REDO数据至少需要写入一个Standby数据库,不过这种写入可以是不同步的。如果网络条件理想的话,这种模式能够提供类似最高可用性的数据保护,而仅对Primary数据库的性能有轻微影响。这也是创建Standby数据库时,系统的默认保护模式

最大保护模式

这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,它要求所有的事务在提交前其REDO不仅被写入到本地的Online Redologs,还要同时写入到Standby数据库的Standby Redologs,并确认REDO数据至少在一个Standby数据库中可用(如果有多个的话),然后才会在Primary数据库上提交。如果出现了什么故障导致Standby数据库不可用的话(比如网络中断),Primary数据库会被Shutdown,以防止数据丢失。
使用这种方式要求Standby Database必须配置Standby RedoLog,而Primary Database必须使用LGWR,SYNC,AFFIRM方式归档到Standby Database.

Apply Services

如果是物理备库,则使用Redo Apply
如果是逻辑备库,使用SQL Apply

Role Transitions

DG备库的分类:

物理备库
逻辑备库
快照备库

软件的限制:

1.oracle是企业版

2.使用物理同步的初始化参数必须一致,逻辑备库可以不同

3.主库必须是归档模式

4.主备库必须有自己的控制文件

5.主库备需要开启FORCE LOGGING

备库目录的结构要点:

归档重做日志文件和备用重做日志文件。最好主系统和备用系统上的数据文件、日志文件和控制文件应该具有相同的名称和路径名称,使用OFA标准。
不然需要设置文件路径或者重命名。我觉得一般DG也不会在一台机器上,在同一机器上也没有上面意义了。

官方提供了3种方式:
8f18af4940af709e5b3993f99b103191.png

1.主备在在同一系统上,这我觉得没什么意义

2.主备在不同的系统上,使用相同的路径

3.主备在不同的系统上,使用不同的路径

最推荐2,3:减少维护的成本。

A standby redo log is similar to an online redo log, except that a standby redo log is used to store redo data received from another database.

安装配置

准备

安装好数据库软件
主库 study 备库 studydg

1…Enable Forced Logging and Enable Archiving
SQL> ALTER DATABASE FORCE LOGGING;

确认

SQL> select SUPPLEMENTAL_LOG_DATA_MIN,FORCE_LOGGING from v$database;

SUPPLEMENTAL_LOG_DATA_MI FORCE_LOG
------------------------ ---------
NO			 YES
2.Create a Password File(创建密码文件)
[oracle@db-test1 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwstudy password="oracle"  entries=10 force=y

orapwd file=$ORACLE_HOME/dbs/orapwSTUDYDG password=oracle entries=10 force=y

Enter password for SYS:

主备库密码一致

3.配置tns(主备都需要)
STUDY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.162.120)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = STUDY)
    )
  )

STUDYDG =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.216.14)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = STUDYDG)
    )
  )
4.配置参数文件

起的动的参数文件先生成:

SQL> create pfile='/tmp/pfile.txt' from spfile;

File created.
5.备库从主备的pfile启动

SQL> startup nomount pfile='/tmp/pfile.ora'
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size		    2260088 bytes
Variable Size		  285213576 bytes
Database Buffers	  775946240 bytes
Redo Buffers		    5517312 bytes
SQL> 

SQL> create spfile from  pfile ='/tmp/pfile.ora';

File created.

文档上主要方式是修改参数文件:
实例如下:

DB_NAME=chicago
DB_UNIQUE_NAME=chicago
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
CONTROL_FILES='/arch1/chicago/control1.ctl', '/arch2/chicago/control2.ctl'
LOG_ARCHIVE_DEST_1=
 'LOCATION=/arch1/chicago/ 
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2=
 'SERVICE=boston ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) 
  DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

也可以使用alter命令来修改,我更习惯这种方式,本次配置如下:

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(STUDY,STUDYDG)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/study/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STUDY';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=studydg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STUDYDG' scope=spfile;
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;:
alter system set FAL_SERVER=STUDYDG;
alter system set FAL_CLIENT=STUDY;
alter system set DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/studydg/','/u01/app/oracle/oradata/study/'  scope=spfile;
alter system set LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/studydg/','/u01/app/oracle/oradata/study/' scope=spfile;
alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=both; 

备库启动到nomout后执行:

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(STUDYDG,STUDY)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/studydg/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STUDYDG';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=STUDY LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STUDY' scope=spfile;
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;:
alter system set FAL_SERVER=STUDY;
alter system set FAL_CLIENT=STUDYDG;
alter system set DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/study/','/u01/app/oracle/oradata/studydg/'  scope=spfile;
alter system set LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/study/','/u01/app/oracle/oradata/studydg/' scope=spfile;
alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=both; 

参数说明:
FAL_SERVER指定一个Oracle Net service name,standby数据库使用这个参数连接到FAL server,这个参数适用于standby站点。比如,FAL_SERVER = PrimaryDB,此处PrimaryDB是一个TNS name,指向primary库。
915397beb485199b2b2b3fd380a4713a.png

FAL_CLIENT指定一个FAL客户端的名字,以便FAL Server可以引用standby库,这也是一个TNS name,primary库必须适当配置此TNS name指向stanby库。这个参数也是在standby库端设置。比如,FAL_CLIENT = StandbyDB,StandbyDB是standby库的TNS name。

FAL_CLIENT和FAL_SERVER应该成对设置或改变。

这两个参数只需在standby库设置,但也可以在primary库设置这两个参数,以方便switchover或failover时primary库转变为standby角色
915397beb485199b2b2b3fd380a4713a.png
其他的具体设置,可以去官方文档看

5.在primary端通过Rman Duplicate创建备库
[oracle@db-test1 admin]$ rman target 'sys/"oracle"'@study auxiliary   'sys/"oracle"'@studydg nocatalog

Recovery Manager: Release 11.2.0.4.0 - Production on Mon Apr 1 18:52:22 2019

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: STUDY (DBID=3020442375)
using target database control file instead of recovery catalog
connected to auxiliary database: STUDY (not mounted)

duplicate target database for standby from active database nofilenamecheck;
可以不长时间停机,冷备。

这边特别需要注意的是路径和实例名的大小写。

6.配置日志:

Ensure log file sizes are identical on the primary and standby databases.
主要就是主备的数据库redo log大小一致。

Determine the appropriate number of standby redo log file groups
(maximum number of logfiles for each thread + 1) * maximum number of threads
(每个实例的最大日志文件组数+1)* 最大实例数量

SQL> SELECT GROUP#, BYTES/1024/1024 FROM V$LOG;

    GROUP# BYTES/1024/1024
---------- ---------------
	 1		25
	 2		25
	 3		25
主库
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/study/standyredo01a.log') SIZE 25M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/study/standyredo02a.log') SIZE 25M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/study/standyredo03a.log') SIZE 25M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/study/standyredo04a.log') SIZE 25M;

备库
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/studydg/standyredo01a.log') SIZE 25M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/studydg/standyredo02a.log') SIZE 25M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/studydg/standyredo03a.log') SIZE 25M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/studydg/standyredo04a.log') SIZE 25M;
7.Start Redo Apply.
SQL> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

对应的停止是: alter database recover managed standby database cancel;

8.Verify the Physical Standby Database Is Performing Properly
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 SEQUENCE# FIRST_TIME	       NEXT_TIME
---------- ------------------- -------------------
      5029 2019-04-01 21:08:16 2019-04-01 21:58:48
      5030 2019-04-01 21:58:48 2019-04-01 21:59:18
      5031 2019-04-01 21:59:18 2019-04-01 22:00:18
      5032 2019-04-01 22:00:18 2019-04-01 22:08:15
      5033 2019-04-01 22:08:15 2019-04-02 02:23:46
      5034 2019-04-02 02:23:46 2019-04-02 08:02:47

6 rows selected.

在主库切换日志:

SQL>  aLTER SYSTEM SWITCH LOGFILE;

System altered.

next_time有更新

关于ADG和DG:

If a license for the Oracle Active Data Guard option has been purchased, a physical standby database can be open while redo apply is active. This capability is known as real-time query. See Section 9.2.1 for more details.

If a license for the Oracle Active Data Guard option has not been purchased, a physical standby database cannot be open while redo apply is active, so the following rules must be observed when opening a physical standby database instance or starting redo apply:

Redo apply must be stopped before any physical standby database instance is opened.

If one or more physical standby instances are open, those instances must be closed before starting redo apply

如果有授权,开启ADG需要:

 alter database recover managed standby database cancel; 
 alter database open;  
 alter database recover managed standby database using current logfile disconnect from session;  --开启实时应用

测试:

SQL> create table study.create_dg(id number);
Table created.

备库:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

SQL> ALTER DATABASE OPEN;

Database altered.

SQL> select count(*) from study.create_dg;

  COUNT(*)
----------
	 0

切换至ADG:

SQL> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

SQL> SELECT open_mode FROM V$DATABASE;

OPEN_MODE
------------------------------------------------------------
READ ONLY WITH APPLY

主库:

SQL> insert into study.create_dg values(1);  

1 row created.

SQL> commit;

Commit complete.

备库:

SQL> select * from study.create_dg;

	ID
----------
	 1

ADG的限制

STANDBY_MAX_DATA_DELAY如果设置为0

The standby database must receive redo data via the SYNC transport.

The redo transport status at the standby database must be SYNCHRONIZED and the primary database must be running in either maximum protection mode or maximum availability mode.

Real-time apply must be enabled

其他

https://www.oracle.com/technetwork/database/features/availability/maa-wp-11gr1-activedataguard-1-128199.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值