Share via


FileTable の前提条件の有効化

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

このトピックの内容

実行する操作

  • FileTable の前提条件の有効化

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

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

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

  • FILESTREAM ファイル グループの指定

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

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

    • 方法: データベース レベルで非トランザクション アクセスを有効にする

  • データベース レベルでの FileTable のディレクトリ指定

    • 方法: データベース レベルで FileTable のディレクトリを指定する

    • 方法: インスタンスの既存のディレクトリ名を表示する

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

FileTable の前提条件の有効化

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

  • インスタンス レベル:

    • インスタンス レベルでの FILESTREAM の有効化
  • データベース レベル:

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

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

    • データベース レベルでの FileTable のディレクトリ指定

[先頭に戻る]

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

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

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

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

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

[先頭に戻る]

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

FILESTREAM がファイアウォールを通過できるようにする方法については、「FILESTREAM アクセスのためのファイアウォールの構成」を参照してください。

[先頭に戻る]

データベース レベルでの 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 を使用して非トランザクション アクセスのレベルを指定する

    • 新しいデータベースを作成するときに、NON_TRANSACTED_ACCESS FILESTREAM オプションを使用して CREATE DATABASE (Transact-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 の親になります。 詳細については、「FileTable 内のディレクトリとパスの操作」を参照してください。

方法: データベース レベルで FileTable のディレクトリを指定する

指定する名前は、データベース レベルで存在するディレクトリに対して一意であることが必要です。

  • Transact-SQL を使用して FileTable のディレクトリを指定する

    • 新しいデータベースを作成するときに、DIRECTORY_NAME FILESTREAM オプションを使用して CREATE DATABASE (Transact-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 (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 2012 にアップグレードした場合、DIRECTORY_NAME の値は null になります。

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

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

[先頭に戻る]