Oracle パブリッシャーの設計上の注意点および制限Design Considerations and Limitations for Oracle Publishers

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Oracle データベースからのパブリッシュは、 MicrosoftMicrosoft SQL ServerSQL Server データベースからのパブリッシュとほぼ同じように機能するように設計されています。Publishing from an Oracle database is designed to work nearly identically to publishing from a MicrosoftMicrosoft SQL ServerSQL Server database. ただし、以下の制限および問題に注意してください。However, you should be aware of the following limitations and issues:

  • [Oracle (ゲートウェイ)] を選択すると、[Oracle (完全)] より高いパフォーマンスが得られますが、このオプションは、複数のトランザクション パブリケーションで同じテーブルをパブリッシュする場合は使用できません。The Oracle Gateway option provides improved performance over the Oracle Complete option; however, this option cannot be used to publish the same table in multiple transactional publications. テーブルを表示できるのは、最大で 1 つのトランザクション パブリケーションと、任意の数のスナップショット パブリケーションになります。A table can appear in at most one transactional publication and any number of snapshot publications. 複数のトランザクション パブリケーションで同じテーブルをパブリッシュする必要がある場合は、[Oracle (完全)] を選択します。If you need to publish the same table in multiple transactional publications, choose the Oracle Complete option.

  • レプリケーションでは、テーブル、インデックス、および具体化されたビューのパブリッシュをサポートしています。Replication supports publishing tables, indexes, and materialized views. その他のオブジェクトはレプリケートされません。Other objects are not replicated.

  • Oracle と SQL ServerSQL Server のデータベースのデータの保存および処理には、レプリケーションに影響を与える小さな違いがいくつかあります。There are some small differences between the storage and processing of data in Oracle and SQL ServerSQL Server databases that affect replication.

  • Oracle パブリッシャーを使用する場合に、トランザクション レプリケーション機能をサポートする方法にはさまざまな違いがあります。There are a number of differences in how transactional replication features are supported when using an Oracle Publisher.

Oracle からのオブジェクトのパブリッシュのサポートSupport for Publishing Objects from Oracle

レプリケーションでは、Oracle データベースからの以下のオブジェクトのレプリケートをサポートしています。Replication supports replicating the following objects from Oracle databases:

  • テーブルTables

  • 索引構成表Index-organized tables

  • インデックスIndexes

  • 具体化されたビュー (テーブルとしてレプリケート)Materialized views (they are replicated as tables)

    以下については、パブリッシュされたテーブルに存在する可能性はありますが、レプリケートされません。The following can be present on published tables but are not replicated:

  • ドメイン ベースのインデックスDomain-based indexes

  • 関数ベースのインデックスFunction-based indexes

  • 既定値Defaults

  • CHECK 制約Check constraints

  • 外部キーForeign keys

  • ストレージのオプション (テーブルスペース、クラスターなど)Storage options (tablespaces, clusters, etc.)

    以下のオブジェクトはレプリケートできません。The following objects cannot be replicated:

  • 入れ子になったテーブルNested tables

  • ビューViews

  • パッケージ、パッケージ本体、プロシージャ、およびトリガーPackages, package bodies, procedures, and triggers

  • キューQueues

  • シーケンスSequences

  • シノニムSynonyms

    サポートされるデータ型の詳細については、「 Data Type Mapping for Oracle Publishers」を参照してください。For information about supported data types, see Data Type Mapping for Oracle Publishers.

Oracle と SQL Server の違いDifferences between Oracle and SQL Server

  • Oracle では、一部のオブジェクトに対する最大サイズ制限が異なります。Oracle has different maximum size limits for some objects. Oracle パブリケーション データベースで作成されたオブジェクトは、 SQL ServerSQL Serverの対応するオブジェクトの最大サイズ制限に従う必要があります。Any objects created in the Oracle publication database should adhere to the maximum size limits for the corresponding objects in SQL ServerSQL Server. SQL ServerSQL Server の制限について詳しくは、「SQL Server の最大容量仕様」をご覧ください。For information about limits in SQL ServerSQL Server, see Maximum Capacity Specifications for SQL Server.

  • 既定では、Oracle のオブジェクト名は大文字で作成されます。By default Oracle object names are created in upper case. Oracle オブジェクトの名前が Oracle データベースで大文字となっている場合、 SQL ServerSQL Server ディストリビューターでこれらをパブリッシュするときは、名前が大文字になっているかどうかを確認してください。Ensure that you supply the names of Oracle objects in upper case when publishing them through a SQL ServerSQL Server Distributor if they are upper case on the Oracle database. 大文字および小文字を正しく指定しないと、オブジェクトが見つからないことを示すエラー メッセージが表示される可能性があります。Failure to specify the objects in the correct case may result in an error message indicating that the object cannot be found.

  • Oracle の SQL 言語仕様は SQL ServerSQL Serverと若干異なります。行フィルターは、Oracle 準拠の構文で記述する必要があります。Oracle has a slightly different SQL dialect from SQL ServerSQL Server; row filters should be written in Oracle-compliant syntax.

ラージ オブジェクトに関する注意点Considerations for Large Objects

ラージ オブジェクト (LOB) データは、アーティクルのログ テーブルに格納されません。LOB データへの更新は、常に、パブリッシュされたテーブルから直接取得します。Large object (LOB) data is not stored in the article log table; updates to LOB data are always retrieved directly from the published table. 更新がトランザクション パブリケーションでレプリケートされるのは、LOB に影響を与える操作により、レプリケートされたテーブルでレプリケーション トリガーが起動される場合に限られます。Updates are replicated in transactional publications only if the operation affecting the LOB fires the replication trigger on the replicated table. Oracle トリガーは、LOB を含む行が挿入または削除されると起動されますが、LOB の列への更新の場合には、トリガーは起動されません。Oracle triggers fire when rows containing LOBs are inserted or deleted; however updates to LOB columns do not fire triggers. LOB の列への更新が直ちにレプリケートされるのは、同じ行の LOB ではない列も同じ Oracle トランザクションで更新される場合に限られます。An update to a LOB column will be replicated immediately only if a non-LOB column of the same row is also updated in the same Oracle transaction. 更新されない場合、LOB の列は、同じ行の LOB ではない列への更新が次回に発生したときに、サブスクライバーで更新されます。If not, the LOB column will be refreshed at the Subscriber when the next update to a non-LOB column in the same row occurs. アプリケーションでこの動作を許容できることを確認してください。Ensure that this behavior is acceptable for your application.

トランザクション パブリケーションで LOB の列への更新をレプリケートするには、アプリケーションを記述するときに、次のいずれかの方法を検討してください。To replicate updates to LOB columns in transactional publications, consider one of the following strategies when writing the application:

  • 行を更新せず、トランザクションで行を削除および再挿入します。行を再挿入するときは、新しい LOB を指定します。Delete and reinsert the row(s) within a transaction instead of updating the row: specify the new LOB when re-inserting the row. 削除と挿入の両方でトリガーを起動するため、行はレプリケートされます。Because delete and insert both fire triggers, the row will be replicated.

  • LOB の列に加え、LOB ではない列を行の更新に含めるか、同じ Oracle トランザクションの一部として、その行の LOB ではない列を更新します。Include a non-LOB column in the row update in addition to the LOB column, or update a non-LOB column of the row as part of the same Oracle transaction. どちらの場合でも、LOB ではない列の更新により、トリガーが起動します。In both cases, the update of the non-LOB column ensures that the trigger fires.

    LOB の詳細については、「 Data Type Mapping for Oracle Publishers」を参照してください。For more information about LOBs, see Data Type Mapping for Oracle Publishers.

一意インデックスと制約Unique Indexes and Constraints

スナップショット レプリケーションとトランザクション レプリケーションの両方において、一意のインデックスおよび制約 (主キー制約を含む) に含まれる列は、特定の制限事項に従う必要があります。For both snapshot and transactional replication, columns contained in unique indexes and constraints (including primary key constraints) must adhere to certain restrictions. これらの制限に従わない場合、制約またはインデックスはレプリケートされません。If they do not adhere to these restrictions, the constraint or index is not replicated.

  • SQL ServerSQL Server のインデックスに許容される最大列数は 16 です。The maximum number of columns allowed in an index on SQL ServerSQL Server is 16.

  • 一意の制約に含まれるすべての列は、サポートされているデータ型である必要があります。All columns included in unique constraints must have supported data types. データ型の詳細については、「 Data Type Mapping for Oracle Publishers」をご覧ください。For more information about data types, see Data Type Mapping for Oracle Publishers.

  • 一意の制約に含まれるすべての列は、パブリッシュする必要があります (フィルター選択はできません)。All columns included in unique constraints must be published (they cannot be filtered).

  • 一意の制約またはインデックスに関係する列には NULL 値を設定できません。Columns involved in unique constraints or indexes should not be null.

    以下の問題についても考慮に入れてください。Also consider the following issues:

  • Oracle および SQL ServerSQL Server は、NULL の扱いが異なります。Oracle では、NULL を許容する列に NULL 値が指定された複数の行を許可し、一意の制約またはインデックスに含めることができます。Oracle and SQL ServerSQL Server treat NULL differently: Oracle permits multiple rows with NULL values for columns that allow NULL and are included in unique constraints or indexes. SQL ServerSQL Server では一意性が強制され、同じ列に NULL 値のある行は 1 行だけ許可されます。 enforces uniqueness by only permitting a single row with a NULL value for the same column. NULL を許容する一意の制約またはインデックスをパブリッシュすることはできません。パブリッシュされたテーブルで、インデックスまたは制約に含まれる列に NULL 値のある行が複数含まれる場合、サブスクライバーで制約違反が発生します。You cannot publish a unique constraint or index that allows NULL because a constraint violation would occur on the Subscriber if the published table contains multiple rows with NULL values for any of the columns included in the index or constraint.

  • 一意性をテストする場合、フィールドの後続の空白は、 SQL ServerSQL Server では無視されますが、Oracle では無視されません。When testing for uniqueness, trailing blanks in a field are ignored by SQL ServerSQL Server but not by Oracle.

    SQL ServerSQL Server のトランザクション レプリケーションと同様、Oracle のトランザクション パブリケーションのテーブルには主キーが必要です。主キーは上記のルールに基づき、一意である必要があります。As in SQL ServerSQL Server transactional replication, tables in Oracle transactional publications require a primary key; the primary key must be unique based on the rules specified above. 主キーが前の項目で示したルールに従わない場合、トランザクション レプリケーションに対し、テーブルをパブリッシュすることはできません。If the primary key does not adhere to the rules outlined in the previous bullets, the table cannot be published for transactional replication.

Oracle パブリッシングと標準的なトランザクション レプリケーションの違いDifferences between Oracle Publishing and Standard Transactional Replication

  • Oracle パブリッシャーは、 SQL ServerSQL Server ディストリビューター、そのディストリビューターを使用する任意の SQL ServerSQL Server パブリッシャー、またはパブリケーションを受信する任意のサブスクライバーと同じ名前にすることはできません。An Oracle Publisher cannot have the same name as: its SQL ServerSQL Server Distributor; any of the SQL ServerSQL Server Publishers that use the Distributor; or any Subscribers that receive the publication. 同じディストリビューターによって処理される各パブリケーションには、一意の名前を付ける必要があります。Publications serviced by the same Distributor must each have a unique name.

  • Oracle パブリケーションでパブリッシュされたテーブルは、レプリケートされたデータを受信することはできません。A table published in an Oracle publication cannot receive replicated data. したがって Oracle パブリッシングでは、即時更新サブスクリプションまたはキュー更新サブスクリプションを使用したパブリケーション、およびピア ツー ピア レプリケーションや双方向レプリケーションなど、パブリケーション テーブルがサブスクリプション テーブルとしても機能するトポロジはサポートしていません。Therefore, Oracle publishing does not support: publications with immediate updating or queued updating subscriptions; or topologies in which publication tables also act as subscription tables, such as peer-to-peer and bidirectional replication.

  • Oracle データベースでの主キーから外部キーのリレーションシップは、サブスクライバーにレプリケートされません。Primary key to foreign key relationships in the Oracle database are not replicated to Subscribers. ただし、変更が配信されると、リレーションシップはデータに保持されます。However, the relationships are maintained in the data as changes are delivered.

  • 標準的なトランザクション パブリケーションは、最大 1000 列のテーブルをサポートします。Standard transactional publications support tables of up to 1000 columns. Oracle のトランザクション パブリケーションがサポートするのは 995 列です (レプリケーションにより、パブリッシュされた各テーブルに 5 列が追加されます)。Oracle transactional publications support 995 columns (replication adds five columns to each published table).

  • COLLATE 句は、CREATE TABLE ステートメントに追加され、大文字と小文字を区別する比較を有効にします。この比較は、主キーおよび一意の制約にとって重要です。Collate clauses are added to the CREATE TABLE statements to enable case sensitive comparisons, which is important for primary keys and unique constraints. この動作はスキーマ オプション 0x1000 で制御されます。このオプションは、sp_addarticle (Transact-SQL)@schema_option パラメーターで指定します。This behavior is controlled with the schema option 0x1000, which is specified with the @schema_option parameter of sp_addarticle (Transact-SQL).

  • ストアド プロシージャを使用して Oracle パブリッシャーを構成またはメンテナンスする場合、プロシージャを明示的なトランザクションに入れないでください。If you use stored procedures to configure or maintain an Oracle Publisher, do not put the procedures inside an explicit transaction. これは Oracle パブリッシャーへの接続に使用するリンク サーバーではサポートされていません。This is not supported over the linked server used to connect to the Oracle Publisher.

  • ウィザードにより Oracle パブリケーションに対するプル サブスクリプションを作成する場合は、 SQL Server 2005SQL Server 2005 以降で提供されたサブスクリプションの新規作成ウィザードを使用する必要があります。If you create a pull subscription to an Oracle publication with a wizard, you must use the New Subscription Wizard supplied with SQL Server 2005SQL Server 2005 and later versions. SQL ServerSQL Serverより古いバージョンの場合でも、ストアド プロシージャおよび SQL-DMO インターフェイスを使用して、Oracle パブリケーションに対するプル サブスクリプションを設定できます。For previous versions of SQL ServerSQL Server, you can, however, use the stored procedure and SQL-DMO interfaces to setup pull subscriptions to Oracle publications.

  • ストアド プロシージャを使用して、サブスクライバーに変更を反映する場合 (既定)、MCALL 構文はサポートされていても、Oracle パブリッシャーからのパブリケーションである場合は、異なる動作をすることに注意してください。If you use stored procedures to propagate changes to Subscribers (the default), be aware that the MCALL syntax is supported, but it has different behavior when the publication is from an Oracle Publisher. 通常、MCALL では、パブリッシャーで更新された列を示すビットマップを提供します。Typically MCALL provides a bitmap that shows which columns were updated at the Publisher. Oracle パブリケーションの場合、ビットマップは常にすべての列が更新されたことを示しています。With an Oracle publication, the bitmap always shows that all columns were updated. ストアド プロシージャの使用に関する詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。For more information about using stored procedures, see Specify How Changes Are Propagated for Transactional Articles.

トランザクション レプリケーション機能のサポートTransactional Replication Feature Support

  • Oracle パブリケーションでは、SQL Server パブリケーションがサポートする一部のスキーマ オプションがサポートされていません。Oracle publications do not support all of the schema options that SQL Server publications support. スキーマ オプションの詳細については、「sp_addarticle (Transact-SQL)」を参照してください。For more information on schema options, see sp_addarticle (Transact-SQL).

  • Oracle パブリケーションに対するサブスクライバーは、即時更新サブスクリプションまたはキュー更新サブスクリプションを使用できません。また、ピア ツー ピア トポロジまたは双方向トポロジでノードになることもできません。Subscribers to Oracle publications cannot use immediate updating or queued updating subscriptions, or be nodes in a peer-to-peer or bidirectional topology.

  • Oracle パブリケーションに対するサブスクライバーは、バックアップから自動的に初期化することはできません。Subscribers to Oracle publications cannot be automatically initialized from a backup.

  • SQL ServerSQL Server では、バイナリと行数の 2 種類の検証をサポートしています。 supports two types of validation: binary and rowcount. Oracle パブリッシャーでは、行数検証をサポートしています。Oracle Publishers support rowcount validation. 詳細については、「Validate Replicated Data」 (レプリケートされたデータの検証) を参照してください。For more information, see Validate Replicated Data.

  • SQL ServerSQL Server には、ネイティブ bcp モードとキャラクター モードの 2 種類のスナップショット形式が用意されています。 offers two snapshot formats: native bcp-mode and character-mode. Oracle パブリッシャーでは、キャラクター モード スナップショットをサポートしています。Oracle Publishers support character mode snapshots.

  • パブリッシュされた Oracle テーブルへのスキーマ変更はサポートされていません。Schema changes to published Oracle tables are not supported. スキーマ変更を行うには、まずパブリケーションを削除し、変更を行ってから、パブリケーションおよびサブスクリプションを再作成します。To make schema changes, first drop the publication, make the changes, and then re-create the publication and any subscriptions.

    注意

    パブリッシュされたテーブルが利用されていないときに、スキーマ変更とその後のパブリケーションおよびサブスクリプションの削除、再作成を一度に行う場合、サブスクリプションに対して [レプリケーションのサポートのみ] オプションを指定できます。If the schema changes and the subsequent drop and re-creation of the publication and subscriptions are performed at a time when no activity is occurring on the published tables, you can specify the option 'replication support only' for the subscriptions. これにより、各サブスクライバーにスナップショットをコピーすることなく、サブスクリプションを同期させることができます。This allows them to be synchronized without having to copy a snapshot to each Subscriber. 詳細については、「スナップショットを使用しないトランザクション サブスクリプションの初期化」を参照してください。For more information, see Initialize a Transactional Subscription Without a Snapshot.

レプリケーションのセキュリティ モデルReplication Security Model

Oracle のパブリッシングのセキュリティ モデルは、標準的なトランザクション レプリケーションのセキュリティ モデルと同じですが、以下の点が異なります。The security model for Oracle publishing is the same as the security model for standard transactional replication, with the following exceptions:

参照See Also

Oracle パブリッシャーの管理上の注意点 Administrative Considerations for Oracle Publishers
Oracle パブリッシャーの構成 Configure an Oracle Publisher
Oracle パブリッシングの概要Oracle Publishing Overview