Oracle DATA GUARD参数详解

一、为何要设置数据库强制归档?

alter database force logging;

Oracle日志记录的三种模式:logging,force logging,nologging

logging:在创建数据库对象时(视图,索引,序列等)将日志信息写入联机重做日志文件,logging相当于对象的一个属性,用来标记创建对象时是否记录了REDO日志,包括在DML时是否记录了REDO日志。

force logging:强制记录日志,对数据所有的操作都产生日志信息,并将信息写入联机重做日志文件。

nologging:相反,较少的记录日志。

在做DATA GUARD时要保证数据的一致性,所以打开数据库强制归档模式。

二、为什么要在mount状态下开启数据库归档?

Oracle数据库启动的三个阶段,nomount,mount,open,分别加载的文件为参数文件,控制文件,数据文件,将数据库启动到mount阶段时,数据库根据参数文件中指定的控制文件路径打开控制文件,获取数据文件和日志文件的信息,此时可对数据库进行维护,开启归档模式,Oracle规定要在mount实例下开启归档。

三、为什么要配置静态监听参数?

在DATA GUARD架构中,在数据库mount状态下,动态监听无法将服务注册到数据库,静态监听则可以完成这个任务。典型监听文件listen.ora分为两个部分,LISTENER注册的是服务,SID_LIST_LISTENER注册的是实例。

四、参数文件中各项参数的意义是什么?

1、*.db_name='orcl' 

数据库名,需要保持同一个DATA GUARD中所有的数据库db_name一致

2、*.db_unique_name='orcl_p'

每一个数据库都要有唯一的名称

3、*.log_archive_config='dg_config=(orcl_p,orcl_s)'

该参数用于控制发送归档日志到远程位置,以及接收远程归档日志,并指定DATA GUARD配置的唯一数据库名,默认值为SEND,RECEIVE,NODG_CONFIG,当该参数为SEND时,会激活发送归档日志到远程位置,参数为NOSEND时,会禁止发送归档日志到远程位置;参数为RESEIVE时,会激活接收远程归档日志;参数为NORECEIVE时会禁止接收远程归档日志;参数为DG_CONFIG时,可以指定最多9个惟一数据库名;参数为NODG_CONFIG时,会禁止指定惟一数据库名,该参数是动态参数,可以使用alter system set log_archive_config='SEND';来修改。

4、*.log_archive_dest_1='location=/u01/arch valid_for=(all_logfiles,all_roles) db_unique_name=orcl_p'

log_archive_dest_1是DG重做日志传输的主要参数,一般在主库中起作用,在处理级联备库的时候会在备库发挥作用,该参数也可指定在线重做日志(ORL)和备库重做日志(SRL)产生归档日志的传输目的地。

(1)service:指定备库的网络连接名

(2)sync:指定使用同步的方法传送重做数据,即客户端事务的提交会发生在LGWR进程收到备库LNS发来的信息确认之后,对于最大可用及最大保护模式,需要至少一个备库net_timeout指定LGWR进程等待LNS进程响应时间,如果期间没有收到响应,则认为备库发生故障(failed),默认为30s,等待期间需要做以下事情:

a:停止旧的LNS进程

b:启动新的LNS进程

c:与备库建立连接

d:检测并停止旧的RFS进程

e:启动新的RFS进程

f:选择并打开新的SRL

g:初始化SR头,即备库的重做日志数据库

h:响应LNS进程告知已经完成准备工作

完成上面的操作后,LNS进程会通知LGWR备库连接成功,如果该过程超过了30s,则会继续放弃备库。

(3)reopen:属性控制主库尝试重新连接已经发生故障的备库的等待时间,默认为30s

(4)db_unique_name属性要在log_archive_dest_n中使用的话同时要在log_archive_config中设置,否则DATA GUARD会拒绝连接这个目标库,必须在主备库中将db_unique_name添加到log_archive_config参数中,当主库发起连接时,它将会发送自己的db_unique_name到备库,同时要求备库返回惟一的db_unique_name。在备库中将会检查log_archive_config参数,以确保主库的db_unique_name存在,如果不存在,那么连接请求就会被拒绝,如果存在,备库会把自己db_unique_name返回主库的LNS进程,如果返回值与主库该值不匹配,连接就会被终止。

(5)valid_for:属性定义了何时使用目标参数log_archive_dest_n以及作用于何种类型的日志文件

日志文件的合法值有以下三种:

online_logfile仅在归档ORL中有效

standby_logfile仅在归档SRL中有效

all_logfiles无论哪种重做日志文件类型都有效

角色的合法值有以下三种:

primary_role仅在主库中有效

standby_role仅在备库中有效

all_roles主备库都有效

(6)affirm:属性是使用sync方式目标的默认值

5、*.log_archive_dest_state_1=enable

用来指定归档目录是否可用。

6、*.standby_file_management='auto'

在主库创建数据文件时备库会自动创建数据文件

7、*.log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'

*.db_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'

log_file_name_convert与db_file_name_convert来保证主备库数据文件路径一致

8、*.fal_server='orcl_s'

FAL指获取归档日志(fetch archive log),因为网络中断或者资源紧张等问题导致主备日志不同步,MRP(Managed recovery process)/LSP(Logical Standby Process)不能直接与主库连接来获取丢失的归档日志,因此需要用到FAL来解决,fal_server后对应备库的db_unique_name

五、Oracle DATA GUARD进程结构是怎样的?

1、存在于主库的进程:

(1)LGWR:收集事务日志,更新联机日志,在同步模式下,LGWR将redo信息直接传送到备库的RFS进程,主库在继续处理前等待备库的确认。在非同步的情况下,也是直接将日志信息传到备库的RFS进程,但是不等待备库的确认信息。

(2)ARCH:在归档的同时,传递日志到备库RFS进程,可以用于解决GAP日志不连续问题。

2、存在于备库的进程:

(1)FAL:只有物理备库才有的进程,FAL指获取归档日志(Fetch Archive Log),因为网络中断或者资源紧张等问题导致主备日志不同步,MRP(Managed recovery process)/LSP(Logical Standby Process)不能直接与主库连 接来获取丢失的归档日志,因此需要用到FAL来解决。

(2)RFS(Remote File Server):主要用于接收从主库传过来的日志信息。arch进程归档重做日志,由MPR应用到备库。

(3)MRP(Managed Recovery Process):只针对于物理备库,应用归档日志到备库

(4)LSP(Logic Standby Process):只有逻辑备库拥有,控制归档日志应用到逻辑备库。

3、Oracle DG通过同步日志文件来保证主库与备库的一致性

如果一个数据库与单个或者多个备库之间连接出现问题,那么主库产生的日志文件便无法传输到备库上去,使用归档日志进程(FAL)提供一个客户服务机制,用于在主库与备库中断连接后将归档日志发送到备库上,以实现自动填充间隔和重新同步。在备库上,Oracle DATA GUARD使用远程文件服务器(RFS)进程从主数据库接收重做记录,使用管理恢复进程(MRP)将重做信息应用到物理备库中,使用逻辑备用进程(LSP)将经过SQL转换的重做信息应用到逻辑备库中。

4、Oracle DATA GUARD三种保护模式

保护模式

出现灾难时数据丢失风险

重做传输机制

最大保护

零数据丢失;双重故障保护

LGWR SYNC

最高可用性

零数据丢失;单故障保护

LGWR SYNC

最高性能

最小数据丢失

LGWR SYNC 或ARCH

默认保护模式为最高性能模式,可以使用alter database set standby database to maximize (protection|availability|performance}; 来切换保护模式

最大保护模式保证在事务提交时同时写到主库与备库的日志文件中来保证一致性,优点是安全,缺点是在备库出现故障时,主库也无法正常使用。

最高可用性相同与最大保护模式基本一样,不同点在于当备库出现故障时主库会立即切换为最高性能模式。

最高性能只需要确保提交的事务写到主库的日志文件中即可。

猜你喜欢

转载自blog.csdn.net/weixin_42774383/article/details/83959169