欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL Server 2008数据库分布式查询知识

程序员文章站 2023-01-13 12:23:13
在接触公司一个系统时,公司使用的是sql server 2008数据库,里面涉及到了多个数据库之间的查询,而且数据库是分布式的,数据库分布在多台服务器之间,并且各个数据库各尽其责,负责存放不同模块功能...

在接触公司一个系统时,公司使用的是sql server 2008数据库,里面涉及到了多个数据库之间的查询,而且数据库是分布式的,数据库分布在多台服务器之间,并且各个数据库各尽其责,负责存放不同模块功能的数据。这里面就要涉及到了数据库的分布式查询。

补充一下分布式查询的知识:

分布式查询从多异类数据源中访问数据。这些数据源可以存储在同一台计算机或不同的计算机上。microsoft sql server 通过使用 ole db 来支持分布式查询。

sql server 用户可以使用分布式查询访问以下内容:

  • 存储在多个 sql server 实例中的分布式数据。
  • 存储在各种可以使用 ole db 访问接口访问的关系和非关系数据源中的异类数据。

ole db 访问接口将在称为行集的表格格式对象中公开数据。sql server 允许在 transact-sql 语句中像引用 sql server 表一样引用 ole db 访问接口中的行集。

外部数据源中的表和视图可以在 select、insert、update 和 delete transact-sql 语句中直接引用。因为分布式查询使用 ole db 作为基本接口,因此它们不仅可以访问带有 sql 查询处理器的传统 dbms 系统,也可以访问复杂的、具有不同功能的数据源所管理的数据。只要拥有数据的软件通过 ole db 访问接口在表格格式行集中公开其数据,就可在分布式查询中使用此数据

SQL Server 2008数据库分布式查询知识

因为公司的业务要经常使用不同服务器上的数据库,所以公司的数据库都建立了一堆的链接服务器。通过建立这些链接服务器,就可以使用这些链接服务器的别名来简化sql语句的编写和sql开销;

使用sql server 2008管理工具可以直接界面化的添加链接服务器;这里给出使用sql语句,利用系统存储过程来添加链接服务器的方法,这里要用到两个存储过程:

sp_addlinkedserver
sp_addlinkedsrvlogin

一个是添加链接服务器,一个是添加链接服务器连接登陆验证;具体此两个存储过程参数含义,请参考微软手册;注意,执行此存储过程登陆的用户必须要有sysadmin权限才能执行;

假设现在在10.155.25.100 上的db中要使用10.155.24.101上一个 fliedb01表中的信息;则在10.155.25.100上进行如下sql 语句:

exec sp_addlinkedserver
@server='szdb01', --要添加的连接服务器的别名
@srvproduct='',
@provider='sqloledb',--指定通过sqloledb链接
@datasrc='10.155.24.101'--db地址
exec sp_addlinkedsrvlogin
'szdb01',--连接服务器的别名
'false',
null,
'szuser',--登陆用户名
'password@123'--登陆密码
--执行完之后就可以写这样的查询语句了
select * from openquery([szdb01],'select file_no,file_name from filedb01.dbo.getfilelist()') as tablea --这里的dzdb01就是上面添加的连接服务器的别名

有多个就添加多个连接服务器;这是其中的一种;

还有一种就是使用opendatasource,这是sql的一个函数,其能够打开指定的db,而且这个函数的执行权限很低,技术手册中说任何人都可以执行此函数;这个函数也是hacker常用的数据爆表的一个手段;目前查看sql server 2008的手册中,其说明还是说所有人都有权限执行;

这个函数只能是不常用的查询中会用到;

举一个简单的例子:

select * from opendatasource('sqloledb','data source=10.155.24.100;user id="szuser";password="password@123"') as tablea

这个也是对上面的一种实现;

opendatasource还可以直接打开mdb这类文件。这种我就没有去试验了,技术从书中有说明;

select * from opendatasource('microsoft.jet.oledb.4.0','data source="d:/abcd.mdb"') 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接