在使用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数据库的薪酬表或者销售系统中的顾客表,财务系统的一些进销存的产品信息,这些其实都是非常敏感的信息。作为一个数据开发人员(其实不管是谁),应该做到保密才是最重要的。技术厉害是一回事,对待工作就是另外一回事了。这是一个人的工作作风问题了,也是关乎自己职业生涯的事情,必须小心谨慎。希望大家在工作中能保持本心,这样才能越走越远。



长按下面的二维码关注我们,更多学习经验/教辅资料应有尽有,谢谢!

SQL Server学习之路(五)_数据库