次の方法で共有


FileTable の前提条件の有効化

FileTable を作成および使用するための前提条件を有効にする方法について説明します。

FileTable の前提条件の有効化

FileTable を作成および使用するための前提条件を有効にするには、次の項目を有効にします。

インスタンス レベルでの FILESTREAM の有効化

FileTable は、SQL Serverの FILESTREAM 機能の機能を拡張します。 そのため、FileTables を作成して使用する前に、Windows レベルおよび SQL Server のインスタンスでファイル I/O アクセスに対して FILESTREAM を有効にする必要があります。

方法: インスタンス レベルで FILESTREAM を有効にする

FILESTREAM を有効にする方法の詳細については、「 FILESTREAM の有効化と構成」をご覧ください。

sp_configure を呼び出し、FILESTREAM をインスタンス レベルで有効にするには、filestream_access_level オプションを 2 に設定する必要があります。 詳細については、「 filestream access level サーバー構成オプション」を参照してください。

方法: FILESTREAM がファイアウォールを通過できるようにする

FILESTREAM がファイアウォールを通過できるようにする方法については、「 Configure a Firewall for FILESTREAM Access」をご覧ください。

データベース レベルでの FILESTREAM ファイル グループの指定

データベースに FileTable を作成するには、データベースに FILESTREAM ファイル グループが必要です。 この前提条件の詳細については、「 FILESTREAM が有効なデータベースを作成する方法」を参照してください。

データベース レベルでの非トランザクション アクセスの有効化

FileTable は、Windows アプリケーションがトランザクションを必要とすることなく FILESTREAM データに対する Windows ファイル ハンドルを取得することを可能にします。 SQL Serverに格納されているファイルへのこのトランザクション以外のアクセスを許可するには、FileTable を含む各データベースのデータベース レベルで、必要なレベルの非トランザクション アクセスを指定する必要があります。

方法: データベースで非トランザクション アクセスが有効かどうかを確認する

カタログ ビュー sys.database_filestream_options (Transact-SQL) に対してクエリを実行し、non_transacted_access列とnon_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  

データベース レベルのディレクトリの要件と制限

  • CREATE DATABASE または ALTER DATABASE を呼び出すとき、 DIRECTORY_NAMEをオプションで設定できます。 DIRECTORY_NAMEの値を指定しなかった場合、ディレクトリ名は null のままになります。 ただし、データベース レベルで DIRECTORY_NAME の値を指定しないと、データベースに FileTable を作成できません。

  • 指定するディレクトリ名は、ファイル システムの有効なディレクトリ名に関する要件を満たしている必要があります。

  • データベースに FileTable が含まれている場合、 DIRECTORY_NAME を再度 null 値に設定することはできません。

  • データベースをアタッチまたは復元するときに、対象のインスタンスに既に存在する DIRECTORY_NAME の値が新しいデータベースにある場合、操作は失敗します。 CREATE DATABASE FOR ATTACH または RESTORE DATABASE を呼び出すときは、 DIRECTORY_NAMEに対して一意の値を指定してください。

  • 既存のデータベースを SQL Server 2014 にアップグレードすると、DIRECTORY_NAMEの値は null になります。

  • 非トランザクション アクセスをデータベース レベルで有効または無効にするとき、ディレクトリ名が指定されているかどうか、またはディレクトリ名が一意であるかどうかのチェックは行われません。

  • FileTable に対して有効化されていたデータベースを削除すると、データベース レベルのディレクトリとそれ以下のすべての FileTable のすべてのディレクトリ構造が削除されます。