設定分散式查詢的 OLE DB 提供者
SQL Server 提供管理分散式查詢的數個進階選項。有些選項是在提供者層級管理,而其他則是透過 sp_serveroption 在連結伺服器層級管理。只有資深的系統管理員應該設定這些進階選項。
OLE DB Provider 選項
管理分散式查詢的 OLE DB 提供者選項可在 SQL Server Management Studio 中設定。在 [物件總管] 中,以滑鼠右鍵按一下提供者名稱,然後選取 [屬性]。下表描述可用的提供者選項。
Provider 選項 |
描述 |
---|---|
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)、text、ntext 或 image) 進行更新或插入。 SQL Server Native Client OLE DB 提供者無法跨處理序具現化。如果您設定 SQL Server Native Client OLE DB 提供者跨處理序執行,且嘗試執行分散式查詢,便會發生錯誤。 |
NonTransactedUpdates |
如果是非零值,則即使 ITransactionLocal 無法使用,SQL Server 仍然允許更新。若這個選項處於啟用狀況,則更新提供者的動作便無法復原,因為提供者不支援交易。 |
IndexAsAccessPath |
如果是非零值,SQL Server 便嘗試使用提供者的索引來提取資料。依預設值,索引只用於中繼資料,絕不會開啟。 |
DisallowAdhocAccess |
如果設定為非零值,SQL Server 便不允許透過 OPENROWSET 與 OPENDATASOURCE 函數對 OLE DB 提供者進行特定存取。未設定此選項時,SQL Server 也不會允許特定存取。 此選項控制非管理員執行特定查詢的能力。管理員不會受此選項影響。 |
SqlServerLike |
如果是非零值,當 LIKE 運算子在 SQL Server 中實作時,提供者將支援它。當設定此選項時,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 便會使用 [定序名稱] 選項中設定的定序。 如果設定為 false,SQL Server 會從本機 SQL Server 執行個體的預設定序中,解譯指定連結伺服器的字元資料。 |
collation name |
如果 [使用遠端定序] 是設為 true,這將會指定連結伺服器之字元資料所用的定序。如果 [使用遠端定序] 設為 false,或如果連結伺服器是 SQL Server 的執行個體,便會忽略此選項。 |
connection timeout |
這用來指定當 SQL Server 嘗試建立與連結伺服器的連線時,將使用的逾時值 (以秒為單位)。如果未設定這個選項,便使用 remote login timeout 全域設定選項目前的設定值做為預設值。 |
lazy schema validation |
如果這個選項設為 false (預設值),SQL Server 會檢查遠端資料表在編譯後是否曾經變更過結構描述。這會在執行查詢之前進行。如果變更過結構描述,SQL Server 便以新的結構描述將查詢重新編譯一次。 如果這個選項設為 true,則要等到執行時才檢查遠端資料表是否有變更。如果在查詢編譯與執行之間,遠端資料表的結構描述發生變更的話,就可能造成分散式查詢失敗而傳回錯誤。 當分散式資料分割檢視用於執行 SQL Server 的連結伺服器時,可以將此選項設定成 true。在資料分割檢視中參與的指定資料表,實際上可能不會用於針對檢視的查詢特定執行。因此,延遲結構描述驗證可能改善效能。 |