SQL Server链接服务器(一台机器SQL Server登陆,同时映射登陆到另外一台远程服务器的数据库)
2017-12-01 14:53
417 查看
现在我有一个需求是需要在两个不同的SQL SERVER 2012的服务器之间进行数据访问和更新。我们需要把Server One的数据插入到Server Two的服务器上去,一天执行一次任务。我们的首选方案是在两个服务器之间建立链接服务器,下面介绍下如何建立链接服务器。我需要做的事情是,我需要定时的全量的把Server
one的数据插入到Server Two里去。所以这里就涉及到需要把Server Two里的表的信息做删除操作,由于我们都知道delete表是需要记录日志,他是为了回滚用的。所以要记录详细的日志。由于我此表比较大,而且每天都做一次删除,我也不需要写日志。所以我不想用delete操作,我想用truncate来删除表。这就是故事的有趣的点。
两个服务器的配置:
Server one:
DB Version: 2012
Server IP: 192.168.21.252
Souce Database
Server two:
DB Version: 2012
Server IP: 192.168.25.210
Target Database
我们可以在任意一个服务器上建立链接服务器,但是是有细微的区别的,下面看我在处理数据的时候遇到的问题,此问题让我了解到在任意一个服务器上建立链接服务器是有区别的。
在源数据库服务器上建立链接服务器如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/b16826283a9e428525b1a736cd8d7e02)
注意:链接服务器IP:192.168.25.210是我的目标数据库,建立的这个链接服务器就想直接访问192.168.25.210的服务器上的数据库表。由于我是SQL SERVER 2012 到SQL SERVER 2012数据库,所以服务器类型选择SQL
Server。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/c30ff90b0e158d9f9d4cda72ed7ca504)
需要添加一个本地服务器登录到远程服务器的登录映射。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/4f5bb4de919002ed21533b2437e367b8)
这个时候我们看到了一个192.168.25.210的链接服务器了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/6b1a3aab64756bca99fe0405c646b7f9)
可以测试下链接服务器是否链接成功。
a, 新建立作业
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/ead67e3e2a0796f5881fe554f5eda81c)
b,编辑步骤
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/5fc6e538d9be7d40785b0c877719d902)
我从源数据库push数据到目标数据库的sql语句是:
truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM BI.DBO.[BIU8_GL_ACCVOUCH]
go
c,新建作业计划
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/c94fb227fe61ff3361d3457688234bc2)
我修改了下计划的执行时间,让他立马执行下这个job.下面问题来了。如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/7526b8bfd187937e68f8159544fa5a4f)
下面我把job里的脚本放到查询分析器里执行了下,执行结果让我很迷茫。如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/b411ce89629d3b4b9e347467b9a21bf5)
从上图的错误提示可以看出这个语句是有问题的不可以这么执行的。 但是这个语句的语法是没有错的。truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH],我一开始怀疑是否不可以这么执行SQL 语句,如是我执行了下面的语句
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/1b0318cde06d5c85ab85afc3d2238580)
从上面可以看出链接数据库的写法是正确的,因为delete from [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]删除目标数据库的表示成功的。因为我说了,我不想用delete来删除数据表,这样会产生很多的日志的。我希望用truncate删除数据。于是我用方法二来再做一次。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/c3d3b424b5fbda28708ff28fc51e770f)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/1f045920e066c80c1d56920d67ef2a9c)
我从目标数据库pull源数据库的sql语句是:
truncate table BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/e07baf56a1b2ebbdc9cdaab068e06572)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/26/7f22432dfa865fbe38cfc0b9a27e1e4d)
从上面2014/12/19 9:48:02就是我刚才执行的,它成功的执行了job。可以看出下面的语句是执行成功的。
truncate table BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
所以从上的操作中可以得出如下的非常重要的结论:
链接服务器有两个特点:
1:通过链接服务器不能删除(including truncate)链接源服务器的任何对像.
2:能过链接服务器可以对链接源服务器的表进行insert,updae,delete操作.
转载请注明来自: http://blog.csdn.net/waterxcfg304/article/details/42004753
关于如何通过SQL SERVER2012来创建链接服务器到ORACLE数据库请参考:http://blog.csdn.net/waterxcfg304/article/details/43162403
one的数据插入到Server Two里去。所以这里就涉及到需要把Server Two里的表的信息做删除操作,由于我们都知道delete表是需要记录日志,他是为了回滚用的。所以要记录详细的日志。由于我此表比较大,而且每天都做一次删除,我也不需要写日志。所以我不想用delete操作,我想用truncate来删除表。这就是故事的有趣的点。
如何SQL Server 2012建立链接服务器
两个服务器的配置:Server one:
DB Version: 2012
Server IP: 192.168.21.252
Souce Database
Server two:
DB Version: 2012
Server IP: 192.168.25.210
Target Database
我们可以在任意一个服务器上建立链接服务器,但是是有细微的区别的,下面看我在处理数据的时候遇到的问题,此问题让我了解到在任意一个服务器上建立链接服务器是有区别的。
方法一:我在源数据库服务器上建立一个链接服务器,我想让源数据库主动的把数据push到目标数据库中。
1,建立链接服务器
在源数据库服务器上建立链接服务器如下:注意:链接服务器IP:192.168.25.210是我的目标数据库,建立的这个链接服务器就想直接访问192.168.25.210的服务器上的数据库表。由于我是SQL SERVER 2012 到SQL SERVER 2012数据库,所以服务器类型选择SQL
Server。
需要添加一个本地服务器登录到远程服务器的登录映射。
这个时候我们看到了一个192.168.25.210的链接服务器了。
可以测试下链接服务器是否链接成功。
2, 在源数据库服务器上建立一个job主动的把数据push到目标数据库里去。
a, 新建立作业b,编辑步骤
我从源数据库push数据到目标数据库的sql语句是:
truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM BI.DBO.[BIU8_GL_ACCVOUCH]
go
c,新建作业计划
我修改了下计划的执行时间,让他立马执行下这个job.下面问题来了。如下图:
下面我把job里的脚本放到查询分析器里执行了下,执行结果让我很迷茫。如下图:
从上图的错误提示可以看出这个语句是有问题的不可以这么执行的。 但是这个语句的语法是没有错的。truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH],我一开始怀疑是否不可以这么执行SQL 语句,如是我执行了下面的语句
从上面可以看出链接数据库的写法是正确的,因为delete from [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]删除目标数据库的表示成功的。因为我说了,我不想用delete来删除数据表,这样会产生很多的日志的。我希望用truncate删除数据。于是我用方法二来再做一次。
方法二:我在目标数据库服务器上建立一个链接服务器,我想让目标数据库主动地从源数据库中把数据pull到自己的数据库中。
1,在目标库服务器上(192.168.25.210)建立链接服务器,连接服务器(192.168.21.252)如下图,具体步骤请参考上面的方法。
2,测试链接服务器是否链接成功
3,在目标数据库服务器上建立一个job主动的把源数据库的数据pull到自己的数据库里来。关于如何建立job的细节可以参考上面的步骤。
4,新建立作业名:pull_data_from_target_db
5,具体的作业步骤代码如下图:
我从目标数据库pull源数据库的sql语句是:
truncate table BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
6,新建立作业计划
7,查看job的执行情况如下图:
从上面2014/12/19 9:48:02就是我刚才执行的,它成功的执行了job。可以看出下面的语句是执行成功的。
truncate table BI.[dbo].[BIU8_GL_ACCVOUCH]
go
insert into BI.[dbo].[BIU8_GL_ACCVOUCH] SELECT * FROM [192.168.21.252].BI.DBO.[BIU8_GL_ACCVOUCH]
go
所以从上的操作中可以得出如下的非常重要的结论:
链接服务器有两个特点:
1:通过链接服务器不能删除(including truncate)链接源服务器的任何对像.
2:能过链接服务器可以对链接源服务器的表进行insert,updae,delete操作.
转载请注明来自: http://blog.csdn.net/waterxcfg304/article/details/42004753
关于如何通过SQL SERVER2012来创建链接服务器到ORACLE数据库请参考:http://blog.csdn.net/waterxcfg304/article/details/43162403
相关文章推荐
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器保存
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器
- 如何拷贝sql server 2005中的数据库到另外一台机器
- SQL Server把一台服务器上的数据库转移到另外一台服务器上。而转移完成后,需要给一个"登录"关联一个"用户"时,发生错误:“错误15023:当前数据库中已存在用户或角色”或“用户、组或角色 在当前数据库中已存在”
- 查询分析器中连接另外一台服务器上的Sql Server 数据库
- SQL Server 多个数据库远程备份到另一台服务器
- 【SQL Server高可用性】数据库镜像:同一台机器的两个不同实例上配置数据库镜像 + 另一台见证服务器
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器保存
- 从远程Sql Server 2005服务器中导出数据到本地(本地数据库版本:Sql Server 2005)
- 从另外一台服务器备份数据库,在另一台Sql Serve服务器r数据库还原时,设备激活错误的解决方法。
- 远程登陆SQL Server 2014数据库的方法
- 【SQL server 2012】复制数据库到另一台机器上
- SQL Server Report Services 的RS数据库移植到另外一台服务器,报“rsReportServerNotActivated”错误
- 将SQL Server远程服务器的数据库备份到目标机(转)
- 本地数据库(SQL Server)远程连接服务器端服务器----改变了默认端口
- 本地数据库(SQL Server)远程连接服务器端服务器
- SQL SERVER将远程服务器的数据库备份到本地文件夹
- 『自动备份数据库+scp上传到另外一台服务器』
- MsSQL server连接另外一台机器数据库,共享使用数据表的2种方法
- (8.13)客户端、服务器交互用json,同时去数据库检查,将0、1设置为静态常量(便于加注释它是干什么的,另外多建类,单例模式的使用)