1. 源与目标数据库初始化参数设置
2. 在源和目标数据库创建目录
在源数据库orcl上(必须先手工创建c:\learnoracle\backup\orcl\目录)
SQL>conn strmadmin/strmadmin;
SQL>create directory orcldump as 'c:\learnoracle\backup\orcl\';
SQL>conn /as sysdba
SQL>grant read,write on directory orcldump to strmadmin,system;
在目标数据库auxi上(必须先手工创建c:\learnoracle\backup\auxi\目录)
SQL>conn strmadmin/strmadmin;
SQL>create directory auxidump as 'c:\learnoracle\backup\auxi\';
SQL>conn /as sysdba
SQL>grant read,write on directory auxidump to strmadmin,system;
3. 执行DBMS_STREAMS_ADM.MAINTAIN_TABLES 过程
ORCL> declare
2 tbls dbms_utility.uncl_array;
3 begin
4 tbls(1):='scott.emp';
5 tbls(2):='scott.dept';
6 dbms_streams_adm.maintain_tables(
7 table_names=>tbls,
8 source_directory_object=>'orcldump',
9 destination_directory_object=>'auxidump',
10 source_database=>'orcl.jss.cn',
11 destination_database=>'auxi.jss.cn',
12 perform_actions=>true,
13 dump_file_name=>'export_tbls.dmp',
14 log_file=>'export_tbls.log',
15 bi_directional=>false,
16 include_ddl=>true,
17 instantiation=>dbms_streams_adm.instantiation_table);
18 end;
19 /
参数说明:
DBMS_UTILITY.UNCL_ARRAY:数组变量,执行MAINTAIN_TABLES时指定的table_names所对应的表名。
Table_names :没啥好说的,就是上面数组变量中所对应的表名
source_database : 源数据库上创建的目录(directory)
destination_database : 目标数据库上创建的目录(directory)
source_datebase :连接到源端数据库的数据库链 。
destination_database :连接到目标端数据库的数据库链 。
perform_actions
:如果为true,则过程直接执行。如果为false,则过程并不直接生成复制环境,而是创建复制环境的配置脚本,由dba手动执行(或修改编辑后执
行),因此必须同时设置script_name和script_directory_object两参数,指定脚本输出路径和脚本文件名,不然过程执行将
直接报错。
bi_directional :true时表示启用双向复制。false表示源库向目录库单向复制。
include_ddl :是否同步ddl语句 。
instantiation:该参数用来指定是否执行实例化,有如下几种值:
DBMS_STREAMS_ADM.INSTANTIATION_TABLE :通过expdp/impdp初始化数据,并在目标端导入数据时执行实例化,默认情况下即是该值。
DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK :impdp直接通过网络传输数据而不生成dmp文件。在导入数据时执行实例化。
DBMS_STREAMS_ADM.INSTANTIATION_NONE :不执行实例化,该属性值仅当perform_actions参数设置为false时有效。
这样便完成了多表单向复制(本地捕获)的操作了,执行的这个过程主要包括以下几步
1、源数据上2个表的导出
2、将导出的表传到目标数据库并导入
3、源和目标数据库流队列的创建
4、源数据上的捕获进程与传播进程的创建与启动
5、目标数据库上的应用进程创建与启动
6、目标数据库上设置应用进程开始执行的SCN