goldengata 可以同步mysql 存储过程 同步吗

SQL&Server使用存储过程定时同步数据
SQL Server使用存储过程定时同步数据
发表于: 12:27:39 |分类:SQL Server |浏览(8) |评论(0) |引用(0)
·&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
最近做联通彩信的业务,有个彩信图片投票的项目,项目里面涉及了,短信、彩信和页面
三个方面,各自使用了不同的数据,于是有了数据交换和同步的问题,这里记录一下,我
彩信和页面数据同步的一个过程。
关于数据同步的问题,互联网上大都是采用SQL SERVER 的出版物、订阅的方式来处理
复制的;这里由于数据比较简单,仅仅是把彩信上行来的数据(两个表,一对多的关系)
提出来,插入到页面的数据库中的一个过程,所以,我没有使用上面提到的方式,而是写
了一个存储过程完成的同步,整个过程如下:
测试环境及同步要求:&&
有数据库服务器MMS和WEB,两台电脑能互相访问,有数据&&
服务器MMS.库名.MMS_RecvPrimaryInfo表:有字段:senderAddress,subject,createtime,transactionID
& 服务器MMS.库名.MMS_RecvDetailInfo表: 有字段CONTENT
& 服务器WEB.库名.UPMMS表:&
有字段:DT,TITLE,UPDATETIME,transactionID&&
& 要求:&&
MMS.库名.MMS_RecvPrimaryInfo增加记录则WEB.库名.UPMMS记录增加&&
MMS.库名.MMS_RecvDetailInfo表中对应记录的部分数据更新到WEB.库名.UPMMS新增记录中
1、在库MMS中建立视图,通过向导建立彩信两个表的一个视图,连接两个表的主键
CREATE VIEW dbo.UNI_CWDS_View
SELECT dbo.MMS_RecvPrimaryInfo.senderAddress,
dbo.MMS_RecvPrimaryInfo.toAddress,
dbo.MMS_RecvPrimaryInfo.createtime,
dbo.MMS_RecvPrimaryInfo.subject,
dbo.MMS_RecvDetailInfo.toFile,
dbo.MMS_RecvDetailInfo.contentType,
dbo.MMS_RecvPrimaryInfo.transactionID
FROM dbo.MMS_RecvPrimaryInfo INNER JOIN
dbo.MMS_RecvDetailInfo ON
dbo.MMS_RecvPrimaryInfo.transactionID =
dbo.MMS_RecvDetailInfo.transactionId
2、确定需要同步的字段,将这些字段的类型统一为完全相同
3、环境准备:
&a.在MMS上创建连接服务器,以便在MMS中操作WEB,实现同步:
SQL语句:&
&exec sp_addlinkedserver
'web','','SQLOLEDB','60.xxx.xxx.xxx,2433'
&exec sp_addlinkedsrvlogin
'web','false',null,'username','password'
&& b.在MMS和WEB这两台电脑中,启动
msdtc(分布式事务处理服务),并且设置为自动启动&&
我的电脑--控制面板--管理工具--服务--右键Distributed Transaction Coordinator
--属性--启动--并将启动类型设置为自动启动&&
4、实现同步处理的方法1:定时同步(存储过程sysn_unicwdd)
--同步数据存储过程 sysn_unicwdd
&create proc
sysn_unicwdd&&&&
--插入新增的数据
web.CWDDMMS_Vote.dbo.UPMMS(DT,TITLE,UPDATETIME,transactionID)&&
& select distinct&
senderAddress,subject,createtime,transactionID from UNI_CWDS_View
& where toaddress='9800701' and not exists(
& select * from web.CWDDMMS_Vote.dbo.UPMMS where
transactionID=i.transactionID)
--更新修改过的数据
update b set
CONTENT=i.toFile&&
& from web.CWDDMMS_Vote.dbo.UPMMS b,UNI_CWDS_View
& where b.transactionID=i.transactionID and
& contentType='text/plain'
update b set IMG=i.toFile&&
& from web.CWDDMMS_Vote.dbo.UPMMS b,UNI_CWDS_View
& where b.transactionID=i.transactionID and
& contentType like 'image%'
5、创建一个作业定时调用上面的同步处理存储过程就行了
&企业管理器&&
& --管理&&
Server代理&&
& --右键作业&&
& --新建作业&&
--"常规"项中输入作业名称&&
--"步骤"项&&
& --新建&&
--"步骤名"中输入步骤名&&
--"类型"中选择"Transact-SQL&&
脚本(TSQL)"&&
--"数据库"选择执行命令的数据库&&
--"命令"中输入要执行的语句:&& exec
sysn_unicwdd&&&&
& --确定&&
--"调度"项&&
& --新建调度&&
--"名称"中输入调度名称&&
--"调度类型"中选择你的作业执行安排&&
--如果选择"反复出现"&&
--点"更改"来设置你的时间安排&&
& 然后将SQL&&
Agent服务启动,并设置为自动启动,否则你的作业不会被执行&&
& 设置方法:&&
& 我的电脑--控制面板--管理工具--服务--右键SQLSERVERAGENT--属性
--启动类型--选择"自动启动"--确定.
本文来自CSDN博客,转载请标明出处:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。USE [TKPOS_WuJing]GO/****** Object:
StoredProcedure [dbo].[sp_get_saleData]
Script Date: 07/21/:54 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO
-- =============================================-- Author:
陈新光-- Create date: -- Description: 获取要上传的销售数据 /* execute sp_get_saleData */-- =============================================/*
TSaleRecord = record // 销售数据
recNo: string[40]; // guid
shopid: string[40]; // 门店编号
shopname: string[40];
billId: string[40]; // 单据编号
saleDate: TD // 销售日期
goodsId: string[40]; // 商品编号
goodsName: string[40];
price: C // 价格
qty: S // 数量
amount: C // 金额
cookType: string[8]; // 班次
bigKindId: string[40]; // 大类编号
bigKindName: string[40];
smallKindId: string[40]; // 小类编号
smallKindName: string[40];
unitId: string[40]; // 计量单位编号
unitName: string[40];
vipId: string[40]; // 会员编号
vipName: string[40];
skyId: string[40]; // 收款员编号
skyName: string[40];
ywyId: string[40]; // 业务员编号
ywyName: string[40];*/ALTER PROCEDURE [dbo].[sp_get_saleData]--@bills varchar(400) output
-- 将要上传的销售单号列表ASBEGIN set nocount on -- 获取最近上传数据的时间戳 declare @dd datetime select @dd=LastUpload from sys_upload where UploadType='SaleData' -- 将要上传哪些销售单 declare @billIds varchar(400) declare @billId varchar(40) DECLARE c1 CURSOR FOR select top 5 SaleNo from Pos_Master where SaleDate&@dd
-- 一次上传5笔 open c1 FETCH NEXT FROM c1 INTO @billId WHILE @@FETCH_STATUS = 0
if @billIds is null begin
set @billIds=''''+@billId+''''
end else begin
set @billIds=@billIds+','+''''+@billId+''''
FETCH NEXT FROM c1 INTO @billId end close c1 deallocate c1
declare @sql varchar(2000) declare @time2 datetime create table #tmp( time2 datetime ) set @sql='insert into #tmp select max(SaleDate) from Pos_Master where SaleNo in ('+@billids+')' exec(@sql) select @time2=time2 from #tmp
-- 获取要上传的销售数据
set @sql='select b.SaleNo as billId,b.SaleDate,a.GoodsID,a.GoodsName,a.RetailPrice as price' +',a.Qty,a.Amount,dbo.f_GetCookType(b.saleDate) as cooktype'
+',a.bigKindId,a.bigKindName,a.smallKindId,a.smallKindName' +',a.UnitCode as unitid,a.Unit as unitname,'''' as vipid,'''' as vipname,b.Employee as skyid' +',b.Createtor as skyname,'''' as ywyid,'''' as ywyname,'+'''' +convert(varchar,@time2,21)+''''+' as time2' +' from pos_detail a' +' inner join Pos_Master b on a.SaleNo=b.SaleNo' +' where b.SaleNo in ('+@billIds+')' exec (@sql)
drop table #tmp
set nocount offEND
阅读(...) 评论()有没有办法,把Oracle的存储过程,同步到SVN之类的版本工具上?
[问题点数:100分,结帖人hurt75]
有没有办法,把Oracle的存储过程,同步到SVN之类的版本工具上?
[问题点数:100分,结帖人hurt75]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年3月 Oracle大版内专家分月排行榜第三
2013年9月 Oracle大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。存储过程同步两张表的数据?_百度知道

我要回帖

更多关于 oracle 存储过程 同步 的文章

 

随机推荐