Initialisation parameters -- minimum alter system set aq_tm_processes=3 scope=BOTH; alter system set global_names=TRUE scope=BOTH; alter system set job_queue_processes=10 scope=BOTH; alter system set undo_retention=3600 scope=BOTH; alter system set streams_pool_size=180M scope=BOTH; shutdown immediate; startup mount; alter database archivelog; alter database open; At source database alter system set LOG_ARCHIVE_DEST_2 = 'SERVICE=DESTTRY LGWR ASYNC OPTIONAL NOREGISTER VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)'; alter system set LOG_ARCHIVE_DEST_STATE_2 = 'ENABLE'; alter system set LOG_ARCHIVE_CONFIG='SEND' scope=both; At the downstream database: alter system set LOG_ARCHIVE_DEST_2 = 'location=C:\applns\Oracle\product\10.2.0\db_1\admin\sample\arch\archive2 MANDATORY VALID_FOR=(STANDBY_LOGFILE,PRIMARY_ROLE)' alter system set LOG_ARCHIVE_DEST_STATE_2 = 'ENABLE'; alter system set LOG_ARCHIVE_CONFIG= 'RECEIVE' scope=both; ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('D:\APPLNS\ORADATA\DESTTRY\DESTTRY\REDO04a.LOG') size 52428800; ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('D:\APPLNS\ORADATA\DESTTRY\DESTTRY\REDO05a.LOG') size 52428800; ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('D:\APPLNS\ORADATA\DESTTRY\DESTTRY\REDO06a.LOG') size 52428800; ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('D:\APPLNS\ORADATA\DESTTRY\DESTTRY\REDO07a.LOG') size 52428800; SET VERIFY OFF SET ECHO OFF SPOOL streams_setup.log conn sys/sys@desttry as sysdba create tablespace downtargetstream6 datafile 'D:\downtargetstream6.dbf' size 25M reuse autoextend on maxsize unlimited; create user streamadmin identified by streamadmin default tablespace downtargetstream6 quota unlimited on downtargetstream6; grant dba to streamadmin; GRANT EXECUTE ON DBMS_LOCK TO streamadmin; GRANT EXECUTE ON DBMS_PIPE to streamadmin; create user streamuser identified by streamuser; GRANT CONNECT, RESOURCE,DBA TO streamuser IDENTIFIED BY streamuser; exec dbms_streams_auth.grant_remote_admin_access('streamadmin'); CONN streamuser/streamuser@desttry CREATE TABLE tabone (id NUMBER(5) PRIMARY KEY, name VARCHAR2(50)); ALTER TABLE tabone ADD SUPPLEMENTAL LOG GROUP tabone_log_group ( id,name) ALWAYS; GRANT ALL ON streamuser.tabone TO streamadmin; conn sys/sys@srctry as sysdba create tablespace downsourcestream6 datafile 'D:\downsourcestream6.dbf' size 25M reuse autoextend on maxsize unlimited; create user streamadmin identified by streamadmin default tablespace downsourcestream6 quota unlimited on downsourcestream6; grant dba to streamadmin; GRANT EXECUTE ON DBMS_LOCK TO streamadmin; GRANT EXECUTE ON DBMS_PIPE to streamadmin; create user streamuser identified by streamuser; GRANT CONNECT, RESOURCE,DBA TO streamuser IDENTIFIED BY streamuser; exec dbms_streams_auth.grant_remote_admin_access('streamadmin'); CONN streamuser/streamuser@srctry CREATE TABLE tabone (id NUMBER(5) PRIMARY KEY, name VARCHAR2(50)); ALTER TABLE tabone ADD SUPPLEMENTAL LOG GROUP tabone_log_group ( id,name) ALWAYS; GRANT ALL ON streamuser.tabone TO streamadmin; ----------------------------------------------------------------------------- -- source db ----------------------------------------------------------------------------- CONN streamadmin/streamadmin@srctry -- create the database link from the source database to the destination database CREATE DATABASE LINK desttry CONNECT TO streamadmin IDENTIFIED BY streamadmin USING 'desttry'; -- set instantiation from source database DECLARE iscn NUMBER; -- Variable to hold instantiation SCN value BEGIN iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER(); DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN@desttry( source_schema_name => 'streamuser', source_database_name => 'srctry', instantiation_scn => iscn, recursive => true); END; / -- propagate instantiation BEGIN DBMS_CAPTURE_ADM.PREPARE_SCHEMA_INSTANTIATION( schema_name => 'streamuser' ); END; / ----------------------------------------------------------------------------- -- target db ----------------------------------------------------------------------------- CONN streamadmin/streamadmin@desttry -- create the tests queue BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'STREAMS_QUEUE_TABLE_CA', queue_name => 'STREAMS_QUEUE_CA', queue_user => 'streamadmin'); END; / -- create a database link to the SOURCE databases in the tests environment CREATE DATABASE LINK srctry CONNECT TO streamadmin identified by streamadmin USING 'srctry'; -- create the capture process BEGIN DBMS_CAPTURE_ADM.CREATE_CAPTURE( queue_name => 'streamadmin.STREAMS_QUEUE_CA', capture_name => 'STRMADMIN_CAPTURE_DWRT', rule_set_name => NULL, start_scn => NULL, source_database => 'srctry', use_database_link => true, first_scn => NULL, logfile_assignment => 'implicit'); END; / -- set downtest_real_time parameter BEGIN DBMS_CAPTURE_ADM.SET_PARAMETER( capture_name => 'STRMADMIN_CAPTURE_DWRT', parameter => 'downstream_real_time_mine', value => 'y'); END; / -- add capture rules for the schema/s to be replicated BEGIN DBMS_STREAMS_ADM.ADD_SCHEMA_RULES( schema_name => 'streamuser', streams_type => 'CAPTURE', streams_name => 'STRMADMIN_CAPTURE_DWRT', queue_name => 'streamadmin.STREAMS_QUEUE_CA', include_dml => true, include_ddl => true, include_tagged_lcr => false, source_database => 'srctry', inclusion_rule => true); END; / -- configure propagation from source to destination database -- connect as tests administrator: strmadmin connect strmadmin BEGIN DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES( schema_name => 'streamuser', streams_name => 'STRMADMIN_PROPAGATE_RLS1R1', source_queue_name => 'streamadmin.STREAMS_QUEUE_CA', destination_queue_name => 'streamadmin.STREAMS_QUEUE_AP', include_dml => true, include_ddl => true, source_database => 'srctry'); END; / -- create the tests queue BEGIN DBMS_STREAMS_ADM.SET_UP_QUEUE( queue_table => 'STREAMS_QUEUE_TABLE_AP', queue_name => 'STREAMS_QUEUE_AP', queue_user => 'streamadmin'); END; / -- create the apply process -- add apply rules for each schema connect strmadmin BEGIN DBMS_STREAMS_ADM.ADD_SCHEMA_RULES( schema_name => 'streamuser', streams_type => 'APPLY', streams_name => 'STRMADMIN_APPLY', queue_name => 'streamadmin.STREAMS_QUEUE_AP', include_dml => true, include_ddl => true, source_database => 'srctry'); END; / -- specify an apply user -- several schemas => apply user = strmadmin BEGIN DBMS_APPLY_ADM.ALTER_APPLY( apply_name => 'STRMADMIN_APPLY', apply_user => 'streamadmin'); END; / -- grant the user execute privilege on the apply process rule set -- connect as sysdba conn sys/sys@desttry as sysdba DECLARE rs_name VARCHAR2(64); -- variable to hold rule set name BEGIN SELECT RULE_SET_OWNER||'.'||RULE_SET_NAME INTO rs_name FROM DBA_APPLY WHERE APPLY_NAME='STRMADMIN_APPLY'; DBMS_RULE_ADM.GRANT_OBJECT_PRIVILEGE( privilege => SYS.DBMS_RULE_ADM.EXECUTE_ON_RULE_SET, object_name => rs_name, grantee => 'streamadmin'); END; / -- start the apply process -- connect as tests administrator: strmadmin CONN streamadmin/streamadmin@desttry BEGIN DBMS_APPLY_ADM.SET_PARAMETER( apply_name => 'STRMADMIN_APPLY', parameter => 'DISABLE_ON_ERROR', value => 'N'); END; / BEGIN DBMS_APPLY_ADM.START_APPLY( apply_name => 'STRMADMIN_APPLY'); END; / -- start capture process -- connect as tests administrator: strmadmin connect strmadmin BEGIN DBMS_CAPTURE_ADM.START_CAPTURE( capture_name => 'STRMADMIN_CAPTURE_DWRT'); END; / ----------------- same sys password SELECT FORCE_LOGGING FROM v$database; if(no){ alter database force logging; } exec dbms_capture_adm.set_parameter('STRMADMIN_CAPTURE_DWRT', '_CHECKPOINT_FORCE', 'Y'); exec dbms_logmnr.start_logmnr( starttime => sysdate, options => dbms_logmnr.DICT_FROM_ONLINE_CATALOG + dbms_logmnr.CONTINUOUS_MINE + dbms_logmnr.NO_ROWID_IN_STMT);