在Oracle 10g R2中,Oracle简化了stream的配置的全过程,在9i R2及10g R1中,需要针对stream的捕获、传播、应用进程进行配置的步骤:
已经被dbms_streams_adm新提供的过程(pre_instantiation_setup/post_instantiation_setup)给封装起来啦,
配置stream只需要调用两个存储过程就可以搞定啦,真是太激动人心啦,下面简单地介绍一下dbms_streams_adm的新过程的用法。
1.在stream进行配置前,需要做些准备工作
a 源库与目标库初始化参数的设置
| alter system set aq_tm_processes=4 scope=spfile; alter system set job_queue_processes=5 scope=spfile; alter system set global_names=true scope=spfile; alter system set streams_pool_size=51m scope=spfile; |
说明streams_pool_size在生产环境中最好>200m
b 源库与目标库tnsnames.ora配置
确保正确,可用tnsping通
c 源库与目标库复制管理员的创建
| create user strmadmin identified by strmadminpw default tablespace &tbs_name quota unlimited on &tbs_name; grant connect, resource, dba to strmadmin; |
d 源库与目标库创建互连的数据链
| connect strmadmin/strmadminpw@test96; create database link test99.net connect to strmadmin identified by strmadminpw using 'test99'; connect strmadmin/strmadminpw@test99; create database link test96.net connect to strmadmin identified by strmadminpw using 'test96'; |
说明:必须确保双方的数据库链是可以连通.
用pre_instantiation_setup/post_instantiation_setup过程时
db link必须用db_name.domain的格式
e 源库与目标库必须处于归档模式
| shutdown immediate; startup mount; alter database archivelog; alter database open; |
2.执行pre_instantiation_setup过程
在调用dbms_streams_adm的pre_instantiation_setup/post_instantiation_setup过程时, 它们必须成对出现,pre_instantiation_setup过程中,maintain_mode参数可取GLOBAL与 TRANSPORTABLE TABLESPACES,如果取GLOBAL时,表示全库复制,否则可以定义需要复制的表空间; perform_actions参数为TRUE,进行配置产生的源脚本将记录在dba_recoverable_*字典表, 如果pre_instantiation_setup执行时遇到错误,可以通过执行dbms_steams_adm的
recover_operation过程 在更正错误后继续执行复制配置; source_database/destination_database是我们已经创建好的dblink,必须确保正确啊, 否则pre_instantiation_setup过程将会失败,报ORA-23621错误,解决办法在后面会介绍; bi_directional参数设置为true时,表示是多源复制,即目标与源库双向同步, 否则即只从源库向目标库同步数据; exclude_schemas参数指需要排除在全库同步的表空间,多个表空间的话用逗号分开,
*表示排除配置stream时库中已经存在的表空间;
start_processes参数指配置完成后启动捕获及应用进程。
| SQL>connect strmadmin/strmadminpw@test96; declare empty_tbs dbms_streams_tablespace_adm.tablespace_set; begin dbms_streams_adm.pre_instantiation_setup( maintain_mode => 'GLOBAL', tablespace_names => empty_tbs, source_database => 'test96.net', destination_database => 'test99.net', perform_actions => true, bi_directional => true, include_ddl => true, start_processes => true, exclude_schemas => 'WMSYS,STRMADMIN,DBSNMP,TSMSYS,', exclude_flags => dbms_streams_adm.exclude_flags_unsupported + dbms_streams_adm.exclude_flags_dml + dbms_streams_adm.exclude_flags_ddl); end; / |
如果参与复制的源库与目标库的db link等配置的正确,该过程将成功结束,
并且在strmadmin模式创建一系统用于复制的队列与字典表,如果db link配置出错,
执行pre_instantiation_setup过程时,将会报如下错误:
| ORA-23621: Operation corresponding |

