你应该还有印象,我们在第一部分第二节的时候就已经演示了创建表级复制环境,对比全库/表空间级或schema级的复制,现在回过头来看,你可能会觉着怎么表级的复制环境这么复杂呢?其实不是这样,并非表级复制环境复杂,我们在第一部分第二章演示的正是streams实际配置时执行的过程(大部分步骤吧),如果你直接使用DBMS_STREAMS_ADM.MAINTAIN_TABLES过程创建的话,类似于schemas的复制,也就是执行一个过程的事情。
这里一方面为了给大家演示,另外一方面也是加深大家的理解,在本部分的最后一项配置,三思决定采取生成脚本,而不直接执行配置的方式,以便大家能有机会,详细了解streams配置的实际执行步骤。
本章示例继续沿用前章中的环境(主要是oracle环境,之前的复制环境已被清除),并设定环境如下:
源数据库 sid : jssweb ,目标库 : jssstr ;
复制schema:member中对象,部分同步DML,部分同步DDL操作;
本地捕获,单向同步;
DBMS_STREAMS_ADM.MAINTAIN_TABLES 生成 配置 脚本;
STREAMS 管理员已经创建,源和目标端通讯用的数据库链也已经创建。
1、 生成创建脚本
由于此处也是借用前面搭建好的环境测试,因此准备工作全省下了,我们直接执行maintain_tables即可:
JSSWEB> conn strmadmin/strmadmin
Connected.
JSSWEB> DECLARE
2 tbls DBMS_UTILITY.UNCL_ARRAY;
3 BEGIN
4 tbls(1) := ¨member.dt_tmp¨;
5 tbls(2) := ¨member.dt_tbl1¨;
6 tbls(3) := ¨member.dt_tbl2¨;
7 DBMS_STREAMS_ADM.MAINTAIN_TABLES(
8 table_names => tbls,
9 source_directory_object => ¨mydt_source¨,
10 destination_directory_object => ¨mydt_dest¨,
11 source_database => ¨jssweb.jss.cn¨,
12 destination_database => ¨jssstr.jss.cn¨,
13 perform_actions => false,
14 dump_file_name => ¨export_tbls.dmp¨,
15 log_file => ¨export_tbls_expdp.log¨,
16 script_name => ¨configure_rep.sql¨,
17 script_directory_object => ¨mydt_source¨,
18 bi_directional => false,
19 include_ddl => true,
20 instantiation => DBMS_STREAMS_ADM.INSTANTIATION_TABLE);
21 END;
22 /
PL/SQL procedure successfully completed.
这里有些参数你已经见过多次,有些参数,你还从未接触过:
Table_names :没啥好说的吧,仅提示一点,如果要复制的只有一张表的话,不需要定义DBMS_UTILITY.UNCL_ARRAY数组变量,直接调用MAINTAIN_TABLES时指定table_names等于表名即可。
Script_name :由于此处没有直接配置复制环境,而是生成配置脚本,该参数即是指定生成的脚本名称。
Script_directory_object :本参数指定生成的脚本所在目录(Oracle Directory对象,前面也提到过的)。
Instantiation :这个参数前面见过配置schemas复制环境里提过,不过对于表级复制,该参数值与schemas复制时的instantiation略有差异,就是将SCHEMA改为TABLE即可,各参数值代表意义与schema时相同,不再详述。
2、 查看生成脚本
前面执行配置时将脚本生成到Directory对象mydt_source中,首先查看该目录实际指向的操作系统路径:
JSSWEB> select * from dba_directories where directory_name=¨MYDT_SOURCE¨;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ ------------------------------
SYS MYDT_SOURCE /data/oradata/jssweb/dmp
通过上述查询确定脚本位于操作系统:/data/oradata/jssweb/dmp目录下,直接到该目录中查看生成的脚本文件,执行:
[oracle@yans1 ~]$ more /data/oradata/jssweb/dmp/configure_rep.sql
脚本较长,这里不全部贴出,你可以在自己的测试环境中详细浏览,如果需要修改,直接修改该脚本文件即可。
3、 执行脚本
脚本修改完之后,源端以strmadmin登陆并执行即可,如下:
JSSWEB> conn strmadmin/strmadmin
Connected.
JSSWEB> spool configure_rep.log
JSSWEB> @/data/oradata/jssweb/dmp/configure_rep.sql
JSSWEB> SET VERIFY OFF
JSSWEB> WHENEVER SQLERROR EXIT SQL.SQLCODE;
JSSWEB>
JSSWEB>
JSSWEB>
JSSWEB> -------------------------------------------------------------------
JSSWEB> -- get TNSNAME and streams admin user details for both the databases
JSSWEB> --------------------------------------------------------------------