在使用SQL Server的时候,有时候代码需要关联远程数据库中的某个表怎么办呢?答案就是DBLINK!
公司信息部门出于安全和整体数据规划,会将数据按照公司的组织架构或者业务需求放在不同的数据库中。随着业务的增长,经常会从不同的库中取数据汇集成所需的报表,这时候就需要使用到DBLINK了。
以我的这个项目为例,需要从HR(人力资源)系统,产品销售系统以及财务系统中的数据库获取数据,最后统一生成报表数据插入到数据分析中心的数据库中(其实这就是一个简单的ETL过程,ETL稍后给大家讲解)。由于这些数据都在不同的库中,要把他们抽出来,需要不同的数据库授权DBLINK权限才能连接到这些数据库。以下是DBLINK的一些知识:
--查看当前链接情况:
select * from sys.servers;
--使用 sp_helpserver 来显示可用的服务器
exec sp_helpserver
--删除已经存在的某个链接
exec sp_droplinkedsrvlogin 服务器别名,Null
exec sp_dropserver 服务器别名
--使用sp_addlinkedserver来增加链接
exec sp_addlinkedserver
@server='192.168.1.1',--被访问的服务器别名(习惯上直接使用目标服务器IP,或取个别名如:Lyven)
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='192.168.1.2' --要访问的服务器
--使用sp_addlinkedsrvlogin 来增加用户登录链接
exec sp_addlinkedsrvlogin
'192.168.1.1', --被访问的服务器别名(如果上面sp_addlinkedserver中使用别名Lyven,则这里也是Lyven)
'false',
NULL,
'sa', --帐号
'test123' --密码
使用举例(访问目标服务器上的数据库HR_DB,查看其中表test的内容):
如果建立链接时的别名是目标服务器IP,即192.168.1.1
则:
select * from [192.168.1.1].[HR_DB].dbo.test
如果建立链接时的别名是Lyven,
则:
select * from [Lyven].[HR_DB].dbo.test
上面就是DBLINK的一些用法,这样不管是哪里的服务器,只要能连上对方的数据库,就可以做表关联操作了。
在公司用的DBLINK多了,时不时可以访问到一些比较敏感的数据,比如HR数据库的薪酬表或者销售系统中的顾客表,财务系统的一些进销存的产品信息,这些其实都是非常敏感的信息。作为一个数据开发人员(其实不管是谁),应该做到保密才是最重要的。技术厉害是一回事,对待工作就是另外一回事了。这是一个人的工作作风问题了,也是关乎自己职业生涯的事情,必须小心谨慎。希望大家在工作中能保持本心,这样才能越走越远。