stream流配置学习

来源:互联网 发布:文字编辑排版软件 编辑:程序博客网 时间:2024/05/16 06:34

源数据库为mytest,目标数据库为mytest1

 

设置初始参数

sqlplus sys/sys@mytest as sysdba
SQL> alter system set aq_tm_processes=2 scope=both;

系统已更改。

SQL> alter system set global_names=true scope=both;

系统已更改。

SQL> alter system set job_queue_processes=10 scope=both;

系统已更改。

SQL> alter system set open_links=4 scope=spfile;

系统已更改。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  373293056 bytes
Fixed Size                  1249056 bytes
Variable Size             130023648 bytes
Database Buffers          234881024 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
数据库已经打开。

 

sqlplus sys/sys@mytest1 as sysdba

SQL> alter system set global_names=true scope=both;

系统已更改。

SQL> alter system set aq_tm_processes=2 scope=both;

系统已更改。

SQL> alter system set job_queue_processes=10 scope=both;

系统已更改。

SQL> alter system set open_links=4 scope=spfile;

系统已更改。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area  209715200 bytes
Fixed Size                  1248116 bytes
Variable Size              88081548 bytes
Database Buffers          113246208 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
数据库已经打开。

 

新建stream专用用户

sqlplus sys/sys@mytest as sysdba

SQL> create user "YUZH_STR" identified by "sys";

用户已创建。

SQL> grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to  "YUZH_STR";

授权成功。

SQL> BEGIN
  2    DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
  3      grantee => '"YUZH_STR"',
  4      grant_privileges => true);
  5  END;
  6  /

PL/SQL 过程已成功完成。

SQL> COMMIT;

提交完成。

 

sqlplus sys/sys@mytest1 as sysdba

SQL> create user "YUZH_STR" identified by "sys";

用户已创建。

SQL> grant DBA, IMP_FULL_DATABASE, EXP_FULL_DATABASE to  "YUZH_STR";

授权成功。

SQL> BEGIN
  2    DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(
  3      grantee => '"YUZH_STR"',
  4      grant_privileges => true);
  5  END;
  6  /

PL/SQL 过程已成功完成。

SQL> COMMIT;

提交完成。

 

如下以整个yuzh的schema传输为例子实行

 

sqlplus sys/sys@mytest as sysdba

SQL> conn yuzh_str/sys
已连接。

 

创建DBLINK


SQL> CREATE DATABASE LINK MYTEST1 connect to  "yuzh_str" identified by "sys" using 'mytest1';

数据库链接已创建。

 

创建Source队列

SQL> BEGIN
  2    DBMS_STREAMS_ADM.SET_UP_QUEUE(
  3      queue_table => '"STREAMS_CAPTURE_QT"',
  4      queue_name  => '"STREAMS_CAPTURE_Q"',
  5      queue_user  => '"YUZH_STR"');
  6  END;
  7  /

PL/SQL 过程已成功完成。

SQL> COMMIT;

提交完成。

 

创建capture进程

SQL> BEGIN
  2    DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
  3      schema_name        => '"YUZH"',
  4      streams_type       => 'capture',
  5      streams_name       => '"STREAMS_CAPTURE"',
  6      queue_name         => '"YUZH_STR"."STREAMS_CAPTURE_Q"',
  7      include_dml        => true,
  8      include_ddl        => false,      --这里如果设置成true,则ddl操作也会同步
  9      include_tagged_lcr => false,
 10      inclusion_rule     => true);
 11  END;
 12  /

PL/SQL 过程已成功完成。

 

创建传播进程

SQL> BEGIN
  2    DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
  3     schema_name            => '"YUZH"',
  4     streams_name           => '"STREAMS_PROPAGATION"',
  5      source_queue_name      => '"YUZH_STR"."STREAMS_CAPTURE_Q"',
  6      destination_queue_name => '"YUZH_STR"."STREAMS_APPLY_Q"@MYTEST1',
  7      include_dml            => true,
  8      include_ddl            => false,
  9      source_database        => 'MYTEST',
 10      inclusion_rule         => true );
 11  END;
 12  /

PL/SQL 过程已成功完成。

SQL> COMMIT;

提交完成。

 

sqlplus sys/sys@mytest1 as sysdba

 

SQL> conn yuzh_str/sys
已连接。

 

创建DBLINK
SQL> CREATE DATABASE LINK MYTEST connect to "YUZH_STR" identified by "sys" using 'mytest';

数据库链接已创建。

 

创建接收队列

SQL> BEGIN
  2    DBMS_STREAMS_ADM.SET_UP_QUEUE(
  3      queue_table => '"STREAMS_APPLY_QT"',
  4      queue_name  => '"STREAMS_APPLY_Q"',
  5      queue_user  => '"YUZH_STR"');
  6  END;
  7  /

PL/SQL 过程已成功完成。

 

创建apply进程

SQL> BEGIN
  2    DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
  3      schema_name        => '"YUZH"',
  4      streams_type       => 'apply',
  5      streams_name       => '"STREAMS_APPLY"',
  6      queue_name         => '"YUZH_STR"."STREAMS_APPLY_Q"',
  7      include_dml        => true,
  8      include_ddl        => false,
  9      include_tagged_lcr => false,
 10      inclusion_rule     => true);
 11  END;
 12  /

PL/SQL 过程已成功完成。

 

启动apply进程

SQL> DECLARE
  2     v_started number;
  3  BEGIN
  4  SELECT DECODE(status, 'ENABLED', 1, 0) INTO v_started
  5   FROM DBA_APPLY where apply_name = 'STREAMS_APPLY';
  6   if (v_started = 0) then
  7    DBMS_APPLY_ADM.START_APPLY(apply_name => '"STREAMS_APPLY"');
  8   end if;
  9  END;
 10  /

PL/SQL 过程已成功完成。

 

sqlplus sys/sys@mytest as sysdba

 

SQL> conn yuzh_str/sys

 

启动captrue进程

SQL> set serverout on;
SQL> DECLARE
  2     v_started number;
  3  BEGIN
  4  SELECT DECODE(status, 'ENABLED', 1, 0) INTO v_started
  5   FROM DBA_CAPTURE where CAPTURE_NAME = 'STREAMS_CAPTURE';
  6   if (v_started = 0) then
  7    DBMS_CAPTURE_ADM.START_CAPTURE(capture_name => '"STREAMS_CAPTURE"');
  8   end if;
  9  END;
 10  /

PL/SQL 过程已成功完成。

 

 

export_import脚本

sqlplus sys/sys@mytest1 as sysdba

 

SQL> conn yuzh_str/sys

SQL> set serverout on;
SQL> DECLARE
  2    handle1 number;
  3    ind number;
  4    percent_done number;
  5    job_state VARCHAR2(30);
  6    le ku$_LogEntry;
  7    js ku$_JobStatus;
  8    jd ku$_JobDesc;
  9    sts ku$_Status;
 10  BEGIN
 11    handle1 := DBMS_DATAPUMP.OPEN('IMPORT','SCHEMA', 'MYTEST');
 12    DBMS_DATAPUMP.ADD_FILE(handle1, 'StreamImport_1280463491691.log', 'streee
1', '',  DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
 13    DBMS_DATAPUMP.SET_PARAMETER(handle1, 'FLASHBACK_SCN', 908129);
 14     DBMS_DATAPUMP.METADATA_FILTER(handle1, 'SCHEMA_EXPR', 'IN (''YUZH'')');

 15    DBMS_DATAPUMP.SET_PARAMETER(handle1, 'INCLUDE_METADATA', 1);
 16    DBMS_DATAPUMP.START_JOB(handle1);
 17    percent_done :=0;
 18    job_state := 'UNDEFINED';
 19    while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
 20    dbms_datapump.get_status(handle1, dbms_datapump.ku$_status_job_error + db
ms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,st
s);
 21    js := sts.job_status;
 22    if js.percent_done != percent_done
 23    then
 24       dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_d
one));
 25       percent_done := js.percent_done;
 26    end if;
 27    if(bitand(sts.mask, dbms_datapump.ku$_status_wip) != 0)
 28    then
 29      le := sts.wip;
 30    else
 31       if(bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
 32       then
 33         le := sts.error;
 34       else
 35         le := null;
 36       end if;
 37    end if;
 38    if le is not null
 39    then
 40      ind := le.FIRST;
 41      while ind is not null loop
 42        dbms_output.put_line(le(ind).LogText);
 43        ind := le.NEXT(ind);
 44      end loop;
 45    end if;
 46    end loop;
 47    dbms_output.put_line('Job has completed');
 48    dbms_output.put_line('Final job state = ' || job_state);
 49    dbms_datapump.detach(handle1);
 50  END;
 51  /
自动启用 FLASHBACK 以保持数据库完整性。
启动 "YUZH_STR"."SYS_IMPORT_SCHEMA_03":
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 128 KB
处理对象类型 SCHEMA_EXPORT/USER
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/TABLE/PROCACT_INSTANCE
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
. . 导入了 "YUZH"."YUZH_TEST14"                             4 行
. . 导入了 "YUZH"."YUZH_TEST15"                             4 行
. . 导入了 "YUZH"."YUZH_TEST1"                              0 行
. . 导入了 "YUZH"."YUZH_TEST10"                             0 行
. . 导入了 "YUZH"."YUZH_TEST11"                             0 行
. . 导入了 "YUZH"."YUZH_TEST12"                             0 行
. . 导入了 "YUZH"."YUZH_TEST13"                             0 行
. . 导入了 "YUZH"."YUZH_TEST16"                             0 行
. . 导入了 "YUZH"."YUZH_TEST17"                             0 行
. . 导入了 "YUZH"."YUZH_TEST18"                             0 行
. . 导入了 "YUZH"."YUZH_TEST19"                             0 行
. . 导入了 "YUZH"."YUZH_TEST2"                              0 行
. . 导入了 "YUZH"."YUZH_TEST20"                             0 行
. . 导入了 "YUZH"."YUZH_TEST3"                              0 行
. . 导入了 "YUZH"."YUZH_TEST4"                              0 行
. . 导入了 "YUZH"."YUZH_TEST5"                              0 行
. . 导入了 "YUZH"."YUZH_TEST6"                              0 行
. . 导入了 "YUZH"."YUZH_TEST7"                              0 行
. . 导入了 "YUZH"."YUZH_TEST8"                              0 行
. . 导入了 "YUZH"."YUZH_TEST9"                              0 行
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX
处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
处理对象类型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
*** Job percent done = 100
作业 "YUZH_STR"."SYS_IMPORT_SCHEMA_03" 已于 15:45:49 成功完成
Job has completed
Final job state = COMPLETED

PL/SQL 过程已成功完成。

 

验证dml操作,是成功的

 

PLUS:启用追加日志
可以基于Database级别或Table级别,启用追加日志(Supplemental Log)。在建立根据Schema粒度进行复制的Oracle Stream环境中,如果确认Schema下所有Table都有合理的主键(Primary Key),则不再需要启用追加日志。

#启用Database 追加日志
alter database add supplemental log data;

#启用Table追加日志
alter table add supplement log group log_group_name(table_column_name) always;

 

原创粉丝点击