FileTable の前提条件の有効化

適用対象:SQL Server

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

FileTable の前提条件の有効化

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

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

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

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

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

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

カタログ ビュー 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 (SQL Server 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 の親になります。 詳しくは、「 Work with Directories and Paths in FileTables」をご覧ください。

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

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

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

新しいデータベースを作成するときに、DIRECTORY_NAME FILESTREAM オプションを使用して CREATE DATABASE (SQL Server 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 (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 値を指定します。

  • 既存のデータベースをアップグレードした場合、DIRECTORY_NAME の値は null になります。

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

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