Oracle Stream Replication 技術

jackson198574發表於2013-12-13

Stream Oracle 的訊息佇列(也叫Oracle Advanced Queue)技術的一種擴充套件應用。 Oracle 的訊息佇列是透過釋出/訂閱的方式來解決事件管理。流複製(Stream replication)只是基於它的一個資料共享技術,也可以被用作一個可靈活定製的高可用性方案。 它可以實現兩個資料庫之間資料庫級,schema級,Table級的資料同步,並且這種同步可以是雙向的。 Oracle Stream也是透過資料冗餘來提高可用性,這一點和Data Guard 型別。

Oracle 高階複製(Oracle advanced Replication) 流複製(Stream Replication) 是從名稱和功能上都相似的兩種技術。 但前者是基於觸發器的,後者是基於日誌挖掘(Logminer)技術

 

 

 

1. Stream 的工作原理

 

Stream Oracle Advanced Queue技術的一種擴充套件應用, 這種技術最基本的原理就是收集事件,把時間儲存在佇列中,然後把這些事件釋出給不同的訂閱者。 從DBA的角度來說, 就是把捕獲Oracle資料庫產生的Redo日誌,然後把這些日誌透過網路傳播到多個資料庫,其他資料庫透過應用這些日誌,達到複製變化的作用。 

Stream 環境下, 複製的起點資料庫叫作Source Database, 複製的終點資料庫叫作Target Database。 在這兩個資料庫上都要建立一個佇列,其中的Source Database上的是傳送佇列,而Target Database上的是接收佇列。

資料庫的所有操作都會被記錄在日誌中。 配好Stream環境後, 在Source Database上會有一個捕獲程式(Capture Process), 該程式利用Logminer技術從日誌中提取DDL,DML語句,這些語句用一種特殊的格式表達,叫作邏輯變更記錄(Logical Change Record, LCR). 一個LCR對應一個原子的行變更,因此源資料庫上的一個DML語句,可能對應若干個LCR記錄。 這些LCR會儲存到Sourece Database的本地傳送佇列中。然後傳播程式(Propagation Process)把這些記錄透過網路傳送到Target Database的接收佇列。 在Target Database上會有一個應用程式(Apply Process), 這個程式從本地的接收佇列中取出LCR記錄,然後在本地應用,實現資料同步

 

 

2.  Data Guard Stream 區別

Date Guard有兩種型別:physical standby 和 logical standby。 這兩中standby 都有3個功能模組: 日誌傳送;日誌接收,日誌恢復。兩種standby在前兩個模組中是一樣的,都是透過LGWR或者ARCn程式傳送日誌,透過RFS程式接受日誌。 區別在第三個模組:

Physical Standby 使用的是Media Recovery技術直接在資料塊級別進行恢復, 因此Physical Standby 能夠做到兩個資料庫的完全同步, 沒有資料型別限制。 

Logical Standby實際是透過Logminer技術,把日誌中的記錄還原成SQL語句,然後透過Apply Engine 執行這些語句實現資料同步, 因此Logical Standby不能保證資料的完全一致。 比如Logical Standby 不支援某些資料型別,這一點在選擇Logical Standby時必須要考慮Logical Standby 不支援的資料型別可以從DBA_LOGSTDBY_UNSUPPORTED是不裡檢視.

    SQL>SELECT * FROM DBA_LOGSTDBY_UNSUPPORTED;

 

 

Stream 使用的是Logical Standby 第三個模組,也就是在Source Database一端,Capture 程式利用Logminer 技術把日誌內容還原成LCR, 然後傳送到Target Database, 而在Target database 一端, 也是透過Apply Engine 執行這些LCR。 因此Stream在使用上也有些限制條件。這些可以從檢視ALL/DBA_STREAMS_NEWLY_SUPPORTED,  ALL/DBA_STREAMS_UNSUPPORTED 檢視stream複製不支援的資料型別。

 

 SQL>SELECT table_name, reason FROM ALL_STREAMS_NEWLY_SUPPORTED;

 SQL>SELECT table_name, reason FROM DBA_STREAMS_NEWLY_SUPPORTED;

  

 SQL>SELECT table_name, reason FROM DBA_STREAMS_UNSUPPORTED;

 SQL>SELECT table_name, reason FROM ALL_STREAMS_UNSUPPORTED;

 

下面以圖表的形式列舉他們的區別:

Streams

Data Guard

主要目的是資料共享

主要目的是災難恢復和高可用性

可以多方向同步

只能是單向,從Primary--&gt Standby

資料粒度可以是資料庫,SchemaTable三個級別

只有資料庫級別

支援異種平臺的同步(Heterogeneous Platforms)

必須同種平臺 (Homogeneous Platforms)

參與複製的每個資料庫可以讀寫

只有Primary可以讀寫,Standby 只讀

支援Oracle 和非Oracle 資料庫間的同步

只能是Oracle資料庫間

 

 

 

3. 前期規劃的幾點:

   1). 確定複製集:如是資料庫級還是表級

   2). 決定複製站點

   3). 決定LCR是本地捕獲還是下游捕獲

        本地捕獲: 在源資料庫進行,從聯機日誌和歸檔日誌獲得LCR

        下游捕獲:在目標資料庫進行,從歸檔日誌獲得LCR. 

      本地捕獲可以保護更多的資料,但是會佔用源資料庫的資源。

   4). 決定複製拓撲結構:這時要決定複製資料庫的用途,是隻用於預防災難,還是平時保持空閒,或允許使用者使用。

 

 

 

 

 

 

4. Streams Replication 例項

 

4.1 準備工作:

DBA是源資料庫, DBA2是目標資料庫

 

4.1.1 源資料庫和目標資料庫必須是歸檔的

 

SQL> startup mount;

SQL> alter database archivelog;

SQL> alter database open;

SQL> archive log list

 

歸檔與非歸檔的切換請參考:

http://blog.csdn.net/tianlesoftware/archive/2009/10/18/4693470.aspx

或者

http://user.qzone.qq.com/251097186/blog/1236924069

 

4.1.2. 資料庫和目的資料庫均需要設定的引數:

 

alter system set global_names=true scope = both;

預設為false Database Link 使用的是資料庫的global_name。 

alter system set aq_tm_processes=2 scope=both;

以下引數都是10G的預設值, 檢查下就可以了. 無需設定

如:Show parameter job_queue_processes 

alter system set job_queue_processes = 10 scope=both;

alter system set sga_target = 300m scope=spfile;

alter system set open_links=4 scope=spfile;

alter system set statistics_level='TYPICAL' scope=both;

10g 預設為Typical, 效能統計模式

alter system set logmnr_max_persistent_sessions=1 scope=spfile;

10g 預設為1,持久的日誌挖掘會話數。

alter system set "_job_queue_interval"=1 scope=spfile;
alter system set aq_tm_processes=1;
alter system set streams_pool_size=200m scope=both;
注意streams_pool_size一定要夠大,因為如果啟用了SGA_TARGETORACLE可能分配很少記憶體給stream導致大量資訊被spill到磁碟導致查詢DBA_APPLY,DBA_CAPTURE,DBA_PROPGATION全部狀態ENABLED但就是沒有資料被同步。
同時設定_job_queue_interval也是為了提高佇列檢查時間,防止apply出問題。

注意:與複製有關的2個引數:

如果等了足夠長的時間發現資料沒有複製過來,仔細檢查了capture/propagation/apply各程式的狀態都是正常的, 並檢查引數.

alter system set "_job_queue_interval"=1 scope=spfile;

並且將aq_tm_processes引數改為1(我原來這是為10

alter system set aq_tm_processes=1;

改完後重啟,發現資料就可以去了。這個隱含引數只是控制對job佇列的檢查頻率,預設5

 

4.1.3 . 在源資料庫上啟用追加日誌 

可 以基於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; 

 

4.1.4 . 資料庫和目的資料庫建立相同表空間和使用者並賦權

 

建立表空間:

CREATE TABLESPACE streams_tbs DATAFILE 'D:\ORACLE\ORADATA\DBA\streams_tbs.dbf' SIZE 100M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

CREATE TABLESPACE streams_tbs DATAFILE 'D:\ORACLE\ORADATA\DBA2\streams_tbs.dbf' SIZE 100M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

建立使用者:

CREATE USER strmadmin IDENTIFIED BY strmadmin DEFAULT TABLESPACE streams_tbs

QUOTA UNLIMITED ON streams_tbs;

賦權:

GRANT DBA to strmadmin;   /* 10g要求dba角色以簡化配置 */

exec DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE('strmadmin'); /* 賦予流管理特權 */

 

4.1.5 配置listener.ora和tnsnames.Ora

DBA2 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.85.10.80)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = DBA2.anqingren.org)

    )

  )

 

4.1.6 建立DBLink

 

先用strmadmin登陸,在建立dblink

 

4.1.6.1在源端建到目庫的db link 

SQL> conn strmadmin/strmadmin;

已連線。

SQL> create database link DBA2 connect to strmadmin identified by strmadmin using 'dba2';

資料庫連結已建立。

 

測試:

SQL> select * from global_name@dba2;

GLOBAL_NAME

-------------------

DBA2.ANQINGREN.ORG

 

4.1.6.2 在目端建到源庫的db link

SQL> conn strmadmin/strmadmin;

已連線。

SQL> create database link dba connect to strmadmin identified by strmadmin using 'dba';

資料庫連結已建立。

 

 

4.2  使用者級的複製(不支援sys和system使用者)

 

4.2.1 最初的使用者複製

 

分別在源庫和目標資料庫上建立測試使用者

SQL>create user dave identified by dave;

SQL>grant dba to dave;

 

4.2.1 在源資料庫上建立Source 佇列

connect  strmadmin/strmadmin@dba;

BEGIN                                                                                                                          

 DBMS_STREAMS_ADM.SET_UP_QUEUE(                                                                                            

         queue_table => 'SOURCE_QUEUE_TABLE',             --佇列表                                                                  

         queue_name  => 'SOURCE_QUEUE',                --佇列                                                                     

         queue_user  => 'strmadmin');                  --佇列使用者                                                                   

END;                                   

/     

或者:

SQL> EXEC DBMS_STREAMS_ADM.SET_UP_QUEUE();

PL/SQL procedure successfully completed.

 

命令會建立一個佇列預設名:streams_queue,佇列表預設是:STREAMS_QUEUE_TABLE

佇列儲存的object型別是anaydata

 

移除佇列:

exec dbms_streams_adm.remove_queue(

queue_name => 'streams_queue',

cascade => true,

drop_unused_queue_table => true);. 

 

 

可以用查詢dba_queues,dba_queue_tables來檢查:

SQL>  select owner,queue_table,name from dba_queues where owner='STRMADMIN';

OWNER               QUEUE_TABLE              NAME

----------------- ------------------------- ------------------

STRMADMIN          SOURCES_QUEUE_TABLE        SOURCES_QUEUE

STRMADMIN          SOURCES_QUEUE_TABLE        AQ$_SOURCES_QUEUE_TABLE_E

 

SQL>select owner,queue_table,object_type from dba_queue_tables where owner='STRMADMIN';

OWNER            QUEUE_TABLE           OBJECT_TYPE

-------------- --------------------- ------------------

STRMADMIN       SOURCES_QUEUE_TABLE     SYS.ANYDATA

 

4.2.2 在目標資料庫DBA2上建立接收佇列   

                                     

connect  strmadmin/strmadmin@dba2;

BEGIN                                                                                                                          

 DBMS_STREAMS_ADM.SET_UP_QUEUE(                                                                                            

         queue_table => 'TARGET_QUEUE_TABLE',             --佇列表                                                                  

         queue_name  => 'TARGET_QUEUE',                --佇列                                                                     

         queue_user  => 'strmadmin');                  --佇列使用者                                                                   

END;                                   

/    

可以用查詢dba_queues,dba_queue_tables來檢查:

SQL>  select owner,queue_table,name from dba_queues where owner='STRMADMIN';

OWNER               QUEUE_TABLE             NAME

------------------ ---------------------  ----------------

STRMADMIN           TARGET_QUEUE_TABLE    TARGET_QUEUE

STRMADMIN           TARGET_QUEUE_TABLE    AQ$_TARGET_QUEUE_TABLE_E

 

4.2.3 在源資料庫上建立capture 程式

SQL>conn strmadmin/strmadmin@DBA;

SQL> BEGIN

    DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(

      schema_name     => 'dave',    -- 使用者名稱,dave, 非sys或者system

      streams_type      => 'capture',

      streams_name     => 'capture_stream',

      queue_name       => 'strmadmin.SOURCE_QUEUE',

      include_dml       => true,

      include_ddl        => true,

     source_database => 'DBA',

 include_tagged_lcr => false,

     inclusion_rule     => true);

 END;

 /

PL/SQL procedure successfully completed.

 

 

可以透過dba_capture檢視:

SQL> select CAPTURE_NAME,QUEUE_NAME,START_SCN,STATUS,CAPTURE_TYPE from dba_capture;

CAPTURE_NAME     QUEUE_NAME       START_SCN  STATUS   CAPTURE_TY

-------------------------    ----------------------------  ----------      --------------  ----------------

CAPTURE_STREAM1  SOURCES_QUEUE    1294052     DISABLED  LOCAL

 

SQL> select * from  ALL_CAPTURE_PREPARED_SCHEMAS;  

SCHEMA_NAME  TIMESTAMP   SUPPLEME  SUPPLEME SUPPLEME SUPPLEME

--------------------    --------------    -------- --------  --------       --------

SYSTEM         20-10-09     IMPLICIT  IMPLICIT    IMPLICIT   NO

 

4.2.4 在源資料庫上建立傳播程式            

SQL>conn strmadmin/strmadmin@DBA;

SQL> BEGIN

 DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(

 schema_name                => 'dave', 

 streams_name               => 'source_to_target', 

 source_queue_name          => 'strmadmin.SOURCE_QUEUE',

 destination_queue_name    => 'strmadmin.TARGET_QUEUE@DBA2', --此佇列待建立

 include_dml               => true,

 include_ddl               => true,

 source_database           => 'DBA',

 inclusion_rule            => true,

 queue_to_queue            => true);

 END;

 /

PL/SQL procedure successfully completed.

 

重新啟動propagation process
 --dbms_propagation_adm.start_propagation (propagation_name)
 --其中propagation_name可以從表all_propagation中取得
 select * from all_propagation; 
 SQL>  exec dbms_propagation_adm.start_propagation('source_to_target');

  exec dbms_propagation_adm.stop_propagation('source_to_target');
    PL/SQL procedure successfully completed.

select * from all_propagation; 

 

可以透過dba_propagations檢視結果:

SQL> select PROPAGATION_NAME,SOURCE_QUEUE_NAME,DESTINATION_QUEUE_NAME,DESTINATION_DBLINK,STATUS from dba_propagation;

 

PROPAGATION_NAME   SOURCE_QUEUE_NA DESTINATION_QUE DESTINATION_DBLINK STATUS

------------------ --------------- --------------- ------------------ --------

STREAM1_TO_STREAM2 SOURCES_QUEUE   TARGET_QUEUE    DBA2.ANQINGREN.ORG ENABLED     

 

 

#修改propagation休眠時間為0,表示實時傳播LCR。 

begin 

dbms_aqadm.alter_propagation_schedule( 

queue_name => 'SOURCE_QUEUE', 

destination => 'DBA2', 

latency => 0); 

end; 

 

 

4.2.5 在目標資料庫DBA2上建立Apply程式

 

SQL> BEGIN

   DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(

      schema_name      => 'SYSTEM',

      streams_type    => 'apply', 

      streams_name    => 'target_apply_stream',

      queue_name      => 'strmadmin.TARGET_QUEUE',

      include_dml     => true,

      include_ddl     => true,

  include_tagged_lcr => false,

      source_database => 'DBA',

      inclusion_rule => true);

 END;

/

 

可以透過:

dba_apply

v$streams_apply_reader

v$streams_apply_coordinator

v$streams_apply_server

檢視狀態

 

SQL> select apply_name,queue_name,status from dba_apply;

 

APPLY_NAME                     QUEUE_NAME                     STATUS

------------------------------ ------------------------------ --------

TARGET_APPLY_STREAM            TARGET_QUEUE                   DISABLED

 

4.2.6  例項化複製資料庫

 

4.2.6.1 用exp/imp 完成例項化

 

帶資料完成源端exp和目端的import:

Exp USERID=SYSTEM/ADMIN@DBA OWNER=SYSTEM FILE=D:\STRM.dmp LOG=STRM.log OBJECT_CONSISTENT=Y STATISTICS = NONE    

 

imp USERID=SYSTEM/ADMIN@DBA2 FULL=Y CONSTRAINTS=Y FILE=D:\STRM.dmp IGNORE=Y COMMIT=Y LOG=D:\import.log STREAMS_INSTANTIATION=Y  

 

或僅作例項化(不帶資料):

exp USERID=SYSTEM/ADMIN@DBA OWNER=SYSTEM FILE=D:\STRM.dmp LOG=D:\export.log OBJECT_CONSISTENT=Y STATISTICS = NONE ROWS=NO  

 

imp USERID=SYSTEM/ADMIN@DBA2 FULL=Y CONSTRAINTS=Y FILE=D:\STRM.dmp COMMIT=Y LOG=D:\import.log STREAMS_INSTANTIATION=Y IGNORE=Y

 

4.2.6.2 直接設定SCN的方式進行例項化:

---獲取源庫互置使用者的SCN

connect strmadmin/strmadmin@DBA     

set serveroutput on                                                                                                            

DECLARE

        iscn NUMBER; -- Variable to hold instantiation SCN value

BEGIN                                                                                                                   

        iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();                                                                     

        DBMS_OUTPUT.PUT_LINE ('Instantiation SCN is: ' || iscn); 

END;                                                      

/     

---設定為目標庫互置使用者的SCN

connect strmadmin/strmadmin@DBA2                                                                                              

BEGIN                                                                                                                        

 DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(

        source_schema_name => 'SYSTEM',                                                                                    

        source_database_name => 'DBA',

        instantiation_scn => &iscn);

END;                                                                                                                     

/        

                                                                                                                                                                       

 

4.2.7.  在目標資料庫上啟動Apply程式

connect strmadmin/strmadmin@DBA2 

SQL> BEGIN

    DBMS_APPLY_ADM.SET_PARAMETER(apply_name => 'target_apply_stream', parameter

 => 'disable_on_error', VALUE => 'n');

    END;

    /

 

SQL> BEGIN

    DBMS_APPLY_ADM.START_APPLY(

      apply_name => 'target_apply_stream');

 END;

 /

#停止Apply程式 

begin 

dbms_apply_adm.stop_apply( 

apply_name => 'target_apply_stream'); 

end; 

 

檢視狀態

SQL> select apply_name,queue_name,status from dba_apply;

 

APPLY_NAME                     QUEUE_NAME                     STATUS

------------------------------ ------------------------------ --------

TARGET_APPLY_STREAM            TARGET_QUEUE                   ENABLED

 

 

4.2.8 在源資料庫上啟動capture

connect strmadmin/strmadmin@DBA

SQL> BEGIN

    DBMS_CAPTURE_ADM.START_CAPTURE(

      capture_name => 'capture_stream');

 END;

 /

#停止Capture程式 

begin 

dbms_capture_adm.stop_capture( 

capture_name => 'capture_stream'); 

end; 

 

檢視狀態:

SQL> select capture_name,status from dba_capture;

CAPTURE_NAME    STATUS

--------------- --------

CAPTURE_STREAM ENABLED

 

4.3  表級的複製

maintain_tts  表空間複製

maintain_schemas 使用者複製

maintain_tables 表複製的

dbms_streams_admmaintain_globalmaintain_ttsmaintain_schemas等過程相比,maintain_tables過程使用則更靈活,可以為某些特殊的表拿出來單獨配置,maintain_tables也象其它的過程一樣,提供了一藍子解決方案,如果要新增新的表到複製中,只需要再次執行maintain_tables過程即可。

4.3.stream進行配置前,需要做些準備工作
A 源庫與目標庫初始化引數的設定
alter system set aq_tm_processes=1 scope=spfile;
alter system set job_queue_processes=2 scope=spfile;
alter system set global_names=true scope=spfile;
alter system set streams_pool_size=20m scope=spfile;
說明streams_pool_size在生產環境中最好>200m
B 源庫與目標庫tnsnames.ora配置
4.1
C 源庫與目標庫複製管理員的建立
    見4.1
D 源庫與目標庫建立DBLINK

4.1
E 源庫與目標庫必須處於歸檔模式
4.1
F 源庫與目標庫必須建立directory
connect BA;
create directory DIR_DBA as 'D:\Stream\DBA';
connect BA2;
create directory DIR_DBA2 as 'D:\Stream\DBA2';
說明:在複製表空間時,建立directory需要指定該表空間所在的目錄
G 建立測試用的表空間及表

CREATE TABLESPACE DAVE DATAFILE 'D:\ORACLE\ORADATA\DBA\DAVE.dbf' SIZE 100M;

create user tianle identified by tianle default tablespace DAVE;

grant dba to tianle;

conn TIANLE/TIANLE

create table test(id int,name varchar2(20));

create table test2(id int,name varchar2(20));

insert into test values(1,'dave');

insert into test values(2,'bl');

不能使用預設的表空間.


4.3.2  在源庫執行MAINTAIN_TTS過程
SQL>connect BA;
declare
v_tables dbms_utility.uncl_array;
begin
v_tables(1) := 'tianle.test;
v_tables(2) := 'tianle.test2';
dbms_streams_adm.maintain_tables(
table_names => v_tables,
source_directory_object => null,
destination_directory_object => null,
source_database => 'DBA',
destination_database => 'DBA2',
perform_actions => true,
bi_directional => false,
include_ddl => true,
instantiation => dbms_streams_adm.instantiation_table_network);
end;
/
說明:在源庫執行maintain_tables,目標庫幾乎什麼都不用做,stream環境已經配置好啦,
如果想複製其它的表,只用再執行maintain_tables過程即可


4.3.3 如果在執行2的過程時失敗,需要清除指令碼
--select script_id from dba_recoverable_script;
--exec dbms_streams_adm.RECOVER_OPERATION('&1','PURGE');
declare
v_script_id varchar2(32);
begin
select script_id into v_script_id from dba_recoverable_script;
dbms_streams_adm.RECOVER_OPERATION(v_script_id,'PURGE');
exception
when no_data_found then
DBMS_OUTPUT.PUT_LINe('no data found') ;
when others then

 

 

  4.5 全庫複製

以上主要為大家介紹了pre_instantiation_setup/post_instantiation_setup過程在配置全庫複製的方法,以下介紹dbms_streams_admmaintain_global過程如何配置stream全庫複製方法,適用於10gR2及以後版本。 

不支援sys/ system 使用者的變更。

1.stream進行配置前,需要做些準備工作

 

  源庫與目標庫初始化引數的設定 

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

 

  源庫與目標庫tnsnames.ora配置

4.1

  源庫與目標庫複製管理員的建立 

4.1

  源庫與目標庫建立互連的DBLINK

4.1

  源庫與目標庫必須處於歸檔模式

4.1

  源庫與目標庫必須建立directory

create directory dir_DBA as 'D:\Stream\DBA';
create directory dir_DBA2 as 'D:\Stream\DBA2';

  

2.在源庫執行MAINTAIN_GLOBAL過程

begin

dbms_streams_adm.maintain_global(

source_directory_object =>'dir_DBA',

destination_directory_object =>'dir_DBA2',

source_database=>'DBA',

destination_database =>'DBA2',

perform_actions=>true,

include_ddl=>true,

instantiation=>DBMS_STREAMS_ADM.INSTANTIATION_FULL_NETWORK

 );

end;


  說明:在執行maintain_global,源庫與目標庫必須建立directory,然後在源庫執行目標庫幾乎什麼都不用做,stream環境已經配置完

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20802110/viewspace-1063235/,如需轉載,請註明出處,否則將追究法律責任。

相關文章