レプリケーション トポロジにおける複数バージョンの SQL Server の使用
レプリケーションでは、複数のバージョンの SQL Server にデータをレプリケートできます。このトピックでは、次の項目について説明します。
サポートされる SQL Server バージョン
以前のバージョンと SQL Server 2008 のデータ型のマッピング
以前のバージョンからレプリケートされたデータベースの復元
マージ パブリケーションの互換性レベル
SQL Server Express および SQL Server Compact 3.5 SP1 にデータをレプリケートする方法については、「SQL Server Express へのデータのレプリケート」および「SQL Server Compact へのデータのレプリケート」を参照してください。SQL Server の各エディションでサポートされる機能については、「SQL Server 2008 の各エディションがサポートする機能」を参照してください。
サポートされる SQL Server のバージョン
SQL Server 2008 のレプリケーション トポロジには、SQL Server 2000 と SQL Server 2005 の両方が参加できます。SQL Server 2000 の最小バージョンは Service Pack 3 (SP3) です。SQL Server 2005 の最小バージョンは Service Pack 2 (SP2) です。
異なるバージョンの SQL Server 間でレプリケートを行う場合は、通常、使用している最も古いバージョンの機能しか使用できません。たとえば、ディストリビュータを SQL Server 2008 のインスタンスにアップグレードしても、SQL Server 2005 のインスタンスを実行するパブリッシャと、SQL Server 2000 のインスタンスを実行するサブスクライバがある場合は、SQL Server 2000 の一般的な機能とレプリケーション機能しか使用できません。
注意 |
---|
SQL Server のディスク上ストレージ形式は、64 ビット環境でも 32 ビット環境でも同じであるため、レプリケーション トポロジは、32 ビット環境で実行されているサーバー インスタンスと 64 ビット環境で実行されているサーバー インスタンスを組み合わせることができます。 |
どの種類のレプリケーションでも、ディストリビュータのバージョンがパブリッシャのバージョン以上である必要があります (多くの場合、ディストリビュータはパブリッシャと同じインスタンスです)。
トランザクション レプリケーションの場合、トランザクション パブリケーションのサブスクライバは、2 つのパブリッシャ バージョンのうちどちらでも使用できます。たとえば、SQL Server 2000 のパブリッシャには SQL Server 2008 のサブスクライバを設定することができ、SQL Server 2008 のパブリッシャには SQL Server 2000 のサブスクライバを設定することができます。
マージ レプリケーションの場合、マージ パブリケーションのサブスクライバは、パブリッシャのバージョン以前であればどのバージョンでも使用できます。以前のバージョンに対する互換性の詳細については、このトピックの「マージ パブリケーションの互換性レベル」を参照してください。SQL Server の各種エディションでサポートされるレプリケーション機能の詳細については、「SQL Server 2008 の各エディションがサポートする機能」を参照してください。
SQL Server 2005 または SQL Server 2008 のディストリビュータと SQL Server 2000 を実行するパブリッシャの使用
SQL Server 2005 および SQL Server 2008 は、SQL Server 2000 を実行するパブリッシャのリモート ディストリビュータとして使用できます。この場合、エージェント プロパティを変更するには、ディストリビュータで次のストアド プロシージャを実行します。これらのプロシージャを使用すると、SQL Server 2005 で導入されたプロパティを変更できます。
パブリッシャとディストリビュータが SQL Server 2000 を実行している場合は、sp_changedistpublisher と sp_changesubscriber を使用して、エージェントが接続を行う際に使用する資格情報を変更できます。ただし、ディストリビュータを SQL Server 2008 にアップグレードすると、これらのプロシージャを使用して既存のエージェント ジョブで使用されている資格情報を変更できなくなります。これらのプロシージャは、プロシージャの呼び出し後に作成されるエージェント ジョブに影響します。既存のエージェント ジョブの資格情報を変更するには、前述の 4 つのプロシージャのいずれかを呼び出します。
以前のバージョンに対する新しいデータ型のマッピング
SQL Server 2008 と SQL Server 2005 は、複数の新しいデータ型をサポートしています。SQL Server 2005 または SQL Server 2008 ディストリビュータからのプッシュ サブスクリプションを使用する場合は、次の表に示すように、これらの新しいデータ型がサブスクライバ側の互換データ型にマッピングされます。SQL Server の以前のバージョンを実行するサブスクライバに新しいデータ型をレプリケートする場合は、そのデータ型が適切にマッピングされていることを確認する必要があります。
マージ パブリケーションのアーティクルには既定でマッピングが実行されますが、スナップショット パブリケーションまたはトランザクション パブリケーションのアーティクルには実行されません。マージ パブリケーションの場合、データ型のマッピング方法は、パブリケーションの互換性レベルで決まります。たとえば、列が geography 型で互換性レベルが 90RTM である場合、型は varbinary(max) にマッピングされます。互換性レベルが 80RTM の場合、型は image にマッピングされます。
マッピング動作は、sp_addarticle および sp_addmergearticle の @schema\_option パラメータによって制御されます。
スキーマ オプションの設定方法の詳細については、「スキーマ オプションを指定する方法 (SQL Server Management Studio)」および「スキーマ オプションを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
SQL Server 2008 のデータ型 |
SQL Server 2005 のデータ型 |
SQL Server 2000 のデータ型 |
---|---|---|
共通言語ランタイム ユーザー定義型 (UDT): 8,000 バイト以下 |
UDT |
image |
UDT: 8,000 バイト超1 |
varbinary(max) |
image |
date2, 3 |
nvarchar(10) |
nvarchar(10) |
datetime22, 3 |
nvarchar(27) |
nvarchar(27) |
datetimeoffset2, 3 |
nvarchar(34) |
nvarchar(34) |
FILESTREAM属性1, 4 |
varbinary(max) |
サポートされていません |
geography および geometry1, 3 |
varbinary(max) |
image |
hierarchyid1, 5 |
varbinary(max) |
image |
nvarchar(max) |
nvarchar(max) |
ntext |
time2, 3 |
nvarchar(16) |
nvarchar(16) |
varchar(max) |
varchar(max) |
text |
varbinary(max) |
varbinary(max) |
image |
xml |
xml |
ntext |
1 更新可能なサブスクリプションを含むトランザクション パブリケーションの場合は、UDT、FILESTREAM、geography、geometry、hierarchyid の各型のマッピングがサポートされません。これらの型は、すべての更新サブスクライバが SQL Server 2008 以降のバージョンを実行している場合にのみ使用してください。
2 レプリケーションでは、サブスクライバで挿入されたデータの形式がチェックされません。このため、挿入されたデータが date、datetime2、datetimeoffset、time の各型の列の形式として正しいことをアプリケーションで確認する必要があります。通常、この処理には制約を使用します。データの形式が正しくない場合は、パブリッシャでの挿入が失敗します。
3SQL Server Compact 3.5 サブスクライバは、これらの型をサブスクライバにレプリケートした後に変換します。SQL Server Compact 3.5 のデータ型マッピングの詳細については、SQL Server Compact 3.5 のマニュアルを参照してください。
geography または geometry 型の列を varbinary(max) または image にマップする場合、これらの列の既定の制約をレプリケートすることはできません。この結果は、次のようになります。
パブリッシャに既定の制約が既にある場合は、制約を削除するか、レプリケートしないように指定します。制約をレプリケートしないように指定するには、既定の制約のアーティクル スキーマ オプションを使用します。
[既定値の仕様のコピー] で [False] の値を選択します。詳細については、「スキーマ オプションを指定する方法 (SQL Server Management Studio)」を参照してください。
0x800 スキーマ オプションを無効にします。詳細については、「スキーマ オプションを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
パブリッシャで既定の制約を追加する場合は、まずスキーマの変更をレプリケートしないように指定します。詳細については、「スキーマの変更をレプリケートする方法 (SQL Server Management Studio)」および「スキーマの変更をレプリケートする方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
4 FILESTREAM は varbinary(max) 列の属性です。レプリケートされたテーブルでの FILESTREAM 列の使用方法については、「FILESTREAM と SQL Server のその他の機能の使用」の「レプリケーション」を参照してください。FILESTREAM 属性を持つ列は、キャラクタ モードのスナップショットを使用するパブリケーションに含めることができません。
5hierarchyid 型の列がサポートされるかどうかは、レプリケーションの種類および使用される SQL Server のバージョンによって決まります。詳細については、「hierarchyid (Transact-SQL)」の「レプリケートされたテーブルでの hierarchyid 列の使用」を参照してください。マージ レプリケーションの場合、パブリケーションの互換性レベルが 100RTM でキャラクタ モードのスナップショットが使用されている場合、hierarchyid が image にマッピングされます。
XML データ型のレプリケート
XML データ型を SQL Server Compact 3.5 SP1 にレプリケートする場合、マージ レプリケーションはそれらの型を Ntext にマップします。SQL Server 2008 の XML データは、UTF-16 エンコード用のプレフィックス バイトを持ちます。これらのバイトは、マージ レプリケーションを使用して SQL Server から SQL Server Compact 3.5 SP1 にレプリケートするときに維持されます。これらのプレフィックス バイトは、SQL Server Compact 3.5 SP1 データベースの Ntext 列を表示したときに、SQL Server Management Studio によって認識されません。したがって、これらのバイトはガベージ文字として表示されます。
SQL Server 2008 の XML スキーマ コレクションは更新されています。このことは、XML スキーマにバインドされた XML 列を SQL Server 2008 から SQL Server 2005 にレプリケートするときに、影響を与えます。
タイムゾーンは、SQL Server 2008 の日付、時刻、および日時の XML スキーマ値では必須ではありません。つまり、SQL Server 2008 パブリッシャ XML 列でタイムゾーンが指定されていない場合、SQL Server 2005 サブスクライバに変更は適用されません。これは、SQL Server 2005 ではタイムゾーンが指定されていることが必須だからです。
SQL Server 2008 パブリッシャの日付、時刻、および日時の XML スキーマ型の値に関するタイムゾーン情報は、SQL Server 2005 の UTC-0 タイムゾーンに変換されます。これは、タイムゾーン インジケータ Z で表されます。
SQL Server 2008 の XML スキーマの日付、時刻、および日時の型は、より長い有効桁数をサポートします。したがって、これらの値は SQL Server 2005 にレプリケートするときに丸められます。
XML スキーマの日付または日時の値を SQL Server 2005 から SQL Server 2008 にレプリケートする場合、負の年を持つ値は SQL Server 2008 でサポートされないため、SQL Server 2008 には適用されません。
このような状況では、レプリケーション エージェントの sp_table_validation メソッドと Validate メソッドが失敗する可能性があります。詳細については、「型指定された XML と型指定されていない XML の比較」の「SQL Server 2005 から SQL Server 2008 への型指定された XML のアップグレード」を参照してください。
圧縮されたデータのパブリッシュ
SQL Server 2008 は、テーブルとインデックスの両方で行とページの両方の圧縮をサポートしています。圧縮されたデータに対するレプリケーションのサポートの詳細については、「圧縮されたテーブルおよびインデックスの作成」の「レプリケーションへの圧縮の影響」を参照してください。
以前のバージョンからレプリケートされたデータベースの復元
以前のバージョンでレプリケートされたデータベースのバックアップを復元する際に、レプリケーション設定を維持することができます。バックアップを作成したサーバーおよびデータベースと同じ名前のサーバーとデータベースに対してバックアップを復元する場合、または、KEEP_REPLICATION オプションを指定した場合は、レプリケーション設定が維持されます。詳細については、「RESTORE (Transact-SQL)」を参照してください。現在の製品レベルでレプリケーションをサポートするには、データベースを復元した後に、sp_vupgrade_replication を実行してスキーマとシステム データをアップグレードします。
以前のバージョンで作成したバックアップを復元した場合もレプリケーションを維持することは可能ですが、アップグレード オプションとして使用されることはまれです。製品アップグレードの一環として、レプリケートされたデータベースをアップグレードするか、データベースおよびレプリケーション構成を一連のスクリプトを使って再構築するのが一般的です。
マージ パブリケーションの互換性レベル
マージ レプリケーションでは、パブリケーションの互換性レベルを使用して、所定のデータベース内のパブリケーションで使用できる機能を判断します。この値の範囲は、80RTM (Service Pack がインストールされていない SQL Server 2000) ~ 100RTM (SQL Server 2008) です。互換性レベルは、次のいずれかの方法で指定します。
sp_addmergepublication の @publication\_compatibility\_level パラメータを使用。詳細については、「マージ パブリケーションに互換性レベルを設定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
パブリケーションの新規作成ウィザードの [サブスクライバの種類] ページ。このウィザードの実行方法の詳細については、「パブリケーションを作成してアーティクルを定義する方法 (SQL Server Management Studio)」を参照してください。
[パブリケーション プロパティ - <Publication>] ダイアログ ボックスの [全般] ページ。詳細については、「マージ パブリケーションの互換性レベルを設定する方法 (SQL Server Management Studio)」を参照してください。
次の機能では、90RTM 以上の互換性レベルが必要です。
論理レコード。詳細については、「論理レコードによる関連行への変更のグループ化」を参照してください。
サブスクライバのアップロード オプション。詳細については、「ダウンロード専用アーティクルを使用したマージ レプリケーションのパフォーマンス最適化」を参照してください。
重複しないパーティション。詳細については、「パラメータ化された行フィルタ」を参照してください。
ビジネス ロジック ハンドラ。詳細については、「マージ同期中のビジネス ロジックの実行」を参照してください。
ALTER <OBJECT> ステートメントを使用したスキーマ変更。詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。
次の機能は、互換性レベルには依存しませんが、SQL Server 2005 以降のバージョンに付属のマージ エージェントを必要とします。以前のバージョンの SQL Server 関数を実行するサブスクライバは、この機能が無効になっているものとして動作します。
事前計算されたパーティション。詳細については、「事前計算済みパーティションによるパラメータ化されたフィルタのパフォーマンス最適化」を参照してください。
Web による同期。詳細については、「マージ レプリケーションの Web 同期」を参照してください。
並列フェーズ エージェント (マージ エージェントに対して -ParallelUploadDownload を指定)。詳細については、「レプリケーション マージ エージェント」を参照してください。
パラメータ化されたフィルタを使用するパブリケーションのスナップショット機能。この機能には、次の特長があります。
パーティション用にスナップショットが使用できない場合、サブスクライバがスナップショットを要求できる。
管理者がスナップショットの事前生成や生成スケジュールの設定を実行できる。
FTP を使用して、パラメータ化されたスナップショットを配信できる。
詳細については、「パラメータ化されたフィルタを使用したマージ パブリケーションのスナップショット」および「FTP によるスナップショットの転送」を参照してください。
レプリケーション モニタで改善された履歴のログ記録およびアーティクル レベルの統計。詳細については、「サブスクリプションの情報を表示し、タスクを実行する方法 (レプリケーション モニタ)」を参照してください。
SQL Server 2008 におけるパブリケーションの互換性レベルの動作
パブリケーション互換性レベルの動作のうち、考慮が必要なものをいくつか次に示します。
パブリケーションの互換性レベルは、データベースの互換性レベルとは関係ありません。
sp_addmergepublication またはレプリケーション管理オブジェクト (RMO) を使用してパブリケーションを作成する場合は、パブリケーションの互換性レベルが既定で 80RTM に設定されます。パブリケーションの新規作成ウィザードでパブリケーションを作成する場合は、ウィザードの [サブスクライバの種類] ページで選択したオプションに基づいてパブリケーションの互換性レベルが決定されます。
SQL Server 2005 より前のバージョンの SQL Server では、高い互換性レベルを必要とする機能を有効にすると、パブリケーションの互換性レベルが自動的に引き上げられました。SQL Server 2005 以降は、パブリケーションの互換性レベルを手動で 90RTM 以上に設定してから、その互換性レベルを必要とする機能を有効にする必要があります。
パブリケーションの互換性レベルを下げることができるのは、スナップショット エージェントが起動しておらず、かつパブリケーションへのサブスクリプションが存在しない場合のみです。
同一データベース内のパブリケーションはすべて、同じ互換性レベルにする必要があります。この要件により、次のような結果になります。
互換性レベルが低い (80RTM など) パブリケーションがデータベースに 1 つ含まれている場合に、レベル 90RTM 以上の別のパブリケーションを同じデータベースに追加するときは、最初のパブリケーションのレベルを手動で引き上げてから、新しいパブリケーションを追加する必要があります。
互換性レベルの低いパブリケーションがデータベースに複数含まれている場合に、レベル 90RTM 以上の別のパブリケーションを同じデータベースに追加するときは、既存のパブリケーションを 1 つ残してそれ以外をすべて削除し、残ったパブリケーションのレベルを 90RTM 以上に引き上げ、削除したパブリケーションをレベル 90RTM 以上で再作成してから、レベル 90RTM 以上の新しいパブリケーションを作成する必要があります。
Web 同期に必要なコンポーネントと互換性レベル
SQL Server 2008 では、SQL Server 2005、SQL Server 2008、および SQL Server Compact 3.5 3.0、3.1、3.5 を実行しているサブスクライバの Web 同期をサポートしています。各種類のサブスクライバに必要なパブリケーションの互換性レベルおよびサーバー コンポーネントを次の表に示します。
パブリッシャのバージョン |
サブスクライバのバージョン |
必要なパブリケーションの互換性レベル |
IIS サーバー上に必要なコンポーネント |
---|---|---|---|
SQL Server 2008 |
SQL Server 2008 |
100RTM |
SQL Server 2008 IIS コンポーネント |
SQL Server 2008 |
SQL Server Compact 3.5 3.0、3.1、および 3.5 |
90RTM |
SQL Server Compact 3.5 SP1 IIS コンポーネントおよび SQL Server 2008 IIS コンポーネント |
SQL Server 2008 |
SQL Server 2005 |
90RTM |
SQL Server 2008 IIS コンポーネント |
SQL Server 2005 |
SQL Server 2005 |
90RTM |
SQL Server 2005 IIS コンポーネント |
SQL Server 2005 |
SQL Server Compact 3.5 3.0、3.1、および 3.5 |
90RTM |
SQL Server Compact 3.5 SP1 IIS コンポーネントおよび SQL Server 2005 IIS コンポーネント |
SQL Server 2005 |
SQL Server 2008 |
なし1 |
なし1 |
1 パブリッシャのバージョンはサブスクライバのバージョン以上であることが必要であるため、この構成はサポートされません。