SQL Server 建立链接服务器

时间:2024-04-06 19:48:01
现在我有一个需求是需要在两个不同的SQL SERVER 2012的服务器之间进行数据访问和更新。我们需要把Server One的数据插入到Server Two的服务器上去,一天执行一次任务。我们的首选方案是在两个服务器之间建立链接服务器,下面介绍下如何建立链接服务器。我需要做的事情是,我需要定时的全量的把Server 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,建立链接服务器

在源数据库服务器上建立链接服务器如下:
SQL Server 2012建立链接服务器

注意:链接服务器IP:192.168.25.210是我的目标数据库,建立的这个链接服务器就想直接访问192.168.25.210的服务器上的数据库表。由于我是SQL SERVER 2012 到SQL SERVER 2012数据库,所以服务器类型选择SQL Server。



SQL Server 2012建立链接服务器
需要添加一个本地服务器登录到远程服务器的登录映射。

SQL Server 2012建立链接服务器
这个时候我们看到了一个192.168.25.210的链接服务器了。

SQL Server 2012建立链接服务器
可以测试下链接服务器是否链接成功。

2, 在源数据库服务器上建立一个job主动的把数据push到目标数据库里去。

a, 新建立作业

SQL Server 2012建立链接服务器

b,编辑步骤

SQL Server 2012建立链接服务器
我从源数据库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,新建作业计划

SQL Server 2012建立链接服务器

我修改了下计划的执行时间,让他立马执行下这个job.下面问题来了。如下图:

SQL Server 2012建立链接服务器

下面我把job里的脚本放到查询分析器里执行了下,执行结果让我很迷茫。如下图:

SQL Server 2012建立链接服务器

从上图的错误提示可以看出这个语句是有问题的不可以这么执行的。 但是这个语句的语法是没有错的。truncate table [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH],我一开始怀疑是否不可以这么执行SQL 语句,如是我执行了下面的语句

SQL Server 2012建立链接服务器

从上面可以看出链接数据库的写法是正确的,因为delete from [192.168.25.210].BI.[dbo].[BIU8_GL_ACCVOUCH]删除目标数据库的表示成功的。因为我说了,我不想用delete来删除数据表,这样会产生很多的日志的。我希望用truncate删除数据。于是我用方法二来再做一次。

 


方法二:我在目标数据库服务器上建立一个链接服务器,我想让目标数据库主动地从源数据库中把数据pull到自己的数据库中。

1,在目标库服务器上(192.168.25.210)建立链接服务器,连接服务器(192.168.21.252)如下图,具体步骤请参考上面的方法。

SQL Server 2012建立链接服务器

2,测试链接服务器是否链接成功

3,在目标数据库服务器上建立一个job主动的把源数据库的数据pull到自己的数据库里来。关于如何建立job的细节可以参考上面的步骤。

4,新建立作业名:pull_data_from_target_db

5,具体的作业步骤代码如下图:

SQL Server 2012建立链接服务器
我从目标数据库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,新建立作业计划


SQL Server 2012建立链接服务器

7,查看job的执行情况如下图:


SQL Server 2012建立链接服务器

从上面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操作.

 
关于如何通过SQL SERVER2012来创建链接服务器到ORACLE数据库请参考:http://blog.csdn.net/waterxcfg304/article/details/43162403