使用 FILESTREAM 搭配其他 SQL Server 功能
由於 FILESTREAM 資料位於檔案系統中,所以本主題提供了搭配下列 SQL Server 功能使用 FILESTREAM 的一些考量、指導方針和限制:
資料庫快照集
複寫
記錄傳送
資料庫鏡像
全文檢索
容錯移轉叢集
SQL Server Express
資料庫快照集
SQL Server 不支援將資料庫快照集用於 FILESTREAM 檔案群組。如果 FILESTREAM 檔案群組包含在 CREATE DATABASE ON 子句中,此陳述式將會失敗,並引發錯誤。
當您使用 FILESTREAM 時,可以建立標準 (非 FILESTREAM) 檔案群組的資料庫快照集。FILESTREAM 檔案群組將會針對這些資料庫快照集標示為離線。
在資料庫快照集中,FILESTREAM 資料表上執行的 SELECT 陳述式不能包含 FILESTREAM 資料行,否則會傳回下列錯誤訊息:
由於資料移動而無法繼續用 NOLOCK 掃描。
複寫
在發行者上啟用 FILESTREAM 屬性的 varbinary(max) 資料行可以複寫到訂閱者上 (不論有沒有 FILESTREAM 屬性)。若要指定複寫資料行的方式,請使用 [發行項屬性 - <發行項>] 對話方塊,或是 sp_addarticle 或 sp_addmergearticle 的 @schema\_option 參數。如需有關如何設定結構描述選項的詳細資訊,請參閱<如何:指定結構描述選項 (SQL Server Management Studio)>和<如何:指定結構描述選項 (複寫 Transact-SQL 程式設計)>。複寫到沒有 FILESTREAM 屬性之 varbinary(max) 資料行的資料不能超過該資料類型的 2-GB 限制,否則會產生執行階段錯誤。我們建議您最好複寫 FILESTREAM 屬性,除非您要將資料複寫到 SQL Server 2005。目前不支援將含有 FILESTREAM 資料行的資料表複寫至 SQL Server 2000 訂閱者,不論所指定的結構描述選項為何。如需有關如何將資料複寫到舊版 SQL Server 的詳細資訊,請參閱<在複寫拓撲中使用多個 SQL Server 版本>。
[!附註]
將大型資料值從 SQL Server 2008 複寫到 SQL Server 2005 訂閱者受到最大 256 MB 資料值的限制。如需詳細資訊,請參閱<SQL Server 2005 的最大容量規格>。
交易式複寫考量
如果您在針對交易式複寫發行之資料表中使用 FILESTREAM 資料行,請注意以下考量:
如果有任何資料表包含具有 FILESTREAM 屬性 (Attribute) 的資料行,您將無法針對 sp_addpublication 的 @sync\_method 屬性 (Property) 使用 database snapshot 或 database snapshot character 的值。
max text repl size 選項會指定可以插入要發行以供複寫之資料行中的資料數量上限。此選項可用來控制所複寫之 FILESTREAM 資料的大小。如需詳細資訊,請參閱<max text repl size 選項>。
如果您指定此結構描述選項來複寫 FILESTREAM 屬性,但是您篩選出 FILESTREAM 所需的 uniqueidentifier 資料行,或是指定不要為此資料行複寫 UNIQUE 條件約束,則複寫作業不會複寫 FILESTREAM 屬性。此資料行只會複寫為 varbinary(max) 資料行。
合併式複寫考量
如果您在針對合併式複寫發行之資料表中使用 FILESTREAM 資料行,請注意以下考量:
合併式複寫和 FILESTREAM 都需要 uniqueidentifier 資料類型的資料行,以識別資料表中的每一個資料列。如果資料表沒有資料行,合併式複寫會自動加入資料行。合併式複寫會要求此資料行設定 ROWGUIDCOL 屬性及具有 NEWID() 或 NEWSEQUENTIALID() 的預設值。除了這些需求以外,FILESTREAM 也要求必須針對此資料行定義 UNIQUE 條件約束。這些需求的結果如下:
如果您將 FILESTREAM 資料行加入至已針對合併式複寫發行的資料表中,請確定 uniqueidentifier 資料行具有 UNIQUE 條件約束。如果它沒有 UNIQUE 條件約束,請將具名條件約束加入至發行集資料庫內的資料表。根據預設,合併式複寫將會發行這個結構描述變更,並將此變更套用到每一個訂閱資料庫。如需有關結構描述變更的詳細資訊,請參閱<對發行集資料庫進行結構描述變更>。
如果您如所述的內容手動加入 UNIQUE 條件約束,而且您想要移除合併式複寫,您就必須先移除 UNIQUE 條件約束,否則複寫移除將會失敗。
根據預設,合併式複寫會使用 NEWSEQUENTIALID(),因為它可以提供比 NEWID() 更好的效能。如果您將 uniqueidentifier 資料行加入將針對合併式複寫發行的資料表中,請將 NEWSEQUENTIALID() 指定為預設值。
合併式複寫包括複寫大型物件類型的最佳化,此最佳化作業是由 sp_addmergearticle 的 @stream\_blob\_columns 參數所控制。如果您設定此結構描述選項來複寫 FILESTREAM 屬性,則 @stream\_blob\_columns 參數值會設定為 true。可以使用 sp_changemergearticle 來覆寫此最佳化。此預存程序可讓您將 @stream\_blob\_columns 設定為 false。如果您將 FILESTREAM 資料行加入至已針對合併式複寫發行的資料表中,我們建議您使用 sp_changemergearticle 將此選項設定為 true。
如果 FILESTREAM 資料行中的資料超過 2 GB,而且複寫之後發生了衝突,則在建立發行項之後針對 FILESTREAM 啟用此結構描述選項會造成複寫失敗。如果您預期會發生這個狀況,建議您卸除及重新建立資料表發行項,並在建立時啟用適當的 FILESTREAM 結構描述選項。
合併式複寫可以透過 HTTPS 連接同步處理 FILESTREAM 資料 (利用 Web 同步處理)。這項資料不能超過 Web 同步處理的 50 MB 限制,否則會產生執行階段錯誤。
資料庫鏡像
資料庫鏡像不支援 FILESTREAM。不能在主體伺服器上建立 FILESTREAM 檔案群組。不能針對包含 FILESTREAM 檔案群組的資料庫設定資料庫鏡像。
全文檢索索引
全文檢索索引與 FILESTREAM 資料行一起運作的方式,與處理 varbinary(max) 資料行的方式相同。FILESTREAM 資料表必須有一個資料行包含每一個 FILESTREAM BLOB 的副檔名。如需詳細資訊,請參閱<查詢 varbinary(max) 與 xml 資料行 (全文檢索搜尋)>、<全文檢索搜尋篩選>、<全文檢索索引和查詢處理程序>和<sys.fulltext_document_types (Transact-SQL)>。
全文檢索引擎會針對 FILESTREAM BLOB 的內容建立索引。為檔案 (如影像) 建立索引可能不會很實用。當更新 FILESTREAM BLOB 時,會為它重新建立索引。
容錯移轉叢集
當您進行容錯移轉叢集時,FILESTREAM 檔案群組必須放在共用磁碟上。FILESTREAM 必須在叢集中主控 FILESTREAM 執行個體的每一個節點上啟用。如需詳細資訊,請參閱<如何:在容錯移轉叢集上設定 FILESTREAM>。
SQL Server Express
SQL Server Express 支援 FILESTREAM。4-GB 的資料庫大小限制不包括 FILESTREAM 資料容器。