FILESTREAM と SQL Server のその他の機能の使用

ここでは、FILESTREAM データがファイル システムに存在することに関連して、FILESTREAM を SQL Server の次の機能と共に使用する際の注意事項、ガイドライン、および制限事項について説明します。

  • SQL Server Integration Services (SSIS)

  • 分散クエリおよびリンク サーバー

  • データベース スナップショット

  • レプリケーション

  • ログ配布

  • データベース ミラーリング

  • フルテキスト

  • フェールオーバー クラスタリング

  • SQL Server Express

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) では、DT_IMAGE SSIS データ型を使用して、他の BLOB データと同様にデータ フローの FILESTREAM データを処理します。

列インポート変換を使用すると、ファイル システムから FILESTREAM 列にファイルを読み込むことができます。また、列エクスポート変換を使用すると、FILESTREAM 列からファイル システム内の別の場所にファイルを抽出できます。

分散クエリおよびリンク サーバー

分散クエリおよびリンク サーバーを使用して FILESTREAM データを操作するには、FILESTREAM データを varbinary(max) データとして扱います。4 部構成の名前を使用する分散クエリでは、その名前がローカル サーバーを指す場合でも、FILESTREAM PathName() 関数を使用することはできません。ただし、OPENQUERY() を使用するパススルー クエリの内側のクエリで PathName() を使用することはできます。

データベース スナップショット

SQL Server では、FILESTREAM ファイル グループのデータベース スナップショットをサポートしていません。CREATE DATABASE ON 句に FILESTREAM ファイル グループが含まれていると、ステートメントが失敗してエラーが発生します。

FILESTREAM を使用している場合は、標準の (FILESTREAM ファイル グループではない) ファイル グループのデータベース スナップショットを作成できます。FILESTREAM ファイル グループは、それらのデータベース スナップショットに対してオフラインとしてマークされます。

データベース スナップショットの FILESTREAM テーブルに対して実行する SELECT ステートメントには、FILESTREAM 列を含めないようにする必要があります。FILESTREAM 列が含まれていると、次のエラー メッセージが返されます。

Could not continue scan with NOLOCK due to data movement.

レプリケーション

パブリッシャーで FILESTREAM 属性が有効になっている varbinary(max) 列は、FILESTREAM 属性を含めてサブスクライバーにレプリケートすることも、含めずにレプリケートすることもできます。列をレプリケートする方法を指定するには、[アーティクルのプロパティ - <Article>] ダイアログ ボックスを使用するか、sp_addarticle または sp_addmergearticle@schema_option パラメーターを使用します。スキーマ オプションの設定方法の詳細については、「スキーマ オプションを指定する方法 (SQL Server Management Studio)」および「スキーマ オプションを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。FILESTREAM 属性を持たない varbinary(max) 列にレプリケートされるデータは、このデータ型の制限 (2 GB) を超えないようにする必要があります。この制限を超えると実行時エラーが発生します。データを SQL Server 2005 にレプリケートする場合を除き、FILESTREAM 属性をレプリケートすることをお勧めします。指定したスキーマ オプションにかかわらず、FILESTREAM 列を含むテーブルの SQL Server 2000 サブスクライバーへのレプリケートはサポートされていません。以前のバージョンの SQL Server にデータをレプリケートする方法の詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」を参照してください。

注意

SQL Server 2008 から SQL Server 2005 サブスクライバーにレプリケートできるデータ値の大きさは、最大 256 MB に制限されています。詳細については、「最大容量仕様」を参照してください。

トランザクション レプリケーションに関する注意点

トランザクション レプリケーション用にパブリッシュされるテーブルで FILESTREAM 列を使用する場合は、次のことに注意してください。

  • FILESTREAM 属性を持つ列を含むテーブルがある場合は、sp_addpublication@sync_method プロパティに対して値 database snapshot および database snapshot character を使用することはできません。

  • max text repl size オプションは、レプリケーション用にパブリッシュされる列に挿入できるデータの最大サイズを指定します。このオプションを使用すると、レプリケートされる FILESTREAM データのサイズを制御できます。詳細については、「max text repl size オプション」を参照してください。

  • FILESTREAM 属性をレプリケートするスキーマ オプションを指定しても、FILESTREAM で必要な uniqueidentifier 列をフィルターで除外したり、この列の UNIQUE 制約をレプリケートしないように指定したりすると、FILESTREAM 属性はレプリケートされません。その列は、varbinary(max) 列としてのみレプリケートされます。

マージ レプリケーションに関する注意点

マージ レプリケーション用にパブリッシュされるテーブルで FILESTREAM 列を使用する場合は、次のことに注意してください。

  • マージ レプリケーションと FILESTREAM では、テーブルの各行を識別するために uniqueidentifier データ型の列が必要になります。マージ レプリケーションでは、この列がテーブルに含まれていなければ自動的に追加されます。またその列で、ROWGUIDCOL プロパティと、NEWID() または NEWSEQUENTIALID() の既定値が設定されている必要があります。FILESTREAM ではさらに、この列に対して UNIQUE 制約が定義されている必要もあります。これらの要件により、次のような結果になります。

    • 既にマージ レプリケーション用にパブリッシュされているテーブルに FILESTREAM 列を追加する場合は、uniqueidentifier 列に UNIQUE 制約があることを確認してください。UNIQUE 制約がない場合は、パブリケーション データベースのテーブルに名前付き制約を追加します。既定では、マージ レプリケーションによってこのスキーマ変更がパブリッシュされ、各サブスクリプション データベースに適用されます。スキーマ変更の詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。

      上の説明に従って手動で UNIQUE 制約を追加した場合は、マージ レプリケーションを削除する際に先に UNIQUE 制約を削除する必要があります。そうしないと、レプリケーションの削除に失敗します。

    • NEWID() より NEWSEQUENTIALID() の方がパフォーマンスが高いため、マージ レプリケーションでは既定で NEWSEQUENTIALID() が使用されます。マージ レプリケーション用にパブリッシュされるテーブルに uniqueidentifier 列を追加する場合は、NEWSEQUENTIALID() を既定値として指定してください。

  • マージ レプリケーションには、ラージ オブジェクト型のレプリケーションを最適化する機能が含まれています。この機能は、sp_addmergearticle@stream_blob_columns パラメーターによって制御されます。FILESTREAM 属性をレプリケートするスキーマ オプションを設定すると、@stream_blob_columns パラメーターの値が true に設定されます。この値をオーバーライドするには、sp_changemergearticle を使用します。このストアド プロシージャを使用すると、@stream_blob_columns を false に設定できます。既にマージ レプリケーション用にパブリッシュされているテーブルに FILESTREAM 列を追加する場合は、sp_changemergearticle を使用してこのオプションを true に設定することをお勧めします。

  • アーティクルが作成された後に FILESTREAM のスキーマ オプションを有効にすると、FILESTREAM 列のデータが 2 GB を超えていて、レプリケーションの間に競合が発生した場合に、レプリケーションが失敗します。この状況が発生することが予想される場合は、いったんテーブル アーティクルを削除して、適切な FILESTREAM スキーマ オプションを有効にした状態で再作成することをお勧めします。

  • マージ レプリケーションでは、Web 同期を使用して FILESTREAM データを HTTPS 接続経由で同期させることができます。その際には、データが Web 同期の制限 (50 MB) に収まっている必要があります。データがこの制限を超えていると、実行時エラーが発生します。

ログ配布

ログ配布は FILESTREAM をサポートしています。プライマリ サーバーとセカンダリ サーバーの両方で SQL Server 2008 以降のバージョンが実行されていて、FILESTREAM が有効になっている必要があります。

データベース ミラーリング

データベース ミラーリングは FILESTREAM をサポートしていません。プリンシパル サーバー上に FILESTREAM ファイル グループを作成することはできません。FILESTREAM ファイル グループを含むデータベースに対してデータベース ミラーリングを構成することはできません。

フルテキスト インデックス作成

フルテキスト インデックス作成では、FILESTREAM 列が varbinary(max) 列と同じように処理されます。FILESTREAM テーブルに、各 FILESTREAM BLOB のファイル名拡張子を含む列が含まれている必要があります。詳細については、「varbinary(max) 列および xml 列のクエリ (フルテキスト検索)」、「フルテキスト検索フィルター」、「フルテキスト インデックス作成とクエリのプロセス」、および「sys.fulltext_document_types (Transact-SQL)」を参照してください。

フルテキスト エンジンは、FILESTREAM BLOB の内容のインデックスを作成します。イメージなど、インデックスを作成しても役に立たないファイルもあります。FILESTREAM BLOB が更新されると、インデックスが再作成されます。

フェールオーバー クラスタリング

フェールオーバー クラスタリングでは、FILESTREAM ファイル グループが共有ディスク上に配置されている必要があります。また、FILESTREAM インスタンスをホストするクラスターの各ノードで FILESTREAM が有効になっている必要もあります。詳細については、「フェールオーバー クラスタで FILESTREAM を設定する方法」を参照してください。

SQL Server Express

SQL Server Express は FILESTREAM をサポートしています。FILESTREAM データ コンテナーは 4 GB のデータベース サイズの制限に含まれません。

関連項目

その他の技術情報