爆肝一万字终于把 Oracle Data Guard 核心参数搞明白了
作者 | JiekeXu
来源 | JiekeXu DBA之路(ID: JiekeXu_IT)
大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle Data Guard 核心参数说明,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!
在 Oracle 官方文档中,关于搭建物理备库有完整的说明,之前也写过几篇关于 Data Guard 的文章,感兴趣的可以看看:
激活 ADG 备库时遇到的问题
Oracle 11g ADG 快照备库切换步骤
Oracle 11gR2 RAC ADG 并没有高可用
Oracle RAC11gR2 ADG搭建实施与应用
下面是 ADG 实时应用的架构图:
(使用实时应用将 redo 数据应用到备库)
这里先不在说明搭建过程和相关原理了,网上文章也有很多,本次主要说明搭建过程中的参数配置问题。
官方文档中建议参数如下:
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初始化参数上的重做数据。这些是推荐的设置,需要备重做日志文件(参见配置主数据库以接收重做数据)。
下面显示了主数据库上附加的备用角色初始化参数。 这些参数在主数据库转换为备用数据库时生效。
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 也需在主库执行修改参数的命令,然后将参数传递到备库,再次修改相关参数。
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 可以不用重启主库,但是如果可以允许重启主库的话,最好还是重启一下验证参数修改的正确性,如果要重启主库,则以下三个参数建议添加到主库,以防止主备切换时因参数问题出现无法正常切换,不同步等问题。
--因主库参数文件中默认没有 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,列表中的每个名称用逗号分隔。
取值如下:
{
[ 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属性,以指定在哪里存档重做数据。
以下是可选值:
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 不同的属性进行说明:
这个默认行为等同于在VALID_FOR属性上设置(ALL_LOGFILES,ALL_ROLES)关键字对。
DELAY属性是可选的。 缺省情况下,没有延迟。
DELAY属性表示备用目标上的归档重做日志文件在指定的时间间隔过期之前不可用于恢复。 时间间隔以分钟为单位,从重做数据成功传输到备站点并归档时开始。
DELAY属性可用于保护备用数据库不受损坏或错误的主数据的影响。 然而,这是一个折衷,因为在故障转移期间,应用所有重做直到损坏点需要更多的时间。
DELAY属性不会影响重做数据到备用目的地的传输。
如果启用了实时应用程序,则忽略您设置的任何延迟。
DELAY属性的更改将在下次重做数据存档时生效(日志切换后)。正在进行的归档不受影响。
级联备用程序使用的DELAY值是主程序上为LOG_ARCHIVE_DEST_n参数设置的值,该参数将重做发送到级联备用程序。
对于日志归档组中的默认目的地(那些不使用新的GROUP和PRIORITY属性的重做目的地),MAX_FAILURE属性的行为与Oracle Database 12c Release 1(12.1.0.1)中相同。
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 文件需一致且都有主备库的连接串。
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)
)
)
关于参数介绍说明就说这么多,对于备库的参数修改问题这里在唠叨几句。
八、备库参数修改问题
--主库创建一个 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 则先全局替换完后需要手动删除多余参数。
-- 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 到 单机文件系统的备库参数示范。
*.__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 参数.
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
————————————————————————----———