操作系統:windows
IP地址:192.168.7.150
數據庫:Oracle 10.2.0.1
ORACLE_SID:sz431
從數據庫:
操作系統:windows
IP地址:192.168.7.96
數據庫:Oracle 10.2.0.1
ORACLE_SID:tx431
1 初始化參數
alter system set aq_tm_processes=2 scope=both;
alter system set global_names=true scope=both;
alter system set job_queue_processes=10 scope=both;
alter system set parallel_max_servers=20 scope=both;
alter system set undo_retention=3600 scope=both;
alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile;
alter system set streams_pool_size=25M scope=spfile;
alter system set utl_file_dir='*' scope=spfile;
alter system set open_links=4 scope=spfile;
alter system set log_archive_dest_1='LOCATION=d:/oracle/test' scope=both;
alter system set log_archive_format='arch%t_%s_%r.arc'
執行完畢後重啓數據庫
2 用 sqlplus / as sysdba 登錄
創建stream 表空間
create tablespace tbs_stream datafile 'D:/oracle/product/10.2.0/oradata/tx431/stream01.dbf' size 100M;
用戶
create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp;
授權
grant connect,resource,dba,aq_administrator_role to strmadmin;
begin
dbms_streams_auth.grant_admin_privilege(
grantee => 'strmadmin',
grant_privileges => true);
end;
#查看是否歸檔,stream 主要是獲取日誌 然後解析
驗證是否歸檔:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination d:/oracle/test
Oldest online log sequence 2662
Next log sequence to archive 2679
Current log sequence 2679
#如果歸檔就不用做下面的
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 6442450944 bytes
Fixed Size 2030408 bytes
Variable Size 1392510136 bytes
Database Buffers 5033164800 bytes
Redo Buffers 14745600 bytes
Database mounted.
alter database archivelog;
alter database open;
#創建dblink 需要用strmadmin登錄
sz431 需要和global_name 前面一樣 後面150sz431
create database link sz431 connect to strmadmin identified by strmadmin using '150sz431'
create database link tx431 connect to strmadmin identified by strmadmin using '96tx431'
#主庫 建queue
begin
dbms_streams_adm.set_up_queue(
queue_table => 'sz431_queue_table',
queue_name => 'sz431_queue');
end;
#從庫queue
begin
dbms_streams_adm.set_up_queue(
queue_table => 'tx431_queue_table',
queue_name => 'tx431_queue');
end;
#主庫 capture
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'zk1',
streams_type => 'capture',
streams_name => 'capture_sz431150',
queue_name => 'strmadmin.sz431_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => null,
inclusion_rule => true);
end;
#主庫 傳播過程 strmadmin.tx431_queue@tx431 後面是dblink
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name => 'zk1',
streams_name => 'sz431150_to_tx43196',
source_queue_name => 'strmadmin.sz431_queue',
destination_queue_name => 'strmadmin.tx431_queue@tx431',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'sz431',
inclusion_rule => true);
end;
# 實時傳播 tx431 :dblink
begin
dbms_aqadm.alter_propagation_schedule(
queue_name => 'sz431_queue',
destination => 'tx431',
latency => 0);
end;
#主庫導出數據
exp zk1/[email protected] file="d:/test.dmp”
#從庫導入數據
imp zk1/[email protected] file="d:/test.dmp” full=y
#剛開始做好後,capture , propagation,apply 狀態都是enabled
但數據就是不行 最後查出來是scn 不一樣
# 在sz431上設置tx431上 zk1 schema的Instantiation SCN
PL/SQL 過程已成功完成。
DECLARE
iscn NUMBER;
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN@tx431(
source_schema_name => 'zk1',
source_database_name => 'sz431',
instantiation_scn => iscn,
recursive => true);
END;
/
#從庫 apply 過程
begin
dbms_streams_adm.add_schema_rules(
schema_name => 'zk1',
streams_type => 'apply',
streams_name => 'apply_tx431',
queue_name => 'strmadmin.tx431_queue',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
source_database => 'SZ431',
inclusion_rule => true);
end;
#啓用apply 進程
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_tx431');
end;
#停止Apply進程
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_tx431');
end;
#主庫開始 capture
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_sz431150');
end;
#停止Capture進程
begin
dbms_capture_adm.stop_capture(
capture_name => 'capture_sz431150');
end;
#查看下propagation 狀態
select propagation_name,destination_dblink,status,ERROR_MESSAGE from dba_propagation
# dba_apply 狀態
SELECT apply_name, apply_captured, status FROM dba_apply;
#開始傳播
exec dbms_propagation_adm.start_propagation('sz431150_to_tx43196');
#然後就可以測試了
#stop
exec dbms_propagation_adm.stop_propagation('sz431150_to_tx43196');
#清除配置
exec dbms_streams_adm.remove_streams_configuration;