用户级流互置配置过程

本文详细介绍Oracle数据库流互置的配置步骤,包括数据库环境配置、流管理用户配置、流互置目端与原端配置、传播配置及实例化方法,并提供配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户级流互置配置过程:
1、配置数据库环境
alter system set global_names=true scope = both;
要求global_names为true,即建立的数据库链接名要与目标数据库服务名一致,流互置环境用数据库链路来识别远程库和远程库上的队列等。
另外规则集中包含发生改变的数据库名,这些数据库名都用数据库链接名来标识。

alter system set compatible='10.2.0.3' scope=spfile;
使用10gR2关于流的新特征(如子集分割规则等)。

alter system set job_queue_processes = 10 scope=both;
传播用oracle的定时作业实现。Oracle作业队列后台进程(J000-J999)处理包括流传播在内的所有作业。

alter system set aq_tm_processes=1 scope=both;
用于监控和维护所有系统和用户的高级队列AQ对象的后台进程(q000-q009和qmnc,前者由后者按需调度产生;9i需要明确定义,没有调度进程,名为qmn0-qmn9)

alter system set logmnr_max_persistent_sessions=2 scope=spfile;
持久的日志挖掘会话数。10g无需设置次参数

alter system set parallel_max_servers=135 scope=both;
最大的并行服务会话数。
流捕获进程由读服务、准备服务、构建服务和后台捕获进程组成,前三个是并行服务。流应用进程有读服务、后台协作进程和应用服务组成。所以,仅有捕获进程时,至少最大并行服务数为3;仅有应用进程时,最大并行服务数至少为2.

alter system set open_links=4 scope=spfile;
一个会话同时打开的远程连接数。

startup database archivelog mode;
源数据库要处于归档日志模式

alter system set sga_target = 4g scope=spfile;
使能自动共享内存管理

alter system set streams_pool_size = 0 scope=both;
使能自动流池管理

alter system set statistics_level='TYPICAL' scope=both;
性能统计模式

alter system set undo_retention=3600 scope=both;

alter system set "_job_queue_interval"=1 scope=spfile;
作业队列协调者以秒计的唤醒间隔时间(缺省为5秒)

2、流管理用户配置
为日志挖掘建立独立的表空间:
connect sys/manager@hnds1 as sysdba;
CREATE TABLESPACE logmnr_tbs DATAFILE '/data/hnds1/logmnr.dbf' SIZE 1023M;
BEGIN  DBMS_LOGMNR_D.SET_TABLESPACE('logmnr_tbs'); END;
/

源端使能数据库级补充日志登载:
connect sys/manager@orclsrc as sysdba;
alter database add supplemental log data (PRIMARY KEY, UNIQUE, FOREIGN KEY) columns;

建流管理用户和授权(源端、目端都有):
connect SYS/manager@orclsrc as SYSDBA
REM 流管理用户使用独立的表空间:
create user SRADM identified by SRADM;
CREATE TABLESPACE sradm_tbs DATAFILE '/data/hnds1/stadm.dbf' SIZE 2000M REUSE;
ALTER USER sradm DEFAULT TABLESPACE sradm_tbs QUOTA UNLIMITED ON sradm_tbs;

GRANT DBA to SRADM;   /* 10g要求dba角色以简化配置 */
exec DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE('SRADM'); /* 赋予流管理特权 */

connect  sradm/sradm@orclsrc; /* 以下在源端建到目库的db link */
create database link orcl.yysw.com connect to sradm identified by sradm using 'orcl.yysw.com';        


connect  sradm/sradm@orcldst;  /* 以下在目端建到源库的db link */
create database link orcl.yysf.com connect to sradm identified by sradm using 'orcl.yysf.com';

3、流互置目端配置
建目库应用进程使用的队列表和队列:
connect  sradm/sradm@orcldst;
BEGIN                                                                                                                         
 DBMS_STREAMS_ADM.SET_UP_QUEUE(                                                                                           
         queue_table => 'SR_Q_TAB',              --队列表                                                                 
         queue_name  => 'SR_Q_01',                --队列                                                                    
         queue_user  => 'SRADM');                            --队列用户                                                                  
END;                                  
/                                     

建应用进程和用户上的应用规则
BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
   schema_name  => ' YYSYS',                                        --要应用的用户
   streams_type => 'APPLY',                                         --流类型为应用进程
   streams_name => 'SRADM_A_01',                        --应用进程名
   queue_name   => 'SRADM.SR_Q_01',  --应用进程从其出列LCRs的队列名
   include_dml  => true,                                                 --建立缺省DML规则
   include_ddl  => true,                                                 --建立缺省DDL规则
   source_database => 'ORCL.YYSF.COM');                                        --源库名
END;
/

指定应用的用户和应用进程属性(出错也不终止):
BEGIN
 DBMS_APPLY_ADM.ALTER_APPLY(                                                                                              
        apply_name => 'SRADM_A_01',                                --应用进程名
        apply_user => 'YYSYS');                          --应用进程要应用到的用户                                                                    
END;                                     
/                                

BEGIN
 DBMS_APPLY_ADM.SET_PARAMETER(                                                                                             
        apply_name  => 'SRADM_A_01',
        parameter   => 'DISABLE_ON_ERROR',
        value        => 'N' );                                                                                                 
END;                                      
/                                     

最后,启动应用进程:
DECLARE
        v_started number;
BEGIN
        SELECT decode(status, 'ENABLED', 1, 0) INTO v_started
        FROM DBA_APPLY WHERE APPLY_NAME = 'SRADM_A_01';
        if (v_started = 0) then
          DBMS_APPLY_ADM.START_APPLY(apply_name  => 'SRADM_A_01');                                                           
  end if;
END;
/                      

4、流互置原端配置
建捕获进程使用的流队列:
connect  sradm/sradm@orclsrc;
BEGIN                                                                              
 DBMS_STREAMS_ADM.SET_UP_QUEUE(
        queue_name =>'SR_Q_01',                                --队列名
        queue_table => 'SR_Q_TAB',                        --队列表名
        queue_user => 'SRADM');                          --队列用户                                                          
END;                           
/                                    

建捕获进程和捕获规则:
建用户一级捕获进程和缺省捕获规则
BEGIN
 DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
   schema_name  => 'YYSYS',                                --要捕获的用户名
   streams_type => 'CAPTURE',                               --流类型为捕获
   streams_name => 'SRADM_C_01',        --捕获进程名
   queue_name   => 'SRADM.SR_Q_01',
                                                   --捕获进程要入列LCR的队列名
   include_dml  => true,                                                 --增加DML规则
   include_ddl  => true,                                                 --增加DDL规则
   source_database => 'ORCL.YYSF.COM');
END;
/

5、流互置传播配置
建队列到队列的传播和缺省传播规则
BEGIN
         DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
           schema_name                 => 'YYSYS',                                --要传播改变的用户名
           streams_name                 => 'SRADM_P_01',      --传播名
           source_queue_name => 'SRADM.SR_Q_01',        --传播的源队列
           destination_queue_name => 'SRADM.SR_Q_01@ORCL.YYSW.COM'
                                                                                                                --传播的目队列
           include_dml                 => true,                                                   --建立dml规则
           include_ddl                 => true,                                                 --建立ddl规则
           source_database         => 'ORCL.YYSF.COM',
           queue_to_queue        => true);
END;
/

6、实例化
可用imp和exp完成实例化。
带数据完成源端exp和目端的import:
exp USERID=SYSTEM/manager@hnds1 OWNER=HNDS_AS FILE=hnds_as.dmp LOG=exportTables.log OBJECT_CONSISTENT=Y STATISTICS = NONE   

imp USERID=SYSTEM/manager@oracs FULL=Y CONSTRAINTS=Y FILE=hnds_as.dmp IGNORE=Y COMMIT=Y LOG=importTables.log STREAMS_INSTANTIATION=Y 
或仅作实例化(不带数据):
exp USERID=SYSTEM/creator@orcl.yysf.com OWNER=yysys FILE=yysf.dmp LOG=exportTables.log OBJECT_CONSISTENT=Y STATISTICS = NONE ROWS=NO 

imp USERID=SYSTEM/creator@orcl.yysw.com FULL=Y CONSTRAINTS=Y FILE=yysf.dmp COMMIT=Y LOG=importTables.log STREAMS_INSTANTIATION=Y IGNORE=Y
也可用直接设置SCN的方式进行实例化:
---获取源库互置用户的SCN
connect SRADM/SRADM@orclsrc    
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 SRADM/SRADM@orcldst                                                                                              
BEGIN                                                                                                                       
 DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN(
        source_schema_name => 'YYSYS',                                                                                   
        source_database_name => 'ORCL.YYSF.COM',
        instantiation_scn => &iscn);
END;                                                                                                                    
/                                                                                                                                                                                       

 

最后启动捕获进程:
connect SRADM/SRADM@orclsrc
BEGIN
        DBMS_CAPTURE_ADM.START_CAPTURE(capture_name  => 'SRADM_C_01');                                                    
END;                                                                                                                      

7、配置心跳表机制
connect yysys/yysys@orclsrc
alter session set nls_date_format='YYMMDD[HH24:MI:SS]';
create table htbt(name varchar2(10) not null,  rqsj date default sysdate not null);
alter table htbt add constraint PK_HTBT primary key (name);

set serveroutput on                                                                                                           
variable jobno number;
variable instno number;

begin
  select instance_number into :instno from sys.v_$instance;
  dbms_job.submit(:jobno, 'update yysys.htbt set rqsj=sysdate;', trunc(sysdate+1/24/60,'MI'), 'trunc(SYSDATE+1/24/60,''MI'')', TRUE, :instno);
  commit;
end;

 

|||||||||||||||||||||||||||||||||||||||||||||||||

alter session set nls_date_format='yymmdd{hh34:mi:ss}';
select * from htbt;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值