【各位高手帮忙】关于orcle数据同步的问题
要求:
查询Boss机的日志boss_log表 如果有备份记录就同步客户的Boss机数据到本地的数据库
select count(*) from boss_log where time='20110307'
time后面的查询条件是取当天的日期 比如今天2011年3月16日2:49:17 则查询条件为 20110316
本地表的ID取Boss机的ID 保持同步
如果本地表没有数据直接取Boss机 数据
-----下面两点保证记录同步 大概实现触发器的原理
如果本地表有数据根据Boss的ID查本地 如果存在更新表记录 如果不存在插入Boss机记录
根据本地ID查Boss机数据 如果不存在 将该记录标记为删除(历史记录)
涉及表大概有6-7张
简单模拟一下表情况
Boss机表
test1
---------------
id ,name,size
1 ,td ,12
2 ,ww ,34
test2
---------------
id ,areaName, areaCode
01,ss, 12
03,ss, 16
本地表
mytest1
-------------------
id,name,size
mytest2
-------------------
id,code
有可能与Boss机表结构相同 如test1与mytest1
也有可能只取Boss表中某一列的数据 如test2与mytest2
下面是我的解决方案
先创建dblink 然后写个存储过程 然后写个job 如果条件成立 每天8点备份
//创建连接
create databse link bosslink 连接的dblink名称
connect to mytest ---连接的数据库名称
identified by bosslink sys 连接的数据库密码
using('description=
(address=(protocol=tcp)(host=ip地址)(port=端口))
(connect_data=
(server=dedicated)
(server_name=数据库名称)
)
');
//创建同步的存储过程
create or replace procedure testname
as
cursor mycur is select * from test1;
my_id number;
n number;
begin
-------------------------------------------------------------------------
for n in mycur loop
begin
DBMS_OUTPUT.PUT_LINE('开始循环');
select count(*) into my_id from test2 t2 where t2.id=n.id;
DBMS_OUTPUT.PUT_LINE('获取记录');
if my_id<1 then
DBMS_OUTPUT.PUT_LINE('hahaa');
insert into test2 select * from test1;
end if;
end;
end loop;
----------------------------------------------------------------------------
commit;
end;
//创建job
begin
sys.dbms_job.submit(job=>:job,--job编号
what=>'dbms_ooutput.pub_line("testname");',--执行脚本
next_date=>to_date('17-01-2011 16:17:31','dd-mm-yyy hh24:mi:ss'),--下次执行时间
interval=>'trunc(sysdate)+8/24');--执行时间间隙
commit;
end;
问题:
1,现在我只实现了本地两张表test1与test2之间的数据同步,按要求修改存储过程
2,创建job后 是否是服务器只要开启它到时间就执行?不需要我用程序调用吧?
备注:本人是搞java的 对基本的sql 还可以 其他的就。。。。拜托各位了 O(∩_∩)O谢谢。。。。
主要是中间的存储过程 郁闷。。。。