oracle 创建dblink,传送数据

最近遇到个需求,需要将某个库的短信数据传送到短信中心的库中

1、给本数据库创建dblink连接


createpublicdatabaselinkpms_dblinkconnecttomsgp_itwgidentifiedbymsgp_itwg_2014
  using'(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST= 136.160.41.198)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=msgp)
)
)';

136.160.41.198----目标数据库地址
msgp--------目标数据库实例
msgp_itwg -----目标数据库用户
msgp_itwg_2014------目标数据库用户密码


创建完成验证下:SELECT * FROM intf.PUBLIC_INTF_DATA@pms_dblink;
能执行成功就表示创建成功,创建语句的含义是,利用msgp_itwg用户创建一个dblink,然后通过这个dblink访问inf用户下的表数据


2、写存储过程

有两个存储过程,一个是查本地数据,一个是插目标数据库


查询

CREATE OR REPLACE PROCEDURE init_sms_to_msgp is
t_guid varchar2(32);
t_staffName varchar2(20);
t_objID number(16);
t_smsCnt number(9);
is_send number(9);
t_start_time varchar(100);
t_end_time varchar(100);


cursor c_itsm is select note_id,note,obj_nbr,staff_id,create_date from issu_note_listing where deal_flag=0;


BEGIN


For itsm In c_itsm Loop
select sys_guid() into t_guid from dual;
send_sms(t_guid,itsm.obj_nbr,itsm.note);
update issu_note_listing set deal_flag=1 where note_id=itsm.note_id;
end loop;


END init_sms_to_msgp;


插入:

CREATEORREPLACEPROCEDUREsend_sms(t_guidvarchar2,sms_phonevarchar2,sms_notevarchar2)is
BEGIN
insertintointf.PUBLIC_INTF_DATA@db_msgp(system_id,other_sys_order_id,acc_nbr,acc_nbr_type_cd,serv_spec_id,contact_info,msg_content,send_date,insert_date,deal_flag)values
('129',t_guid,sms_phone,'101200074',sms_note,sysdate,1);
commit;
ENDsend_sms;

3、设置job

begin
sys.dbms_job.submit(job=>:job,
what=>'init_sms_to_msgp;',
next_date=>to_date('30-06-201714:57:57','dd-mm-yyyyhh24:mi:ss'),
interval=>'sysdate+1/1440');//一分钟执行一次
commit;
end;
/


完成了。

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...