两个数据库之间的数据复制。

hushengqi 2003-06-17 09:37:49
本人遇到的是:有两个局域网,被物理隔离。分别安装了两个SQL,一个用于对外的操作,可以添加,修改数据,另一个要检索、使用第一个数据库截止到头一天的数据。两个局域网只能使用U盘传递数据。本人试了发布、订阅方式,因为没有物理连接,总是不成功。本人用了倒入、倒出功能,可以使用,但是给实际操作者讲不明白。实际操作者希望最好桌面上有个快捷方式。打开,可以下载数据。在另一个局域网也可以很方便的合并数据。一直解决不了,哪位能给个思路,多谢了。本人对sql的维护不熟悉,希望多加指点。另:数据库有十几个表,两个数据库中的表名和结构一致,但数据库的名字不同,试过backup,有问题。
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hushengqi 2003-06-18
  • 打赏
  • 举报
回复
感谢 happydreamer。记下了,明天到现场去实现。
coo 2003-06-18
  • 打赏
  • 举报
回复
写存储过程语句向本地库插入数据,可以设置全部更新和累加更新功能
hushengqi 2003-06-18
  • 打赏
  • 举报
回复
tjan:试过,但是在订阅方设置时工具一直要求可以实时的连接到发布方的数据库,不知道怎样跳过这个要有。
tjan 2003-06-18
  • 打赏
  • 举报
回复
可以用复制方式的,把发布方的快照目录 copy 到订阅方供订阅方复制使用。
hushengqi 2003-06-18
  • 打赏
  • 举报
回复
问题已经解决,还是使用导入、导出功能。分别作了DTS包。一个服务器在下班前定时导出所用数据,直接导到U盘上。另一个服务器早上直接从U盘上导入数据。只要一个插拔U盘的动作,不要任何操作,操作者很满意。
感谢happydreamer、tjan(安安)、coo(25),吗上结贴。
happydreamer 2003-06-17
  • 打赏
  • 举报
回复

写procedure把新增修改记录导出文本,这样需要在表中添加判断标志,
如:1 未传传输,2 已上传

把文本传到其他服务器,这个可以用前台软件写个传输文件程序(或者直接用
master..xp_cmdshell),取指定服务器目录内的文件,再用过程导入数据库,导入时进行数据过滤


程序可以这样写过程 比如表名叫table 状态字段为state (1 未传传输,2 已上传)

CREATE PROCEDURE sp_convert --数据转换过程
with recompile ,encryption
as
declare
@bcp varchar(600),
@path char(100),
@file char(200),
@user char(10),
@mdate char(8)
@mdept char(5),
@passwd char(8)
if @@TRANCOUNT >0
COMMIT TRAN
select @user=suser_name()
select @passwd=password from login where code=ltrim(rtrim(@username)) --用户登录表
select @path=ltrim(rtrim(up_path))+'download\'
from parm --运行参数表 包括文件传输路径
select @mdate=convert(char(8),cast(open_close as datetime),112)
select @file='file'+@mdate 得到带日期的txt文件

--convert data to txt

select @bcp='bcp "select * from dbname..table where state=1 " queryout '+ltrim(rtrim(@path))+ltrim(rtrim(@file))+'.txt'+' -c -t, -U '+@user+'-P '+@passwd --选择未传输数据导出
exec master..xp_cmdshell @bcp
begin tran
update dbname..table set state=1 where ct_state=1 --更新状态
commit tran


CREATE PROCEDURE sp_copyfile --文件copy过程
with recompile,encryption
as
declare
@path char(100),
@copy char(300),
@user char(10),
@passwd char(8),
@bcpname char(300)

if @@TRANCOUNT >0
COMMIT TRAN
select @usere=suser_name()
select @passwd=password from login where code=ltrim(rtrim(@username))
select @path=ltrim(rtrim(up_path))+'upload\' from parm


--copy files to servers
select @copy='copy '+ltrim(rtrim(@path))+'file*.txt '+ltrim(rtrim(@path))+substring(convert(char(8),getdate(),112),7,2)
exec master..xp_cmdshell @copy
select @copy='del '+ltrim(rtrim(@pathname))+'file*.txt' --copy完成删除文件
exec master..xp_cmdshell @copyname
if @@TRANCOUNT >0
COMMIT TRAN
return

总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把
总部数据传入分部
hushengqi 2003-06-17
  • 打赏
  • 举报
回复
再问一句,导入和导出是否可以每天定时发生,这样只要操作者拷文件就行了,哪位给个思路,最好具体点,谢了。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧