MSSQL-跨服务器之间复制数据方法

开启SQL相关配置

SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。

1.开启Ad Hoc Distributed Queries组件,在sql查询编辑器中执行如下语句:
 
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

    2.关闭Ad Hoc Distributed Queries组件,在sql查询编辑器中执行如下语句:


exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure

---------------------------------

=====示例=========

--查询远程
--select * from openrowset( 'SQLOLEDB', '166.62.xx.xx'; 'userid'; 'pwd', databaseName.dbo.admin)
/* */
--insert openrowsetopenrowset( 'SQLOLEDB', '166.62.xx.xx'; 'userid'; 'pwd', databaseName.dbo.admin)
select count(id) from carsets_co_uk_server.dbo.ProContent as spro where spro.ProductItemNo not in(select tpro.ProductItemNo from openrowset( 'SQLOLEDB', '166.62.xx.xx'; 'userid'; 'pwd', databaseName.dbo.admin) as tpro)



----复制查询方法---

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

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

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

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

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


--- 方法二----

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

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

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

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

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ','sql服务器名 '; '用户名'; '密码',数据库名.dbo.表名)as ainner 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
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




曾经使用过Sybase SQL Anywhere 11数据同步采用内置插件MobiLink居于日志事务流形式的通讯,优点速度快、准确、夸平台,网络开销极低情况下保证通讯顺畅不丢包。由于工作原因开始接触MSSQL,有人说MSSQL没有此功能、类似的功能不好用等诸多说法,也很好奇全国某些知名软件开发上采用MSSQL,但数据库之间通讯还采用自己写通讯程序完成数据库之间数据交换,效率低、操作繁琐、数据传输重复、漏传、致命性错误、人工干预滞后等诸多问题。我想那么大一个微软公司不可能没有办法解决此问题,最近几天本开始研究了一下MSSQL复制服务,通过发布和订阅达到数据通讯或者备份目的,首先我点评一下MSSQL复制服务,整体来说感觉还不错,缺点是不启动管理器没法监控发布和订阅情况(也许本人不够专业,没有发现)。复制服务需要发布、分发、订阅三部分组成,发布与分发可以集成在一起,如果订阅端较多建议独立分发。 测试环境Windows2008ServerR2+MSSQL2008R2SP3,两台计算机,发布与分发一体,然后一个订阅端。 1、 发布与分发服务器计算机名:Publish_Server IP地址:192.168.20.1 2、 订阅服务器计算机名:Subscribe_Server IP地址:192.168.20.2 由于没有域控环境,首先在两台机器的hosts文件的尾部加入: 192.168.20.1 Publish_Server 192.168.20.2 Subscribe_Server 加入的原因是没有域控和DNS服务器,通过机器名解析能快速准确的解析到IP地址只有在hosts文件中做文章,我想这个你应该懂的! 如何安装MSSQL2008R2我就不在说了自己到百度搜索,首先关闭两台机器本机自带防火墙或者把1433、21端口加入防火墙策略,1433端口不用说了吧!21是用于FTP第一次分发快照的端口。 SQL2008提供的发布类型有4种:(我先照搬微软的说明) 1、 快照发布:发布服务器按预定的时间间隔向订阅服务器发送已发布的数据库快照。 2、 事务发布:在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式 传输到订阅服务器。 3、 具有可更新订阅的事务发布:在 SQL Server 订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。来自订阅服务器的事务被应用于发布服务器。 4、 合并发布:在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据。更改会定期合并。Microsoft SQL Server Compact Edition 只能订阅合并发布。 (1)快照发布,这种每次订阅服务器都去下载完整快照这效率低,对网络要求也高,个人觉得不可取。(2)事务发布,只要订阅服务器收到初始快照后,订阅服务器将用事务流的方式到发布上取数据,速度相当快网络和机器性能好的情况毫秒级的响应,这种模式数据是单向的,发布服务器到订阅服务器,订阅服务器端不能对数据进行修改,即使进行了修改是也暂时的,下次发布服务器对应数据做了更新后订阅服务器数据将被同步。(3)具有可更新订阅的事务发布,这个研究了半天没有成功,还要在订阅服务器上把分发服务器作为链接服务器,本人愚昧没有实验成功。(4)合并发布,数据在发布和订阅端都可以进行修改,而且可以自动合并。根据同场景本人推荐:事务发布和合并发布,记住它们最大的区别就是事务发布是数据单向传送、合并发布是数据双向传送。 注意任何时候MSSQL叫你输入服务器名称都要用实例名不能输入IP地址(一台机器上只安装了一个实例的话实例名就是计算机名,这下知道hosts文件的重要性了吧,谁叫我们不在域控制器下呢!其实在微软操作系统中计算机名比IP高一级,但我们在使用中往往把IP地址看得比计算机更重要,这就是没有域控制器的原因。为了计算机名能快速、准确的解析到就乖乖的去hosts文件中添加吧!)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值