打算做数据同步,做个定时任务,,然后执行表复制数据,现验证相应的sql语句
1、复制初始数据
单表:
insert into table_name(select * from table_name@dblink where ...)2、定时更新已经复制过的数据
update table_name a set(col1, col2) = 
(select col1, col2 from table_name@dblink b where a.id= b.id)这样就可以定时复制和更新数据到远程的数据库上了,但考虑到性能,在数据较多时,需要分批复制或更新数据,这样就建立一个表,用来标识出已经复制或更新过的数据,在下次复制或更新仅对未复制过的,或某个时间段内未更新过的数据进行相应操作,这个sql如何写?有没有这样的语法?
增加标识用的表:  CREATE TABLE SYNC_TABLE_NAME"
   ( "ID" NUMBER(10,0) NOT NULL ENABLE, 
"INS" NUMBER(1,0), 
"UP" DATE, 
   )
 
ID与table_name表中id字段对应
INS表示对应id的记录己复制
UP表时对应id的记录上次更新的时间对否在复制语句时就将此表的对应记录真充进来,更新的时候也一样下面按照 我的思路,写的语句,还未验证成功
insert into table_name,sync_table_name
(select *,id,1,sysdate from sys_spendtime_doing@dblink 
where id not in(select id from sync_table_name) and rownum<10)求高人共同研究下

解决方案 »

  1.   


    insert all into 
    sys_spendtime_doing(logid,userid) values(lid,userid) into sync_spendtime_doing(spendtime_id,ins)values(lid,0)
    (select logid lid,userid from sys_spendtime_doing@link_246 where rownum<10)成功一个
      

  2.   

    insert all into 
    sys_spendtime_doing
    (logid,userid,userip,serverip,resource_path, start_time,spend_time,url_para) 
    values
    (logid,userid,userip,serverip,resource_path, start_time,spend_time,url_para) 
    into sync_spendtime_doing(spendtime_id,ins,up)values(logid,1,sysdate)
    (select * from sys_spendtime_doing@link_246 where logid not in 
    (select logid from sys_spendtime_doing) and
    rownum<10)
    任务中可以执行的语句
      

  3.   

    update sys_spendtime_doing a set(userid, userip)=
    (select userid,userip from sys_spendtime_doing@link_246 b where a.logid=b.logid)
    where rownum<10