FileTable の前提条件の有効化Enable the Prerequisites for FileTable

適用対象: はいSQL Server いいえAzure SQL Database いいえAzure Synapse Analytics (SQL DW) いいえParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

FileTable を作成および使用するための前提条件を有効にする方法について説明します。Describes how to enable the prerequisites for creating and using FileTables.

FileTable の前提条件の有効化Enabling the Prerequisites for FileTable

FileTable を作成および使用するための前提条件を有効にするには、次の項目を有効にします。To enable the prerequisites for creating and using FileTables, enable the following items:

インスタンス レベルでの FILESTREAM の有効化Enabling FILESTREAM at the Instance Level

FileTable は、 SQL ServerSQL Serverの FILESTREAM 機能を拡張します。FileTables extend the capabilities of the FILESTREAM feature of SQL ServerSQL Server. したがって、FileTable を作成および使用するには、ファイル I/O アクセス用の FILESTREAM を Windows レベルおよび SQL ServerSQL Server のインスタンスで事前に有効にする必要があります。Therefore you have to enable FILESTREAM for file I/O access at the Windows level and on the instance of SQL ServerSQL Server before you can create and use FileTables.

方法:インスタンス レベルで FILESTREAM を有効にするHow To: Enable FILESTREAM at the Instance Level

FILESTREAM を有効にする方法の詳細については、「 FILESTREAM の有効化と構成」をご覧ください。For information about how to enable FILESTREAM, see Enable and Configure FILESTREAM.

sp_configure を呼び出し、FILESTREAM をインスタンス レベルで有効にするには、filestream_access_level オプションを 2 に設定する必要があります。When you call sp_configure to enable FILESTREAM at the instance level, you have to set the filestream_access_level option to 2. 詳細については、「 filestream access level サーバー構成オプション」を参照してください。For more information, see filestream access level Server Configuration Option.

方法:FILESTREAM がファイアウォールを通過できるようにするHow To: Allow FILESTREAM through the Firewall

FILESTREAM がファイアウォールを通過できるようにする方法については、「 Configure a Firewall for FILESTREAM Access」をご覧ください。For information about how to allow FILESTREAM through the firewall, see Configure a Firewall for FILESTREAM Access.

データベース レベルでの FILESTREAM ファイル グループの指定Providing a FILESTREAM Filegroup at the Database Level

データベースに FileTable を作成するには、データベースに FILESTREAM ファイル グループが必要です。Before you can create FileTables in a database, the database must have a FILESTREAM filegroup. この前提条件の詳細については、「 FILESTREAM が有効なデータベースを作成する方法」を参照してください。For more information about this prerequisite, see Create a FILESTREAM-Enabled Database.

データベース レベルでの非トランザクション アクセスの有効化Enabling Non-Transactional Access at the Database Level

FileTable は、Windows アプリケーションがトランザクションを必要とすることなく FILESTREAM データに対する Windows ファイル ハンドルを取得することを可能にします。FileTables let Windows applications obtain a Windows file handle to FILESTREAM data without requiring a transaction. SQL ServerSQL Serverに格納されているファイルに対するこの非トランザクション アクセスを可能にするには、FileTable を格納するデータベースごとに、データベース レベルで非トランザクション アクセスのレベルを指定する必要があります。To allow this non-transactional access to files stored in SQL ServerSQL Server, you have to specify the desired level of non-transactional access at the database level for each database that will contain FileTables.

方法:データベースで非トランザクション アクセスが有効かどうかを確認するHow To: Check Whether Non-Transactional Access Is Enabled on Databases

カタログ ビュー sys.database_filestream_options (Transact-SQL) に対してクエリを実行し、non_transacted_access 列と non_transacted_access_desc 列をチェックします。Query the catalog view sys.database_filestream_options (Transact-SQL) and check the non_transacted_access and non_transacted_access_desc columns.

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

方法:データベース レベルで非トランザクション アクセスを有効にするHow To: Enable Non-Transactional Access at the Database Level

使用できる非トランザクション アクセスのレベルは、FULL、READ_ONLY、および OFF です。The available levels of non-transactional access are FULL, READ_ONLY, and OFF.

Transact-SQL を使用して非トランザクション アクセスのレベルを指定するSpecify the level of non-transactional access by using Transact-SQL

  • 新しいデータベースを作成するときに、NON_TRANSACTED_ACCESS FILESTREAM オプションを使用して CREATE DATABASE (SQL Server Transact-SQL) ステートメントを呼び出します。When you create a new database, call the CREATE DATABASE (SQL Server Transact-SQL) statement with the NON_TRANSACTED_ACCESS FILESTREAM option.

    CREATE DATABASE database_name  
      WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' )  
    
  • 既存のデータベースを変更するときに、NON_TRANSACTED_ACCESS FILESTREAM オプションを使用して ALTER DATABASE (Transact-SQL) ステートメントを呼び出します。When you alter an existing database, call the ALTER DATABASE (Transact-SQL) statement with the NON_TRANSACTED_ACCESS FILESTREAM option.

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

SQL Server Management Studio を使用して非トランザクション アクセスのレベルを指定するSpecify the level of non-transactional access by using SQL Server Management Studio
[データベースのプロパティ] ダイアログ ボックスの [オプション] ページの [FILESTREAM 非トランザクション アクセス] ボックスで、非トランザクション アクセスのレベルを指定できます。You can specify the level of non-transactional access in the FILESTREAM Non-transacted Access field of the Options page of the Database Properties dialog box. このダイアログ ボックスの詳細については、「[データベースのプロパティ] ([オプション] ページ)」を参照してください。For more information about this dialog box, see Database Properties (Options Page).

データベース レベルでの FileTable のディレクトリ指定Specifying a Directory for FileTables at the Database Level

ファイルに対する非トランザクション アクセスをデータベース レベルで有効にする場合、必要に応じて DIRECTORY_NAME オプションを使用してディレクトリ名も指定できます。When you enable non-transactional access to files at the database level, you can optionally provide a directory name at the same time by using the DIRECTORY_NAME option. 非トランザクション アクセスを有効にしたときにディレクトリ名を指定しなかった場合は、データベースに FileTable を作成する前にディレクトリ名を指定する必要があります。If you do not provide a directory name when you enable non-transactional access, then you have to provide it later before you can create FileTables in the database.

FileTable フォルダー階層において、このデータベース レベルのディレクトリは、インスタンス レベルで FILESTREAM に対して指定された共有名の子になると同時に、データベースに作成された FileTable の親になります。In the FileTable folder hierarchy, this database-level directory becomes the child of the share name specified for FILESTREAM at the instance level, and the parent of the FileTables created in the database. 詳しくは、「 Work with Directories and Paths in FileTables」をご覧ください。For more information, see Work with Directories and Paths in FileTables.

方法:データベース レベルで FileTable のディレクトリを指定するHow To: Specify a Directory for FileTables at the Database Level

指定する名前は、データベース レベルで存在するディレクトリに対して一意であることが必要です。The name that you specify must be unique across the instance for database-level directories.

Transact-SQL を使用して FileTable のディレクトリを指定するSpecify a directory for FileTables by using Transact-SQL

  • 新しいデータベースを作成するときに、DIRECTORY_NAME FILESTREAM オプションを使用して CREATE DATABASE (SQL Server Transact-SQL) ステートメントを呼び出します。When you create a new database, call the CREATE DATABASE (SQL Server Transact-SQL) statement with the DIRECTORY_NAME FILESTREAM option.

    CREATE DATABASE database_name  
       WITH FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'directory_name' );  
    GO  
    
  • 既存のデータベースを変更するときに、DIRECTORY_NAME FILESTREAM オプションを使用して ALTER DATABASE (Transact-SQL) ステートメントを呼び出します。When you alter an existing database, call the ALTER DATABASE (Transact-SQL) statement with the DIRECTORY_NAME FILESTREAM option. これらのオプションを使用してディレクトリ名を変更するとき、データベースを排他的にロックして、開いているファイル ハンドルがないことを確認する必要があります。When you use these options to change the directory name, the database must be exclusively locked, with no open file handles.

    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) ステートメントを呼び出します。When you attach a database, call the CREATE DATABASE (SQL Server Transact-SQL) statement with the FOR ATTACH option and with the DIRECTORY_NAME FILESTREAM option.

    CREATE DATABASE database_name  
        FOR ATTACH WITH FILESTREAM ( DIRECTORY_NAME = N'directory_name' );  
    GO  
    
  • データベースを復元するときに、DIRECTORY_NAME FILESTREAM オプションを使用して RESTORE (Transact-SQL) ステートメントを呼び出します。When you restore a database, call the RESTORE (Transact-SQL) statement with the DIRECTORY_NAME FILESTREAM option.

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

SQL Server Management Studio を使用して、FileTable のディレクトリを指定するSpecify a directory for FileTables by using SQL Server Management Studio
[データベースのプロパティ] ダイアログ ボックスの [オプション] ページの [FILESTREAM ディレクトリ名] ボックスで、ディレクトリ名を指定できます。You can specify a directory name in the FILESTREAM Directory Name field of the Options page of the Database Properties dialog box. このダイアログ ボックスの詳細については、「[データベースのプロパティ] ([オプション] ページ)」を参照してください。For more information about this dialog box, see Database Properties (Options Page).

方法:インスタンスの既存のディレクトリ名を表示するHow to: View Existing Directory Names for the Instance

インスタンスの既存のディレクトリ名の一覧を表示するには、ys.database_filestream_options (Transact-SQL) カタログ ビューに対するクエリを実行し、filestream_database_directory_name 列を確認します。To view the list of existing directory names for the instance, query the catalog view sys.database_filestream_options (Transact-SQL) and check the filestream_database_directory_name column.

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

データベース レベルのディレクトリの要件と制限Requirements and Restrictions for the Database-Level Directory

  • CREATE DATABASE または ALTER DATABASE を呼び出すとき、 DIRECTORY_NAMEをオプションで設定できます。Setting the DIRECTORY_NAME is optional when you call CREATE DATABASE or ALTER DATABASE. DIRECTORY_NAMEの値を指定しなかった場合、ディレクトリ名は null のままになります。If you do not specify a value for DIRECTORY_NAME, then the directory name remains null. ただし、データベース レベルで DIRECTORY_NAME の値を指定しないと、データベースに FileTable を作成できません。However you cannot create FileTables in the database until you specify a value for DIRECTORY_NAME at the database level.

  • 指定するディレクトリ名は、ファイル システムの有効なディレクトリ名に関する要件を満たしている必要があります。The directory name that you provide must comply with the requirements of the file system for a valid directory name.

  • データベースに FileTable が含まれている場合、 DIRECTORY_NAME を再度 null 値に設定することはできません。When the database contains FileTables, you cannot set the DIRECTORY_NAME back to a null value.

  • データベースをアタッチまたは復元するときに、対象のインスタンスに既に存在する DIRECTORY_NAME の値が新しいデータベースにある場合、操作は失敗します。When you attach or restore a database, the operation fails if the new database has a value for DIRECTORY_NAME that already exists in the target instance. CREATE DATABASE FOR ATTACH または RESTORE DATABASE を呼び出すときは、 DIRECTORY_NAMEに対して一意の値を指定してください。Specify a unique value for DIRECTORY_NAME when you call CREATE DATABASE FOR ATTACH or RESTORE DATABASE.

  • 既存のデータベースを SQL Server 2019 (15.x)SQL Server 2019 (15.x)にアップグレードした場合、 DIRECTORY_NAME の値は null になります。When you upgrade an existing database to SQL Server 2019 (15.x)SQL Server 2019 (15.x), the value of DIRECTORY_NAME is null.

  • 非トランザクション アクセスをデータベース レベルで有効または無効にするとき、ディレクトリ名が指定されているかどうか、またはディレクトリ名が一意であるかどうかのチェックは行われません。When you enable or disable non-transactional access at the database level, the operation does not check whether the directory name has been specified or whether it is unique.

  • FileTable に対して有効化されていたデータベースを削除すると、データベース レベルのディレクトリとそれ以下のすべての FileTable のすべてのディレクトリ構造が削除されます。When you drop a database that was enabled for FileTables, the database-level directory and all the directory structures of all the FileTables under it are removed.