ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 单实例到单实例Oracle Stream搭建

单实例到单实例Oracle Stream搭建

原创 Linux操作系统 作者:jchao_yong 时间:2012-11-23 15:05:08 0 删除 编辑
这两天测试了一下Stream,在网上找了一些资料,集合大话oracle RAC上的一些信息,测试通过,把结果整理出来分享一下,各位有时间可以自己试试
1 基础环境
1.1 源数据库
操作系统:windows XP
IP地址:10.80.88.35
数据库:Oracle 10.2.0.1.0
ORACLE_SID:sttest
Global_name:STTEST.REGRESS.RDBMS.DEV.US.ORACLE.COM

1.2 目标数据库
操作系统:windows 7
IP地址:10.80.88.231
数据库:Oracle 11.2.0.1.0
ORACLE_SID:orcl
Global_name:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

1.3 复制规划,将决定如何配置
将sttest库里的jiang用户下的所有对象复制到orcl库里,采用是本地捕获和单向复制

2 配置环境
2.1 在pfile中设定初始化参数,源数据库和目标数据库都得设置
aq_tm_processes=2
global_names=true
job_queue_processes=10
parallel_max_servers=20
undo_retention=3600
nls_date_format='YYYY-MM-DD HH24:MI:SS'
streams_pool_size=160M
utl_file_dir='*'
open_links=4     
#设置归档目录及格式
log_archive_dest_1='LOCATION=......'   
log_archive_format='ARC%S_%R.%T'
之后用pfile重启数据库,并将数据库置为归档模式
shutdown immediate;
start nomount pfile='......';
create spfile from pfile=......'';
alter database mount;
alter database archivelog;
alter database open;
      
2.2 配置TNS
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.80.88.231)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
  
STTEST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = lenovo-jy)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = lenovo-jy)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sttest)
    )
  )                                                
      
2.3 创建stream 管理用户
2.3.1 在源数据库上创建主环境stream管理用户
create tablespace streams_tbs datafile 'D:\oracle\oradata\sttest\streams_tbs.dbf' size 200M autoextend on;
execute dbms_logmnr_d.set_tablespace('streams_tbs');
create user strmadmin identified by STRMADMIN default tablespace streams_tbs 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;
/

2.3.2 在目标数据库上创建从环境stream管理用户,由于目标数据库是11G的,密码要用大写,不然后续创建到目标数据库的db link时会连接不上
create tablespace streams_tbs datafile 'E:\app\root\oradata\orcl\streams_tbs.dbf' size 200M autoextend on;
execute dbms_logmnr_d.set_tablespace('streams_tbs');
create user strmadmin identified by STRMADMIN default tablespace streams_tbs 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;
/

2.4 启用追加日志,可以基于Database级别或Table级别,启用追加日志(Supplemental Log);在建立根据Schema粒度进行复制的Oracle Stream环境中,如果确认Schema下所有Table都有合理的主键(Primary Key),则不再需要启用追加日志
alter database add supplemental log data;
alter table add supplement log group log_group_name(table_column_name) always;

2.5 创建 DBlink,针对主数据库建立的数据库链的名字必须和从数据库的global_name相同
2.5.1 创建主数据库数据库链
alter database rename global_name to STTEST.REGRESS.RDBMS.DEV.US.ORACLE.COM;
connect strmadmin/STRMADMIN@sttest
CREATE DATABASE LINK ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM CONNECT TO strmadmin IDENTIFIED BY STRMADMIN USING 'orcl';
2.5.2 创建从数据库数据库链
alter database rename global_name to ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM;
connect strmadmin/STRMADMIN@orcl
CREATE DATABASE LINK STTEST.REGRESS.RDBMS.DEV.US.ORACLE.COM CONNECT TO strmadmin IDENTIFIED BY STRMADMIN USING 'sttest';

2.6 创建Source队列
2.6.1 在源数据库上创建 Master Source队列
connect strmadmin/STRMADMIN@sttest
begin
dbms_streams_adm.set_up_queue(
queue_table => 'sttest_queue_table',
queue_name => 'strmadmin.sttest_queue');
end;
/

2.6.2 在目标数据库上创建 Backup Source队列
connect strmadmin/STRMADMIN@orcl
begin
dbms_streams_adm.set_up_queue(
queue_table => 'orcl_queue_table',
queue_name => 'strmadmin.orcl_queue');
end;
/

2.7 在源数据库上创建Capture进程
connect strmadmin/STRMADMIN@sttest
begin
dbms_streams_adm.add_schema_rules(
schema_name        => 'jiang',
streams_type         => 'capture',
streams_name        => 'capture_sttest',
queue_name         => 'strmadmin.sttest_queue',
include_dml         => true,
include_ddl          => true,
include_tagged_lcr    => false,
source_database      => null,
inclusion_rule        => true);
end;
/

2.8 实例化复制数据库
2.8.1 在源数据库上导出
exp userid=jiang/jiangyong@sttest file=d:\jiang.dmp log=d:\jiang.log  object_consistent=y rows=y
      
2.8.2 复制到目标数据库再导入
create user jiang identified by jiangyong default tablespace users temporary tablespace temp;
grant dba to jiang;
imp userid=system/jiangyong@orcl  file=d:\jiang.dmp log=d:\jiang.log  ignore=y  commit=y streams_instantiation=y fromuser=jiang touser=jiang

2.9 在源数据库上创建传播进程
connect strmadmin/STRMADMIN@sttest
begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name             => 'jiang',
streams_name            => 'sttest_to_orcl',
source_queue_name       => 'strmadmin.sttest_queue',
destination_queue_name => 'strmadmin.orcl_queue@orcl',
include_dml             => true,
include_ddl              => true,
include_tagged_lcr        => false,
source_database            => 'sttest',
inclusion_rule            => true);
end;
/
#修改propagation休眠时间为0,表示实时传播LCR
begin
dbms_aqadm.alter_propagation_schedule(
queue_name              => 'strmadmin.sttest_queue',
destination               => 'orcl',
latency                  => 0);
end;
/

2.10 在目标数据库上创建应用进程
connect strmadmin/STRMADMIN@orcl
begin
dbms_streams_adm.add_schema_rules(
schema_name         => 'jiang',
streams_type         => 'apply',
streams_name        => 'apply_orcl',
queue_name          => 'strmadmin.orcl_queue',
include_dml          => true,
include_ddl          => true,
include_tagged_lcr => false,
source_database     => 'sttest',
inclusion_rule      => true);
end;
/

2.11 启动 STREAM
2.11.1 在目标数据库上启动Apply进程  
connect strmadmin/STRMADMIN@orcl
begin
dbms_apply_adm.start_apply(
apply_name => 'apply_orcl');
end;
/

2.11.2 在源数据库上启动Capture进程
connect strmadmin/strmadmin@sttest
begin
dbms_capture_adm.start_capture(
capture_name => 'capture_sttest');
end;
/

2.12 停止 STREAM
2.12.1 停止Capture进程
connect strmadmin/STRMADMIN@sttest
begin
dbms_capture_adm.stop_capture(
capture_name => 'capture_sttest');
end;
/

2.12.2 停止Apply进程        
connect strmadmin/strmadmin@orcl
begin
dbms_apply_adm.stop_apply(
apply_name => 'apply_orcl');
end;
/
        
2.13 重启传播
#停止传播
exec dbms_propagation_adm.stop_propagation('sttest_to_orcl')
#启动传播
exec dbms_propagation_adm.start_propagation('sttest_to_orcl')
2.14 清除所有配置信息
#以strmadmin身份,登录主数据库。
connect strmadmin/STRMADMIN
exec DBMS_STREAMS_ADM.remove_streams_configuration();  
#以strmadmin身份,登录从数据库。
connect strmadmin/STRMADMIN
exec DBMS_STREAMS_ADM.remove_streams_configuration();

3 相关测试
在源数据库上创建table并插入数据
create table t_user1 (user_id number not null,user_name varchar2(20) not null,user_email varchar2(30));
insert into t_user1 (user_id,user_name,user_email) values (1,'alex','alex200905@163.com');              
commit;  
在目标数据库上可以看到同步的信息
select * from t_user1;

4 查找无法同步原因                                                                                         
source:select * from dba_queue_schedules;
target:select * from dba_apply_error;

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

请登录后发表评论 登录
全部评论

注册时间:2012-10-15

  • 博文量
    7
  • 访问量
    5263