分布式查询体系结构

Microsoft SQL Server 支持两种方法在 Transact-SQL 语句中引用异类 OLE DB 数据源:

  • 链接服务器名称

    系统存储过程 sp_addlinkedserversp_addlinkedsrvlogin 用于给 OLE DB 数据源提供服务器名称。可以使用由四个部分构成的名称在 Transact-SQL 语句中引用这些链接服务器中的对象。例如,如果一个链接服务器的名称 DeptSQLSrvr 是用另一个 SQL Server 的实例定义的,则下面的语句引用该服务器上的一个表:

    SELECT JobTitle, HireDate 
       FROM DeptSQLSrvr.AdventureWorks2008R2.HumanResources.Employee;
    

    也可以在 OPENQUERY 语句中指定链接服务器名称以从 OLE DB 数据源打开一个行集。之后,可以在 Transact-SQL 语句中像引用表一样引用该行集。

  • 即席连接器名称

    在很少引用数据源时,OPENROWSET 或 OPENDATASOURCE 函数是用连接到链接服务器所需的信息指定的。之后,可以在 Transact-SQL 语句中使用与引用表相同的方法引用行集:

    SELECT *
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
            'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';'';
            Employees);
    

SQL Server 使用 OLE DB 在关系引擎和存储引擎之间通信。关系引擎将每个 Transact-SQL 语句分解为一系列操作,这些操作在由存储引擎从基表打开的简单 OLE DB 行集上执行。这意味着关系引擎也可以在任何 OLE DB 数据源上打开简单 OLE DB 行集。

关系引擎,OLE DB 层,存储引擎

关系引擎使用 OLE DB 应用程序编程接口 (API) 打开链接服务器上的行集、提取行并管理事务。

对于每个作为链接服务器访问的 OLE DB 数据源,运行 SQL Server 的服务器上必须有 OLE DB 访问接口。在特定 OLE DB 数据源上可执行哪些 Transact-SQL 操作取决于 OLE DB 访问接口的功能。有关详细信息,请参阅用于分布式查询的 OLE DB 访问接口参考

对于每个 SQL Server 实例,sysadmin 固定服务器角色的成员可以使用 SQL ServerDisallowAdhocAccess 属性启用或禁用对 OLE DB 访问接口使用即席连接器名称。如果启用了即席访问,则任何登录到该实例的用户都可以执行包含即席连接器名称的 SQL 语句,该即席连接器名称引用了网络中可以通过 OLE DB 访问接口访问的任何数据源。为了控制对数据源的访问,sysadmin 角色的成员可以对 OLE DB 访问接口禁用即席访问,从而限制用户只能访问管理员定义的链接服务器名称所引用的那些数据源。默认情况下,对 SQL Server OLE DB 访问接口启用即席访问,而对所有其他的 OLE DB 访问接口禁用即席访问。

分布式查询可允许用户使用运行 SQL Server 服务的 Microsoft Windows 帐户的安全上下文来访问其他数据源(例如,文件、非关系数据源 [如 Active Directory] 等等)。SQL Server 可以正确模拟 Windows 登录名;但不可能模拟 SQL Server 登录名。这样,就有可能使分布式查询用户能够访问自己本没有访问权限、但运行 SQL Server 服务的帐户有访问权限的另一数据源。使用 sp_addlinkedsrvlogin 可以定义被授权访问相应链接服务器的特定登录名。此控制对即席名称无效,所以对 OLE DB 访问接口启用即席访问时要小心。

只要可能,SQL Server 就会通过操作将联接、限制、计划、排序和分组等关系操作推入 OLE DB 数据源。默认情况下,SQL Server 不将基表扫描进 SQL Server,也不自己执行关系操作。SQL Server 查询 OLE DB 访问接口以确定它支持的 SQL 语法级别,并根据该信息将尽可能多的关系操作推给提供程序。有关详细信息,请参阅 对 OLE DB 访问接口在 SQL 变体方面的要求

SQL Server 指定 OLE DB 访问接口返回统计信息的机制,该统计信息指明键值在 OLE DB 数据源内的分布情况。这使 SQL Server 查询优化器可以根据每条 SQL 语句的要求,更好地分析数据源中的数据模式,从而提高查询优化器生成最佳执行计划的能力。有关详细信息,请参阅 OLE DB 访问接口的分发内容统计要求