首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

怎么同步两个数据库

2012-03-24 
如何同步两个数据库我有两个数据库(一个是服务器上的,一个是本地的)。我想实现本地的数据库每天去抓取服务

如何同步两个数据库
我有两个数据库(一个是服务器上的,一个是本地的)。我想实现本地的数据库每天去抓取服务器的数据库。但有几个条件限制:
1、两个数据库的表结构是不一样的,本地的数据库是从服务器那里通过 select * into temp(目标数据库) from test(源数据库) 而得到的,也就是说,本地数据库是服务器数据库的一个子数据库。本地数据库的表以及字段都是在服务器上的一小部分
2、我每天5点钟进行带有select的更新。例如select * from 服务器有的记录 insert into (本地没有的记录)
请这样该怎样实现呢?请大伙给我一个思路,我没有想法什么好方法。。

[解决办法]
csdn博客看看看着就死机了.nnd.现在都打不开.
[解决办法]
用WINform做个窗体的实时更新程序,用timer控制每天什么时候更新数据库就OK了 很简单的
[解决办法]
不能字段和字段对应么?源服务器上有A B C 三个字段 本地有A 和B 那就 SELECT A,B FROM 源 
INSERT INTO 本地没有的?
[解决办法]
方法很多。
1.建立DTS包,通过JOB定时执行
2.建立链接服务器,写个存储过程,通过JOB定时执行
3.SQL的分发订阅功能
等等。

也可以写外部程序,如3楼,但个人觉得没必要。
[解决办法]
触发器。。。
[解决办法]
路过,帮顶下
[解决办法]

探讨
方法很多。
1.建立DTS包,通过JOB定时执行
2.建立链接服务器,写个存储过程,通过JOB定时执行
3.SQL的分发订阅功能
等等。

[解决办法]
使用SQL SERVER作业
如果不支持的话就自己写一小程序 定时获取
[解决办法]
SQL code
/*    作者:邹建    */      /*--同步两个数据库的示例      有数据    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
[解决办法]
新建一个作业,在作业中执行查询,插入
[解决办法]
学习了。。
[解决办法]
可使用分发和订阅实现
不同服务器数据库之间的数据操作 

--创建链接服务器 
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 本地表


[解决办法]
学习学习,正好要做数据库同步

热点排行