Fbird.zp
===========================================================
关于logical stangdby的real-time apply问题
===========================================================
配置完logical standby后,打开real-time apply,发现logical standby并没有真正的real-time apply,而是sql apply。

Logical standby上的real-time apply功能不正常。online redolog如果不归档,logical standby节点在已经对其进行'Registered logfile’后,并不开始apply。分别做过以下场景的测试:
1. Logical standby分别打开为归档和非归档模式
2. _EAGER_SIZE参数分别修改为5000和10000
3. PRESERVE_COMMIT_ORDER分别设置为TRUE和FALSE
4. MAX_SGA调整为最大值4095
5. _MAX_TRANSACTION_COUNT由默认修改为12
6. Primary database分别打开所有节点和仅保留1个主节点的场景
7. 分别在primary database节点上进行批量insert、delete、update操作
8. 在primary节点上做truncate table、create table、create tablespace及add partitions操作

观察standby节点的alert.log,现象同样:primary 做完批量的DML或是其他维护操作,如果online redolog没有归档,则standby节点的begin mining状态始终不能返回’end mining’。仅当在primary database上进行手工日志切换,standby节点才返回’end mining’。查看数据库,可以正常apply,两边同步。

查看V$STANDBY_LOG视图,发现日志文件的状态始终为UNASSIGNED,异常。
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
11 1 0 NO UNASSIGNED
12 1 0 NO UNASSIGNED
13 1 0 NO UNASSIGNED
14 2 0 NO UNASSIGNED
15 2 0 NO UNASSIGNED
16 2 0 NO UNASSIGNED
22 1 0 NO UNASSIGNED
23 1 0 YES UNASSIGNED
24 1 0 YES UNASSIGNED
25 2 0 YES UNASSIGNED
26 2 0 YES UNASSIGNED
27 2 0 YES UNASSIGNED
28 3 0 NO UNASSIGNED
29 3 0 NO UNASSIGNED
30 3 0 NO UNASSIGNED
31 3 0 NO UNASSIGNED
32 3 0 YES UNASSIGNED
33 3 0 YES UNASSIGNED
18 rows selected.

查看standby_archive_dest参数,没有配置
SQL> show parameter standby_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_archive_dest string ?/dbs/arch
standby_file_management string AUTO
SQL>

修改logical standby的spfile,添加了如下三个参数:
zc1.standby_archive_dest='LOCATION=/archivelog/'
zc2.standby_archive_dest='LOCATION=/standbylog/'
*.LOG_FILE_NAME_CONVERT='+FLASHGRP/zc/onlinelog/','+DATAGRP1/zc/onlinelog/'

调整步骤如下:
步骤1:创建并修改pfile
SQL> create pfile='logstdby.ora' from spfile;

步骤2:初始化文件logstdby.ora里添加如下参数:
zc1.standby_archive_dest='LOCATION=/archivelog/'
zc2.standby_archive_dest='LOCATION=/standbylog/'
*.LOG_FILE_NAME_CONVERT='+FLASHGRP/zc/onlinelog/','+DATAGRP1/zc/onlinelog/'
注:建议standby_archive_dest与log_archive_dest_1一致

步骤3:恢复spfile,logical standby打开为归档模式:
SQL> shutdown immediate
SQL> create spfile='+DATAGRP1/zc/spfilezc.ora' from pfile='/../../logstdby.ora';
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;


经过测试,在primary database上做批量的DML操作,logical standby可以对online redolog做real-time apply,同步时间间隔不超过1分钟。
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- --------------------------------------------------------------------------------
11 1 3214 YES ACTIVE
12 1 0 NO UNASSIGNED
13 1 0 NO UNASSIGNED
14 2 0 NO UNASSIGNED
15 2 3326 YES ACTIVE
16 2 0 NO UNASSIGNED
22 1 0 NO UNASSIGNED
23 1 0 YES UNASSIGNED
24 1 0 YES UNASSIGNED
25 2 0 YES UNASSIGNED
26 2 0 YES UNASSIGNED
27 2 0 YES UNASSIGNED
28 3 2841 YES ACTIVE
29 3 0 NO UNASSIGNED
30 3 0 NO UNASSIGNED
31 3 0 NO UNASSIGNED
32 3 0 YES UNASSIGNED
33 3 0 YES UNASSIGNED
18 rows selected.

SQL>

修改后,logical standby的real-time apply功能恢复正常。后与ORACLE专家确认,基本确认LOG_FILE_NAME_CONVERT应该是切换时被忽略的一个重要参数。
后记:关于LOG_FILE_NAME_CONVERT,如果primary和standby的redo位置不一样,需要用此参数做转换,否则RFS不能认识到standby redo,会造成其状态一直是UNASSIGNED,这也是real-time apply不工作的原因。

fbirdzp 发表于:2008.01.17 19:22 ::分类: ( ORACLE ) ::阅读:(119次) :: 评论 (0)

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)




切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
网站链接...