Oracle10gR2 Streams(八)表复制
上一篇:淘宝网招聘Oracle&MySQL DBA 下一篇:Oracle10gR2 Streams(九)配置过程中的错误处理及清除配置

Oracle10gR2 Streams(八)表复制

Streams的技术和Logical Standby在本质上是一样的,都是通过logminer技术从redo中解析出sql语句,然后通过一系列的进程将这些sql重新在目标库中应用,从而在目标库产生源库数据的一个拷贝。而Oracle10gR2中的logical standby,从配置上来说,要比streams更加简单可靠。所以,从全库复制的角度来讲,可能logical standby要比streams更有优势。但是Streams也有自己的特点,就是支持到异构数据源的复制,也可以做到只复制特定的某些数据,灵活性比logical standby要高得多。

本系列前面一些文章已经分别演示了全库复制,表空间复制和用户级复制,本文将演示表复制的配置。

源库:ning.test
目标库:dest.test
要复制的表:ning.test
复制方式:单向,downstream异地捕获日志

这里采用impdb可以通过网络直接导入数据的特性来实现表数据的初始化,所以不需要配置directory。

一、创建测试表

STRMADM@ning>create table ning.test( i int);

Table created.

要复制的表在目标库中不能已经存在。

二、传送源库日志到目标库

alter system set log_archive_dest_2='service=dest arch noregister';

三、在目标库执行maintain_tables

STRMADM@dest>DECLARE
  2    tables DBMS_UTILITY.UNCL_ARRAY;
  3    BEGIN
  4      tables(1) := 'ning.test';
  5      DBMS_STREAMS_ADM.MAINTAIN_TABLES(
  6        table_names                  => tables,
  7        source_directory_object      => NULL,
  8        destination_directory_object => NULL,
  9        source_database              => 'ning.test',
 10        destination_database         => 'dest.test',
 11        perform_actions              => true,
 12        bi_directional               => false,
 13        include_ddl                  => true,
 14        instantiation      => DBMS_STREAMS_ADM.INSTANTIATION_TABLE_NETWORK);
 15  END;
 16  /

PL/SQL procedure successfully completed.

四、验证复制是否成功

在源库上插入测试数据

STRMADM@ning> insert into ning.test values(1);

1 row created.

STRMADM@ning>commit;

Commit complete.

归档当前日志

STRMADM@ning>alter system archive log current;

System altered.

稍等片刻在目标库查询

STRMADM@dest>select * from ning.test;

         I
----------
         1

发现复制已经正常。如果等了足够长的时间发现数据没有复制过来,仔细检查了capture/propagation/apply各进程的状态都是正常的,这种现象我在使用maintain_tts/maintain_schemas/maintain_tables试验表空间复制/用户复制/表复制的时候都遇到过。所有的东西看起来都是正常的,但是数据就是过不去。后来开了个tar问oracle,经过一个星期的折腾,最后oracle给的答复是修改一个隐含参数:

alter system set "_job_queue_interval"=1 scope=spfile;

并且将aq_tm_processes参数改为1(我原来这是为10)

alter system set aq_tm_processes=1;

改完后重启,发现数据就可以过去了。这个隐含参数只是控制对job队列的检查频率,默认5秒。复制正常后我再将这个参数改回默认值,重新配置streams复制也一切正常了。。。

本文网址:http://www.ningoo.net/html/2007/oracle10gr2_streams_table_replicationhtml.html

订阅到Google | 收藏到Del.icio.us | 推荐到鲜果

相关文章 随机文章

本文Tags: ,

6 条评论


(Required)
(Required, will not be published)