共用方式為


FILESTREAM 與其他 SQL Server 功能的相容性

由於 FILESTREAM 數據位於文件系統中,因此本主題提供一些考慮、指導方針和限制,以搭配 SQL Server 中的下列功能使用 FILESTREAM:

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) 會使用 DT_IMAGE SSIS 數據類型,像任何其他 BLOB 數據一樣處理數據流中的 FILESTREAM 數據。

您可以使用「匯入欄位轉換」功能,將檔案系統中的檔案載入 FILESTREAM 欄位。 您也可以使用匯出資料行轉換,將檔案從 FILESTREAM 資料行擷取到文件系統中的另一個位置。

分散式查詢和連結的伺服器

您可以將 FILESTREAM 資料視為 varbinary(max) 資料,透過分散式查詢和連結伺服器來處理。 您無法在使用四部分名稱的分散式查詢中使用 FILESTREAM PathName() 函式,即使名稱參考本地伺服器也一樣。 不過,您可以在使用 OPENQUERY() 的傳遞查詢的內部查詢中使用 PathName()

加密

即使啟用透明數據加密,FILESTREAM 資料也不會加密。

資料庫快照

SQL Server 不支援 FILESTREAM 檔案群組的資料庫快照。 如果 CREATE DATABASE ON 子句中包含 FILESTREAM 檔案群組,語句將會失敗,而且將會引發錯誤。

當您使用 FILESTREAM 時,可以建立標準 (非 FILESTREAM) 檔案群組的資料庫快照集。 FILESTREAM 檔案群組會針對這些資料庫快照集標示為離線。

在資料庫快照集的 FILESTREAM 數據表上執行的 SELECT 語句不得包含 FILESTREAM 資料行;否則,將會傳回下列錯誤訊息:

Could not continue scan with NOLOCK due to data movement.

重複

啟用了 FILESTREAM 屬性的 varbinary(max) 數據行可復寫至訂閱者端,不論該訂閱者端是否具備 FILESTREAM 屬性。 若要指定欄的複製方式,請使用 [ 發行項屬性 - <發行項> ] 對話框或 @schema_optionsp_addarticlesp_addmergearticle 的參數。 復寫至 varbinary(max) 沒有 FILESTREAM 屬性之數據行的數據不得超過該資料類型的 2 GB 限制,否則會產生運行時錯誤。 我們建議您復寫 FILESTREAM 屬性,但不建議將數據復寫至 SQL Server 2000 訂閱者,因為不支援此操作,無論所指定的架構選項為何。

備註

將大型數據值從 SQL Server 2014 複寫到 SQL Server 2005 (9.x) 訂閱者限制為最多 256 MB 的數據值。 如需詳細資訊,請參閱 容量規格上限

關於事務複製的考量

如果您在針對事務複製發行的數據表中使用 FILESTREAM 數據行,請注意下列考慮:

  • 如果有任何數據表包含具有 FILESTREAM 屬性的欄,則無法針對 @sync_methodsp_addpublication 的屬性使用資料庫快照資料庫快照字元的值。

  • [最大文本重載大小選項] 指定可插入至用於複寫的資料欄的資料量上限。 此選項可用來控制複寫的 FILESTREAM 數據大小。

  • 如果您指定要復寫 FILESTREAM 屬性的架構選項,但您篩選掉 uniqueidentifier FILESTREAM 所需的數據行,或指定不要復寫數據行的 UNIQUE 條件約束,則復寫不會復寫 FILESTREAM 屬性。 這個欄位只會被複製為 varbinary(max) 欄位。

合併複寫的考量因素

如果您在針對合併式復寫發行的數據表中使用 FILESTREAM 數據行,請注意下列考慮:

  • 合併式複寫和 FILESTREAM 都需要數據類型 uniqueidentifier 的數據行來識別數據表中的每個數據列。 如果數據表沒有數據行,合併式複寫會自動加入數據行。 合併式複寫要求欄位具備 ROWGUIDCOL 屬性,並預設為 NEWID() 或 NEWSEQUENTIALID()。 除了這些需求之外,FILESTREAM 還需要為欄位定義 UNIQUE 約束。 這些需求會產生下列結果:

    • 如果您將 FILESTREAM 數據行加入已發行以進行合併式複寫的數據表,請確定數據 uniqueidentifier 行具有 UNIQUE 條件約束。 如果沒有 UNIQUE 條件約束,請將具名條件約束新增至發行集資料庫中的數據表。 根據預設,合併式復寫會發佈此架構變更,並將它套用至每個訂閱資料庫。

      如果您如所述手動新增 UNIQUE 條件約束,而且您想要移除合併式複寫,您必須先移除 UNIQUE 條件約束;否則,復寫移除將會失敗。

    • 根據預設,合併式複寫會使用NEWSEQUENTIALID() ,因為它可以提供比NEWID(更好的效能。 如果您將欄 uniqueidentifier 新增到將發行以供合併複寫的資料表,請將 NEWSEQUENTIALID() 指定為預設值。

  • 合併式複寫包含複寫大型物件類型的優化。 此優化是由 @stream_blob_columnssp_addmergearticle的參數所控制。 如果您將架構選項設定為複寫 FILESTREAM 屬性, @stream_blob_columns 參數值會設定為 true。 您可以使用 sp_changemergearticle來覆寫此優化。 這個預存程式可讓您將 設定 @stream_blob_columns 為 false。 如果您將 FILESTREAM 資料行新增至已發行以進行合併式複寫的資料表,建議您使用 sp_changemergearticle 將 選項設定為 true

  • 建立發行項之後啟用 FILESTREAM 的架構選項,如果 FILESTREAM 數據行中的數據超過 2 GB 且復寫期間發生衝突,可能會導致復寫失敗。 如果您預期會發生這種情況,建議您卸除並重新建立數據表發行項,並在建立時啟用適當的 FILESTREAM 架構選項。

  • 合併複寫可以使用 Web 同步,透過 HTTPS 連線同步 FILESTREAM 資料。 此數據不能超過 Web 同步處理的 50 MB 限制;否則,會產生運行時錯誤。

記錄傳送

日誌傳輸 支援 FILESTREAM。 主要和輔助伺服器都必須執行 SQL Server 2008 或更新版本,且已啟用 FILESTREAM。

資料庫鏡像

資料庫鏡像不支援 FILESTREAM。 無法在主體伺服器上建立 FILESTREAM 檔案群組。 資料庫鏡像無法針對包含 FILESTREAM 檔案群組的資料庫進行設定。

全文索引

全文檢索索引 的運作方式與 varbinary(max) 資料欄的運作方式與 FILESTREAM 資料欄相同。 FILESTREAM 數據表必須有一個數據行,其中包含每個 FILESTREAM BLOB 的擴展名。 如需詳細資訊,請參閱 使用 Full-Text 搜尋查詢、 設定及管理搜尋篩選,以及 sys.fulltext_document_types (Transact-SQL)

全文檢索引擎會編製 FILESTREAM BLOB 內容的索引。 索引檔案,例如影像可能沒有用處。 當 FILESTREAM BLOB 更新時,它會重新編製索引。

容錯叢集系統

針對故障轉移叢集,FILESTREAM 檔案群組必須放在共用磁碟上。 必須在將裝載 FILESTREAM 實例的叢集中每個節點上啟用 FILESTREAM。 如需詳細資訊,請參閱 在故障轉移叢集上設定 FILESTREAM

SQL Server Express

SQL Server Express 支援 FILESTREAM。 10 GB 資料庫大小限制不包含 FILESTREAM 數據容器。

自主資料庫

FILESTREAM 功能需要資料庫外部的一些設定。 因此,使用 FILESTREAM 或 FileTable 的資料庫不是完全封閉的。

如果您想要使用自主資料庫的特定功能,例如自主使用者,您可以將資料庫內含項目設定為 PARTIAL。 不過,在此情況下,您必須注意某些資料庫設定未包含在資料庫中,而且不會在資料庫移動時自動移動。

另請參閱

二進位大型物件 (Blob) 資料 (SQL Server)