如何同步两个数据库

doniel 2010-07-26 01:24:40
我有两个数据库(一个是服务器上的,一个是本地的)。我想实现本地的数据库每天去抓取服务器的数据库。但有几个条件限制:
1、两个数据库的表结构是不一样的,本地的数据库是从服务器那里通过 select * into temp(目标数据库) from test(源数据库) 而得到的,也就是说,本地数据库是服务器数据库的一个子数据库。本地数据库的表以及字段都是在服务器上的一小部分
2、我每天5点钟进行带有select的更新。例如select * from 服务器有的记录 insert into (本地没有的记录)
请这样该怎样实现呢?请大伙给我一个思路,我没有想法什么好方法。。
...全文
1104 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
my_life_1997 2012-02-10
  • 打赏
  • 举报
回复
1.如果数据库数据不大的情况下,每次可以先 delete 掉原来的数据。然后再全部重新插入。
2.SQL Server / MYSQL 都有自带的复制和镜像功能,不过不可以自定义。
3.使用数据库同步软件实现,如 SyncNavigator, 几分钟就能实现。
doniel 2010-07-28
  • 打赏
  • 举报
回复
/*
作者:邹建
*/

它做的这个东西能不能使用的?怎么满天飞,这个答案..
aimyray 2010-07-27
  • 打赏
  • 举报
回复
学习学习,正好要做数据库同步
wuyq11 2010-07-26
  • 打赏
  • 举报
回复
可使用分发和订阅实现
不同服务器数据库之间的数据操作

--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例
select * from ITSV.数据库名.dbo.表名

--导入示例
select * into 表 from ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表

whjk1234bo 2010-07-26
  • 打赏
  • 举报
回复
学习了。。
miaoyu04 2010-07-26
  • 打赏
  • 举报
回复
新建一个作业,在作业中执行查询,插入
bbb332 2010-07-26
  • 打赏
  • 举报
回复

/*
作者:邹建
*/

/*--同步两个数据库的示例

有数据
srv1.库名..author有字段:id,name,phone,
srv2.库名..author有字段:id,name,telphone,adress

要求:
srv1.库名..author增加记录则srv1.库名..author记录增加
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新
--*/

--大致的处理步骤
--1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步
exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql实例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'
go

--2.在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动 我的电脑--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动
go


--3.实现同步处理

--a.在srv1..author中创建触发器,实现数据即时同步
--新增同步
create trigger tr_insert_author on author
for insert
as
set xact_abort on
insert srv2.库名.dbo.author(id,name,telphone)
select id,name,telphone from inserted
go

--修改同步
create trigger tr_update_author on author
for update
as
set xact_abort on
update b set name=i.name,telphone=i.telphone
from srv2.库名.dbo.author b,inserted i
where b.id=i.id
go

--删除同步
create trigger tr_delete_author on author
for delete
as
set xact_abort on
delete b
from srv2.库名.dbo.author b,deleted d
where b.id=d.id
go
路人乙e 2010-07-26
  • 打赏
  • 举报
回复
使用SQL SERVER作业
如果不支持的话就自己写一小程序 定时获取
jiajun923 2010-07-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 moudy 的回复:]
方法很多。
1.建立DTS包,通过JOB定时执行
2.建立链接服务器,写个存储过程,通过JOB定时执行
3.SQL的分发订阅功能
等等。
[/Quote]

你说的这是简单的小程序可以,如果要更新的数据比较复杂 这样就不好弄了。
myhope88 2010-07-26
  • 打赏
  • 举报
回复
路过,帮顶下
bbb332 2010-07-26
  • 打赏
  • 举报
回复
触发器。。。
moudy 2010-07-26
  • 打赏
  • 举报
回复
方法很多。
1.建立DTS包,通过JOB定时执行
2.建立链接服务器,写个存储过程,通过JOB定时执行
3.SQL的分发订阅功能
等等。

也可以写外部程序,如3楼,但个人觉得没必要。
xiaowx2000 2010-07-26
  • 打赏
  • 举报
回复
不能字段和字段对应么?源服务器上有A B C 三个字段 本地有A 和B 那就 SELECT A,B FROM 源
INSERT INTO 本地没有的?
jiajun923 2010-07-26
  • 打赏
  • 举报
回复
用WINform做个窗体的实时更新程序,用timer控制每天什么时候更新数据库就OK了 很简单的
kkbac 2010-07-26
  • 打赏
  • 举报
回复
csdn博客看看看着就死机了.nnd.现在都打不开.
doniel 2010-07-26
  • 打赏
  • 举报
回复
晕倒。。论坛发帖子的时候,如果没有选择小分类的时候不但发不出去,而且还把浏览器给卡死。。又得重开浏览器,重新写。。。

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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