共用方式為


啟用 FileTable 的必要條件

描述如何啟用建立和使用 FileTable 的必要元件。

啟用 FileTable 的必要條件

若要啟用建立和使用 FileTable 的必要條件,請啟用下列項目:

在實例層級啟用 FILESTREAM

FileTable 會擴充 SQL Server 之 FILESTREAM 功能的能力。 因此,您必須在 Windows 層級和 SQL Server 實例上啟用 FILESTREAM 進行檔案 I/O 存取,才能建立及使用 FileTable。

如何:在實例層級啟用 FILESTREAM

如需如何啟用 FILESTREAM 的相關資訊,請參閱 啟用及設定 FILESTREAM

當您在實例層級呼叫 sp_configure 以啟用 FILESTREAM 時,您必須將 [filestream_access_level] 選項設定為 2。 如需詳細資訊,請參閱 filestream 存取層級伺服器組態選項

如何:允許 FILESTREAM 通過防火牆

如需有關如何允許 FILESTREAM 通過防火牆的詳細資訊,請參閱< Configure a Firewall for FILESTREAM Access>。

在資料庫層級提供 FILESTREAM 檔案組

資料庫必須具有 FILESTREAM 檔案群組,然後您才能在該資料庫中建立 FileTable。 如需此必要條件的詳細資訊,請參閱 建立啟用 FILESTREAM 的資料庫

在資料庫層級啟用非交易式存取

FileTable 可讓 Windows 應用程式取得 FILESTREAM 資料的 Windows 檔案控制代碼,而不需要使用交易。 若要允許此非交易式存取儲存在 SQL Server 中的檔案,您必須針對將包含 FileTable 的每個資料庫,指定資料庫層級所需的非交易式存取層級。

如何:檢查是否在資料庫上啟用非交易式存取

查詢目錄檢視 sys.database_filestream_options (Transact-SQL),並檢查 non_transacted_accessnon_transacted_access_desc 欄位。

SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc  
    FROM sys.database_filestream_options;  
GO  

如何:在資料庫層級啟用非交易式存取

非交易式存取的可用層級為 FULL、READ_ONLY 和 OFF。

使用 Transact-SQL 指定非交易式存取的層級

```sql  
CREATE DATABASE database_name  
    WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' )  
```  
  • 當您改變現有的資料庫時,請使用 NON_TRANSACTED_ACCESS FILESTREAM 選項呼叫 ALTER DATABASE (Transact-SQL) 語句。

    ALTER DATABASE database_name  
        SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' )  
    

使用 SQL Server Management Studio 指定非交易式存取的層級
您可以在 [資料庫屬性] 對話方塊之 [選項] 頁面的 [FILESTREAM 非交易式存取] 字段中指定非交易式存取層級。 如需此對話方塊的詳細資訊,請參閱資料庫屬性 (選項頁面)

在資料庫層級指定 FileTable 的目錄

當您在資料庫層級啟用對檔案的非交易式存取時,您可以選擇使用 [DIRECTORY_NAME ] 選項同時提供目錄名稱。 如果您在啟用非交易式存取時未提供目錄名稱,您稍後必須先提供它,才能在資料庫中建立 FileTable。

在 FileTable 資料夾階層中,這個資料庫層級目錄會成為在執行個體層級中針對 FILESTREAM 指定之共用名稱的子系,以及在資料庫中建立之 FileTable 的父系。 如需詳細資訊,請參閱 Work with Directories and Paths in FileTables

如何:在資料庫層級指定 FileTable 的目錄

在資料庫層級目錄中,您指定的名稱在該執行個體內必須是唯一的。

使用 Transact-SQL 指定 FileTable 的目錄

```sql  
CREATE DATABASE database_name  
    WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
GO  
```  
  • 當您改變現有的資料庫時,請使用 DIRECTORY_NAME FILESTREAM 選項呼叫 ALTER DATABASE (Transact-SQL) 語句。 當您使用這些選項來變更目錄名稱時,資料庫必須被獨佔鎖定,且不可有任何開啟的檔案。

    ALTER DATABASE database_name  
        SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
    GO  
    
  • 當您附加資料庫時,請使用 FOR ATTACH 選項和 DIRECTORY_NAME FILESTREAM 選項呼叫 CREATE DATABASE (SQL Server Transact-SQL) 語句。

    CREATE DATABASE database_name  
        FOR ATTACH WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );  
    GO  
    
  • 當您還原資料庫時,請使用 DIRECTORY_NAME FILESTREAM 選項呼叫 RESTORE (Transact-SQL) 語句。

    RESTORE DATABASE database_name  
        WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );  
    GO  
    

使用 SQL Server Management Studio 指定 FileTable 的目錄
在 [資料庫屬性] 對話方塊中,您可以透過 [選項] 頁面的 [FILESTREAM 目錄名稱] 欄位,來指定目錄名稱。 如需此對話方塊的詳細資訊,請參閱資料庫屬性 (選項頁面)

如何:檢視實例的現有目錄名稱

若要檢視實例的現有目錄名稱清單,請查詢目錄檢視 sys.database_filestream_options(Transact-SQL), 並檢查 filestream_database_directory_name 數據行。

SELECT DB_NAME ( database_id ), directory_name  
    FROM sys.database_filestream_options;  
GO  

Database-Level 目錄的需求和限制

  • 當您呼叫 CREATE DATABASEALTER DATABASE 時,設定DIRECTORY_NAME是選擇性的。 如果您未指定 DIRECTORY_NAME的值,則目錄名稱會維持 null。 不過,除非您在資料庫層級指定 DIRECTORY_NAME 的值,否則您無法在資料庫中建立 FileTable。

  • 您所提供的目錄名稱必須符合有效目錄名稱的檔案系統需求。

  • 當資料庫包含 FileTable 時,您無法將 DIRECTORY_NAME 設定回 Null 值。

  • 當您附加或還原資料庫時,如果新的資料庫具有已存在於目標實例中的 DIRECTORY_NAME 值,作業就會失敗。 當您呼叫 CREATE DATABASE FOR ATTACHRESTORE DATABASE 時,請為 DIRECTORY_NAME指定唯一值。

  • 當您將現有的資料庫升級至 SQL Server 2014 時, DIRECTORY_NAME 的值為 null。

  • 當您在資料庫層級啟用或停用非交易式存取時,作業不會檢查是否已指定目錄名稱,或是否是唯一的。

  • 當您卸除已啟用 FileTable 的資料庫時,會移除資料庫層級目錄及其下所有 FileTable 的所有目錄結構。