给客户通过streams配置了schema级别的同步

记录一个大致的过程供大家参考,稳定了运行了近2年,最近出了一些问题,今天重新配置了一遍。

[@more@]

1、在源和目标端创建流管理用户:

SQL> create user strmadmin identified by lnmsairc001 default tablespace tbs_streams;

用户已创建。

SQL> grant dba to strmadmin;

授权成功。

2、在源和目标端创建db link,要保证db link的名字和对方的global_name的名字一致,因为在配置前期需要把参数global_names设置为true

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

数据库链接已创建。

SQL> select sysdate from dual@lnmsacx;

SYSDATE
-------------------
2011-08-10 11:09:34

SQL>
--=========================================
SQL> create database link lnmsa connect to strmadmin identified by lnmsairc001 using 'lnmsa';

数据库链接已创建。

SQL> select sysdate from dual@lnmsa;

SYSDATE
-------------------
2011-08-09 11:11:48

SQL>
3、实例化streams环境以及初始化数据:

-- connect as streams administrator to lnmsa1
PROMPT Connecting as streams administrator to site 1
CONNECT strmadmin/lnmsairc001@lnmsa1

--
-- Set up queue "STRMADMIN"."LNMSA_CAP_QUEUE"
--
BEGIN
dbms_streams_adm.set_up_queue(
queue_table => '"STRMADMIN"."LNMSA_CAP_QUEUE_TABLE"',
storage_clause => NULL,
queue_name => '"STRMADMIN"."LNMSA_CAP_QUEUE"',
queue_user => '');
END;
/
--
-- PROPAGATE changes for schema LNMSAIRC
--
DECLARE
version_num NUMBER := 0;
release_num NUMBER := 0;
pos NUMBER;
initpos NUMBER;
q2q BOOLEAN;
stmt VARCHAR2(100);
ver VARCHAR2(30);
compat VARCHAR2(30);

BEGIN
BEGIN
stmt := 'BEGIN dbms_utility.db_version@LNMSACX(:ver, :compat); END;';
EXECUTE IMMEDIATE stmt USING OUT ver, OUT compat;
-- Extract version number
initpos := 1;
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
version_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;

-- Extract release number
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
release_num := TO_NUMBER(SUBSTR(compat, initpos,
pos - initpos));
initpos := pos + 1;
ELSE
release_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;
ELSE
version_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;

-- use q2q propagation if compatibility >= 10.2
IF version_num > 10 OR
(version_num = 10 AND release_num >=2) THEN
q2q := TRUE;
ELSE
q2q := FALSE;
END IF;

EXCEPTION WHEN OTHERS THEN
q2q := FALSE;
END;


dbms_streams_adm.add_schema_propagation_rules(
schema_name => '"LNMSAIRC"',
streams_name => '"PROP_LNMSA"',
source_queue_name => '"STRMADMIN"."LNMSA_CAP_QUEUE"',
destination_queue_name => '"STRMADMIN"."LNMSA_APP_QUEUE"@LNMSACX',
include_dml => TRUE,
include_ddl => TRUE,
include_tagged_lcr => TRUE,
source_database => 'LNMSA',
inclusion_rule => TRUE,
and_condition => NULL,
queue_to_queue => q2q);
END;
/
--
-- PROPAGATE changes for schema X3SYS
--
DECLARE
version_num NUMBER := 0;
release_num NUMBER := 0;
pos NUMBER;
initpos NUMBER;
q2q BOOLEAN;
stmt VARCHAR2(100);
ver VARCHAR2(30);
compat VARCHAR2(30);

BEGIN
BEGIN
stmt := 'BEGIN dbms_utility.db_version@LNMSACX(:ver, :compat); END;';
EXECUTE IMMEDIATE stmt USING OUT ver, OUT compat;
-- Extract version number
initpos := 1;
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
version_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;

-- Extract release number
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
release_num := TO_NUMBER(SUBSTR(compat, initpos,
pos - initpos));
initpos := pos + 1;
ELSE
release_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;
ELSE
version_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;

-- use q2q propagation if compatibility >= 10.2
IF version_num > 10 OR
(version_num = 10 AND release_num >=2) THEN
q2q := TRUE;
ELSE
q2q := FALSE;
END IF;

EXCEPTION WHEN OTHERS THEN
q2q := FALSE;
END;


dbms_streams_adm.add_schema_propagation_rules(
schema_name => '"X3SYS"',
streams_name => '"PROP_LNMSA"',
source_queue_name => '"STRMADMIN"."LNMSA_CAP_QUEUE"',
destination_queue_name => '"STRMADMIN"."LNMSA_APP_QUEUE"@LNMSACX',
include_dml => TRUE,
include_ddl => TRUE,
include_tagged_lcr => TRUE,
source_database => 'LNMSA',
inclusion_rule => TRUE,
and_condition => NULL,
queue_to_queue => q2q);
END;
/
--
-- Disable propagation. Enable after destination has been setup
--
DECLARE
q2q VARCHAR2(10);
destn_q VARCHAR2(65);
BEGIN
SELECT queue_to_queue INTO q2q
FROM dba_propagation
WHERE source_queue_owner = 'STRMADMIN' AND
source_queue_name = 'LNMSA_CAP_QUEUE' AND
destination_queue_owner = 'STRMADMIN' AND
destination_queue_name = 'LNMSA_APP_QUEUE' AND
destination_dblink = 'LNMSACX';

IF q2q = 'TRUE' THEN
destn_q := '"STRMADMIN"."LNMSA_APP_QUEUE"';
ELSE
destn_q := NULL;
END IF;

dbms_aqadm.disable_propagation_schedule(
queue_name => '"STRMADMIN"."LNMSA_CAP_QUEUE"',
destination => 'LNMSACX',
destination_queue => destn_q);
EXCEPTION WHEN OTHERS THEN
IF sqlcode = -24065 THEN NULL; -- propagation already disabled
ELSE RAISE;
END IF;
END;
/
--
-- CAPTURE changes for schema LNMSAIRC
--
DECLARE
compat VARCHAR2(512);
initpos NUMBER;
pos NUMBER;
version_num NUMBER;
release_num NUMBER;
compat_func VARCHAR2(65);
get_compatible VARCHAR2(4000);
BEGIN
SELECT value INTO compat
FROM v$parameter
WHERE name = 'compatible';

-- Extract version number
initpos := 1;
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
version_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;

-- Extract release number
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
release_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;
ELSE
release_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;
END IF;

IF version_num < 10 THEN
compat_func := 'dbms_streams.compatible_9_2';
ELSIF version_num = 10 THEN
IF release_num < 2 THEN
compat_func := 'dbms_streams.compatible_10_1';
ELSE
compat_func := 'dbms_streams.compatible_10_2';
END IF;
ELSE
compat_func := 'dbms_streams.compatible_11_1';
END IF;

get_compatible := ':lcr.get_compatible() <= '||compat_func;


dbms_streams_adm.add_schema_rules(
schema_name => '"LNMSAIRC"',
streams_type => 'CAPTURE',
streams_name => '"CAPTURE_LNMSA"',
queue_name => '"STRMADMIN"."LNMSA_CAP_QUEUE"',
include_dml => TRUE,
include_ddl => TRUE,
include_tagged_lcr => TRUE,
source_database => 'LNMSA',
inclusion_rule => TRUE,
and_condition => get_compatible);
END;
/
--
-- CAPTURE changes for schema X3SYS
--
DECLARE
compat VARCHAR2(512);
initpos NUMBER;
pos NUMBER;
version_num NUMBER;
release_num NUMBER;
compat_func VARCHAR2(65);
get_compatible VARCHAR2(4000);
BEGIN
SELECT value INTO compat
FROM v$parameter
WHERE name = 'compatible';

-- Extract version number
initpos := 1;
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
version_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;

-- Extract release number
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
release_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;
ELSE
release_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;
END IF;

IF version_num < 10 THEN
compat_func := 'dbms_streams.compatible_9_2';
ELSIF version_num = 10 THEN
IF release_num < 2 THEN
compat_func := 'dbms_streams.compatible_10_1';
ELSE
compat_func := 'dbms_streams.compatible_10_2';
END IF;
ELSE
compat_func := 'dbms_streams.compatible_11_1';
END IF;

get_compatible := ':lcr.get_compatible() <= '||compat_func;


dbms_streams_adm.add_schema_rules(
schema_name => '"X3SYS"',
streams_type => 'CAPTURE',
streams_name => '"CAPTURE_LNMSA"',
queue_name => '"STRMADMIN"."LNMSA_CAP_QUEUE"',
include_dml => TRUE,
include_ddl => TRUE,
include_tagged_lcr => TRUE,
source_database => 'LNMSA',
inclusion_rule => TRUE,
and_condition => get_compatible);
END;
/
--
-- Start capture process CAPTURE_LNMSA
--
BEGIN
dbms_capture_adm.start_capture(
capture_name => '"CAPTURE_LNMSA"');
EXCEPTION WHEN OTHERS THEN
IF sqlcode = -26666 THEN NULL; -- CAPTURE process already running
ELSE RAISE;
END IF;
END;
/
-- connect as streams administrator to site 2
PROMPT Connecting as streams administrator to site 2
CONNECT strmadmin/lnmsairc001@lnmsacx1
--
-- Datapump SCHEMA MODE IMPORT (NETWORK)
--
DECLARE
h1 NUMBER; -- data pump job handle
schema_expr_list VARCHAR2(32767); -- for metadata_filter
cnt NUMBER; -- temp variable
object_owner dbms_utility.uncl_array; -- obj owners
job_state VARCHAR2(30); -- job state
status ku$_Status; -- data pump status
job_not_exist exception;
pragma exception_init(job_not_exist, -31626);
STRM_MASTER_SCN NUMBER(16);
BEGIN

object_owner(1) := 'LNMSAIRC';
object_owner(2) := 'X3SYS';
FOR idx IN 1..2 LOOP
-- schema does not exist locally, need instantiation
IF schema_expr_list IS NULL THEN
schema_expr_list := '(';
ELSE
schema_expr_list := schema_expr_list ||',';
END IF;
schema_expr_list := schema_expr_list||''''||object_owner(idx)||'''';
END LOOP;
IF schema_expr_list IS NOT NULL THEN
schema_expr_list := schema_expr_list || ')';
ELSE
COMMIT;
RETURN;
END IF;
--====================================================

--修改后的脚本
--====================================================
--获得导入时系统改变号,EXPDP时-1
SELECT (DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER() - 1) INTO STRM_MASTER_SCN FROM DUAL@LNMSA;
h1 := dbms_datapump.open(operation=>'IMPORT',job_mode=>'SCHEMA', remote_link=>'LNMSA',job_name=>NULL, version=>'COMPATIBLE');
DBMS_DATAPUMP.ADD_FILE(H1, 'streams_import_lnmsa.log', 'DIR_DEST', '', DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE,NULL);
DBMS_DATAPUMP.SET_PARAMETER(H1, 'FLASHBACK_SCN', STRM_MASTER_SCN);
dbms_datapump.metadata_filter(handle=>h1,name=>'SCHEMA_EXPR',value=>'IN (''LNMSAIRC'',''X3SYS'')');
--不导出/入统计信息
DBMS_DATAPUMP.METADATA_FILTER(H1,'EXCLUDE_PATH_EXPR','IN (''STATISTICS'',''TRIGGER'',''JOB'')');

DBMS_DATAPUMP.SET_PARAMETER(H1, 'INCLUDE_METADATA', 4);
DBMS_DATAPUMP.SET_PARALLEL( HANDLE => H1, DEGREE => 4);

--============================================================

dbms_datapump.start_job(h1);

job_state := 'UNDEFINED';
BEGIN
WHILE (job_state != 'COMPLETED') AND (job_state != 'STOPPED') LOOP
status := dbms_datapump.get_status(
handle => h1,
mask => dbms_datapump.ku$_status_job_error +
dbms_datapump.ku$_status_job_status +
dbms_datapump.ku$_status_wip,
timeout => -1);
job_state := status.job_status.state;
dbms_lock.sleep(10);
END LOOP;
EXCEPTION WHEN job_not_exist THEN
dbms_output.put_line('job finished');
END;
COMMIT;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
/
--
-- Set up queue "STRMADMIN"."LNMSA_APP_QUEUE"
--
BEGIN
dbms_streams_adm.set_up_queue(
queue_table => '"STRMADMIN"."LNMSA_APP_QUEUE_TABLE"',
storage_clause => NULL,
queue_name => '"STRMADMIN"."LNMSA_APP_QUEUE"',
queue_user => '');
END;
/
--
-- APPLY changes for schema LNMSAIRC
--
DECLARE
compat VARCHAR2(512);
initpos NUMBER;
pos NUMBER;
version_num NUMBER;
release_num NUMBER;
compat_func VARCHAR2(65);
get_compatible VARCHAR2(4000);
BEGIN
SELECT value INTO compat
FROM v$parameter
WHERE name = 'compatible';

-- Extract version number
initpos := 1;
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
version_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;

-- Extract release number
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
release_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;
ELSE
release_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;
END IF;

IF version_num < 10 THEN
compat_func := 'dbms_streams.compatible_9_2';
ELSIF version_num = 10 THEN
IF release_num < 2 THEN
compat_func := 'dbms_streams.compatible_10_1';
ELSE
compat_func := 'dbms_streams.compatible_10_2';
END IF;
ELSE
compat_func := 'dbms_streams.compatible_11_1';
END IF;

get_compatible := ':lcr.get_compatible() <= '||compat_func;


dbms_streams_adm.add_schema_rules(
schema_name => '"LNMSAIRC"',
streams_type => 'APPLY',
streams_name => '"APPLY_LNMSA"',
queue_name => '"STRMADMIN"."LNMSA_APP_QUEUE"',
include_dml => TRUE,
include_ddl => TRUE,
include_tagged_lcr => TRUE,
source_database => 'LNMSA',
inclusion_rule => TRUE,
and_condition => get_compatible);
END;
/
--
-- APPLY changes for schema X3SYS
--
DECLARE
compat VARCHAR2(512);
initpos NUMBER;
pos NUMBER;
version_num NUMBER;
release_num NUMBER;
compat_func VARCHAR2(65);
get_compatible VARCHAR2(4000);
BEGIN
SELECT value INTO compat
FROM v$parameter
WHERE name = 'compatible';

-- Extract version number
initpos := 1;
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
version_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;

-- Extract release number
pos := INSTR(compat, '.', initpos, 1);
IF pos > 0 THEN
release_num := TO_NUMBER(SUBSTR(compat, initpos, pos - initpos));
initpos := pos + 1;
ELSE
release_num := TO_NUMBER(SUBSTR(compat, initpos));
END IF;
END IF;

IF version_num < 10 THEN
compat_func := 'dbms_streams.compatible_9_2';
ELSIF version_num = 10 THEN
IF release_num < 2 THEN
compat_func := 'dbms_streams.compatible_10_1';
ELSE
compat_func := 'dbms_streams.compatible_10_2';
END IF;
ELSE
compat_func := 'dbms_streams.compatible_11_1';
END IF;

get_compatible := ':lcr.get_compatible() <= '||compat_func;


dbms_streams_adm.add_schema_rules(
schema_name => '"X3SYS"',
streams_type => 'APPLY',
streams_name => '"APPLY_LNMSA"',
queue_name => '"STRMADMIN"."LNMSA_APP_QUEUE"',
include_dml => TRUE,
include_ddl => TRUE,
include_tagged_lcr => TRUE,
source_database => 'LNMSA',
inclusion_rule => TRUE,
and_condition => get_compatible);
END;
/
--
-- Get tag value to be used for Apply
--
DECLARE
found BINARY_INTEGER := 0;
tag_num NUMBER;
BEGIN
-- Use the apply object id as the tag
SELECT o.object_id INTO tag_num
FROM dba_objects o
WHERE o.object_name= 'APPLY_LNMSA' AND
o.object_type='APPLY';
LOOP
BEGIN
found := 0;
SELECT 1 INTO found FROM dba_apply
WHERE apply_name != 'APPLY_LNMSA' AND
apply_tag = hextoraw(tag_num);
EXCEPTION WHEN no_data_found THEN
EXIT;
END;
EXIT WHEN (found = 0);
tag_num := tag_num + 1;
END LOOP;

-- alter apply
dbms_apply_adm.alter_apply(
apply_name => '"APPLY_LNMSA"',
apply_tag => hextoraw(tag_num));
END;
/
--
-- Start apply process APPLY_LNMSA
--
BEGIN
dbms_apply_adm.start_apply(
apply_name => '"APPLY_LNMSA"');
EXCEPTION WHEN OTHERS THEN
IF sqlcode = -26666 THEN NULL; -- APPLY process already running
ELSE RAISE;
END IF;
END;
/
-- connect as streams administrator to site 1
PROMPT Connecting as streams administrator to site 1
CONNECT strmadmin/lnmsairc001@lnmsa1
--
-- Enable propagation schedule for "STRMADMIN"."LNMSA_CAP_QUEUE"
-- to LNMSACX
--
DECLARE
q2q VARCHAR2(10);
destn_q VARCHAR2(65);
BEGIN
SELECT queue_to_queue INTO q2q
FROM dba_propagation
WHERE source_queue_owner = 'STRMADMIN' AND
source_queue_name = 'LNMSA_CAP_QUEUE' AND
destination_queue_owner = 'STRMADMIN' AND
destination_queue_name = 'LNMSA_APP_QUEUE' AND
destination_dblink = 'LNMSACX';

IF q2q = 'TRUE' THEN
destn_q := '"STRMADMIN"."LNMSA_APP_QUEUE"';
ELSE
destn_q := NULL;
END IF;

dbms_aqadm.enable_propagation_schedule(
queue_name => '"STRMADMIN"."LNMSA_CAP_QUEUE"',
destination => 'LNMSACX',
destination_queue => destn_q);
EXCEPTION WHEN OTHERS THEN
IF sqlcode = -24064 THEN NULL; -- propagation already enabled
ELSE RAISE;
END IF;
END;
/
4、上面的脚本可以通过10gR2提供的包生成,正常通过执行下面脚本就可以完成第3步的任务:

declare
schemas DBMS_UTILITY.UNCL_ARRAY;
begin
schemas(1) := 'LNMSAIRC';
schemas(2) := 'X3SYS';
DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
schema_names=>schemas,
source_directory_object => 'DIR_SOURCE',
destination_directory_object => 'DIR_DEST',
source_database => 'lnmsa',
destination_database => 'lnmsacx',
capture_queue_table => 'lnmsa_cap_queue_table',
capture_queue_name => 'lnmsa_cap_queue',
apply_queue_table => 'lnmsa_app_queue_table',
capture_name => 'capture_lnmsa',
propagation_name => 'prop_lnmsa',
apply_queue_name => 'lnmsa_app_queue',
apply_name => 'apply_lnmsa',
bi_directional => false,
include_ddl => true,
instantiation => DBMS_STREAMS_ADM.instantiation_schema_network);
end;
/

由于源库使用了大量的trigger,这样在同步的时侯经常报错,于是通过下面脚本先生成了脚本,然后在初始化数据的时侯把trigger排除出去了。于是就有了第3步的一堆脚本,第三步的脚本就是通过下面脚本生成的。

declare
schemas DBMS_UTILITY.UNCL_ARRAY;
begin
schemas(1) := 'LNMSAIRC';
schemas(2) := 'X3SYS';
DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(
schema_names=>schemas,
source_directory_object => 'DIR_SOURCE',
destination_directory_object => 'DIR_DEST',
source_database => 'lnmsa',
destination_database => 'lnmsacx',
--==========================
perform_actions => false,
script_directory_object => 'DIR_SOURCE',
script_name => 'lnmsa.sql',
--==============================
capture_queue_table => 'lnmsa_cap_queue_table',
capture_queue_name => 'lnmsa_cap_queue',
apply_queue_table => 'lnmsa_app_queue_table',
capture_name => 'capture_lnmsa',
propagation_name => 'prop_lnmsa',
apply_queue_name => 'lnmsa_app_queue',
apply_name => 'apply_lnmsa',
bi_directional => false,
include_ddl => true,
instantiation => DBMS_STREAMS_ADM.instantiation_schema_network);
end;
/
5、配置完成之后根据需要可以调整一些内部参数以提高streams的性能:

connect strmadmin/lnmsairc001@lnmsa1


--调整capture 队列表参数
BEGIN
DBMS_AQADM.ALTER_QUEUE_TABLE(
queue_table => 'STRMADMIN.LNMSA_CAP_QUEUE_TABLE',
primary_instance => 1,
secondary_instance => 2);
END;
/
--调整capture参数
BEGIN
DBMS_CAPTURE_ADM.SET_PARAMETER(
CAPTURE_NAME => 'CAPTURE_LNMSA',
PARAMETER => 'PARALLELISM',
VALUE => 2);
END;
/

--2、调整 CHECKPOINT_RETENTION_TIME 日志检查保留时间(默认60天,占用SYSTEM.LOGMNR_RESTART_CKPT$大小),修改7天

BEGIN
DBMS_CAPTURE_ADM.ALTER_CAPTURE(
CAPTURE_NAME => 'CAPTURE_LNMSA',
CHECKPOINT_RETENTION_TIME => 7
);
END;
/

--3、调整 _SGA_SIZE 捕获进程的内存空间大小50M

BEGIN
DBMS_CAPTURE_ADM.SET_PARAMETER(
CAPTURE_NAME => 'CAPTURE_LNMSA',
PARAMETER => '_SGA_SIZE',
VALUE => 50);
END;
/
--==================================
connect strmadmin/lnmsairc001@lnmsacx1

--调整apply队列参数:
BEGIN
DBMS_AQADM.ALTER_QUEUE_TABLE(
queue_table => 'STRMADMIN.LNMSA_APP_QUEUE_TABLE',
primary_instance => 1,
secondary_instance => 2);
END;
/
--调整streams apply参数
--1、设置参数DISABLE_ON_ERROR = N

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => 'DISABLE_ON_ERROR',
VALUE => 'N');
END;
/

--2)、调整内在参数 _TXN_BUFFER_SIZE =10050

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => '_TXN_BUFFER_SIZE',
VALUE => 100);
END;
/

--3)、调整内在参数 _HASH_TABLE_SIZE = 10000000 (default 1000000)

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => '_HASH_TABLE_SIZE',
VALUE => 1000000);
END;
/

--4)、调整内在参数 _DYNAMIC_STMTS = Y

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => '_DYNAMIC_STMTS',
VALUE => 'Y');
END;
/

--5)、调整 PARALLELISM 并行数(依据应用业务繁忙情况而定)

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => 'PARALLELISM',
VALUE => 4);
END;
/

--6)、调整 TXN_LCR_SPILL_THRESHOLD LCR记录写硬盘(表)最小参数(default 10000)

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => 'TXN_LCR_SPILL_THRESHOLD',
VALUE => 1000000);
END;
/

--7)、调整 _CMPKEY_ONLY 参数 = Y

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => '_CMPKEY_ONLY',
VALUE => 'Y');
END;
/

--8)、设置参数commit_serialization = N (default full)

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER(
APPLY_NAME => ' APPLY_LNMSA',
PARAMETER => 'COMMIT_SERIALIZATION',
VALUE => 'NONE');
END;
/
--===========================

6、如果配置过程中出错,可以按照下面过程清除流环境然后再重新执行第3步:

--连接到查询库
Connect strmadmin/lnmsairc001@lnmsacx1
--停止streams应用
begin
dbms_apply_adm.stop_apply(
apply_name => 'APPLY_LNMSA');
end;
/

--停止队列
begin
dbms_aqadm.stop_queue('LNMSA_APP_QUEUE');
end;
/

begin
dbms_aqadm.stop_queue('AQ$_LNMSA_APP_QUEUE_TABLE_E');
end;
/

begin
dbms_aqadm.drop_queue_table('LNMSA_APP_QUEUE_TABLE',true);
end;
/

begin
dbms_apply_adm.drop_apply(
apply_name => 'APPLY_LNMSA');
end;
/

--====================================================
--连接到生产库
Connect strmadmin/lnmsairc001@lnmsa1
--停止streams捕获
begin
dbms_capture_adm.stop_capture(
capture_name => 'CAPTURE_LNMSA');
end;
/
--停止streams传播
begin
dbms_propagation_adm.stop_propagation('PROP_LNMSA');
END;
/

begin
dbms_capture_adm.drop_capture(
capture_name => 'CAPTURE_LNMSA');
end;
/

begin
dbms_propagation_adm.drop_propagation(
propagation_name => 'PROP_LNMSA');
end;
/
--删除队列表之后队列就不存在了
begin
dbms_aqadm.drop_queue_table('LNMSA_CAP_QUEUE_TABLE',true);
end;
/

exit

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19602/viewspace-1060002/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/19602/viewspace-1060002/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值