数据库A 为主数据库,负责数据的创建。
数据库B 为数据库A的同步库,主要负责数据查询和统计。1、B库与A库实时同步或 准实时(要求20秒内)
2、数据库A的数据TB级别 ,每日数据更新较多
3、主要因为A库的压力太大,无法承担查询和统计工作请哪位专家给推荐下方案。谢谢

解决方案 »

  1.   

    http://renjava1.zhan.cn.yahoo.com/articles/080302/107185_20.html
    http://www.oracle.com.cn/viewthread.php?tid=8500
      

  2.   

    oracle数据库同步在两台oracle数据库之间测试成功,下面就总结一下吧:需求:现有两台oracle数据库服务器A和B(A,B可以是在同一内网,也可以是在互联网上的两台独立机器)。A和B里有都有testable表,结构一样,现需要当A库中的testable表变化时,B库里的testable也相应变化数据 我的解决方案:在A中建立到B库的链接,然后对要同步的表做一个同义synonym,最后建一个触发器,就可以完成了。当然,你所用的当前的用户要有相应的权限去执行这些操作。当从A向B同步数据时,应该在A上做所有的设置:1,为保证连接到另一台远程服务器的数据库,你需要建立一个DB Link,但是,这里要注意语法格式,using +"connect string",这个connect string应该是存在于oracle服务器的TNSNAMES.ORA文件里,监听程序将从这里获取远方服务器的ip地址等信息,我定义了一个'251'的connect string如下:
    251 = 
    (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.251)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = mychoice)))
     
    把它存到你的TNSNAMES.ORA文件里。 
    2,然后就可以定义DB Link了:
    create public database link TEST2.US.ORACLE.COM 
    connect to 用户名identified by "密码"using '251';
     3,建立synonym(同义) create or replace synonym TEST01for [email protected];
     建立完了以后,你可以通过:select * from test01 上面的语句相当于在B服务器上执行:select * from testable 4,封建触发器:当A中的testable表变化时(这里只考虑插入操作),就会触发向远程的B库的testable也插入相应的数据:
    create or replace trigger rtest 
    after insert on testablefor each rowbegin insert into test01 (something) values (:new.something);end;
     ok,现在我们可以测试一下,你在A库中往testable表中插入一条记录,看看B库中是不是也相应的增加了
    摘录于此  ,写的好
      

  3.   

    楼主说:2、数据库A的数据TB级别 ,每日数据更新较多 
    哪么触发器就不能使用了啊,那样会把数据库托死哦,考虑一下高级复制和物化视图!
      

  4.   

    当然是使用oracle dataguard,使用触发器只是程序员的做法,咨询一下oracle DBA吧,不要闭门造车啦
      

  5.   

    目前市面上产品只有ORACLE的DG和GOLDEN GATE、QUEST的SHAREPLEX、DSG的realsync、沃信科技的PAC 6.0。但是性价比最高的还是找深圳沃信科技的产品PAC 6.0吧,他是世界上唯一一个不用安装在主库上的同步复制产品,同时不需要在主库进行任何调整,支持不停机初始化,配置简单,维护量小,DBA即可实施,最大的满足目前ORACLE数据库的同步要求。
    大家可以访问他们的网站--www.woxintech.com