最近公司有跨DBserver访问Table的需求,感觉linkserver还是比较好用的,分享一下体会。

首先linked server 可以把不同的数据服务器的数据整合在一起,这样你可以在一台服务器上访问所有其他服务器的数据,并且可以在表的级别上进行相互的JOIN,函数和存储过程都可以访问其他的服务器,这简直太强大了。

不过网上的问题和答案多很多,好多东西需要靠摸索,这也符合微软的一贯风格,帮助文档说的模棱两可,没有具体实例,错误提示信息不明确,非要自己苦心钻研才行,好多人都中途放弃了。 

假设你有一台ms sql 2005 的服务器,首先说说如何连接Oracle (10g,8i都通过了),首先需要在这台服务器上安装oracle的客户端软件,这样才可以通过oracle的 tnsnames.ora 配置文件里面的 tnsnames 访问其他的oracle服务器。你还需要有oracle 的用户名和口令,这个事当然的了。

建立连接服务器:

EXEC sp_addlinkedserver   'linkedservername', 'Oracle', 'OraOLEDB.Oracle', 'oracleservername'

linkedservername 是连接服务器的名字,随便起名
oracleservername 是Oracle服务器的 tns 名字


输入用户信息:

EXEC sp_addlinkedsrvlogin 'linkedservername', 'FALSE', NULL, 'username', 'password'


具体使用语法如下
SELECT TOP 10 * FROM linkedservername..schemaname.tablename

注意,连接服务器的名字和schema name之间是两个点,schema name 和 table name 区分大小写!SQL语句的语法是ms sql 语法,而不是oracle的语法。

========================================================================================

接下来再看看如何连接其他的ms sql 服务器。
连接微软自家的服务器更加容易,导航到: 

server name --> Server Objects --> Linked Servers 

点击右键选择 new linked server

General 页面:
Linked Server: 输入 你的另外一台ms sql server的服务器名字,机器名或者域名
server type 选择 sql server

Security 页面:这一步比较复杂!
你如果使用的是 NT帐号设置这个,只有你用这个帐号登陆你这台服务器,这个连接才有效,如果你不是用相同的帐号登陆,就没办法访问,我觉得这个限制比较多,不建议采用。具体设置方法是:

Local Login: nt user name
impersonate: YES

Be made using this security context: check
remote login: nt user name
with password: nt user password

你可以使用ms sql认证的用户名来建立连接,这个比较实用,还省事
不用管上面的那个 local server login to remote server login mappings 部分,直接跳到下边输入
Be made using this security context: check
remote login: sql user name
with password: sql user password