为分布式查询配置 OLE DB 访问接口

SQL Server 提供了若干用于管理分布式查询的高级选项。一些选项在访问接口级进行管理,其他选项在链接服务器级通过使用 sp_serveroption 来管理。只有有经验的系统管理员才能配置这些高级选项。

OLE DB 访问接口选项

用于管理分布式查询的 OLE DB 访问接口选项可以在 SQL Server Management Studio 中设置。在对象资源管理器中,右键单击访问接口名称并选择**“属性”**。下表介绍了可用的访问接口选项。

访问接口选项

说明

DynamicParameters

如果非零,则表明访问接口允许在参数化查询中使用 '?' 参数标记语法。仅当访问接口支持 ICommandWithParameters 接口并支持 '?' 作为参数标记时才应设置此选项。设置此选项可使 SQL Server 能够针对该访问接口执行参数化查询。针对访问接口执行参数化查询可以使某些查询获得更好的性能。

NestedQueries

如果非零,则表明访问接口允许在 FROM 子句中使用嵌套 SELECT 语句。设置此选项可使 SQL Server 能够将某些查询委托给需要在 FROM 子句中嵌套 SELECT 语句的访问接口。

LevelZeroOnly

如果非零,则只对访问接口调用级别为 0 的 OLE DB 接口。

AllowInProcess

如果非零,则 SQL Server 允许将访问接口实例化为进程内服务器。如果在注册表中没有设置此选项,则默认行为是在 SQL Server 进程外实例化访问接口。在 SQL Server 进程外实例化访问接口有助于防止 SQL Server 进程在访问接口中出错。在 SQL Server 进程外实例化访问接口后,不允许进行引用 LOB 列(varchar(max)、nvarchar(max)varbinary(max)textntext 或 image)的更新或插入操作。

不能在进程外实例化 SQL Server Native Client OLE DB 访问接口。如果将 SQL Server Native Client OLE DB 访问接口设置为在进程外运行并试图运行分布式查询,将引发一个错误。

NonTransactedUpdates

如果非零,则 SQL Server 允许进行更新,即使 ITransactionLocal 不可用时也是如此。如果启用了此选项,对访问接口的更新将不可恢复,因为该访问接口不支持事务。

IndexAsAccessPath

如果非零,则 SQL Server 将尝试使用访问接口索引来提取数据。默认情况下,索引仅用于元数据且永远不打开。

DisallowAdhocAccess

如果设置了非零值,则 SQL Server 不允许通过 OPENROWSET 和 OPENDATASOURCE 函数对 OLE DB 访问接口进行即席访问。如果未设置此选项,则 SQL Server 同样不允许进行即席访问。

此选项可控制非管理员运行即席查询的能力。管理员不受此选项的影响。

SqlServerLike

如果非零,则访问接口支持在 SQL Server 中实现的 LIKE 运算符。如果设置了此选项,则 SQL Server 将考虑把以 LIKE 谓词而不是远程列作为分布式查询求值一部分的查询推送到访问接口。

OLE DB 访问接口选项在访问接口级起作用。如果为访问接口设置了选项,则这些设置将应用于所有使用同一 OLE DB 访问接口的链接服务器定义。

链接服务器选项

除了上述访问接口级选项外,通过使用 sp_serveroption 还可在链接服务器级使用若干用于管理分布式查询的选项。与访问接口级选项不同,服务器级选项只影响针对指定链接服务器的行为。

下表介绍了各个链接服务器选项。

链接服务器选项

说明

use remote collation

如果此选项设置为 true,SQL Server 将使用链接服务器字符列的排序规则信息。如果链接服务器是 SQL Server 实例,则排序规则信息将自动从 SQL Server OLE DB 访问接口派生得来。如果链接服务器不是 SQL Server 实例,则 SQL Server 将使用在 collation name 选项中设置的排序规则。

如果此选项设置为 false,SQL Server 将以本地 SQL Server 实例的默认排序规则来解释指定链接服务器中的字符数据。

collation name

如果 use remote collation 设置为 true,则此选项将指定用于链接服务器中的字符数据的排序规则。如果 use remote collation 设置为 false,或者链接服务器是 SQL Server 实例,则忽略此选项。

connection timeout

此选项用于指定当 SQL Server 尝试与链接服务器建立连接时所使用的超时值(以秒为单位)。如果未设置此选项,则使用为全局配置选项 remote login timeout 设置的当前值作为默认值。

lazy schema validation

如果此选项设置为 false(默认值),则 SQL Server 将检查从编译远程表以来发生的架构更改。此检查发生在执行查询之前。如果架构发生了变化,SQL Server 将用新架构重新编译查询。

如果此选项设置为 true,则对远程表的架构检查将一直延迟到执行查询时。如果远程表的架构在编译查询与执行查询之间发生了变化,则将此选项设置为 true 会导致分布式查询出现错误而失败。

如果是对运行 SQL Server 的链接服务器使用分布式分区视图,则可能需要将此选项设置为 true。在对分区视图执行某次特定查询时,可能实际上并未使用组成该视图的某个指定表。因此,延迟架构验证可能会改善性能。