FileTable を作成および使用するための前提条件を有効にする方法について説明します。
FileTable の前提条件の有効化
FileTable を作成および使用するための前提条件を有効にするには、次の項目を有効にします。
インスタンス レベル:
データベース レベル:
インスタンス レベルでの FILESTREAM の有効化
FileTable は、SQL Server の FILESTREAM 機能を拡張します。 そのため、FileTable を作成して使用する前に、Windows レベルおよび SQL Server インスタンスでファイル I/O アクセスに対して FILESTREAM を有効にする必要があります。
方法: インスタンス レベルで FILESTREAM を有効にする
FILESTREAM を有効にする方法の詳細については、「 FILESTREAM の有効化と構成」をご覧ください。
sp_configure
を呼び出してインスタンス レベルで FILESTREAM を有効にする場合は、filestream_access_level オプションを 2 に設定する必要があります。 詳細については、「 filestream アクセス レベルのサーバー構成オプション」を参照してください。
方法: ファイアウォール経由で 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 を使用して非トランザクション アクセスのレベルを指定する
- 新しいデータベースを作成するときは、NON_TRANSACTED_ACCESS FILESTREAM オプションを使用して CREATE DATABASE (SQL Server 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 のディレクトリを指定する
- 新しいデータベースを作成するときは、DIRECTORY_NAME FILESTREAM オプションを使用して CREATE DATABASE (SQL Server Transact-SQL) ステートメントを呼び出します。
```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 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 のすべてのディレクトリ構造が削除されます。