次の方法で共有


FileTable と他の SQL Server 機能との互換性

FileTable が SQL Server の他の機能と連携する方法について説明します。

AlwaysOn 可用性グループと FileTable

FILESTREAM または FileTable データを含むデータベースが AlwaysOn 可用性グループに属している場合:

  • FileTable 機能は、Always On 可用性グループによって部分的にサポートされています。 フェールオーバー後は、プライマリ レプリカで FileTable データにアクセスできますが、読み取り可能なセカンダリ レプリカでは FileTable データにアクセスできません。

    フェールオーバー後にすべての FILESTREAM 機能がサポートされていることに注意してください。 FILESTREAM データは、読み取り可能なセカンダリ レプリカと新しいプライマリの両方でアクセスできます。

  • FILESTREAM および FileTable 関数は、コンピューター名ではなく仮想ネットワーク名 (VNN) のやり取りを行います。 これらの関数の詳細については、「 Filestream 関数と FileTable 関数 (Transact-SQL)」を参照してください。

  • ファイル システム API を介した FILESTREAM または FileTable データへのすべてのアクセスでは、コンピューター名ではなく VNN を使用する必要があります。 詳細については、「 FILESTREAM と FileTable with AlwaysOn 可用性グループ (SQL Server)」を参照してください。

パーティション分割とFileTable

FileTable ではパーティション分割はサポートされていません。 複数の FILESTREAM ファイル グループのサポートにより、(SQL 2008 FILESTREAMs とは異なり) ほとんどのシナリオでパーティション分割を行わなくても、純粋なスケールアップの問題を処理できます。

レプリケーションと FileTable

FileTable では、レプリケーションと関連機能 (トランザクション レプリケーション、マージ レプリケーション、変更データ キャプチャ、変更追跡など) はサポートされていません。

トランザクション セマンティクスと FileTable

Windows アプリケーション
Windows アプリケーションではデータベース トランザクションが認識されないため、Windows 書き込み操作ではデータベース トランザクションの ACID プロパティは提供されません。 そのため、Windows Update の操作では、トランザクションのロールバックと回復は実行できません。

Transact-SQL アプリケーション
FileTable の FILESTREAM (file_stream) 列で動作する TSQL アプリケーションの分離セマンティクスは、通常のユーザー テーブルの FILESTREAM データ型と同じです。

クエリ通知と FileTable

クエリには、FileTable の FILESTREAM 列、WHERE 句、またはクエリの他の部分への参照を含めることはできません。

SELECT INTO と FileTable

FileTable の SELECT INTO ステートメントは、(通常のテーブルの FILESTREAM 列と同様に) 作成された変換先テーブルに FileTable セマンティクスを伝達しません。 すべての変換先テーブル列は、通常の列と同じように動作します。 それらには FileTable のセマンティクスは一切関連付けられていません。

トリガーと FileTable

DDL (データ定義言語) トリガー
FileTable を使用した DDL トリガーに関する特別な考慮事項はありません。 通常の DDL トリガーは、データベースの作成/変更操作と、FileTable の CREATE/ALTER TABLE 操作に対して発生します。 トリガーは、EVENTDATA() 関数を呼び出すことによって、DDL コマンド テキストやその他の情報を含む実際のイベント データを取得できます。 既存の Eventdata スキーマに対する新しいイベントや変更はありません。

DML (データ操作言語) トリガー
これらの制限は、トリガーを作成するための DDL 操作中に適用されます。

  • FileTable は、DML 操作の INSTEAD OF トリガーをサポートしません。 これは、FILESTREAM 列を含むすべてのテーブルに対する既存の制限です。

  • FileTable は、DML 操作の AFTER トリガーをサポートします。

  • FileTable で定義されているトリガーは、FileTable (親 FileTable を含む) を更新できません。 この制限は、主に、トリガーが同じトランザクション内のファイル システム アクセスによって保持されているロックとのロック競合に陥らないようにするために存在します。

非トランザクション アクセスとそのトリガーへの影響

  • データベースで非トランザクション更新アクセスが許可されている場合、そのデータベースの FileTable を含め、任意のテーブルの FILESTREAM データをインプレース更新することができます。 このような可能性があるため、FILESTREAM コンテンツの前のイメージをトリガーで使用できない場合があります。

  • ファイル システムを介した非トランザクション更新操作の場合、SQL Server は CloseHandle 操作をキャプチャする内部トランザクションを作成し、定義されているすべての DML トリガーがそのトランザクションの一部として起動される可能性があります。 このようなトランザクションをトリガー本体内でロールバックしても、妨げることはできませんが、FILESTREAM に対して行われた変更はロールバックされません。 このようなロールバックにより、FILESTREAM の内容が変更された可能性がある場合でも、Update トリガーが起動されない場合があります。

  • これらの影響に加えて、FileTable のトリガーは、いくつかの追加の動作に対処する必要があります

    • FileTable に対する非トランザクション更新操作がファイル システム経由で行われる場合、FILESTREAM の内容が他の Win32 操作によって排他的にロックされ、トリガー本体を介して読み取り/書き込みにアクセスできない可能性があります。 このような場合、トリガー本体内の FILESTREAM コンテンツにアクセスしようとすると、"共有違反" エラーが発生する可能性があります。 トリガーは、このようなエラーを適切に処理するように設計する必要があります。

    • FILESTREAM の AFTER イメージは、(ファイル システム アクセスで許可されている共有モードにより) 他の非トランザクション更新プログラムによって同時にアクティブに書き込まれる可能性があるため、安定しない場合があります。

  • 管理者による Win32 ハンドルの明示的な強制終了やデータベースのクラッシュなど、Win32 ハンドルの異常終了は、FILESTREAM コンテンツが異常終了した Win32 アプリケーションによって変更された可能性がある場合でも、回復操作中にユーザー トリガーを実行しません。

ビューと FileTable

閲覧数
ビューは、他のテーブルと同様に FileTable に作成できます。 ただし、FileTable で作成されたビューには、次の考慮事項が適用されます。

  • ビューには FileTable セマンティクスはありません。 つまり、ビュー内の列 (File Attribute 列を含む) は、特別なセマンティクスを持たない通常のビュー列と同様に動作し、ファイル/ディレクトリを表す行にも同じ動作をします。

  • ビューは "更新可能なビュー" セマンティクスに基づいて更新可能な場合がありますが、基になるテーブル制約では、テーブルと同様に更新を拒否できます。

  • ファイルのファイル パスは、ビューに明示的な列として追加することで、ビューで視覚化できます。 例えば次が挙げられます。

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

インデックス付きビュー
現在、インデックス付きビューには、FILESTREAM 列または FILESTREAM 列に依存する計算/永続化された計算列を含めることはできません。 この動作は、FileTable で定義されたビューでも変更されません。

スナップショット分離とファイルテーブル

Read Committed Snapshot Isolation (RCSI) と Snapshot Isolation (SI) は、データに対して更新操作が行われている場合でも、リーダーが使用できるデータのスナップショットを作成する機能に依存します。 ただし、FileTable では、Filestream データへの非トランザクション書き込みアクセスが許可されます。 その結果、FileTable を含むデータベースでのこれらの機能の使用には、次の制限が適用されます。

  • FileTable を含むデータベースを変更して、RCSI/SI を有効にすることができます。

  • データベースの非トランザクションアクセスが FULL に設定されている場合、RCSI または SI で実行されるトランザクションの動作は次のようになります。

    • FileTable file_stream 列の Transact-SQL 読み取りは失敗します。 列に対する INSERT と UPDATE は、file_stream列から読み取らない限り、引き続き成功します。

    • Transact-SQL ステートメントで READCOMMITTEDLOCK テーブル ヒントが指定されている場合、読み取りは成功し、行のバージョン管理を使用するのではなく、行のロックを取得します。

    • Transacted Win32 FileStream オープン要求も失敗します。

    • 非トランザクションのFileTable Win32アクセスが成功する。 FileTable によって実行されるすべての内部クエリは影響を受けません。

    • データベース オプション (READ_COMMITTED_SNAPSHOTまたはALLOW_SNAPSHOT_ISOLATION) に関係なく、フルテキスト インデックス作成は常に成功します。

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

前のセクション「スナップショット分離 」と「FileTables」で説明したように、読み取り可能なセカンダリ データベースにもスナップショットと同じ考慮事項が適用されます。

コンテインド データベースとファイルテーブル

FileTable 機能が依存する FILESTREAM 機能には、データベースの外部で何らかの構成が必要です。 そのため、FILESTREAM または FileTable を使用するデータベースは完全には含まれません。

包含データベースの特定の機能 (包含ユーザーなど) を使用する場合は、データベース包含を PARTIAL に設定できます。 ただし、この場合、データベース設定の一部はデータベースに含まれていないので、データベースの移動時に自動的に移動されないことに注意する必要があります。

こちらもご覧ください

FileTable の管理