FileTable の管理Manage FileTables

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

FileTable を管理するための一般的な管理タスクについて説明します。Describes common administrative tasks for managing FileTables.

方法:FileTable と関連オブジェクトの一覧を取得するHow To: Get a List of FileTables and Related Objects

FileTable の一覧を取得するには、次のいずれかのカタログ ビューに対してクエリを実行します。To get a list of FileTables, query one of the following catalog views:

SELECT * FROM sys.filetables;  
GO  
  
SELECT * FROM sys.tables WHERE is_filetable = 1;  
GO  

関連付けられている FileTable の作成時に作成されたシステム定義オブジェクトの一覧を取得するには、カタログ ビュー sys.filetable_system_defined_objects (Transact-SQL) に対してクエリを実行します。To get a list of the system-defined objects that were created when the associated FileTables were created, query the catalog view sys.filetable_system_defined_objects (Transact-SQL).

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'  
FROM sys.filetable_system_defined_objects;  
GO  

データベース レベルでの非トランザクション アクセスの無効化および再有効化Disabling and Re-enabling Non-Transactional Access at the Database Level

特定の管理タスクに必要な排他アクセスを取得するために、場合によっては一時的に非トランザクション アクセスを無効にする必要があります。To acquire the exclusive access that is required for certain administrative tasks, you may have to disable non-transactional access temporarily.

非トランザクション アクセスのレベルを変更するときの ALTER DATABASE ステートメントの動作Behavior of the ALTER DATABASE statement when changing the level of non-transactional access

  • 非トランザクション アクセスが READ_ONLY または OFF に設定されている場合、ALTER DATABASE コマンドは、要求された操作と競合する開いたファイル ハンドルがある間はユーザーに制御を返しません。When you set non-transactional access to READ_ONLY or OFF, the ALTER DATABASE command does not return control to the user as long as there are open file handles that conflict with the requested operation. この操作と競合するファイル ハンドルには、次のようなものがあります。The file handles that conflict with this operation include the following:

    • アクセスを NONEに設定している場合は、すべての開いているファイル ハンドル。When you are setting access to NONE, all open file handles.

    • アクセスを READ_ONLYに設定している場合は、書き込みアクセスで開かれているすべてのファイル ハンドル。When you are setting access to READ_ONLY, all file handles opened for write access.

    開いているファイル ハンドルを終了する方法の詳細については、このトピックの「 FileTable に関連付けられた開いているファイル ハンドルの終了 」を参照してください。For information about killing open file handles, see Killing Open File Handles Associated with a FileTable in this topic.

    ALTER DATABASE コマンドが取り消されるかまたはタイムアウトによって終了した場合、トランザクション アクセスのレベルは変更されません。If the ALTER DATABASE command is canceled or ends with a timeout, then the level of transactional access is not changed.

  • WITH <termination> 句 (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT) を指定して ALTER DATABASE ステートメントを呼び出した場合、開いているすべての非トランザクション ファイル ハンドルが終了します。If you call the ALTER DATABASE statement with a WITH <termination> clause (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT), then all open non-transactional file handles are killed.

警告

開いているファイル ハンドルを終了すると、保存されていないデータをユーザーが失う可能性があります。Killing open file handles may cause users to lose unsaved data. この動作は、ファイル システム自体の動作と一致しています。This behavior is consistent with the behavior of the file system itself.

非トランザクション アクセスを無効化した場合の影響Effects of disabling non-transactional access

データベース レベルでの非トランザクション アクセスのレベルを変更した場合、データベース レベルのディレクトリの下の FileTable ディレクトリに次の影響が及びます。Changing the level of non-transactional access at the database level has the following effects on the FileTable directories under the database-level directory:

  • アクセスを NONEに設定した場合、すべての FileTable ディレクトリとそのコンテンツはアクセスも表示もできなくなります。When you set access to NONE, then all the FileTable directories and their contents are no longer accessible or visible.

  • アクセスを READ_ONLYに設定した場合、すべての FileTable ディレクトリとそのコンテンツも読み取り専用になります。When you set access to READ_ONLY, then all the FileTable directories and their contents are also read-only.

インスタンス レベルで FILESTREAM を無効化した場合、そのインスタンスのデータベース レベルのディレクトリと、その下の FileTable ディレクトリに、次の影響が及びます。Disabling FILESTREAM at the instance level has the following effects on the database-level directories on that instance, and the FileTable directories under them:

  • FILESTREAM がインスタンス レベルで無効化された場合、そのインスタンスのデータベース レベルのディレクトリはすべて表示されません。None of the database-level directories on the instance are visible if FILESTREAM is disabled at the instance level.

方法:データベース レベルで非トランザクション アクセスを無効化および再有効化するHow To: Disable and Re-enable Non-Transactional Access at the Database Level

詳細については、「ALTER DATABASE の SET オプション (Transact-SQL)」を参照してください。For more information, see ALTER DATABASE SET Options (Transact-SQL).

完全な非トランザクション アクセスを無効化するにはTo disable full non-transactional access
ALTER DATABASE ステートメントを呼び出し、 NON_TRANSACTED_ACCESS の値を READ_ONLY または OFFに設定します。Call the ALTER DATABASE statement and SET the value of NON_TRANSACTED_ACCESS to READ_ONLY or OFF.

-- Disable write access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );  
GO  
  
-- Disable non-transactional access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );  
GO  

完全な非トランザクション アクセスを再有効化するにはTo re-enable full non-transactional access
ALTER DATABASE ステートメントを呼び出し、 NON_TRANSACTED_ACCESS の値を FULLに設定します。Call the ALTER DATABASE statement and SET the value of NON_TRANSACTED_ACCESS to FULL.

ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );  
GO  

方法:データベースの FileTable が必ず表示されるようにするHow to: Ensure the Visibility of the FileTables in a Database

以下のすべての条件が満たされる場合、データベース レベルのディレクトリとその下の FileTable ディレクトリは表示状態になります。A database-level directory and the FileTable directories under it are visible when all of these conditions are true:

  1. インスタンス レベルで FILESTREAM が有効になっている。FILESTREAM is enabled at the instance level.

  2. データベース レベルで非トランザクション アクセスが有効になっている。Non-transactional access is enabled at the database level.

  3. データベース レベルで有効なディレクトリが指定されている。A valid directory has been specified at the database level.

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。You can click the This page button in the Feedback section at the bottom of this page. SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。We read every item of feedback about SQL, typically the next day. よろしくお願いいたします。Thanks.

テーブル レベルでの FileTable 名前空間の無効化および再有効化Disabling and Re-enabling the FileTable Namespace at the Table Level

FileTable 名前空間を無効にすると、FileTable に対して作成されたすべてのシステム定義制約およびトリガーが無効になります。Disabling the FileTable namespace disables all the system-defined constraints and triggers that were created with the FileTable. これは、FileTable セマンティクスの適用を行うことなく Transact-SQLTransact-SQL 操作を使用して FileTable を大幅に再編成する必要がある場合に便利です。This is useful in cases where a FileTable has to be reorganized on a large scale by using Transact-SQLTransact-SQL operations without incurring the expense of enforcing FileTable semantics. ただし、これらの操作によって FileTable の一貫性が損なわれ、FileTable 名前空間の再有効化が妨げられる可能性があります。However these operations can leave the FileTable in an inconsistent state, and can prevent the re-enabling of the FileTable namespace.

FileTable 名前空間を無効にすると、次のような結果になります。Disabling a FileTable namespace has the following results:

  • FileTable 列およびデータは、テーブルから物理的に削除されません。FileTable columns and data are not physically dropped from the table.

  • FileTable ディレクトリと、それに含まれているファイルおよびディレクトリは、ファイル システムから消失し、ファイル I/O アクセスに使用できなくなります。The FileTable directory and the files and directories that it contains disappear from the file system and are not available for file i/o access.

  • システム定義の FileTable 列を削除または再作成することはできませんが、これらの列は DML 操作で通常の列と同様に動作します。System-defined FileTable columns cannot be dropped and recreated; otherwise, however, they behave like ordinary columns for DML operations.

  • 開いているファイル ハンドルがあると、FileTable 制約を無効化できません。この操作には、テーブルのスキーマ ロックが必要になるためです。Open file handles prevent the FileTable constraints from being disabled, since this operation requires a schema lock on the table.

  • FileTable 名前空間の無効化後、すべての FileTable セマンティクスの適用が、システム定義の制約およびトリガーも含めて、停止されます。Enforcement of all the FileTable semantics, including system-defined constraints and triggers, stops after the FileTable namespace is disabled.

FileTable 名前空間を再有効化すると、次のような結果になります。Re-enabling a FileTable namespace has the following results:

  • FileTable の一貫性がチェックされます。The FileTable is checked for consistency. 不整合が見つかった場合は、エラーが発生し、FileTable は無効のままになります。それ以外の場合、FileTable は再有効化されます。If inconsistencies are found, then an error is raised and the FileTable remains disabled; otherwise, the FileTable is re-enabled.

  • FileTable セマンティクスの適用が、システム定義の制約およびトリガーも含めて、復元されます。The enforcement of FileTable semantics, including system-defined constraints and triggers, is restored.

  • FileTable ディレクトリと、それに含まれているファイルおよびディレクトリは、ファイル システムに表示され、ファイル I/O アクセスに使用できるようになります。The FileTable directory and the files and directories that it contains become visible in the file system and become available for file i/o access.

方法:テーブル レベルで FileTable 名前空間を無効化および再有効化するHow To: Disable and Re-enable the FileTable Namespace at the Table Level

{ ENABLE | DISABLE } FILETABLE_NAMESPACE オプションを指定して ALTER TABLE ステートメントを呼び出します。Call the ALTER TABLE statement with the { ENABLE | DISABLE } FILETABLE_NAMESPACE option.

FileTable 名前空間を無効にするにはTo disable the FileTable namespace

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

FileTable 名前空間を再有効化するにはTo re-enable the FileTable namespace

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

FileTable に関連付けられた開いているファイル ハンドルの終了Killing Open File Handles Associated with a FileTable

FileTable に格納されているファイルへの開いているハンドルにより、特定の管理タスクで必要となる排他アクセスが妨げられる場合があります。Open handles to the files stored in a FileTable can prevent the exclusive access that is required for certain administrative tasks. 緊急のタスクを有効にするには、場合により 1 つまたは複数の FileTable に関連付けられている開いているファイル ハンドルを終了する必要があります。To enable urgent tasks, you may have to kill open file handles associated with one or more FileTables.

警告

開いているファイル ハンドルを終了すると、保存されていないデータをユーザーが失う可能性があります。Killing open file handles may cause users to lose unsaved data. この動作は、ファイル システム自体の動作と一致しています。This behavior is consistent with the behavior of the file system itself.

方法:FileTable に関連付けられた開いているファイル ハンドルの一覧を取得するHow To: Get a List of Open File Handles Associated with a FileTable

カタログ ビュー sys.dm_filestream_non_transacted_handles (Transact-SQL) に対してクエリを実行します。Query the catalog view sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

方法:FileTable に関連付けられた開いているファイル ハンドルを終了するHow To: Kill Open File Handles Associated with a FileTable

データベースまたは FileTable のすべての開いているファイル ハンドルを終了するか、特定のハンドルを終了するための適切な引数を指定して、sp_kill_filestream_non_transacted_handles (Transact-SQL) ストアド プロシージャを呼び出します。Call the stored procedure sp_kill_filestream_non_transacted_handles (Transact-SQL) with the appropriate arguments to kill all open file handles in the database or in the FileTable, or to kill a specific handle.

USE database_name;  
  
-- Kill all open handles in all the filetables in the database.  
EXEC sp_kill_filestream_non_transacted_handles;  
GO  
  
-- Kill all open handles in a single filetable.  
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';  
GO  
  
-- Kill a single handle.  
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;  
GO  

方法:FileTable によって保持されているロックを識別するHow to: Identify the Locks Held by FileTables

FileTable によって取得されるほとんどのロックは、アプリケーションによって開かれたファイルに対応します。Most locks taken by FileTables correspond to files opened by applications.

開いているファイルおよび関連付けられているロックを識別するにはTo identify open files and the associated locks
動的管理ビュー sys.dm_tran_locks (Transact-SQL)request_owner_id フィールドを sys.dm_filestream_non_transacted_handles (Transact-SQL)fcb_id フィールドと結合します。Join the request_owner_id field in the dynamic management view sys.dm_tran_locks (Transact-SQL) with the fcb_id field in sys.dm_filestream_non_transacted_handles (Transact-SQL). 場合によっては、ロックが単一の開いているファイル ハンドルと対応しないこともあります。In some cases, the lock does not correspond to a single open file handle.

SELECT opened_file_name  
FROM sys.dm_filestream_non_transacted_handles  
WHERE fcb_id IN  
    ( SELECT request_owner_id FROM sys.dm_tran_locks );  
GO  

FileTable セキュリティFileTable Security

FileTable に格納されているファイルとディレクトリは、SQL Server セキュリティのみによって保護されます。The files and directories stored in FileTables are secured by SQL Server security only. テーブルおよび列ベースのセキュリティは、ファイル システム アクセスおよび Transact-SQLTransact-SQL アクセスに適用されます。Table and column-based security is enforced for file system access as well as Transact-SQLTransact-SQL access. Windows ファイル システム セキュリティ API および ACL 設定はサポートされていません。Windows file system security APIs and ACL settings are not supported.

FILESTREAM ファイル グループおよびコンテナーに適用可能なセキュリティおよびアクセス許可は、FileTable にも適用されます。これは、ファイル データは FileTable の FILESTREAM 列として格納されるためです。The security and access permissions that are applicable to FILESTREAM filegroups and containers also apply to FileTables, since the file data is stored as a FILESTREAM column in the FileTable.

FileTable セキュリティと Transact-SQL アクセスFileTable Security and Transact-SQL Access
Transact-SQLTransact-SQL FileTable のデータに対するアクセスは、他のすべてのテーブルと同様にセキュリティで保護されます。access to data in FileTables is secured in the same way as any other table. データに対するアクセスや変更を行う各操作に関して、適切なテーブルおよび列レベルのセキュリティ チェックが行われます。Appropriate table and column-level security checks are done for every operation that accesses or changes the data.

FileTable セキュリティとファイル システム アクセスFileTable Security and File System Access
ファイル システム API には、FileTable に格納されているファイルまたはディレクトリへのハンドルを開くための、FileTable の行全体に対する適切な SQL ServerSQL Server 権限 (つまり、テーブル レベルの権限) が必要です。File system APIs require appropriate SQL ServerSQL Server permissions on the entire row in the FileTable (that is, table-level permission) to open a handle to a file or directory stored in the FileTable. FileTable の列に対する適切な SQL ServerSQL Server 権限がユーザーに与えられていない場合、ファイル システム アクセスは拒否されます。If the user does not have the appropriate SQL ServerSQL Server permission on any column in the FileTable, then file system access is denied.

バックアップと FileTableBackup and FileTables

SQL ServerSQL Server を使用して FileTable をバックアップすると、FILESTREAM データがデータベースの構造化データと共にバックアップされます。When you use SQL ServerSQL Server to back up a FileTable, the FILESTREAM data is backed up with the structured data in the database. FILESTREAM データをリレーショナル データと共にバックアップしない場合は、部分バックアップを使用して FILESTREAM ファイル グループを除外できます。If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

FileTable バックアップのトランザクションの整合性Transactional Consistency of FileTable Backups

多くの管理ツールおよび操作 (バックアップ、ログ バックアップ、トランザクション レプリケーションなど) では、トランザクション ログを読み取ることにより、トランザクション的に一貫したデータを読み取ります。Many administrative tools and operations, (including backup, log backup, and transactional replication) read transactionally consistent data by reading the transaction logs. このとき、トランザクションの一部として更新された任意の FILESTREAM データが読み取られます。At this time, they read any FILESTREAM data updated as part of a transaction. 非トランザクション アクセスがデータベース レベルで有効になっていない場合、これらのツールおよび操作は、完全なトランザクションの一貫性を保って動作します。When non-transactional access is not enabled at the database level, these tools and operations work with full transactional consistency.

ただし、完全な非トランザクション アクセスが有効である場合、ツールまたはプロセスによってトランザクション ログから読み取られたトランザクション以降に (非トランザクション更新を介して) 更新されたデータが FileTable に含まれる可能性があります。However, when full non-transactional access is enabled, then a FileTable could contain data that was updated more recently (through a non-transactional update) than the transaction that the tool or process is reading from the transaction log. つまり、特定のトランザクションの "ある時点" への復元操作に、そのトランザクションよりも新しい FILESTREAM データが含められる可能性があります。This means that a "point in time" restore operation to a specific transaction may contain FILESTREAM data that is more recent than that transaction. これは、非トランザクション更新が FileTable で許可される場合に想定される動作です。This is the expected behavior when non-transactional updates are allowed on FileTables.

SQL Server Profiler と FileTablesSQL Server Profiler and FileTables

SQL ServerSQL Server Profiler は、FileTable に格納されているファイルに対するトレース出力内の Windows File Open および File Close 操作をキャプチャできます。Profiler can capture the Windows File Open and File Close operations in trace output for files that are stored in a FileTable.

監査と FileTableAuditing and FileTables

FileTable は、他のテーブルと同じように監査できます。FileTable can be audited just like any other table. ただし、Win32 アクセス パターンは、セット ベースの操作ではありません。However, Win32 access patterns are not set based operations. ファイル システムの単一のアクションが複数の Transact-SQL DML 操作に変換されます。A single action in the file system translates into multiple Transact-SQL DML operations. たとえば、Microsoft Word でファイルを開く操作は、複数の操作 (開く操作、閉じる操作、作成、名前の変更、削除) および対応する Transact-SQL DML アクティビティに変換されます。For example, opening a file in Microsoft Word translates into multiple open/close/create/rename/delete operations and corresponding Transact-SQL DML activities. その結果、詳細な監査レコードが生成され、ファイル システム アクションとそれに対応する Transact-SQL DML 監査レコードの間でレコードを関連付けることが困難になります。This results in verbose audit records where it is hard to correlate records between file system actions and corresponding Transact-SQL DML audit records.

DBCC と FileTableDBCC and FileTables

DBCC CHECKCONSTRAINTS を使用すると、システム定義の制約を含む FileTable に対する制約を検証できます。You can use DBCC CHECKCONSTRAINTS to validate the constraints on a FileTable including system-defined constraints.

参照See Also

FileTable と他の SQL Server 機能の互換性 FileTable Compatibility with Other SQL Server Features
FileTable DDL、関数、ストアド プロシージャ、およびビューFileTable DDL, Functions, Stored Procedures, and Views