FILESTREAM と SQL Server のその他の機能の使用
ここでは、FILESTREAM データがファイル システムに存在することに関連して、FILESTREAM を SQL Server の次の機能と共に使用する際の注意事項、ガイドライン、および制限事項について説明します。
データベース スナップショット
レプリケーション
ログ配布
データベース ミラーリング
フルテキスト
フェールオーバー クラスタリング
SQL Server Express
データベース スナップショット
SQL Server では、FILESTREAM ファイル グループのデータベース スナップショットをサポートしていません。CREATE DATABASE ON 句に FILESTREAM ファイル グループが含まれていると、ステートメントが失敗してエラーが発生します。
FILESTREAM を使用している場合は、標準の (FILESTREAM ファイル グループではない) ファイル グループのデータベース スナップショットを作成できます。FILESTREAM ファイル グループは、それらのデータベース スナップショットに対してオフラインとしてマークされます。
データベース スナップショットの FILESTREAM テーブルに対して実行する SELECT ステートメントには、FILESTREAM 列を含めないようにする必要があります。FILESTREAM 列が含まれていると、次のエラー メッセージが返されます。
データが移動されたので NOLOCK を使用したスキャンは続行できませんでした。
レプリケーション
パブリッシャで 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 のデータベース サイズの制限に含まれません。