达梦8 异步备库的应用测试

在实际应用中,如果数据库规模很大,并且对数据的实时性要求不是很严格,则可以配 置多个异步备库用于分担统计报表等任务,减少主库压力。

达梦8的异步备库是被主库“驱动”的,没有特殊的参数配置。只需要有一份包含所有节点的dmmal.ini文件。dmwatcher.ini文件中DW_TYPE=LOCAL,DW_MODE = MANUAL。

主库则首先需要在dm.ini文件中设置TIMER_INI=1,然后在dmarch.ini文件中添加异步归档路径和参数,最后在dmtimer.ini文件中定义日志发送策略。当然也需要有一份包含所有节点的dmmal.ini文件。

作为初学者有两个参数比较重要,ARCH_SEND_DELAY和FREQ_MINUTE_INTERVAL。前者在dmarch.ini文件,后者在dmtimer.ini文件。

下面做一个实验来验证这两个参数工作原理:
ARCH_SEND_DELAY=10
FREQ_MINUTE_INTERVAL=1 

主库循环向临时表中加入数据

#创建测试表,用于记录时间
create table timer_t1(d date);

#循环插入时间数据
declare
begin
for i in 1..10000 loop
insert into timer_t1 values(sysdate);
commit;
sleep(1);
end loop;
end;
/

备库编写一个shell脚本1.sh用于检测准备的同步情况

async_instance()
{
disql -s / as sysdba <<EOF
set lineshow off
select to_char(max(d),'hh24:mi:ss'),max(clsn),max(cur_lsn)
from v\$arch_file,v\$rlog,timer_t1;
EOF
}
primary_instance()
{
disql -s SYSDBA/SYSDBA@192.168.100.100:5236 <<EOF
set lineshow off
select max(cur_lsn),to_char(max(d),'hh24:mi:ss')
from v\$rlog,timer_t1;
EOF
}

echo "主库lsn" "主库时间" "备库时间" "备库归档lsn" "备库redo lsn" | awk '{printf("%-10s %-10s %-10s %-10s %-10s\n",$1,$2,$3,$4,$5)}'
while :
do
echo `primary_instance | grep [0-9]:[0-9] ` `async_instance | grep [0-9]:[0-9]`
sleep 10
done | awk '{printf("%-15s %-15s %-15s %-15s %-15s\n",$1,$2,$3,$4,$5)}'

执行shell脚本进行监控如下:

由上图可见:

主库的时间和lsn循序递增,备库的归档日志和redo日志的lsn永远保持一致。备库的数据和lsn每1分钟刷新一次。lsn永远落后于主库。数据在每次刷新触发时落后主库10分钟(ARCH_SEND_DELAY),下次刷新前落后主库11分钟(ARCH_SEND_DELAY + FREQ_MINUTE_INTERVAL )


测试结论:
主库根据FREQ_MINUTE_INTERVAL的定义的频率发送日志到异步备库,每次发送ARCH_SEND_DELAY之前的日志。

下面是本次测试环境的配置文件内容

主库

dmtimer.ini:

[RT_TIMER]
TYPE = 2
FREQ_MONTH_WEEK_INTERVAL = 1
FREQ_SUB_INTERVAL = 0
FREQ_MINUTE_INTERVAL = 1
START_TIME = 00:00:00
END_TIME = 00:00:00
DURING_START_DATE = 2016-02-11 17:36:09
DURING_END_DATE = 9999-12-31 23:59:59
NO_END_DATE_FLAG = 1
DESCRIBE = RT_TIMER
IS_VALID = 1

dmarch.ini文件:

[ARCHIVE_REALTIME]
ARCH_TYPE  = REALTIME
ARCH_DEST  = TEST2
[ARCHIVE_LOCAL1]
ARCH_TYPE  = LOCAL
ARCH_DEST  = /u01/dm/dmarch/test
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT  = 0
[ARCHIVE_ASYNC]
ARCH_TYPE  = ASYNC
ARCH_DEST  = TEST3
ARCH_TIMER_NAME = RT_TIMER
ARCH_SEND_DELAY =10

dmmal.ini文件:

MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_INST1]
MAL_INST_NAME = TEST1
MAL_HOST = 192.168.100.100
MAL_PORT = 5800
MAL_INST_HOST = 192.168.100.100
MAL_INST_PORT =  5236
MAL_DW_PORT  = 6000
MAL_INST_DW_PORT = 5900
[MAL_INST2]
MAL_INST_NAME = TEST2
MAL_HOST = 192.168.100.101
MAL_PORT = 5800
MAL_INST_HOST = 192.168.100.101
MAL_INST_PORT = 5236
MAL_DW_PORT  = 6000
MAL_INST_DW_PORT = 5900
[MAL_INST3]
MAL_INST_NAME = TEST3
MAL_HOST = 192.168.100.102
MAL_PORT = 5800
MAL_INST_HOST = 192.168.100.102
MAL_INST_PORT = 5236
MAL_DW_PORT  = 6000
MAL_INST_DW_PORT = 5900

dmwatcher.ini

[GRP1]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 12345
INST_INI = /u01/dm/dmdata/test/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = '/u01/dm/dmdbms/bin/DmServiceTEST1 restart'
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

备库

dmwatcher.ini:

[GRP1]
DW_TYPE = LOCAL #本地守护类型
DW_MODE = MANUAL #故障手动切换模式
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 12345
INST_INI = /u01/dm/dmdata/test/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = '/u01/dm/dmdbms/bin/DmServiceTEST3 restart'
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

dmarch.ini:

[ARCHIVE_LOCAL1]
ARCH_TYPE  = LOCAL
ARCH_DEST  = /u01/dm/dmarch/test
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT  = 0

dmmal.ini文件与主库保持一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值