前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爆肝一万字终于把 Oracle Data Guard 核心参数搞明白了

爆肝一万字终于把 Oracle Data Guard 核心参数搞明白了

作者头像
JiekeXu之路
发布2021-10-12 14:47:44
3.9K0
发布2021-10-12 14:47:44
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路

作者 | JiekeXu

来源 | JiekeXu DBA之路(ID: JiekeXu_IT)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle Data Guard 核心参数说明,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!

在 Oracle 官方文档中,关于搭建物理备库有完整的说明,之前也写过几篇关于 Data Guard 的文章,感兴趣的可以看看:

Oracle 19C MAA 搭建指南

激活 ADG 备库时遇到的问题

Oracle 11g ADG 快照备库切换步骤

Oracle 11gR2 RAC ADG 并没有高可用

Oracle RAC11gR2 ADG搭建实施与应用

下面是 ADG 实时应用的架构图:

(使用实时应用将 redo 数据应用到备库)

这里先不在说明搭建过程和相关原理了,网上文章也有很多,本次主要说明搭建过程中的参数配置问题。

代码语言:javascript
复制
官方文档中建议参数如下:
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=USE_DB_RECOVERY_FILE_DEST 
  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'
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

这些参数控制重做传输服务如何将重做数据传输到备用系统,以及重做数据在本地文件系统上的归档。注意,示例中指定了异步(ASYNC)网络传输来传输LOG_ARCHIVE_DEST_2初始化参数上的重做数据。这些是推荐的设置,需要备重做日志文件(参见配置主数据库以接收重做数据)。

下面显示了主数据库上附加的备用角色初始化参数。 这些参数在主数据库转换为备用数据库时生效。

代码语言:javascript
复制
FAL_SERVER=boston
DB_FILE_NAME_CONVERT='/boston/','/chicago/'
LOG_FILE_NAME_CONVERT='/boston/','/chicago/' 
STANDBY_FILE_MANAGEMENT=AUTO

指定上面所示的初始化参数将设置主数据库以解决间隙,从新的主数据库转换新的数据文件和日志文件路径名,并在该数据库处于备用角色时归档传入的重做数据。 通过设置主角色和备用角色的初始化参数,在角色转换后无需更改任何参数。

一、下面简单介绍各个参数的含义:

DB_NAME:在主库上指定创建数据库时使用的名称。在物理备库上,使用主库的DB_NAME。

DB_UNIQUE_NAME:数据库唯一名,主备库唯一,各有个的名字。

LOG_ARCHIVE_CONFIG:启用或禁用将redo日志发送到远程目标和接收远程重做日志,并为 Data Guard 配置中的每个数据库指定唯一的数据库名称(DB_UNIQUE_NAME)。

CONTROL_FILES:为主数据库上的控制文件指定路径名。 建议提供控制文件的第二个副本,以便在将好的控制文件复制到坏的控制文件位置之后,可以轻松地重新启动实例。

REMOTE_LOGIN_PASSWORDFILE:如果使用远程登录密码文件对管理用户进行身份验证或重做传输会话,则必须将此参数设置为 EXCLUSIVE 或 SHARED。

LOG_ARCHIVE_FORMAT:使用线程(%t)、序列号(%s)和resetlogs ID (%r)指定归档重做日志文件的格式。

FAL_SERVER:指定 FAL 服务器的 Oracle Net 服务名(通常是在主角色中运行的数据库)。 当Chicago数据库以备用角色运行时,如果Boston无法自动发送丢失的日志文件,它将使用Boston数据库作为FAL服务器来获取(请求)丢失的归档重做日志文件。

STANDBY_FILE_MANAGEMENT: 设置为AUTO,以便当向主库添加或删除数据文件时,会自动对备库进行相应的更改。

DB_FILE_NAME_CONVERT:指定备库数据文件的路径名和文件名位置,然后是主库。 该参数将主库数据文件的路径名转换为备库数据文件的路径名。 该参数仅用于物理备库的路径名称转换。 该参数可以指定多对路径。

LOG_FILE_NAME_CONVERT:指定备库在线重做日志文件的位置,然后是主库。 该参数将主库日志文件的路径名转换为备库日志文件的路径名。 该参数可以指定多对路径。

在实际生产环境中,搭建 DG 也需在主库执行修改参数的命令,然后将参数传递到备库,再次修改相关参数。

代码语言:javascript
复制
show parameter spfile
--备份参数文件
create pfile='/tmp/pfile0930.ora' from spfile;

--主库修改如下参数(FAL_CLIENT 非必要参数):
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(jiktest,jikteststb)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=/oracle/arch_jiktest/jiktest VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jiktest';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=jikteststb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jikteststb';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;
alter system set FAL_SERVER=jikteststb;
alter system set FAL_CLIENT=jiktest;
alter system set standby_file_management=auto;

以上参数确保修改正确则不需要重启数据库,则表明搭建 DG 可以不用重启主库,但是如果可以允许重启主库的话,最好还是重启一下验证参数修改的正确性,如果要重启主库,则以下三个参数建议添加到主库,以防止主备切换时因参数问题出现无法正常切换,不同步等问题。

代码语言:javascript
复制
--因主库参数文件中默认没有 db_unique_name 故添加,两个 convert 参数因主库为 RAC 
-- 备库为单机文件系统,且此参数在主库修改时备库在前,主库在后,此三个参数要重启数据库。
alter system set db_unique_name=jiktest scope=spfile sid='*';
alter system set db_file_name_convert='/data/jikteststb','+DATA/jiktest','/data/jikteststb','+FRA/jiktest'  scope=spfile sid='*';
alter system set log_file_name_convert='/data/jikteststb','+DATA/jiktest','/data/jikteststb','+FRA/jiktest'  scope=spfile sid='*';

二、LOG_ARCHIVE_CONFIG参数的含义:

启用或禁用将redo日志发送到远程目标和接收远程重做日志,并为 Data Guard 配置中的每个数据库指定唯一的数据库名称(DB_UNIQUE_NAME)。将DG_CONFIG设置为一个文本字符串,其中包含配置中每个数据库的DB_UNIQUE_NAME,列表中的每个名称用逗号分隔。

取值如下:

代码语言:javascript
复制
 {
 [ SEND | NOSEND ]
 [ RECEIVE | NORECEIVE ]
 [ DG_CONFIG=(remote_db_unique_name1 [, ... remote_db_unique_name30) | NODG_CONFIG ]
 }

SEND:启用重做日志发送到远程目的地 NOSEND:禁用发送重做日志到远程目的地

RECEIVE:接收远程归档重做日志。NORECEIVE:禁用接收远程归档重做日志。

DG_CONFIG:为DataGuard配置中的所有数据库指定最多30个唯一数据库名的列表(使用DB_UNIQUE_NAME初始化参数定义)。

NODG_CONFIG:消除之前使用DG_CONFIG选项指定的服务提供者名称列表。当未设置此参数时,默认值为NULL。然而,NULL值被视为参数被设置为'SEND,RECEIVE, NODG_CONFIG'。

https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/LOG_ARCHIVE_CONFIG.html#GUID-4DABDBE9-04B6-44D2-B93D-DAB15EA71427

三、LOG_ARCHIVE_DEST_n 参数详解

LOG_ARCHIVE_DEST_n初始化参数最多定义31个(其中n = 1,2,3,… 31)目的地,每个目的地必须指定LOCATION或SERVICE属性,以指定在哪里存档重做数据。

以下是可选值:

代码语言:javascript
复制
LOG_ARCHIVE_DEST_[1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31] =
{ null_string |
 { LOCATION=path_name | SERVICE=service_name }
 [ MANDATORY ]
 [ REOPEN[=seconds] ]
 [ DELAY[=minutes] ]
 [ ENCRYPTION=ENABLED|DISABLED ]
 [ GROUP=group ]
 [ NOREGISTER ]
 [ PRIORITY=priority ]
 [ TEMPLATE=template ]
 [ ALTERNATE=destination ]
 [ MAX_FAILURE=count ]
 [ SYNC | ASYNC ]
 [ AFFIRM | NOAFFIRM ]
 [ NET_TIMEOUT=seconds ]
 [ VALID_FOR=(redo_log_type,database_role) ]
 [ DB_UNIQUE_NAME ]
 [ COMPRESSION={ENABLE|DISABLE|ZLIB|LZO} ]
 }

除LOCATION或SERVICE属性外的所有其他属性都是可选的。

注意,无论指定LOCATION属性还是SERVICE属性,它都必须是属性列表中提供的第一个属性。如果你选择不输入任何属性,那么你可以通过输入以下内容来指定一个NULL字符串:

LOG_ARCHIVE_DEST_n=' ';

您可以设置LOG_ARCHIVE_DEST_n初始化参数的属性,以控制重做传输服务如何将重做数据从生产或主数据库目的地传输到另一个(备用)数据库目的地的不同方面。您可以查询V$ARCHIVE_DEST视图,以查看每个目的地(n)的当前属性设置。对于定义的每个LOG_ARCHIVE_DEST_n初始化参数,必须指定相应的LOG_ARCHIVE_DEST_STATE_n参数。LOG_ARCHIVE_DEST_STATE_n(n是1到31之间的整数)初始化参数指定了相应的目标当前是启用还是禁用。通过LOG_ARCHIVE_DEST_11到LOG_ARCHIVE_DEST_31的目的地,LOG_ARCHIVE_DEST_11不支持SYNC、ARCH、LOCATION、MANDATORY和ALTERNATE属性,不能指定为ALTERNATE属性的目标。只有COMPATIBLE初始化参数设置为11.2.0或更高时,才能使用LOG_ARCHIVE_DEST_11到LOG_ARCHIVE_DEST_31。

LOG_ARCHIVE_DEST_n参数不支持以下属性。它们被保留只是为了向后兼容。

表 LOG_ARCHIVE_DEST_n初始化参数已弃用属性

弃用属性Deprecated Attribute

Alternative 替代参数

ARCH

指定同步或异步。如果没有指定任何属性,则ASYNC为默认值。

LGWR

指定同步或异步。如果没有指定任何属性,则ASYNC为默认值。

OPTIONAL

默认情况下,目的地是可选的。

VERIFY

此属性仅与已弃用的ARCH属性一起使用。

另外,注意ASYNC和SYNC属性的以下更改:

不再需要ASYNC属性上的BLOCKS关键字。

不再需要设置这个关键字,因为Data Guard会根据需要动态地调整块计数,使其向上或向下调整到适当的块数量。

不再需要SYNC属性上的PARALLEL和NOPARALLEL关键字。

我们搭建备库一般使用如下语句足以

alter system set LOG_ARCHIVE_DEST_2='SERVICE=jikteststb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jikteststb';

下面对 LOG_ARCHIVE_DEST_n 不同的属性进行说明:

1)SERVICE=net_service_name:指定一个有效的Oracle网络服务名称(service =net_service_name),该名称标识要发送重做数据的远程Oracle数据库实例。每个目的地必须指定LOCATION或SERVICE属性。没有默认的网络服务名称。

每个目的地必须指定LOCATION或SERVICE属性,以标识本地磁盘目录或远程数据库目的地,重做传输服务可以在其中传输重做数据。

LOG_ARCHIVE_DEST_1到LOG_ARCHIVE_DEST_10目的地可以包含LOCATION属性或SERVICE属性。

LOG_ARCHIVE_DEST_11到LOG_ARCHIVE_DEST_31目的地只能包含SERVICE属性。

2)VALID_FOR=(redo_log_type, database_role):基于以下因素,识别重做传输服务何时可以将重做数据传输到目的地:

redo_log_type -是否在线重做日志文件、备用重做日志文件或两者目前正在此目的地的数据库上归档;

database_role——数据库当前运行在主角色还是备用角色;

VALID_FOR属性是可选的。 但是,Oracle建议在Oracle Data Guard配置中为每个数据库的每个重做传输目的地指定VALID_FOR属性,以便在角色转换到配置中的任何备用数据库后,重做传输继续进行 。

要为每个LOG_ARCHIVE_DEST_n目的地配置这些因素,您可以使用一对关键字指定该属性:

redo_log_type关键字将目标标识为有效的归档以下其中之一:

online_logfile仅在归档在线重做日志文件时有效。

standby_logfile仅在归档备重做日志文件时有效。

ALL_LOGFILES -当归档在线重做日志文件或备用重做日志文件时,此目标文件有效。

database_role关键字标识该目标在其中有效存档的角色:

primary_role该目标仅在数据库以主角色运行时有效。

standby_role该目标仅在数据库运行在备用角色时有效。

all_roles -当数据库以主角色或备用角色运行时,此目标是有效的。

如果没有为目标指定VALID_FOR属性,默认情况下,在目标上启用归档在线重做日志文件和备用重做日志文件,而不管数据库是运行在主角色还是备用角色。 这个默认行为等同于在VALID_FOR属性上设置(ALL_LOGFILES,ALL_ROLES)关键字对。

VALID_FOR属性使您可以为主角色和备用角色使用相同的初始化参数文件。

LOG_ARCHIVE_DEST_1='LOCATION=/disk1/oracle/oradata VALID_FOR=(ALL_LOGFILES, ALL_ROLES)'

当此数据库以主或备用角色运行时,目标1将所有日志文件归档到/disk1/oracle/oradata本地目录位置。

3)SYNC/ASYNC(同步和异步):在事务提交之前,由事务生成的重做数据不需要在具有该属性的目的地接收到。默认则为 ASYNC.

SYNC:事务生成的重做数据必须在事务提交之前被每个启用了该属性的目的地接收。

LOG_ARCHIVE_DEST_11到LOG_ARCHIVE_DEST_31参数不支持SYNC属性。

事务生成的重做数据必须在事务提交之前被每个启用的具有SYNC属性的目的地接收。

在主库和逻辑备库上,目标1到10默认为ASYNC(实时级联)。

在物理备节点、快照备节点和远 far sync 实例上,目的地1到10默认为ARCH传输模式。 (注意ARCH属性已弃用; 在这种情况下使用ARCH只是表明非实时级联。)

目的地11到31总是默认为ASYNC。

4) DB_UNIQUE_NAME=name:指定此目的地的数据库的唯一名称。你必须指定一个唯一名字;没有默认值

这个属性是可选的,如果: 未指定LOG_ARCHIVE_CONFIG=DG_CONFIG初始化参数。

这是一个本地目的地(由LOCATION属性指定)。

如果指定了LOG_ARCHIVE_CONFIG=DG_CONFIG初始化参数,并且这是一个远程目标(通过SERVICE属性指定),则需要此属性。

使用DB_UNIQUE_NAME属性可以清楚地标识主数据库和备用数据库之间的关系。如果在Oracle Data Guard配置中有多个备用数据库,则此属性特别有用。

DB_UNIQUE_NAME指定的名称必须与DG_CONFIG列表中的一个DB_UNIQUE_NAME值相匹配。重做传输服务验证指定目的地的数据库的DB_UNIQUE_NAME属性是否与DB_UNIQUE_NAME属性匹配,或者到该目的地的连接被拒绝。

DB_UNIQUE_NAME属性指定的名称必须与目标数据库的DB_UNIQUE_NAME初始化参数指定的名称匹配。

5) AFFIRM and NOAFFIRM:控制重做传输目的地是否在将接收到的重做数据写入备重做日志之前或之后确认它。默认为NOAFFIRM。

AFFIRM——指定重做传输目的地在将重做数据写入备重做日志后确认接收到重做数据。

NOAFFIRM -指定重做传输目的地在将重做数据写入备重做日志之前确认接收到重做数据。

6) ALTERNATE=LOG_ARCHIVE_DEST_n【n 为1-10】:指定在原始目标失败时使用的备用归档目标。没有默认值;如果没有指定备用目的地,那么如果原始目的地失败,归档不会自动更改为另一个目的地。

注意:从Oracle Database 12c Release 2(12.2.0.1)开始,您可以通过使用GROUP和PRIORITY属性来代替远程日志归档目的地的alternate属性,从而扩展备用归档目的地的数量和功能。 此新方法不能与ALTERNATE属性方法一起使用。 有关更多信息,请参见备用目的地。

ALTERNATE属性是为配置备用本地归档目的地而保留的。为了向后兼容,在使用ALTERNATE属性配置远程备用目的地中提供了使用ALTERNATE作为远程日志归档目的地的示例。

LOG_ARCHIVE_DEST_1='LOCATION=/disk1 MANDATORY MAX_FAILURE=1 ALTERNATE=LOG_ARCHIVE_DEST_2'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ALTERNATE

LOG_ARCHIVE_DEST_2='LOCATION=/disk2 MANDATORY ALTERNATE=LOG_ARCHIVE_DEST_1'

7) DELAY[=minutes] 指定在从主站点检索重做的备用站点上存档重做数据与将存档重做日志文件应用到备用数据库或从备用数据库级联的任何备用数据库之间的最小时间延迟。如果指定DELAY属性而不指定时间间隔,则默认为30分钟。V$ARCHIVE_DEST视图的DELAY_MINS和DESTINATION列可查看:select DELAY_MINS,DESTINATION from V$ARCHIVE_DEST where DEST_NAME='LOG_ARCHIVE_DEST_1';

注意点:

  • DELAY属性是可选的。 缺省情况下,没有延迟。
  • DELAY属性表示备用目标上的归档重做日志文件在指定的时间间隔过期之前不可用于恢复。 时间间隔以分钟为单位,从重做数据成功传输到备站点并归档时开始。
  • DELAY属性可用于保护备用数据库不受损坏或错误的主数据的影响。 然而,这是一个折衷,因为在故障转移期间,应用所有重做直到损坏点需要更多的时间。
  • DELAY属性不会影响重做数据到备用目的地的传输。
  • 如果启用了实时应用程序,则忽略您设置的任何延迟。
  • DELAY属性的更改将在下次重做数据存档时生效(日志切换后)。正在进行的归档不受影响。
  • 级联备用程序使用的DELAY值是主程序上为LOG_ARCHIVE_DEST_n参数设置的值,该参数将重做发送到级联备用程序。

您可以使用DELAY属性来设置一个配置,其中以与主数据库不同程度同步的方式维护多个备用数据库。 但是,这种保护在故障转移期间会引起一些开销,因为Redo Apply要花更多的时间将所有重做应用到损坏点。

例如,假设主数据库A中有备用数据库B和备用数据库c,备用数据库B设置为灾难恢复数据库,因此没有时间延迟。 备用数据库C设置了2小时的延迟,这段时间足以在用户错误传播到备用数据库之前发现它们。

下面的示例演示如何为该配置指定DELAY属性:

LOG_ARCHIVE_DEST_1='LOCATION=/arch/dest MANDATORY'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_2='SERVICE=stbyB SYNC AFFIRM'

LOG_ARCHIVE_DEST_STATE_2=ENABLE

LOG_ARCHIVE_DEST_3='SERVICE=stbyC DELAY=120'

LOG_ARCHIVE_DEST_STATE_3=ENABLE

8) ENCRYPTION 属性用于指定重做数据在传输到零数据丢失恢复设备(恢复设备)之前是否加密。默认是 DISABLE.

注意:重做传输加密只允许连接到恢复设备。尝试在恢复设备以外的日志归档目标上配置加密会导致错误。要使用ENCRYPTION属性,必须将受保护数据库的COMPATIBLE初始化参数设置为11.2.0.4或更高。

9) NET_TIMEOUT=seconds 指定主系统上的日志写入进程在终止网络连接之前等待来自SYNC (NSSn)进程的秒数,取值为1-1200秒。默认值是30秒。如果为 ASYNC 则会忽略此参数,也不会报错。

如果在NET_TIMEOUT秒内没有收到确认,则会记录一个错误并终止到该目的地的重做传输会话。虽然最小值为1秒是允许的,但Oracle建议最小值为8到10秒,以避免由于短暂的网络错误而断开备用数据库。NET_TIMEOUT属性是可选的。但是,如果不指定NET_TIMEOUT属性,则将其设置为30秒,但是主数据库可能会停滞。 为了避免这种情况,为NET_TIMEOUT属性指定一个较小的非零值,以便主数据库在等待网络服务器状态时,在用户指定的超时时间到期后可以继续操作。

从Oracle数据库12c版本12.2(12.2.0.1)开始,有一个新的数据库初始化参数DATA_GUARD_SYNC_LATENCY,它对所有同步备用目的地都是全局的。 它定义了在至少一个同步备节点确认收到重做后,主数据库在断开后续目的地之前可能等待的最大时间(以秒为单位)。

LOG_ARCHIVE_DEST_2='SERVICE=stby1 SYNC NET_TIMEOUT=10'

LOG_ARCHIVE_DEST_STATE_2=ENABLE

10) GROUP属性用于指定日志归档目标的特定集合中的成员关系。 组编号为1到8。 默认组(group =0)的特殊之处在于它不能被分配。 默认组使用未显式分配给组的所有目的地填充。

下面的例子是用来说明基本概念的,并不是完全按照所示的那样使用。 根据您的配置,可能需要其他参数,例如DB_UNIQUE_NAME。

LOG_ARCHIVE_DEST_1='SERVICE=FS1 GROUP=1'

LOG_ARCHIVE_DEST_2='SERVICE=FS2 GROUP=1'

LOG_ARCHIVE_DEST_3='SERVICE=FS3 GROUP=2'

LOG_ARCHIVE_DEST_4='SERVICE=FS4 GROUP=2'

11) COMPRESSION 用于指定重做数据在传输到重做传输目的地之前是否被压缩。取值为:ENABLE, DISABLE, ZLIB, or LZO,默认值为DISABLE。ENABLE选项默认启用压缩并使用ZLIB压缩算法。注意的是 sqlnet.ora 中将SQLNET.COMPRESSION压缩配置参数设置为disabled(设置为off)。

示例如下:

LOG_ARCHIVE_DEST_3='SERVICE=denver SYNC COMPRESSION=ENABLE'

LOG_ARCHIVE_DEST_STATE_3=ENABLE

12) MANDATORY属性指定填满的在线日志文件必须成功地归档到目标,然后才能重用它们。

如果未指定MANDATORY,则默认情况下,目标被认为是可选的。

至少有一个目的地必须成功,即使所有目的地都是可选的。 如果归档到一个可选目标失败,联机重做日志文件仍然可以重用,并可能最终被覆盖。 但是,如果强制目标的归档操作失败,则无法覆盖在线重做日志文件。

LOG_ARCHIVE_MIN_SUCCEED_DEST=n参数(其中n为1到10的整数)指定在覆盖联机重做日志文件之前必须成功归档的目的地数量。

您必须至少有一个本地目的地,您可以宣布为强制性目的地,也可以选择离开。

因为LOG_ARCHIVE_MIN_SUCCEED_DEST参数的最小值是1,所以至少有一个本地目的地在操作上被视为必须的。

任何强制目的地的失败都会使LOG_ARCHIVE_MIN_SUCCEED_DEST参数不相关。

LOG_ARCHIVE_MIN_SUCCEED_DEST不能大于必选目的地数量和可选本地目的地数量。

V$ARCHIVE_DEST固定视图的BINDING列指定了失败如何影响归档操作

13) MAX_FAILURE属性控制日志交换机上重做传输服务尝试重新建立通信并在主数据库放弃目标之前将重做数据传输到失败目标的连续次数。

对于使用新的GROUP和PRIORITY属性的重做目的地,如果错误计数达到MAX_FAILURE属性指定的值,那么目的地将进入error状态,直到发现它是可访问的。 它将根据为重新开放属性指定的值定期检查。 对于日志归档组中的默认目的地(那些不使用新的GROUP和PRIORITY属性的重做目的地),MAX_FAILURE属性的行为与Oracle Database 12c Release 1(12.1.0.1)中相同。

下面的示例允许重做传输服务尝试在日志交换机上最多连续三次重新连接到失败的目的地,只要每个日志交换机之间的间隔大于5秒。 如果存档操作在第三次尝试之后失败,那么目的地将被视为未指定REOPEN属性,并将目的地标记为永久失败,直到重置。

LOG_ARCHIVE_DEST_1='LOCATION=/arc_dest REOPEN=5 MAX_FAILURE=3'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

14)NOREGISTER属性表示归档重做日志文件的位置不应该被记录在相应的目标上。

如果备用数据库目标是Oracle Data Guard配置的一部分,则NOREGISTER属性是可选的。

如果目标不是Oracle Data Guard配置的一部分,则需要NOREGISTER属性。

此属性仅适用于远程目的地。 每个归档重做日志文件的位置总是记录在主数据库控制文件中。

在没有下游GoldenGate挖掘设置的Oracle Data Guard配置中不能使用此属性。 在此场景中使用NOREGISTER可能会在切换操作期间导致问题。

15)PRIORITY属性用于在日志归档目的地集合中指定首选项。

优先级从1到8。 值越低优先级越高。 最低优先级(priority =8)是特殊的,因为如果该优先级是活动的,那么所有处于该优先级的目的地都是活动的。 如果任何高优先级的目的地返回服务,那么该目的地将被激活,而所有低优先级的目的地将被激活。

PRIORITY属性总是与GROUP属性一起使用,以提供组成员(重做目的地)的有序启用和回退。

下面的例子是用来说明基本概念的,并不是完全按照所示的那样使用。 根据您的配置,可能需要其他参数,例如DB_UNIQUE_NAME。 定义优先级的日志归档目标设置示例如下:

LOG_ARCHIVE_DEST_1='SERVICE=FS1 SYNC GROUP=1 PRIORITY=1'

LOG_ARCHIVE_DEST_2='SERVICE=FS2 SYNC GROUP=1 PRIORITY=1'

LOG_ARCHIVE_DEST_3='SERVICE=FS3 ASYNC GROUP=1 PRIORITY=2'

LOG_ARCHIVE_DEST_4='SERVICE=TS ASYNC GROUP=1 PRIORITY=3'

这种声明会导致以下行为:

主服务器发送到两个首选远同步实例FS1或FS2中的任意一个。

如果FS1和FS2都不可用,那么主服务器将发送给FS3(在本例中通过ASYNC)。

如果在将主文件传送到FS3时,FS1或FS2可用,则主文件将失败返回到可用的首选日志归档目的地。

如果所有三个优先级更高的日志归档目的地都失败,则主日志开始发送到TS(Terminal Standby)。 在运送到TS时,如果FS1、FS2或FS3可用,则主服务器将切换到新可用的高优先级目的地。

16)REOPEN属性指定重做传输服务尝试重新打开失败目的地之前的最小秒数。默认值是300秒;

重新开放属性是可选的。

重做传输服务试图在日志切换时重新打开失败的目的地。

重做传输服务检查上一次错误的时间加上重开间隔是否小于当前时间。 如果是,重做传输服务将尝试重新打开目的地。

重开适用于所有错误,而不仅仅是连接失败。 这些错误包括但不限于网络故障、磁盘错误和配额异常。

如果将REOPEN指定为可选目标,则Oracle数据库可能在出现错误时覆盖在线重做日志文件。如果将REOPEN指定为MANDATORY目标,则当无法成功传输重做数据时,将暂停主数据库重做传输服务。 当这种情况发生时,考虑以下选择:

通过延迟目的地、将目的地指定为可选或更改SERVICE属性值来更改目的地。

指定一个备用目的地。

禁用的目的地。

LOG_ARCHIVE_DEST_3='SERVICE=stby1 MANDATORY REOPEN=60'

LOG_ARCHIVE_DEST_STATE_3=ENABLE

17)TEMPLATE属性为目标存档重做日志文件的名称定义了目录规范和格式模板。

该模板用于生成与重做目的地的LOG_ARCHIVE_FORMAT初始化参数定义的默认文件名格式不同的文件名。

TEMPLATE属性是可选的。如果未指定TEMPLATE,则归档重做日志将使用LOG_ARCHIVE_FORMAT初始化参数的值命名。

TEMPLATE属性覆盖远程归档目标上的LOG_ARCHIVE_FORMAT初始化参数设置。

TEMPLATE属性仅对远程目的地有效(由SERVICE属性指定)。

为filename_template指定的值必须包含如表17-1所示的%s、%t和%r指令。

filename_template值被传输到目的地,在创建文件名之前,在目的地对其进行翻译和验证。

四、LOG_ARCHIVE_DEST_STATE_n 参数

The LOG_ARCHIVE_DEST_STATE_n parameters (where n = 1, 2, 3, ... 31) specify the availability state of the corresponding destination.

取值:enable、defer、alternate、reset

enable:指定可用于后续归档操作(自动或手动)的有效日志归档目标。这是默认值。

defer:指定保留有效的目标信息和属性,但在重新启用目标之前不进行归档操作。

alternate:指定未启用日志归档目标,但在与另一个目标通信失败时将启用日志归档目标。

reset:函数与defer相同,但如果目标之前失败,则清除目标的任何错误消息。

LOG_ARCHIVE_DEST_STATE_n参数对LOG_ARCHIVE_DEST或LOG_ARCHIVE_DUPLEX_DEST参数的ENABLE状态没有影响。

V$ARCHIVE_DEST动态性能视图显示当前会话使用的值。该视图的DEST_ID列对应于归档目标后缀n。

五、LOG_ARCHIVE_DEST

只有在以ARCHIVELOG模式运行数据库或从归档重做日志恢复数据库时,LOG_ARCHIVE_DEST才适用。LOG_ARCHIVE_DEST与LOG_ARCHIVE_DEST_n参数不兼容,当任何LOG_ARCHIVE_DEST_n参数的值不是空字符串时,必须定义为空字符串("")或(' ')。在归档重做日志文件时,使用文本字符串指定磁盘文件或磁带设备的默认位置和根目录。(并非所有操作系统都支持归档到磁带。)不能为裸分区。

如果LOG_ARCHIVE_DEST没有显式定义,并且所有LOG_ARCHIVE_DEST_n参数都有空字符串值,则LOG_ARCHIVE_DEST在实例启动时设置为操作系统特定的默认值。

要覆盖此参数指定的目标,可以为手动归档指定一个不同的目标,或者使用SQL*Plus语句ARCHIVE LOG START filespec进行自动归档,其中filespec是新的归档目标。要永久更改目标,使用ALTER SYSTEM SET LOG_ARCHIVE_DEST = filespec语句,其中filespec是新的归档目标。

LOG_ARCHIVE_DEST和LOG_ARCHIVE_FORMAT本身都不是完整的文件或目录说明符;它们只需要在变量被替换为LOG_ARCHIVE_FORMAT并将两个参数连接在一起之后形成一个有效的文件路径。

六、FAL_CLIENT

不再需要该参数。如果没有设置,则获取归档日志(FAL)服务器从LOG_ARCHIVE_DEST_n参数中获取客户机的网络地址,该参数对应于客户机的DB_UNIQUE_NAME。FAL_CLIENT指定FAL服务使用的FAL(获取归档日志)客户端名称,通过FAL_SERVER初始化参数配置,以引用FAL客户端。该值是Oracle Net服务名,假设在FAL服务器系统上配置正确,指向FAL客户端(备用数据库)。故需要提前配置好本地的 tnsnames.ora 文件。

七、FAL_SERVER

FAL_SERVER指定备用数据库的FAL(获取归档日志)服务器。该值是一个Oracle Net服务名,假设在备用数据库系统上正确配置了它,以指向所需的FAL服务器。可指定一个或多个数据库的Oracle Net服务名,备用数据库可以从中获取(请求)丢失的归档重做日志文件。故需要提前配置好本地的 tnsnames.ora 文件中关于远程备库的连接串。即主备库中所有节点的 tnsnames.ora 文件需一致且都有主备库的连接串。

代码语言:javascript
复制
21:46:55 SYS@edwstb1> show parameter FAL_

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
fal_client                           string      EDWSTB
fal_server                           string      EDW
21:46:56 SYS@edwstb1> !cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

JIEKEXU =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = edwrac-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = JiekeXu)
    )
  )

EDW =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.27.4)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = edw)
    )
  )

EDWSTB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.27.14)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = edwstb)
    )
  ) 

关于参数介绍说明就说这么多,对于备库的参数修改问题这里在唠叨几句。

八、备库参数修改问题

代码语言:javascript
复制
--主库创建一个 pfile 参数文件,传至备库
create pfile='/tmp/spfilestb0930.ora' from spfile;
scp /tmp/spfilestb0930.ora oracle@1XX.XX.X.X:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/

对于主库是单机文件系统使用如下全局替换则 30 秒修改完毕,但如果主库是 RAC 则先全局替换完后需要手动删除多余参数。

代码语言:javascript
复制
-- vi 编辑模式,全局替换
:%s#jikteststb#AAAA#g
:%s#jiktest#jikteststb#g
:%s#AAAA#jiktest#g

因前面替换,将 db_name 也替换了,故需要修改 db_unique_name 和 db_name 还有 fal_client 和 fal_server 为当前正确值。对于 RAC 传过来的参数也需要删除其他节点信息,只保留一个节点,还需删除内存相关参数、集群相关参数 cluster_database=true 和 instance_number 以及 remote_listener 、thread、undo_tablespace 等参数,只保留一个即可。下面是一个 RAC 到 单机文件系统的备库参数示范。

代码语言:javascript
复制
*.__db_cache_size=7381975040
*.__java_pool_size=33554432
*.__large_pool_size=67108864
*.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
*.__shared_io_pool_size=0
*.__shared_pool_size=1509949440
*.__streams_pool_size=33554432
*._serial_direct_read='NEVER'
*.audit_file_dest='/u01/app/oracle/admin/jikteststb/adump'
*.audit_trail='FALSE'
*.compatible='11.2.0.4.0'
*.control_files='/data/jikteststb/controlfile/current01.ctl','/data/jikteststb/controlfile/current02.ctl'
*.db_block_size=8192
*.db_create_file_dest='/data/'
*.db_domain=''
*.db_file_name_convert='+DATA/jiktest','/data/jikteststb','+FRA/jiktest','/data/jikteststb'
*.db_unique_name='jikteststb'
*.db_name='jiktest'
*.db_recovery_file_dest='/data/jikteststb/arch'
*.db_recovery_file_dest_size=84050706432
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=jikteststbXDB)'
*.enable_ddl_logging=TRUE
*.fal_client='jikteststb'
*.fal_server='jiktest'
*.instance_number=1
*.log_archive_config='DG_CONFIG=(jikteststb,jiktest)'
*.log_archive_dest_1='LOCATION=/data/jikteststb/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jikteststb'
*.log_archive_dest_2='SERVICE=jiktest LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jiktest'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_file_name_convert='+DATA/jiktest','/data/jikteststb','+FRA/jiktest','/data/jikteststb'
*.open_cursors=300
*.pga_aggregate_target=3027238912
*.processes=1500
*.remote_login_passwordfile='exclusive'
*.service_names='jiktest,jikteststb'
*.sga_target=9082765312
*.standby_file_management='AUTO'
*.thread=1
*.undo_tablespace='UNDOTBS1'

注意:db_create_file_dest='/data/' 参数,

如果physicalstandby同时设置了db_create_file_dest/db_file_name_convert,

此参数优先级高于 db_file_name_convert 参数.

代码语言:javascript
复制
22:09:19 SYS@jikteststb> show parameter name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name               string
db_file_name_convert                 string      +DATA/jiktest, /data/jikteststb, +
                                                 FRA/jiktest, /data/jikteststb
db_name                              string      jiktest
db_unique_name                       string      jikteststb
global_names                         boolean     FALSE
instance_name                        string      jikteststb
lock_name_space                      string
log_file_name_convert                string      +DATA/jiktest, /data/jikteststb, +
                                                 FRA/jiktest, /data/jikteststb
processor_group_name                 string
service_names                        string      jiktest,jikteststb

--则可以置空 db_create_file_dest 参数,重启数据库。
alter system reset db_create_file_dest;
alter system reset db_create_file_dest='' scope=spfile sid='*';
alter system set db_file_name_convert='+DATA/jiktest', '/data/jikteststb', '+FRA/jiktest', '/data/jikteststb' scope=spfile sid='*';
alter system set log_file_name_convert='/oracle/app/oracle/oradata/JXRDB','/oracle/app/oracle/oradata/JXRDBSTB'  scope=spfile sid='*';

参考链接:https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/index.html

本次分享到此结束啦~

❤️ 欢迎关注我的公众号,来一起玩耍吧!!!

——————————————————————--—--————

公众号:JiekeXu DBA之路 墨天轮:https://www.modb.pro/u/4347 CSDN :https://blog.csdn.net/JiekeXu 腾讯云:https://cloud.tencent.com/developer/user/5645107

————————————————————————----———

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下面是 ADG 实时应用的架构图:
    • 三、LOG_ARCHIVE_DEST_n 参数详解
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档