构建oracle双向流复制是一个十分复杂的过程,我写这个文档的目的是尽量有条理地列出所需做的工作,帮助dba更有效的建设流复制环境。
1.以scott模式为复制示例,一般只要在创建数据库时选择了安装sample schema,都会存在该scott模式;至少保证源库中存在该schema,以便可以初始化到目标库中。
2.在源和目标2个数据库中创建strmadmin流管理用户,当然你也可以选用其他名字。同时在2个库中都要创建streams使用的表空间,以便让logmnr使用它:
create tablespace streams_tbs datafile 'xxxxxx' size 100m reuse autoextend on maxsize unlimited;
/* 10g r2中logmnr默认使用sysaux表空间 */
exec dbms_logmnr_d.set_tablespace ('streams_tbs');
/* 创建完表空间后,接着要创建strmadmin用户 */
create user strmadmin identified by strmadmin
default tablespace streams_tbs
quota unlimited on streams_tbs;
grant dba to strmadmin;
begin
dbms_streams_auth.grant_admin_privilege(
grantee => 'strmadmin',
grant_privileges => true);
end;
/
/* 可以通过查询dba_streams_administrator视图检查用户是否正确授予流管理权限 */
sql> select * from dba_streams_administrator;
username loc acc
------------------------------ --- ---
maclean yes yes
strmadmin yes yes
3.在2边数据库中都需要设置合理的实例初始化参数,我们以10g release2为例:
参数名与推荐值:_job_queue_interval = 1
描述:job的队列的扫描参数,默认为5,即5s扫描一次
出于何种考虑:设置较小的_job_queue_interval有利于propagation作业
如何设置:alter system set _job_queue_interval=1 scope=spfile;
/* 注意scope=spfile的参数都需要重启实例方能生效 */
参数名与推荐值:compatible>= 10.2.0.0
描述:数据库版本兼容性参数,以前介绍过,不再展开
出于何种考虑:10g release2的部分streams新特性要求该参数至少为10.2.0.0或更高
如何设置:只有从较低版本升级到10g r2的数据库需要设置该参数,
alter system set compatible=10.2.0.0 scope=spfile;
参数名与推荐值:global_names=true
描述:指定是否要求database link名与数据库全局名一致,默认为false也就是不需要一致
出于何种考虑:帮助我们准确识别database link和数据库的关系,避免误操作
如何设置:alter system set global_names=true scope=spfile;
参数名与推荐值:job_queue_processes>4
描述:指定了实例中job队列进程的数量(如j000…j999).
出于何种考虑:该参数控制了实例中能够并行运行的job的最大值,应设一个大于已配置的propagations
数量的值,同时也要考虑到可能还有其他数据库作业
如何设置:alter system set job_queue_processes=15;
参数名与推荐值:parallel_max_servers
描述:指定了实例中最大并行进程的数量
出于何种考虑:
在streams环境中,capture进程和apply进程都会用到多个并行进程。
设置该初始化参数为适当值(10*cpu#)以保证总是有足够的可用并行进程;
每多一个capture或apply进程,则有必要为该参数+2再加上加入的capture或apply进程的并行度parallelism参数。
如何设置:
alter system set parallel_max_servers=40;
参数名与推荐值:remote_archive_enable
描述:指定是否将归档日志传送到远程目的地
出于何种考虑:只有downstream capture时会用到,不展开
参数名与推荐值:sga_max_size
描述:设置合理的sga内存最大值
出于何种考虑:常见参数,不展开
参数名与推荐值:sga_target=0
描述:disable掉10g中的automatic shared memory management.
出于何种考虑:oracle推荐在stream环境中手动指定streams_pool和shared_pool的大小而不使用10g中的内存自动管理特性
如何设置:
alter system set sga_target=0;
参数名与推荐值:调优streams_pool_size
描述:
为流池指定大小。流池包括了缓存的队列消息。此外,流池也会被用于并行capture和apply的内部通信。
建议参考v$streams_pool_advice视图的信息判断最佳大小,避免spill溢出
出于何种考虑:
该参数可以动态修改。若该参数归零则实例中streams相关的进程和作业都将无法运行。流池的大小受到以下因素的影响:
1.capture进程的并行度,每增加一个capture进程有必要为流池增加10mb的大小;
此外当capture参数parallelism大于1时,有必要为流池增加10mb*parallelism的大小;
举例来说,若某capture进程的并行度parallelism设置为3,则需要为streams池增加30mb。
2.apply进程的并行度,每增加一个apply进程有必要为streams pool增加1mb;
此外当apply进程的并行度大于1时,,为streams pool增加1mb*parallelism的大小;
举例来说某apply进程的parallelism被设置为5,则需要为streams池增加5mb。
3.logical change records(lcrs)被存储在buffered queues缓存队列中;
适当增加streams pool大小以适应源库和目标库上数据复制的数据量;
oracle建议在低负载的数据库上最小设置streams pool为256mb,而在活跃度高的oltp环境中设置为500mb;
通过v$streams_pool_advise视图给出的建议进一步调整streams pool的大小
到一个合理值以避免过多的缓存队列溢出到磁盘上。
