各位高人,小弟初学oracle,现在遇到一个问题想请教大家。有两个数据库A和B,A和B分别装在不同的服务器上。
数据库A有表A1(A1_x, A1_y, A1_z),A2(A2_m, A2_n),且每天不停的会往这2个表中写入数据。
现在需要在每天晚上12点将当天新加入A1、A2中的A1_x, A1_z, A2_n的记录复制到数据库B中。如果不借助任何外部工具,只在oracle中手动写脚本的话需要怎么做啊?小弟初学,希望各位高人能解答得详细一点,谢谢!

解决方案 »

  1.   

    create public database link dblink_name
    connect to username identified by password 
    using tns_name;dblink_name:自定义名称
    username:用户名
    password:密码
    tns_name:tnsnames.ora文件中的网络服务别名
      

  2.   

    你在A机器上建立DBLINKcreate  database link DBLINK名称
      connect to 访问B机器数据库用户名  identified by 访问B机器数据库密码  
    using '(DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = B数据库地址)(PORT = B数据库端口))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = B数据库实例名)
        )
      )';在A机器上建立job schedule,实现每天自动处理A到B数据的处理。
      

  3.   

    方法有两种,既可在A数据中创建,也可在B数据库中创建,看你实际情况,步骤如下:1. 建立Oracle侦听2. 创建database link3. 创建存储过程(远程数据库访问格式为:db_name@dblink_name)
    create or replace procedure pro_test
    as
    begin
    exception
    end;4. 创建作业(比如每天凌晨2点执行)
    variable jobnum number;
    begin
       dbms_job.submit(:jobnum,'pro_test;',sysdate,'trunc(sysdate)+1+2/24' );
       commit;
    end;
    考虑实际问题还有,如果出现网络问题怎么办,数据量很大怎么办
      

  4.   

    直接dblink访问,  然后再加上job定时执行。
      

  5.   

    谢谢以上各位TX的回答,但是我要怎么才能知道从A到B的数据只是当天更新的数据而不是A中的所有数据呢?
      

  6.   

    那需要在B中加个标志时间的字段,也就是说每次从A中复制数据时候同时在B中写入日期。