ARCHIVE_LAG_TARGET 定时切换在线日志

某客户数据库日志切换频繁,导致数据库无法及时分配新的在线重做日志组。根据告警日志信息,判断为archive_lag_target参数设置导致的。故对此参数进行研究。

Property Description
Parameter type Integer
Default value 0 (disabled)
Modifiable ALTER SYSTEM
Range of values 0 or any integer in [60, 7200]
Basic No
Real Application Clusters Multiple instances should use the same value.

ARCHIVE_LAG_TARGET limits the amount of data that can be lost and effectively increases the availability of the standby database by forcing a log switch after the specified amount of time elapses.

A 0 value disables the time-based thread advance feature; otherwise, the value represents the number of seconds. Values larger than 7200 seconds are not of much use in maintaining a reasonable lag in the standby database. The typical, or recommended value is 1800 (30 minutes). Extremely low values can result in frequent log switches, which could degrade performance; such values can also make the archiver process too busy to archive the continuously generated logs.

以上为Oracle官方文档对ARCHIVE_LAG_TARGET参数的描述,可以很清楚的看到如下信息:

  1. 参数值应为整数,单位为秒。取值范围为60~7200,建议值为1800(即30分钟);
  2. 参数作用:减少故障时数据损失;有效提高备库可用性
  3. 参数设置建议:【设置过大】起不到定时切换的作用,一旦主库出现问题,可能导致相当相当多的redo丢失;【设置国小】导致日志频繁切换,影响数据库性能;导致ARCn过于频繁,无法及时分配新的日志组。

通过测试,此参数可在线调整(使用spfile的情况下):

SQL> show parameter lag

NAME                                 TYPE        VALUE
———————————— ———– —–
archive_lag_target                   integer     0

SQL> alter system set archive_lag_target=60;

系统已更改。

SQL> show parameter lag

NAME                                 TYPE        VALUE
———————————— ———– ——————————
archive_lag_target                   integer     60
client_result_cache_lag              big integer 3000
plsql_ccflags                        string

image

SQL> alter system set archive_lag_target=0;

系统已更改。

SQL> show parameter lag

NAME                                 TYPE        VALUE
———————————— ———– ——————————
archive_lag_target                   integer     0
client_result_cache_lag              big integer 3000
plsql_ccflags                        string

最小值为60,若设置值小于60,则系统会默认修改为60:

SQL> show parameter lag

NAME                                 TYPE        VALUE
———————————— ———– —————————
archive_lag_target                   integer     0
client_result_cache_lag              big integer 3000
plsql_ccflags                        string
SQL> alter system set archive_lag_target=10;

系统已更改。

SQL>
SQL>
SQL> show parameter lag

NAME                                 TYPE        VALUE
———————————— ———– —————————
archive_lag_target                   integer     60
client_result_cache_lag              big integer 3000
plsql_ccflags                        string
后话:此客户数据库每15分钟(900秒)切换一次日志,小于Oracle官方建议值1800(30分钟);但是客户有5个日志组,按说不应该遇到新日志组无法分配的情况,需要到客户现场收集数据再研究下。

参考文档:Eygle 《设置ARCHIVE_LAG_TARGET 强制日志切换》http://www.eygle.com/archives/2006/11/archive_lag_target_force_logswitch.html

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress