首页新闻找找看学习计划

sqlserver数据库数据同步

0
悬赏园豆:10 [已解决问题] 解决于 2016-04-06 09:11

有两个数据库,每次把一个数据库的数据同步到另一个数据库。

是在脚本代码中操作还是用脚本调用存储过程操作,或者有更好的方法?

小光的主页 小光 | 小虾三级 | 园豆:1830
提问于:2016-04-05 16:36
< >
分享
最佳答案
0

最理想的办法 是不同步 做视图 夸库查询

收获园豆:8
小眼睛老鼠 | 老鸟四级 |园豆:2774 | 2016-04-05 16:40

但是需求是要具体数据,不能跨库查询,比如同义词。。。

小光 | 园豆:1830 (小虾三级) | 2016-04-05 16:55

@博客园乄小光: 同义词?? 什么意思? 难道你需要双向同步 单向同步还不行?

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-04-05 17:25

@博客园乄小光: 你这个 不存在 跨服务器的问题 那么 用视图就是最理想的办法 

因为数据同源 不存在 数据部一致的问题 

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-04-05 17:26

@小眼睛老鼠: 单向同步可以,奈何要求必须把数据同步到位,不让跨库查询。。。

小光 | 园豆:1830 (小虾三级) | 2016-04-05 17:29

@博客园乄小光: 为什么不让跨库?

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-04-05 18:26

@博客园乄小光: 你写存储过程 难道不跨库?

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-04-05 18:26

@小眼睛老鼠: 他是要数据,是不让跨库查出来,不是不让跨库

小光 | 园豆:1830 (小虾三级) | 2016-04-05 18:28

@小眼睛老鼠:我就用脚本调用存储过程实现吧,以前在银行的老方法,不知道效率怎么样, 你能给我一下那个视图跨库查询方法么,然后可以结贴了,估计也没其他的了

小光 | 园豆:1830 (小虾三级) | 2016-04-05 18:30

@博客园乄小光:

CREATE VIEW [dbo].[视图名]
AS

select * from [库名].[dbo].[表名]

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-04-05 18:35

@博客园乄小光: 视图里面就做了 跨库了 对于系统内的人 只需要关心 从视图查数据 至于数据从哪儿来 视图部分搞定 

小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2016-04-05 18:39
其他回答(3)
0
收获园豆:1
贫民窟大侠 | 园豆:4270 (老鸟四级) | 2016-04-05 16:58

你这个是脚本调用存储过程,有没有更好的方法?求指教

支持(0) 反对(0) 小光 | 园豆:1830 (小虾三级) | 2016-04-05 17:03
0

使用sqlserver的复制功能,定时定期同步数据库。

收获园豆:1
Jerry Tong | 园豆:385 (菜鸟二级) | 2016-04-05 21:51
0

15:不同服务器数据库之间的数据操作

--创建链接服务器

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 本地表 

多罗贝勒 | 园豆:16 (初学一级) | 2016-04-06 08:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册