oracle使用之--dblink+定时job实现数据迁移更新

提供如下解决方案,实现不同网段数据库之间数据的同步更新:

1.在目的数据库上,创建dblink

create public database link link名字 connect to 源数据库用户名 identified by "密码"
   using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =服务名)
)
)';
如果创建dblink不成功:
查看该用户是否具有权限?
若无权限则使用管理员账户赋权:
 grant create public database link to 当前用户;

2.查看dblink

select owner,object_name from dba_objects where object_type='DATABASE LINK';(上述语句执行需具有管理员用户权限)
select * from test;
select * from test@TESTLINK;
删除dblink:

drop public database link dblinkname;


3.创建存储过程

CREATE OR REPLACE
PROCEDURE test_name AS
BEGIN
  delete from test;
  insert into test
  select * from test@TESTLINK; 
  commit; 
 EXCEPTION  
    WHEN OTHERS  
    THEN  
      DBMS_OUTPUT.PUT_LINE ('Exception happened,data was rollback');  
      ROLLBACK;  
END;
删除存储过程:
如果该存储过程存在则删除
drop procedure if exists test_name;
查看存储过程(名字都变为大写):
SELECT text
    FROM user_source
   WHERE NAME = 'TEST_NAME'

ORDER BY line;

5.创建定时任务

declare      
  job_id number;
begin
  dbms_job.submit( 
      job_id, 
      'test;',  --存储过程名字
      sysdate,  --下次执行时间
      'TRUNC(sysdate) + 1 +2 / (24)'  --执行频率
    );  
  dbms_output.put_line(job_id); 
end;
job的运行频率设置
1.例如:每天的凌晨2点执行 
Interval => TRUNC(sysdate) + 1 +2 / (24) 
删除定时任务操作:
begin  
dbms_job.remove(21);  --job id

end; 

6.查看定时任务
SELECT * FROM USER_JOBS;

7.开启定时任务

BEGIN    
    DBMS_JOB.RUN(38); --job id
END;
若定时任务自动执行失败:
sql命令行输入:show parameter job_queue_processes
查看 value 是否为0?
若为0 执行:
alter system set job_queue_processes=10 scope=both;


至此,迁移流程结束,当然数据同步的实现方案很多,以实际情况采取最优,有问题也可一起讨论解决

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值