FileTable と他の SQL Server 機能との互換性FileTable compatibility with other SQL Server features

適用対象: はい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 と他の SQL ServerSQL Server機能との連携について説明します。Describes how FileTables work with other features of SQL ServerSQL Server.

AlwaysOn 可用性グループと FileTableAlwaysOn Availability Groups and FileTables

FILESTREAM データまたは FileTable データを格納するデータベースが AlwaysOn 可用性グループに属する場合、次の処理が行われます。When the database that contains FILESTREAM or FileTable data belongs to an AlwaysOn availability group:

  • FileTable 機能は Always On 可用性グループAlways On availability groupsで部分的にサポートされています。FileTable functionality is partially supported by Always On 可用性グループAlways On availability groups. フェールオーバー後、FileTable データはプライマリ レプリカ上でアクセスできますが、読み取り可能なセカンダリ レプリカ上ではアクセスできません。After a failover, FileTable data is accessible on the primary replica, but FileTable data is not accessible on readable secondary replicas.

    注: フェールオーバー後はすべての FILESTREAM 機能がサポートされることに注意してください。NOTE: Notice that after a failover all FILESTREAM functionality is supported. FILESTREAM データは読み取り可能なセカンダリ レプリカと新しいプライマリの両方でアクセスできます。FILESTREAM data is accessible on both readable secondary replicas and on the new primary.

  • FILESTREAM および FileTable 関数は、コンピューター名ではなく仮想ネットワーク名 (VNN) のやり取りを行います。The FILESTREAM and FileTable functions accept or return virtual network names (VNNs) instead of computer names. 関数の詳細については、「Filestream および FileTable 関数 (Transact-SQL)」を参照してください。For more information about these functions, see Filestream and FileTable Functions (Transact-SQL).

  • ファイル システム API を介した FILESTREAM または FileTable データへのすべてのアクセスでは、コンピューター名ではなく VNN を使用する必要があります。All access to FILESTREAM or FileTable data through the file system APIs should use VNNs instead of computer names. 詳細については、「FILESTREAM および FileTable と AlwaysOn 可用性グループ (SQL Server)」を参照してください。For more information, see FILESTREAM and FileTable with Always On Availability Groups (SQL Server).

パーティション分割と FileTablePartitioning and FileTables

FileTable ではパーティション分割はサポートされていません。Partitioning is not supported on FileTables. 複数の FILESTREAM ファイル グループのサポートにより、ほとんどのシナリオにおいて、(SQL 2008 FILESTREAM とは異なり) パーティション分割に頼ることなく純粋なスケールアップに関する問題を処理できます。With the support for multiple FILESTREAM file groups, pure scale-up issues can be handled without having to resort to partitioning in most scenarios (unlike SQL 2008 FILESTREAMs).

レプリケーションと FileTableReplication and FileTables

FileTable では、レプリケーションおよび関連機能 (トランザクション レプリケーション、マージ レプリケーション、変更データ キャプチャ、および変更の追跡) はサポートされていません。Replication and related features (including transactional replication, merge replication, change data capture, and change tracking) are not supported with FileTables.

トランザクション セマンティクスと FileTableTransaction Semantics and FileTables

Windows アプリケーションWindows applications
Windows アプリケーションはデータベース トランザクションを理解しないため、Windows 書き込み操作ではデータベース トランザクションの ACID プロパティが提供されません。Windows applications do not understand database transactions, so Windows write operations do not provide the ACID properties of a database transaction. このため、Windows の更新操作ではトランザクションのロールバックと復旧は不可能です。Therefore transactional rollbacks and recovery are not possible with Windows update operations.

Transact-SQL アプリケーションTransact-SQL applications
FileTable の FILESTREAM (file_stream) 列を操作する TSQL アプリケーションの分離セマンティクスは、通常のユーザー テーブル内の FILESTREAM データ型の場合と同じです。For TSQL applications working on the FILESTREAM (file_stream) column in a FileTable, the isolation semantics are the same as with FILESTREAM datatype in a regular user table.

クエリ通知と FileTableQuery Notifications and FileTables

クエリでは、WHERE 句またはクエリのその他の部分に FileTable 内の FILESTREAM 列への参照を含めることはできません。The query cannot contain reference to the FILESTREAM column in the FileTable, in the WHERE clause or any other part of the query.

SELECT INTO と FileTableSELECT INTO and FileTables

FileTable から SELECT INTO ステートメントを使用すると、(通常のテーブルの FILESTREAM 列と同様に) FileTable のセマンティクスはターゲット テーブルに反映されません。SELECT INTO statements from a FileTable will not propagate the FileTable semantics on the created destination table (just like FILESTREAM columns in a regular table). ターゲット テーブルのすべての列が通常の列と同じように動作します。All the destination table columns will behave just like normal columns. FileTable のセマンティクスはターゲット テーブルの列に関連付けられません。They will not have any FileTable semantics associated with them.

トリガーと FileTableTriggers and FileTables

DDL (データ定義言語) トリガーDDL (Data Definition Language) Triggers
DDL トリガーと FileTable の使用については、特別な注意事項はありません。There are no special considerations for DDL triggers with FileTables. FileTable に対する CREATE/ALTER TABLE 操作だけでなく、データベースの作成/変更操作でも、通常の DDL トリガーが起動されます。Normal DDL triggers will fire for Create/Alter database operations as well as CREATE/ALTER TABLE operations for FileTables. トリガーは、EVENTDATA() 関数を呼び出すことによって、DDL コマンド テキストやその他の情報などの実際のイベント データを取得できます。Triggers can retrieve the actual event data that includes the DDL command text and other information by calling the EVENTDATA() function. 新しいイベントや既存の Eventdata スキーマに対する変更はありません。There are no new events or changes to the existing Eventdata schema.

DML (データ操作言語) トリガーDML (Data Manipulation Language) Triggers
トリガーを作成するための DDL 操作において、以下の制限が適用されます。These restrictions will be enforced during the DDL operation to create triggers.

  • FileTable では、DML 操作のための INSTEAD OF トリガーはサポートされません。FileTables will NOT support INSTEAD OF triggers for DML operations. これは、FILESTREAM 列を含むすべてのテーブルに対する既存の制限です。This is an existing restriction on all tables that contain FILESTREAM columns.

  • FileTable では、DML 操作用に AFTER トリガーがサポートされます。FileTables will support AFTER triggers for DML operations.

  • FileTable で定義されたトリガーは、(親 FileTable を含む) すべての FileTable を更新できません。Triggers defined on a FileTable cannot update any FileTables (including the parent FileTable). この制限は、主に、トリガーが同じトランザクション内でファイル システムによって保持されているロックとの間でロックの競合を起こすことを防止するために設定されています。This restriction exists mainly to prevent a trigger from getting into locking conflicts with the locks held by the file system access in the same transaction.

非トランザクション アクセスとトリガーに対するその影響Non-transactional access and its effects on triggers

  • データベースで非トランザクション更新アクセスが許可されている場合は、そのデータベース内の FileTable を含む任意のテーブルで、FILESTREAM データのインプレース更新を行うことができます。When non-transactional update access is allowed in a database, it is possible to do in-place update of the FILESTREAM data in any table, including FileTable in that database. このため、FILESTREAM の内容の前イメージをトリガーで使用できない場合があります。Due to this possibility, the before image of the FILESTREAM contents may not be available for use by the trigger.

  • ファイル システムを介した非トランザクション更新操作のために、SQL Server は内部トランザクションを作成し、CloseHandle 操作をキャプチャします。このトランザクションの一部として、任意の定義済み DML トリガーを起動できます。For non-transactional update operations through File system, SQL Server will create an internal transaction to capture the CloseHandle operation and the any defined DML triggers may be fired as part of that transaction. トリガー内部でトランザクションのロールバックを行うことは可能ですが、FILESTREAM に対する変更はロールバックされません。A rollback such a transaction inside the trigger body, while not prevented, does not roll back the changes done to the FILESTREAM. このようなロールバックによって、FILESTREAM の内容が変更されている場合でも、更新トリガーが起動されないことがあります。Such a rollback may also prevent the Update triggers from being fired, even though the FILESTREAM contents may have been changed.

  • これらの影響以外にも、FileTable のトリガーで、以下の 2 つの動作に対処する必要があります。In addition to these impacts, triggers on FileTables need to deal with couple of additional behaviors

    • ファイル システムを介した FileTable に対する非トランザクション更新操作の場合、FILESTREAM の内容が他の Win32 操作によって排他的にロックされ、トリガー内部からの読み取り/書き込みアクセスができなくなることがあります。In case of non-transactional update operations on FileTable through the File system, it is possible that the FILESTREAM contents may be exclusively locked by other Win32 operations and may not be accessible for read/write through the trigger body. このような場合は、通常、トリガー内部で FILESTREAM の内容にアクセスしようとすると、"共有違反" エラーになります。In such cases, any attempt to access the FILESTREAM contents within the trigger body may give a "Sharing Violation" error. このようなエラーを適切に処理するようにトリガーを設計する必要があります。Triggers should be designed to handle such errors appropriately.

    • (ファイル システム アクセスで許可されている共有モードのために) 他の非トランザクション更新によって FILESTREAM へのアクティブな書き込みが同時に行われることがあるので、FILESTREAM の後イメージが安定しない場合があります。AFTER image of the FILESTREAM may not be stable since in some cases it may be actively being written by other non-transactional updates at the same time (due to the sharing modes permitted in the File system access).

  • Win32 ハンドルの異常終了 (管理者による Win32 ハンドルの明示的な終了、データベースのクラッシュなど) が生じた場合、異常終了した Win32 アプリケーションによって FILESTREAM の内容が変更されていた可能性がありますが、復旧操作中にユーザー トリガーは実行されません。Abnormal termination of Win32 handles, like explicit killing of Win32 handles by an admin OR a database crash, will not execute user triggers during the recovery operations, even though the FILESTREAM content may have been changed by the abnormally terminated Win32 application.

ビューと FileTableViews and FileTables

他のテーブルの場合と同様に、FileTable にもビューを作成できます。A view can be created on a FileTable as on any other table. ただし、FileTable にビューを作成する場合は、次の点に注意してください。However the following considerations apply to a view created on a FileTable:

  • ビューには FileTable のセマンティクスがありません。View will not have any FileTable semantics. つまり、(ファイル属性列を含めて) ビュー内の列は、特殊なセマンティクスを持たない通常のビュー列と同じように動作します。これは、ファイルやディレクトリを表す行の場合も同じです。i.e. the columns in the view (including File Attribute columns) behave just like normal view columns without any special semantics and same is true for rows representing Files/directories.

  • ビューは、"更新可能なビュー" セマンティクスに基づいて更新できますが、基になるテーブルの制約により、テーブル内の場合と同様に更新が拒否されることがあります。View may be updateable based on the "updateable view" semantics, but the underlying table constraints can reject the updates just like in the table.

  • ビューの明示的な列にファイル パスを追加することにより、ファイルのファイル パスをビューに視覚化することができます。File path for a file can be visualized in the view by adding it as an explicit column in the view. 次に例を示します。For example:

    CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents

インデックス付きビューIndexed Views
現在インデックス付きのビューには、FILESTREAM 列に依存する FILESTREAM 列、計算列、または保存される計算列を含めることはできません。Currently Indexed views cannot include FILESTREAM columns or computed/persisted computed columns that depend on the FILESTREAM columns. この動作は、FileTable に定義されているビューでも同じです。This behavior remains unchanged with views defined on the FileTable also.

スナップショット分離と FileTableSnapshot Isolation and FileTables

Read Committed スナップショット分離 (RCSI) およびスナップショット分離 (SI) は、データの更新操作が行われているときでもリーダーによるデータのスナップショットの利用を可能にする機能に依存します。Read Committed Snapshot Isolation (RCSI) and Snapshot Isolation (SI) rely on the ability to have a snapshot of the data available for readers even when update operations are happening on the data. ただし、FileTable では、Filestream データに対する非トランザクション書き込みアクセスが可能です。However FileTables allow non-transactional write access to Filestream data. その結果、FileTable を含むデータベースでのこれらの機能の使用に関して、次の制限が適用されます。As a result, the following restrictions apply to the use of these features in databases that contain FileTables:

  • FileTable を含むデータベースは、RCSI/SI を有効にするように変更できます。A database that contains FileTables can be altered to enable RCSI/SI.

  • データベースに対する non_transactional アクセスを FULL に設定した場合、RCSI または SI で実行されるトランザクションは次のように動作します。When non_transactional access is set to FULL for the database, then a transaction running under RCSI or SI has the following behavior:

    • FileTable file_stream 列に対するすべての Transact-SQLTransact-SQL 読み取りは失敗します。Any Transact-SQLTransact-SQL reads of the FileTable file_stream column fail. 列に対する INSERT および UPDATE は、file_stream 列からの読み取りを行わない限り正常に実行されます。INSERT and UPDATE to the column still succeed, as long as they do not read from the file_stream column.

    • Transact-SQLTransact-SQL ステートメントに READCOMMITTEDLOCK テーブル ヒントが指定されている場合、読み取りは正常に実行されます。このとき、行のバージョン管理の代わりに、行のロックが設定されます。If the Transact-SQLTransact-SQL statement specifies READCOMMITTEDLOCK table hints, the reads succeed, and take locks on the rows, rather than use row versioning.

    • トランザクション Win32 FileStream を開く要求も失敗します。Transacted Win32 FileStream open requests also fail.

    • 非トランザクション FileTable Win32 アクセスは正常に実行されます。Non-transacted FileTable Win32 access succeeds. FileTable によって実行されるすべての内部クエリは影響を受けません。All internal queries done by FileTable are not affected.

    • フルテキスト インデックス作成は、どのデータベース オプション (READ_COMMITTED_SNAPSHOT または ALLOW_SNAPSHOT_ISOLATION) が指定された場合でも常に正常に実行されます。Fulltext indexing always succeeds, no matter what the database options are (READ_COMMITTED_SNAPSHOT or ALLOW_SNAPSHOT_ISOLATION).

読み取り可能なセカンダリ データベースReadable Secondary Databases

前のセクション「 スナップショット分離と FileTable」で説明したとおり、読み取り可能なデータベースには、スナップショットに対するのと同じ考慮事項が適用されます。The same considerations apply to readable secondary databases as to snapshots, as described in the preceding section, Snapshot Isolation and FileTables.

包含データベースと FileTableContained Databases and FileTables

FileTable 機能が依存する FILESTREAM 機能では、データベースの外部での構成が一部必要となります。The FILESTREAM feature on which the FileTable feature depends requires some configuration outside of the database. そのため、FILESTREAM または FileTable を使用するデータベースは完全包含ではありません。Therefore a database that uses FILESTREAM or FileTable is not fully contained.

包含データベースの特定の機能 (包含ユーザーなど) を使用する場合は、データベースの包含を PARTIAL に設定します。You can set database containment to PARTIAL if you want to use certain features of contained databases, such as contained users. ただし、この場合、一部のデータベース設定はデータベースに含まれないため、データベースを移動するときに自動的には移動されないことに注意してください。In this case, however, you must be aware that some of the database settings are not contained in the database and are not automatically moved when the database moves.

参照See Also

FileTable の管理Manage FileTables