Oracle データベースからの発行は、Microsoft SQL Server データベースからの発行とほぼ同じように動作するように設計されています。 ただし、次の制限事項と問題に注意する必要があります。
Oracle ゲートウェイ オプションを使用すると、Oracle Complete オプションよりもパフォーマンスが向上します。ただし、このオプションを使用して、複数のトランザクション パブリケーションで同じテーブルをパブリッシュすることはできません。 テーブルは、最大 1 つのトランザクション パブリケーションと任意の数のスナップショット パブリケーションに表示できます。 複数のトランザクション パブリケーションで同じテーブルをパブリッシュする必要がある場合は、[Oracle Complete]\(Oracle 完了\) オプションを選択します。
レプリケーションでは、テーブル、インデックス、具体化されたビューの発行がサポートされます。 他のオブジェクトはレプリケートされません。
レプリケーションに影響を与える Oracle データベースと SQL Server データベースのデータのストレージと処理には、いくつかの小さな違いがあります。
Oracle パブリッシャーを使用する場合のトランザクション レプリケーション機能のサポート方法には、いくつかの違いがあります。
Oracle からのオブジェクトのパブリッシュのサポート
レプリケーションでは、Oracle データベースから次のオブジェクトをレプリケートできます。
表
インデックス編成テーブル
索引
具体化されたビュー (テーブルとしてレプリケートされます)
パブリッシュされたテーブルには次の情報を含めることができますが、レプリケートされません。
ドメイン ベースのインデックス
関数ベースのインデックス
デフォルト設定
CHECK 制約
外部キー
ストレージ オプション (テーブルスペース、クラスターなど)
次のオブジェクトはレプリケートできません。
入れ子になったテーブル
見解
パッケージ、パッケージ本体、プロシージャ、トリガー
待ち行列
シーケンス
シノニム
サポートされているデータ型の詳細については、「 Oracle パブリッシャーのデータ型マッピング」を参照してください。
Oracle と SQL Server の違い
Oracle には、一部のオブジェクトに対して異なる最大サイズ制限があります。 Oracle パブリケーション データベースで作成されるすべてのオブジェクトは、SQL Server 内の対応するオブジェクトの最大サイズ制限に従う必要があります。 SQL Server の制限については、「SQL Server の 最大容量仕様」を参照してください。
既定では、Oracle オブジェクト名は大文字で作成されます。 Oracle データベース上の大文字である場合は、SQL Server ディストリビューターを介して発行するときに、Oracle オブジェクトの名前を大文字にしてください。 正しいケースでオブジェクトを指定しないと、オブジェクトが見つからないことを示すエラー メッセージが表示されることがあります。
Oracle には、SQL Server とは少し異なる SQL 言語があります。行フィルターは Oracle に準拠した構文で記述する必要があります。
ラージ オブジェクトに関する考慮事項
ラージ オブジェクト (LOB) データはアーティクル ログ テーブルに格納されません。LOB データの更新は、常にパブリッシュされたテーブルから直接取得されます。 更新は、LOB に影響を与える操作がレプリケートされたテーブルでレプリケーション トリガーを起動する場合にのみ、トランザクション パブリケーションでレプリケートされます。 ORACLE トリガーは、LOB を含む行が挿入または削除されたときに起動しますが、LOB 列の更新はトリガーを起動しません。 同じ Oracle トランザクションで同じ行の LOB 以外の列も更新された場合にのみ、LOB 列の更新が直ちにレプリケートされます。 そうでない場合、同じ行の LOB 以外の列に対する次の更新が行われると、LOB 列がサブスクライバーで更新されます。 この動作がアプリケーションで受け入れられることを確認します。
トランザクション パブリケーション内の LOB 列に更新をレプリケートするには、アプリケーションを記述するときに次のいずれかの方法を検討してください。
行を更新するのではなく、トランザクション内の行を削除して再挿入します。行を再挿入する場合は、新しい LOB を指定します。 両方の起動トリガーを削除して挿入するため、行がレプリケートされます。
LOB 列に加えて行の更新に LOB 以外の列を含めるか、同じ Oracle トランザクションの一部として行の LOB 以外の列を更新します。 どちらの場合も、LOB 以外の列を更新すると、トリガーが確実に起動します。
LOB の詳細については、「 Oracle パブリッシャーのデータ型マッピング」を参照してください。
一意のインデックスと制約
スナップショット レプリケーションとトランザクション レプリケーションの両方で、一意のインデックスと制約 (主キー制約を含む) に含まれる列は、特定の制限に従う必要があります。 これらの制限に準拠していない場合、制約またはインデックスはレプリケートされません。
SQL Server のインデックスで許可される列の最大数は 16 です。
一意の制約に含まれるすべての列には、サポートされているデータ型が必要です。 データ型の詳細については、「 Oracle パブリッシャーのデータ型マッピング」を参照してください。
一意制約に含まれるすべての列をパブリッシュする必要があります (フィルター処理することはできません)。
一意の制約またはインデックスに関係する列を null にすることはできません。
また、次の問題も考慮してください。
Oracle と SQL Server では NULL の扱いが異なります。Oracle では、NULL を許可し、一意の制約またはインデックスに含まれる列に対して NULL 値を持つ複数の行が許可されます。 SQL Server では、同じ列に対して NULL 値を持つ 1 つの行のみを許可することで、一意性が適用されます。 パブリッシュされたテーブルに、インデックスまたは制約に含まれる列のいずれかに NULL 値を持つ複数の行が含まれている場合、サブスクライバーで制約違反が発生するため、NULL を許可する一意の制約またはインデックスをパブリッシュすることはできません。
一意性をテストする場合、フィールドの末尾の空白は SQL Server では無視されますが、Oracle では無視されます。
SQL Server トランザクション レプリケーションと同様に、Oracle トランザクション パブリケーションのテーブルには主キーが必要です。主キーは、上記で指定した規則に基づいて一意である必要があります。 前の行頭文字で説明した規則に主キーが準拠していない場合、トランザクション レプリケーション用にテーブルをパブリッシュすることはできません。
Oracle パブリッシングと標準トランザクション レプリケーションの違い
Oracle パブリッシャーは、SQL Server ディストリビューターと同じ名前を持つことはできません。ディストリビューターを使用する SQL Server パブリッシャーのいずれか。パブリケーションを受け取るサブスクライバー。 同じディストリビューターによって処理されるパブリケーションには、それぞれ一意の名前が必要です。
Oracle パブリケーションでパブリッシュされたテーブルは、レプリケートされたデータを受信できません。 したがって、Oracle パブリッシングでは、即時更新サブスクリプションまたはキュー更新サブスクリプションを含むパブリケーションはサポートされていません。パブリケーション テーブルがサブスクリプション テーブルとしても機能するトポロジ (ピアツーピアレプリケーションや双方向レプリケーションなど)。
Oracle データベース内の主キーと外部キーのリレーションシップはサブスクライバーにレプリケートされません。 ただし、リレーションシップは、変更が配信されるとデータに保持されます。
標準トランザクション パブリケーションでは、最大 1,000 列のテーブルがサポートされます。 Oracle トランザクション パブリケーションでは、995 列がサポートされています (レプリケーションでは、パブリッシュされた各テーブルに 5 つの列が追加されます)。
照合順序句が CREATE TABLE ステートメントに追加され、大文字と小文字が区別される比較が可能になります。これは、主キーと一意の制約にとって重要です。 この動作は、sp_addarticle (Transact-SQL) の@schema_option パラメーターで指定されたスキーマ オプション 0x1000で制御されます。
ストアド プロシージャを使用して Oracle パブリッシャーを構成または保守する場合は、明示的なトランザクション内にプロシージャを配置しないでください。 これは、Oracle パブリッシャーへの接続に使用されるリンク サーバーではサポートされていません。
ウィザードを使用して Oracle パブリケーションへのプル サブスクリプションを作成する場合は、SQL Server 2005 以降のバージョンで提供される新しいサブスクリプション ウィザードを使用する必要があります。 ただし、以前のバージョンの SQL Server では、ストアド プロシージャと SQL-DMO インターフェイスを使用して、Oracle パブリケーションへのプル サブスクリプションをセットアップできます。
ストアド プロシージャを使用して変更をサブスクライバーに反映する場合 (既定値)、MCALL 構文はサポートされていますが、パブリケーションが Oracle パブリッシャーからの場合は動作が異なります。 通常、MCALL は、パブリッシャーで更新された列を示すビットマップを提供します。 Oracle パブリケーションでは、ビットマップは常にすべての列が更新されたことを示します。 ストアド プロシージャの使用方法の詳細については、「 トランザクション アーティクルの変更の反映方法を指定する」を参照してください。
トランザクション レプリケーション機能のサポート
Oracle パブリケーションでは、SQL Server パブリケーションでサポートされているすべてのスキーマ オプションがサポートされているわけではありません。 スキーマ オプションの詳細については、「 sp_addarticle (Transact-SQL)」を参照してください。
Oracle パブリケーションのサブスクライバーは、即時更新またはキュー更新サブスクリプションを使用したり、ピア ツー ピアまたは双方向トポロジのノードにすることはできません。
Oracle パブリケーションのサブスクライバーをバックアップから自動的に初期化することはできません。
SQL Server では、バイナリと行数の 2 種類の検証がサポートされています。 Oracle パブリッシャーでは、行数の検証がサポートされています。 詳細については、「 レプリケートされたデータの検証」を参照してください。
SQL Server には、ネイティブ bcp モードと文字モードの 2 つのスナップショット形式が用意されています。 Oracle パブリッシャーでは、文字モードのスナップショットがサポートされています。
パブリッシュされた Oracle テーブルに対するスキーマの変更はサポートされていません。 スキーマを変更するには、最初にパブリケーションを削除し、変更を加えてから、パブリケーションとサブスクリプションを再作成します。
注
パブリッシュされたテーブルでアクティビティが発生していないときにスキーマが変更され、パブリケーションとサブスクリプションの削除と再作成が実行される場合は、サブスクリプションに対して "レプリケーションのサポートのみ" オプションを指定できます。 これにより、各サブスクライバーにスナップショットをコピーしなくても同期できます。 詳細については、「 スナップショットを使用せずにトランザクション サブスクリプションを初期化する」を参照してください。
レプリケーション セキュリティ モデル
Oracle パブリッシングのセキュリティ モデルは、標準トランザクション レプリケーションのセキュリティ モデルと同じですが、次の例外があります。
スナップショット エージェントとログ リーダー エージェントがディストリビューターからパブリッシャーへの接続を行うアカウントは、次のいずれかの方法で指定されます。
sp_adddistpublisher (Transact-SQL) の@security_mode パラメーター (Oracle 認証を使用する場合は、@loginと@passwordの値も指定します)
SQL Server Management Studio の [ サーバーへの接続 ] ダイアログ ボックスで、SQL Server ディストリビューターで Oracle パブリッシャーを構成するときに使用します。
標準トランザクション レプリケーションでは、アカウントは sp_addpublication_snapshot (Transact-SQL) と sp_addlogreader_agent (Transact-SQL) で指定されます。
スナップショット エージェントとログ リーダー エージェントが接続するアカウントは、 sp_changedistpublisher (Transact-SQL) またはプロパティ シートを使用して変更することはできませんが、パスワードは変更できます。
sp_adddistpublisher (Transact-SQL) の @security_mode パラメーターに値 1 (Windows 統合認証) を指定する場合:
スナップショット エージェントとログ リーダー エージェント ( sp_addpublication_snapshot (Transact-SQL ) と sp_addlogreader_agent(Transact-SQL) の@job_login パラメーターと@job_password パラメーター) の両方に使用されるプロセス アカウントとパスワードは、Oracle パブリッシャーへの接続に使用されるアカウントとパスワードと同じである必要があります。
sp_changepublication_snapshot (Transact-SQL) またはsp_changelogreader_agent (Transact-SQL) を使用して@job_loginパラメーターを変更することはできませんが、パスワードは変更できます。
レプリケーションのセキュリティの詳細については、「 SQL Server レプリケーションのセキュリティ」を参照してください。
こちらもご覧ください
Oracle パブリッシャーの管理上の考慮事項
Oracle パブリッシャーの構成]
Oracle パブリッシングの概要