Database 2日でデータ・レプリケーションおよび統合ガイド

11g リリース2(11.2)

B56305-03(原本部品番号:E17516-08)

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 データ・レプリケーションおよび統合の概要

- このマニュアルについて

- このマニュアルを使用する前に

- このマニュアルの対象外

- データ・レプリケーションと統合の概要

- データ・レプリケーションと統合の機能の概要

- 複数のデータベース内の情報のアクセスおよび変更時期

- Oracle Streamsでのデータのレプリケート時期

- マテリアライズド・ビューでのデータのレプリケート時期

- データベース間のメッセージの送信時期

2 データ・レプリケーションおよび統合の一般的なタスク

- GLOBAL_NAMES初期化パラメータをTRUEに設定

- チュートリアル: Oracle Streams管理者の構成

- チュートリアル: Oracle Streams管理者の表領域の作成

- チュートリアル: Oracle Streams管理者の作成

- ANYDATAキューの作成

- チュートリアル: データベース・リンクの作成

3 複数のデータベース内の情報のアクセスおよび変更

- 複数のデータベース内の情報のアクセスおよび変更の概要

- 分散SQLの概要

- シノニムおよび位置の透過性の概要

- Oracle以外のデータベース内の情報のアクセスおよび変更の概要

- ストアド・プロシージャの概要

- 複数のOracle Database内の情報のアクセスおよび変更の準備

- チュートリアル: 複数のOracle Databaseの問合せ

- チュートリアル: 複数のOracle Database内のデータの変更

- チュートリアル: リモートOracle Database内のストアド・プロシージャの実行

- Oracle以外のデータベースにあるデータの処理

- Oracle以外のデータベースで動作するOracle Databaseの構成

- Oracle以外のデータベースの処理のベスト・プラクティス

4 Oracle Streamsを使用したデータのレプリケート

- Oracle Streamsレプリケーションの概要

- 変更の取得の概要

- 取得プロセスでの変更の取得の概要

- 同期取得での変更の取得の概要

- データベース間の変更の伝播の概要

- 変更の適用の概要

- 取得、伝播および適用の動作を制御するルールの概要

- 同一でないコピーのルールベースの変換の概要

- サプリメンタル・ロギングの概要

- 競合と競合解消の概要

- 変更の循環を回避するためのタグの概要

- Oracle Streamsレプリケーション環境の一般的なタイプの概要

- 2データベース・レプリケーション環境の概要

- ハブアンドスポーク・レプリケーション環境の概要

- n-wayレプリケーション環境の概要

- Oracle Streamsが提供する主要なPL/SQLパッケージおよびデータ・ディクショナリ・ビューの概要

- Oracle Streamsが提供する主要なPL/SQLパッケージの概要

- Oracle Streamsの主要なデータ・ディクショナリ・ビューの概要

- Oracle Streamsレプリケーションの準備

- Oracle Streamsレプリケーションの構成: 例

- チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成

- チュートリアル: ダウンストリーム取得プロセスを使用した2データベース・レプリケーションの構成

- チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成

- チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成

- チュートリアル: 表の最新時刻競合解消の構成

5 Oracle Streamsレプリケーション環境の管理

- Oracle Streamsレプリケーション環境の管理

- 取得プロセスの管理

- 取得プロセスの起動と停止

- 取得プロセスのパラメータの設定

- 伝播の有効化および無効化

- 適用プロセスの管理

- 適用プロセスの起動と停止

- 適用プロセスのパラメータの設定

- Oracle Streamsレプリケーション環境の監視

- データベースのレプリケーション・コンポーネントの概要の表示

- ストリーム・パスの表示

- Oracle Streamsコンポーネントのパフォーマンス分析情報の表示

- データベースのOracle Streams環境のトポロジの表示

- 取得プロセスの監視

- 取得プロセスの情報の表示

- 取得プロセスに関する統計情報の表示

- アクティブな取得プロセス・トランザクションの表示

- 伝播の監視

- 伝播の情報の表示

- 伝播に関する統計情報の表示

- 適用プロセスの監視

- 適用プロセスの情報の表示

- 適用プロセスに関する統計情報の表示

- アクティブな適用プロセス・トランザクションおよびオーバーフローした適用プロセス・トランザクションの表示

- 構成された更新競合ハンドラの表示

- 「バッファ・キューの統計」の表示

- Oracle Streamsレプリケーション環境のトラブルシューティング

- Enterprise Managerでの自動化されたアラートへの対応

- 取得の中断アラート

- 伝播の中断アラート

- 適用の中断アラート

- 適用エラー・アラート

- Oracle Streamsプール・アラート

- 適用エラーの管理

- データベース・オブジェクトでの適用エラーの修正

- 適用エラー・トランザクションの再試行または削除

- レプリケーション先が使用できない場合のレプリケーション環境の管理

6 Oracle Streamsレプリケーション環境の拡張

- Oracle Streamsレプリケーション環境の拡張の概要

- チュートリアル: レプリケーション環境へのデータベース・オブジェクトの追加

- チュートリアル: レプリケーション環境へのデータベースの追加

7 マテリアライズド・ビューを使用したデータのレプリケート

- マテリアライズド・ビュー・レプリケーションの概要

- マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要

- マテリアライズド・ビューのリフレッシュの概要

- リフレッシュ・グループの概要

- マテリアライズド・ビュー・レプリケーションの準備

- マテリアライズド・ビュー・サイトの構成

- マスター・サイトでのマテリアライズド・ビュー・ログの構成

- マテリアライズド・ビューを使用した読取り専用データのレプリケート

- マテリアライズド・ビューを使用した読取り専用データのレプリケートの概要

- チュートリアル: マテリアライズド・ビューを使用した読取り専用データ・レプリケーションの構成

- マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート

- マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートの概要

- レプリケーション・グループと更新可能マテリアライズド・ビューの概要

- スケジュールされたリンクと遅延トランザクションの概要

- 競合と更新可能マテリアライズド・ビューの概要

- マテリアライズド・ビューを使用した読取り/書込みデータのレプリケーションの構成

- リフレッシュ・グループの構成

8 マテリアライズド・ビュー・レプリケーション環境の管理

- マテリアライズド・ビュー・レプリケーション環境の管理

- マテリアライズド・ビューのリフレッシュ

- リフレッシュ・グループのリフレッシュ

- マテリアライズド・ビューのリフレッシュ

- リフレッシュ・グループへのマテリアライズド・ビューの追加

- マテリアライズド・ビューの削除

- チュートリアル: マスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップ

- マテリアライズド・ビュー・レプリケーション環境の監視

- データベースのレプリケーション・コンポーネントの概要の表示

- マテリアライズド・ビューに関する情報の表示

- 現在リフレッシュされているマテリアライズド・ビューの判断

- マテリアライズド・ビュー・グループに関する情報の表示

- 更新可能マテリアライズド・ビューの遅延トランザクションに関する情報の表示

- リフレッシュ・グループに関する情報の表示

- マスター・サイトのマテリアライズド・ビュー・ログの表示

- マスター・サイトのマテリアライズド・ビューの表示

- マテリアライズド・ビュー・レプリケーション環境のトラブルシューティング

- マテリアライズド・ビュー・リフレッシュの問題の修正

- マテリアライズド・ビュー・ログが大きくなりすぎるのを防止

9 Oracle Streams Advanced Queuingを使用したメッセージ送信

- メッセージ機能の概要

- メッセージの順序付けの概要

- メッセージ・モードの概要

- メッセージ通知の概要

- 伝播の概要

- Oracle Messaging Gatewayの概要

- メッセージ機能の準備

- チュートリアル: Oracle Database間でのメッセージの送信

- タスク1: 各データベースでのメッセージ・タイプの作成

- タスク2: キューの構成とキュー間の伝播の構成

- タスク3: メッセージ・エンキュー・メカニズムの構成

- タスク4: メッセージをデキューするためのメッセージ・クライアントの構成

- タスク5: メッセージのエンキュー

- タスク6: メッセージのデキュー

- チュートリアル: メッセージ通知の構成

- タスク1: メッセージ・タイプの作成

- タスク2: キューおよびメッセージ・クライアントの構成

- タスク3: メッセージをデキューするメカニズムの構成

- タスク4: メッセージ通知の構成

- タスク5: メッセージのエンキューとメッセージ通知のチェック

- キューの変更

- キュー表の変更

- 伝播の変更

- メッセージング環境の監視

- キュー内のメッセージの表示

- 「永続キューの統計」の表示

- メッセージをデキューできるコンシューマの表示

- メッセージング環境のトラブルシューティング

- メッセージのエンキューまたはデキュー中のORA-01031エラーの修正

- メッセージのエンキュー中のORA-24033エラーの修正

- 伝播のORA-02019エラーの修正

- デキューしたメッセージがキュー内に残る理由の理解

10 データの比較および収束

- 異なるデータベース内のデータの比較および収束の概要

- チュートリアル: データの比較および収束の準備

- チュートリアル: 2つの異なるデータベース内のデータの比較

- チュートリアル: 相違データの収束

索引

Oracle® Database

2日でデータ・レプリケーションおよび統合ガイド

11g リリース2(11.2)

B56305-03(原本部品番号:E17516-08)

2011年8月

Oracle Streams、マテリアライズド・ビューおよびその他の分散データベース機能について説明します。

Oracle Database 2日でデータ・レプリケーションおよび統合ガイド, 11gリリース2(11.2)

B56305-03

Copyright © 2007, 2011, Oracle and/or its affiliates.All rights reserved.

原本著者:  Randy Urbano

原本協力者: Janet Blowney、Steve Fogel、Vira Goorah、Thuvan Hoang、Stella Kister、Sushil Kumar、Patricia McElroy、Colin McGregor、Ashok Mishra、Valarie Moore、Ashish Ray、Subbanarasimha Shastry、Sreejesh Srinivasan、Jim Stamos、Mark Townsend、Byron Wang、Lik Wong、Jingwei Wu、Jun Yuan

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントが、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供される場合は、次のNoticeが適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle およびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

はじめに

ここでは、次の項目について説明します。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

『Oracle Database 2日でデータ・レプリケーションおよび統合ガイド』は、Oracle Databaseを使用してデータ・レプリケーションおよび統合タスクを実行するデータベース管理者を対象としています。データ・レプリケーションおよび統合タスクでは、複数のデータベースの情報を統一された方法で使用します。

このマニュアルでは、ベスト・プラクティスを推奨し、データ・レプリケーションおよび統合タスクを実行するための効率的な方法を説明します。また、可能な場合はいつでもタスクを実行できるOracle Enterprise Managerの使用方法についても説明します。

このマニュアルでは、リレーショナル・データベースの概念を理解している必要があります。

ドキュメントのアクセシビリティについて

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

お客様は、My Oracle Supportから電子サポートにアクセスできます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のOracleドキュメントを参照してください。

- 『Oracle Database 2日でデータベース管理者』

- 『Oracle Database管理者ガイド』

- 『Oracle Streams概要および管理』

- 『Oracle Streamsレプリケーション管理者ガイド』

- 『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』

- 『Oracle Database Heterogeneous Connectivity User's Guide』

- 『Oracle Databaseアドバンスト・レプリケーション』

- 『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』

- 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

- 『Oracle Databaseリファレンス』

- Enterprise Managerオンライン・ヘルプ

このドキュメントの多くの例では、Oracle Databaseをインストールするときにデフォルトでインストールされるサンプル・データベースのサンプル・スキーマを使用しています。これらのスキーマの作成方法と使用方法については、『Oracle Databaseサンプル・スキーマ』を参照してください。

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ドキュメントのタイトル、強調またはユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 データ・レプリケーションと統合の概要

管理するデータベースが複数あるデータベース管理者は、必要なときに必要な場所で情報を使用可能にする責任を持ちます。

この章は次の項で構成されています。

- このマニュアルについて

- データ・レプリケーションと統合の概要

- データ・レプリケーションと統合の機能の概要

このマニュアルについて

『2日でデータ・レプリケーションおよび統合ガイド』では、各種のデータ・レプリケーションおよび統合環境を構成および管理するために必要な一般的なタスクの実行方法について説明します。環境のタイプについては、「データ・レプリケーションと統合の概要」および「データ・レプリケーションと統合の機能の概要」を参照してください。

このマニュアルは、最適なデータ・レプリケーションおよび統合環境を判断するのに役立ちます。また、一般的なタイプのデータ・レプリケーションおよび統合環境を構成、メンテナンス、監視およびトラブルシューティングするための基本的なタスク指向の方法も示します。

このマニュアルで使用するプライマリ・インタフェースは、Oracle Enterprise ManagerとSQL*Plusです。

この項の内容は次のとおりです。

- このマニュアルを使用する前に

- このマニュアルの対象外

このマニュアルを使用する前に

このマニュアルを使用する前に、次の必要があります。

- 『Oracle Database 2日でデータベース管理者』を読んで理解していること

- Oracle Databaseソフトウェアをインストールし、2つ以上のデータベースを構成しておくこと

このマニュアルでは、複数のデータベースにおけるデータ・レプリケーションと統合について説明するので、このマニュアルで説明されるほとんどのタスクでは複数のデータベースが必要です。

このマニュアルの対象外

『Oracle Database 2日でデータ・レプリケーションおよび統合ガイド』は、タスク指向のマニュアルです。目的は、データ・レプリケーションおよび統合の一般的なタスクについて説明することです。必要に応じて、現在のタスクを理解して実行するために必要な概念を説明します。

データ・レプリケーションおよび統合には、複数のOracle Database機能が関係します。これらの機能には、分散SQL、Oracle Database Gateway、Oracle Streamsおよびマテリアライズド・ビューが含まれます。このマニュアルでは、これらの機能に関する詳細情報は提供しません。これらの機能の詳しい概念情報およびこれらの機能の詳細な使用方法は、適切なOracleマニュアルを参照してください。

- 分散SQLの詳細は、『Oracle Database管理者ガイド』を参照してください。

- Oracle Database Gatewayの詳細は、『Oracle Database Heterogeneous Connectivity User's Guide』を参照してください。

- Oracle Streamsの一般的な情報は、『Oracle Streams概要および管理』を参照してください。

- Oracle Streamsをレプリケーションに使用する方法は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

- レプリケーション用のマテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』を参照してください。

- Oracle Streamsをメッセージ・キューイングに使用する方法は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

また、このマニュアルでは、Oracle Enterprise Managerで利用できるデータ・レプリケーションおよび統合機能の一部の使用方法を説明しますが、Enterprise Managerの詳細な情報は提供しません。Enterprise Managerの詳細は、Enterprise Managerオンライン・ヘルプを参照してください。

データ・レプリケーションと統合の概要

組織が大きくなる場合、複数のデータベースおよびアプリケーションで情報を共有できることが重要になります。データ・レプリケーションおよび統合によって、分散環境において必要なときに必要な場所で情報にアクセスできるようになります。Oracle Databaseには、データベース、アプリケーションおよびユーザー間での通信を可能にする安全な標準メカニズムが用意されています。これらのメカニズムには、キュー、データ・レプリケーション、メッセージング、および同機種環境と異機種環境両方での分散アクセスが含まれます。

このマニュアルでは、分散SQL、レプリケーション、メッセージ・キューイングについて説明します。これらの機能を使用して次のタイプのタスクを実行することにより、コンピューティング・リソースを効率よく使用できます。

- データベース間でのデータのレプリケート

- 分散データベースにあるデータへの簡単なアクセス

- Oracle DatabaseとOracle以外のデータベース間のデータ交換

- アプリケーション間の通信の有効化

- 顧客、パートナおよびサプライヤとの情報の交換

- イベント通知およびワークフローの提供

Oracle Databaseには、特定の要件に対処するために次のタイプのデータ・レプリケーションおよび統合ソリューションが用意されています。

- 統合: すべてのデータが単一のデータベースに移動され、中央にあるロケーションから管理されます。Oracle Real Application Clusters(Oracle RAC)、グリッド・コンピューティング、仮想プライベート・データベース(VPD)は、可用性が高くスケーラブルで安全な単一のデータベースに情報を統合するのに役立ちます。

- フェデレーション: データは単一の仮想データベースに統合されているように見えますが、実際には現在の分散位置に残ります。分散問合せ、分散SQLおよびOracle Database Gatewayは、フェデレーテッド・データベースの作成に役立ちます。

- 共有: 同じ情報の複数のコピーが複数のデータベースとアプリケーション・データ・ストアでメンテナンスされます。データ・レプリケーションとメッセージングは、複数のデータベースにある情報の共有に役立ちます。

関連項目:

- 『Oracle Database 2日でReal Application Clustersガイド』

- 『Oracle Database 2日でセキュリティ・ガイド』

データ・レプリケーションと統合の機能の概要

組織が組織のデータすべてを1つのデータベースに統合することが常に可能ということはありません。データが地理的に複数のロケーションに分散され、場所によっては、プライマリ・サイトへの安全な接続が確保できない場合があります。また、データが統合されていても、最適なアプリケーションが相互に通信するためのメソッドが必要な場合があります。ただし、これは、組織が異なる場所やアプリケーション間で情報を共有する必要がある理由の一例にすぎません。

Oracle Databaseでは、組織がデータ・レプリケーションおよび統合を実現するための手段が用意されています。ここでは、組織にとって最適なデータ・レプリケーションおよび統合オプションを決定する際に役立つ情報を示します。

次の項では、データ・レプリケーションおよび統合の様々な機能をいつ使用するかについて説明します。

- 複数のデータベース内の情報のアクセスおよび変更時期

- Oracle Streamsでのデータのレプリケート時期

- マテリアライズド・ビューでのデータのレプリケート時期

- データベース間のメッセージの送信時期

前述の機能から要件に合う機能を選択し、個別にまたは組み合せて使用できます。

注意:
このマニュアルで説明されているデータ・レプリケーションと統合の機能に加えて、Oracle Warehouse Builderでは、情報の統合に使用できる別のオプションがあります。Oracle Warehouse Builderは様々なデータ統合計画を設計し、デプロイできるフレキシブルなツールです。一般的にWarehouse Builderを使用して実装されるプロジェクトは、ミッション・クリティカルな操作システム、移行シナリオ、異なった操作システムの統合および従来のデータ・ウェアハウスなどです。Oracle Warehouse Builderには、データの統合のソリューションの実装を支援する一連のGraphical User Interfaceが含まれています。『Oracle Warehouse Builder概要』を参照してください。

複数のデータベース内の情報のアクセスおよび変更時期

最善の試みで情報を統合したにもかかわらず、多くの組織は複数で分散したデータベースを検出します。これらの組織がこのデータを集中管理する場合でも、少なくとも短期間では不可能な場合があります。このような組織に対して、単一で集中管理されたデータベースであるかのように分散したデータ・ソースにアクセスする方法が必要です。分散SQLを使用して、単一のOracle Databaseであるかのように、アプリケーションおよびユーザーは複数のOracleまたはOracle以外のデータベースにアクセスし情報を変更できます。

情報を移動またはコピーする必要がないので、分散SQLを使用して分散したデータ・ソースをフェデレートすることで、組織に最も早く簡単な情報統合のパスを提供します。情報を後で移動する場合はアプリケーションをリライトする必要はありません。統合アプローチに遷移している組織には特に有用ですが、現在分散したデータにアクセスする方法が必要です。

たとえば、適切なOracle Database Gatewayでの分散SQLを使用した場合、アプリケーションは、Oracle Databaseにレガシー・データがインポートされるのを待たずに、レガシー・データに即時アクセスできます。分散SQLは非定型問合せを実行する組織にも有用で、他の場所に適切に存在するまれにアクセスされるデータを更新します。

関連項目:

- 第3章「複数のデータベース内の情報のアクセスおよび変更」

Oracle Streamsでのデータのレプリケート時期

接続性に問題がない場合、組織はデータをリアルタイムに近い方法でレプリケートする可能性があります。そうすることで、できるかぎり早い時点で、すべてのロケーションにあるデータが最新であることを保証します。Oracle Streamsは、組織の特定の要件に応じて、様々な構成でリアルタイムに近いデータのレプリケーションをサポートします。Oracle Streamsレプリケーション環境では、自動的にデータベースが相互に変化をプッシュします。

Oracle Streamsレプリケーションの一般的な使用例を次に示します。

- 主要なオンライン・トランザクション処理(OLTP)サイトから処理をオフロードするためのレポート・サイトの作成

- コール・センターまたは同様のアプリケーションへのロード・バランシング、スケーラビリティおよび可用性の提供

- 特定のビジネス要件を満たすためのロケーション間でのサイト自律性の提供

- 支社などの複数のロケーションにあるデータの変換および統合

- 異なるプラットフォーム間、Oracle Databaseリリース間、およびWide Area Network(WAN)でのデータのレプリケート

Oracle Streamsレプリケーション構成には、n-wayおよびハブアンドスポークという2つの一般的なタイプがあります。特に、データのスケーラビリティおよび可用性を必要とする組織ではマルチマスター(n-way)構成が頻繁に使用されます。これらのアプリケーションでよく使用されるのが世界中のレプリカを使用するfollow the sunモデルです。たとえば、米国、欧州およびアジアにコール・センターがあり、それぞれに顧客データの完全なコピーがあるとします。顧客からの電話は、時刻に応じて適切なコール・センターにルーティングされます。各コール・センターからは、データに対する高速かつローカルなアクセスを確保しています。サイトがなんらかの理由で使用不可能になった場合、トランザクションは存続しているロケーションにルーティングできます。このタイプの構成は、複数のロケーション間でロード・バランシングの提供にも使用します。

もう1つの一般的な構成として、ハブアンドスポークがあります。たとえば、保険会社が本社と販売代理店で顧客データを共有する場合にこの構成を使用します。この構成のネットワーク・バーションはエンド・スポークとハブの接続性が制限されている場合、特に有用です。販売代理店には本社に接続する支社へ直接の接続性があっても、本社への直接の接続性がないとします。このネットワーク・ルーティングのタイプは、すべてのロケーションに直接接続する場合に発生する一部の複雑さを排除します。ハブアンドスポーク構成はデータ・ウェアハウス環境にも有用です。データ・ウェアハウス環境では、詳細データが各ストアまたはスポークで維持され、より高レベルのデータはデータ・ウェアハウスまたはハブで共有されます。

n-wayおよびハブアンドスポークのどちらの場合でも、組織は、複数のロケーションでレプリケート・データを更新できるようにOracle Streamsレプリケーションを構成できます。このレプリケーション環境では、データが競合する可能性があります。Oracle Streamsには、自動的にこれらの競合を解消する競合解消メソッドが用意されています。

Oracle Streamsはメッセージおよびレプリケーションなどの要件を共有するすべての情報のフレキシブルなインフラストラクチャを提供するので、変更が必要なときに組織は簡単に構成を変更できます。

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

マテリアライズド・ビューでのデータのレプリケート時期

このシステムは1つの場所に格納されたデータにアクセスするすべてのユーザーに対して実用的であるわけではありません。たとえば、外交販売担当者が会社のデータベースに直接アクセスせずに、顧客サイトで価格リストにアクセスする必要がある場合です。プライマリ・データベースまたはマスター・データベースに接続できなくても、発注処理をする必要がある場合があります。このようなユーザーには、データベースのレプリカまたはデータベースの一部が必要です。

Oracle Streamsレプリケーションとは異なり、マテリアライズド・ビューは常にデータを連続的にレプリケートするわけではありません。マテリアライズド・ビューは、トランザクション上一貫性のある時点にリフレッシュされる表または表のサブセットのレプリカです。リフレッシュ中は、マスター表の更新回数に関係なく、変更された行の最終値のみが取得され、マテリアライズド・ビューに適用されます。これによって、リモート・サイトがマスター・サイトに接続する必要がある時間が削減されます。

マテリアライズド・ビューは、マスター・サイトへの接続が制限されている場所で特に有用です。接続不可能な場合でも、更新可能なマテリアライズド・ビューでは、これらの場所が独立して機能します。複数の場所で更新する場合、更新の競合を回避するため場所間で所有権は通常パーティション化されます。競合が発生した場合でも、競合を自動的に解消できる競合解消メソッドが用意されています。

切断した計算のサポートに加え、組織はマテリアライズド・ビューを使用して、データへのローカル・アクセスを提供し、プライマリ・ロケーションで処理の負荷を取り除き、パフォーマンスおよびスケーラビリティを改善できます。たとえば、1つ以上のマテリアライズド・ビューを使用して、受注システムからレポート・アクティビティの負荷を取り除きます。

関連項目:

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

データベース間のメッセージの送信時期

通常、組織は大きくなるにつれて、処理を自動化しタスクを管理する様々なアプリケーションを開発します。これらアプリケーションがデータを直接共有しなくても、完全に独立して動作するわけではありません。これらのアプリケーションにはタスクを調整し、情報を交換してお互いに通信する方法が必要です。

Oracle Streams Advanced Queuing(AQ)を使用すると、非同期方法でお互いに安全で確実な通信ができます。Oracle Streams AQは、複数コンシューマのキュー、公開およびサブスクライブ、コンテンツ・ベースのルーティング、インターネット伝播および変換などの、メッセージ・キューイング・システムの標準機能のすべてをサポートします。たとえば、製品が発送されると、発送部門は簡単に請求部門に通知でき、顧客は適宜請求されます。

Oracle Streams AQと適切なメッセージング・ゲートウェイを結合して、アプリケーションは、TIBCO Rendezvous、IBM Websphere MQなどの、その他のメッセージ・キューイング・システムとの同時運用もできます。この機能はビジネス・パートナまたは顧客と情報の共有が必要な場合、特に有用です。

関連項目:

- 第9章「Oracle Streams Advanced Queuingを使用したメッセージ送信」

2 データ・レプリケーションおよび統合の一般的なタスク

この章では、多くのデータ・レプリケーションおよび統合環境に必要な一般的なタスクの実行方法を説明します。

この章は次の項で構成されています。

- GLOBAL_NAMES初期化パラメータをTRUEに設定

- チュートリアル: Oracle Streams管理者の構成

- ANYDATAキューの作成

- チュートリアル: データベース・リンクの作成

GLOBAL_NAMES初期化パラメータをTRUEに設定

複数の場所にあるデータにアクセスするには、最初に各場所を一意に識別できることを確認する必要があります。次に、これらの場所の間に通信パスを確立する必要があります。

各データベースの一意識別子をグローバル・データベース名と呼びます。初期化パラメータGLOBAL_NAMESをTRUEに設定することで、分散データベース環境内の各データベースを一意に識別できることが保証されます。データベースは、DB_NAME初期化パラメータで指定された個々のデータベース名の前に、データベース作成時にDB_DOMAIN初期化パラメータで指定されたデータベース・ネットワーク・ドメインを付けることで、グローバル・データベース名を形成します。

GLOBAL_NAMESパラメータには、データベース・リンクが接続先データベースと同じ名前を持つ必要があるかどうかを指定します。分散処理を使用する場合は、各データベースでこのパラメータをTRUEに設定し、ネットワーク環境でのデータベースおよびリンクについて一貫したネーミング規則を確実に使用することをお薦めします。

データベースでGLOBAL_NAMES初期化パラメータをTRUEに設定するには:

1. 初期化パラメータを変更できる管理ユーザーとして、Enterprise Managerにログインします。たとえば、SYSDBA権限を持つユーザーとしてログインできます。

2. データベース・インスタンスの「データベース」ホームページに移動します。

3. 「サーバー」をクリックして「サーバー」サブページを開きます。

4. 「データベース構成」セクションで「初期化パラメータ」をクリックします。

5. サーバー・パラメータ・ファイルを使用している場合、「SPFile」をクリックしてください。使用していない場合は次の手順に進みます。

6. 「初期化パラメータ」ページで、検索ツールにGLOBAL_NAMESと入力します。
tdpii_init_params.gifの説明

7. 「実行」をクリックします。

8. GLOBAL_NAMES初期化パラメータをTRUEに設定します。

9. 「適用」をクリックすると変更が保存されます。

パラメータをサーバー・パラメータ・ファイルで永続的に設定するか、初期化パラメータ・ファイルで永続的に設定するかを確認してください。

10. 分散環境の各データベースについて、手順1から9を実行します。デフォルトでは、GLOBAL_NAMES初期化パラメータはFALSEに設定されます。したがって、各データベースで明示的にTRUEに設定する必要があります。

別の項からこの項に移動した場合は、ここでその項に戻ります。

- 「複数のOracle Database内の情報のアクセスおよび変更の準備」

- 「Oracle Streamsレプリケーションの準備」

- 「マテリアライズド・ビュー・レプリケーションの準備」

- 「メッセージ機能の準備」

関連項目:

- 「チュートリアル: データベース・リンクの作成」

- 『Oracle Database 2日でデータベース管理者』

- GLOBAL_NAMES初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

チュートリアル: Oracle Streams管理者の構成

Oracle Streamsのいずれかのコンポーネントを使用することを計画している場合は、Oracle Streams管理者を構成します。Oracle Streamsコンポーネントには次のものがあります。

- キュー

- キュー表

- 取得プロセス

- 同期取得

- 伝播

- 適用プロセス

- ルールとルール・セット

Oracle Streams管理者は、これらのコンポーネントが使用される各データベースでこれらのコンポーネントを構成および管理します。これらのコンポーネントの詳細は、このマニュアルの次の各項を参照してください。

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 第9章「Oracle Streams Advanced Queuingを使用したメッセージ送信」

このチュートリアルでは、Oracle Streams管理者用の表領域を作成し、Oracle Streams管理者を作成して、Oracle Streams管理者に次の権限を付与します。

- DBMS_STREAMS_AUTHパッケージのGRANT_ADMIN_PRIVILEGEプロシージャで付与される権限
これらの権限は、Oracle Streams管理者に必要です。GRANT_ADMIN_PRIVILEGEプロシージャで付与される権限の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

- DBAロール
DBAロールは、取得プロセス、同期取得および適用プロセスを作成または変更するために必要です。ユーザーがこれらのタスクを実行する必要がない場合は、そのユーザーのDBAロールを取り消すことができます。

- EXP_FULL_DATABASEロールおよびIMP_FULL_DATABASEロール
これらのロールは、Oracle Streams管理者がデータ・ポンプを使用して、Oracle Streamsのインスタンス化中に他のスキーマにあるデータベース・オブジェクトでのエクスポートおよびインポート操作を実行するために必要です。Oracle Streams管理者が、他のスキーマにあるデータベース・オブジェクトでエクスポートおよびインポート操作を実行しない場合は、そのユーザーからこれらのロールを取り消すことができます。

- Database Control管理権限
これらの権限を使用すると、Oracle Enterprise Managerで、Oracle Enterprise Managerジョブの実行などの管理タスクを実行できます。データベースにOracle Streams管理者が存在し、このユーザーにDatabase Control管理権限を付与する場合は、『Oracle Database 2日でデータベース管理者』の手順に従います。

注意:
SYSまたはSYSTEMユーザーをOracle Streams管理者として使用しないでください。また、Oracle Streams管理者は、デフォルト表領域としてSYSTEM表領域を使用しないでください。

strmadminという名前の新しいOracle Streams管理者を作成するには:

1. チュートリアル: Oracle Streams管理者の表領域の作成

2. チュートリアル: Oracle Streams管理者の作成

チュートリアル: Oracle Streams管理者の表領域の作成

Oracle Streams管理者は、他のユーザーによって使用されない専用表領域を使用する必要があります。キュー表およびその他のOracle Streamsコンポーネントにはディスク容量が必要であり、専用表領域によってこれらの要件が効率的に満たされます。

Oracle Streams管理者の新規表領域を作成するには:

1. Enterprise Managerに管理ユーザーとしてログインします。

2. データベース・インスタンスの「データベース」ホームページに移動します。

3. 「サーバー」をクリックして「サーバー」サブページを開きます。

4. 「記憶域」セクションの「表領域」をクリックします。

5. 「表領域」ページで、「作成」をクリックします。
「表領域の作成」ページが表示され、「一般」サブページが表示されます。

tdpii_create_tbs.gifの説明

6. 「名前」フィールドにstreams_tbsと入力します。

7. 「データファイル」セクションで「追加」をクリックして、「データファイルの追加」ページを開きます。
tdpii_add_datafile.gifの説明

8. 「ファイル名」フィールドにstreams_tbs.dbfと入力します。

9. 「ファイル・ディレクトリ」フィールドのディレクトリをチェックし、必要に応じて変更します。

10. 「ファイル・サイズ」フィールドのサイズを25に変更し、リストがMBに設定されていることを確認します。

11. 「記憶域」セクションで「フルになった場合に自動的にデータファイルを拡張(AUTOEXTEND)」を選択します。

12. 「増分」フィールドに5と入力し、リストをMBに設定します。

13. 「最大ファイル・サイズ」フィールドで最大ファイル・サイズを設定します。通常は、「無制限」に設定したままにするのが最適です。

14. 「続行」をクリックします。

15. 「表領域の作成」ページで、「OK」をクリックします。

16. 「チュートリアル: Oracle Streams管理者の構成」の手順を実行して、Oracle Streams管理者の作成を完了します。

注意:
SQL文 CREATE TABLESPACEを使用して、表領域を作成することもできます。

チュートリアル: Oracle Streams管理者の作成

この項では、「チュートリアル: Oracle Streams管理者の表領域の作成」で構成した表領域を使用するOracle Streams管理者の作成について説明します。

strmadminという名前の新しいOracle Streams管理者を作成するには:

1. Enterprise Managerに管理ユーザーとしてログインします。

2. データベース・インスタンスの「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「Streams」セクションの「設定」をクリックします。
「Streams」ページが表示され、「設定」オプションが表示されます。

tdpii_setup.gifの説明

5. 「Streams管理者ユーザー」をクリックして「Streams管理者を作成」ページを開きます。
tdpii_create_strms_admin.gifの説明

6. 「資格証明」セクションのフィールドを完了します。

- 「ホスト名」フィールドに、データベースが実行されているホストの名前を入力します。

- 「ポート」フィールドにデータベース・リスナーのポート番号を入力します。

- 「SID」または「サービス名」フィールドに、Oracleシステム識別子(SID)またはデータベースのサービス名を入力します。

- 「DBAユーザー名」フィールドに、ユーザーを作成し権限を付与できる管理ユーザーのユーザー名を入力します。

- 「DBAパスワード」フィールドに、DBAユーザーのパスワードを入力します。

- 「Streams管理者のユーザー名」フィールドに、Oracle Streams管理者のユーザー名を入力します。

- 「Streams管理者のパスワード」フィールドに、新しいOracle Streams管理者のパスワードを入力します。

- 「表領域」フィールドにstreams_tbsと入力します。この表領域は、「チュートリアル: Oracle Streams管理者の表領域の作成」で作成されたものです。

「ホスト名」、「ポート」、「SID」または「サービス名」フィールドで、現在のデータベースまたは異なるデータベースを指定できます。Oracle Streams管理者は、これらのフィールドで指定したデータベースに作成されます。

7. 「OK」をクリックして、Oracle Streams管理者の構成を完了します。

別の項からこの項に移動した場合は、ここでその項に戻ります。

- 「チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成」

- 「チュートリアル: ダウンストリーム取得プロセスを使用した2データベース・レプリケーションの構成」

- 「チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成」

- 「チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成」

- 「メッセージ機能の準備」

ANYDATAキューの作成

キューには、Oracle Streams環境のメッセージが格納されます。Oracle Streamsレプリケーション環境では、キューにはデータベース変更に関する情報を含むメッセージが格納されます。Oracle Streamsメッセージ機能環境では、キューにはアプリケーションおよびユーザーによって生成および使用されるメッセージが格納されます。通常、Oracle Streams環境の各データベースには1つ以上のキューがあります。

ANYDATAキューにより、ほぼすべてのタイプのメッセージを簡単に格納できます。 ANYDATAキューを使用する場合は、たとえば複数の異なるタイプのアプリケーション・メッセージを同じキューに格納できます。 ANYDATAキューは、Oracle Streamsレプリケーション環境のデータベース変更に関する情報の格納に使用する必要があります。

ANYDATAキューおよび関連キュー表を作成するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「Streams」セクションの「アドバンスト・キューの管理」をクリックします。

5. 「アドバンスト・キューの管理」ページで、「作成」をクリックして「キューを作成: キュー・タイプ」ページを開きます。
tdpii_create_queue_type.gifの説明

6. 「通常のキュー、SYS.ANYDATAデータ型」を選択します。
ANYDATAデータ型のキューにより、単一キュー内のほぼ任意のタイプのメッセージを格納できます。

7. 「続行」をクリックして、「キューの作成: 通常のキュー、SYS.ANYDATAデータ型」ページを開きます。
tdpii_create_queue.gifの説明

8. 「名前」フィールドにキューの名前を入力します。Oracle Streams環境で使用される典型的なキュー名はstreams_queueですが、必要に応じて別の名前を入力することもできます。

9. キュー表の所有者の名前とキュー表の名前を「キュー表」フィールドに入力します。通常、Oracle Streams管理者はOracle Streamsキューを所有し、典型的なキュー表名はstreams_queue_tableです。したがって、strmadmin.streams_queue_tableと入力するか、必要に応じて別の所有者と名前を入力できます。

10. Oracle Streams管理者の名前が「キュー・ユーザー」フィールドに入力されていることを確認します。

11. オプションで、キューの説明を「説明」フィールドに入力します。

12. 「終了」をクリックしてキュー表とキューを作成します。

注意:
DBMS_STREAMS_ADM.SET_UP_QUEUEプロシージャを使用して、ANYDATAキューを作成することもできます。

別の項からこの項に移動した場合は、ここでその項に戻ります。

- 「チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成」

- 「タスク2: キューの構成とキュー間の伝播の構成」

- 「タスク2: キューおよびメッセージ・クライアントの構成」

関連項目:

- 「キューの変更」

チュートリアル: データベース・リンクの作成

分散データベース環境の2つの場所の間に通信パスを確立するには、データベース・リンクを作成する必要があります。 データベース・リンクは、あるデータベースから別のデータベースへの1方向通信パスを定義するポインタです。Oracle Databaseは、データベース・リンクを使用して、あるデータベース上のユーザーがリモート・データベース内のオブジェクトにアクセスできるようにします。ローカル・ユーザーは、リモート・データベース上のユーザーでない場合でも、リモート・データベースへのデータベース・リンクを使用できます。

データベース・リンクは、複数のデータベースにデータを格納する環境またはデータベース間で情報を共有する環境でほとんどの場合に必要です。これらの環境には、分散SQL、Oracle Streamsレプリケーション、マテリアライズド・ビュー・レプリケーションおよびメッセージ機能を使用する環境があります。

分散環境の各データベースのGLOBAL_NAMES初期化パラメータはTRUEに設定されているため、2つのデータベース間にリンクを確立する場合はグローバル・データベース名を使用する必要があります。これにより、各データベース・リンクが適切なリモート・データベースに接続できます。

2つのデータベース間にデータベース・リンクを作成する前に、ネットワーク接続を構成して、データベースが相互に通信できるようにする必要があります。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

ii1.example.comデータベースからii2.example.comデータベースへのデータベース・リンクを作成するには:

1. Oracle Streams管理者strmadminやSYSTEMなどの管理ユーザーとして、Enterprise Managerにログインします。データベース・リンクは、このユーザーのスキーマに作成されます。

2. ii1.example.comデータベース・インスタンスの「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「データベース・オブジェクト」セクションの「データベース・リンク」をクリックします。

5. 「データベース・リンク」ページで、「作成」をクリックして「データベース・リンクの作成」ページを開きます。
tdpii_create_db_link.gifの説明

6. 「名前」フィールドにデータベース・リンクの名前を入力します。名前は、リンク先のデータベースのグローバル名である必要があります。この例では、データベース・リンク名はii2.example.comです。

7. 「ネット・サービス名」フィールドに、リンク先のデータベースのネット・サービス名を入力します。この例では、ネット・サービス名はii2.example.comです。

8. 「接続モード」セクションで「固定ユーザー」を選択します。

9. 「ユーザー名」フィールドで、データベース・リンクを所有するユーザーのユーザー名を入力します。データベース・リンクは、リモート・データベース上のこのユーザーに接続します。この例では、システムのSYSTEMなどの管理ユーザー、Oracle Streams管理者strmadmin、またはoeなどの通常のデータベース・ユーザーを入力できます。

10. 「パスワード」および「パスワードの確認」フィールドで、リモート・データベース上の指定されたユーザーのパスワードを入力します。

11. 「OK」をクリックしてデータベース・リンクを作成します。

注意:
SQL文CREATE DATABASE LINKを使用して、データベース・リンクを作成することもできます。

別の項からこの項に移動した場合は、ここでその項に戻ります。

- 「チュートリアル: 複数のOracle Databaseの問合せ」

- 「チュートリアル: 複数のOracle Database内のデータの変更」

- 「チュートリアル: リモートOracle Database内のストアド・プロシージャの実行」

- 「Oracle以外のデータベースで動作するOracle Databaseの構成」

- 「チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成」

- 「タスク2: キューの構成とキュー間の伝播の構成」

- 「チュートリアル: データの比較および収束の準備」

関連項目:

- 「GLOBAL_NAMES初期化パラメータをTRUEに設定」

- 「データ・レプリケーションと統合の概要」

- 「データ・レプリケーションと統合の機能の概要」

3 複数のデータベース内の情報のアクセスおよび変更

この章では、複数のOracleおよびOracle以外のデータベース内の情報のアクセス方法および変更方法を説明します。

この章は次の項で構成されています。

- 複数のデータベース内の情報のアクセスおよび変更の概要

- 複数のOracle Database内の情報のアクセスおよび変更の準備

- チュートリアル: 複数のOracle Databaseの問合せ

- チュートリアル: 複数のOracle Database内のデータの変更

- チュートリアル: リモートOracle Database内のストアド・プロシージャの実行

- Oracle以外のデータベースにあるデータの処理

複数のデータベース内の情報のアクセスおよび変更の概要

Oracle Databaseに接続している間は、他のOracle Database内およびOracle以外のデータベース内の情報にアクセスして変更できます。2つ以上のデータベース内の情報が1つのデータベースに出現する場合は、これをフェデレーションと呼びます。フェデレーションは、情報を元の場所に残し、そこでメンテナンスと更新が行われます。複数のデータ・ソースが1つの仮想データベースに統合されているように見えるため、異なる種類のデータベースが1つの統合ビューに表示されます。フェデレーテッド構成により、すべてのデータベースがアプリケーションとエンド・ユーザーから1つの仮想データベースのように見えるため、分散システムでの複雑さが一部緩和されます。

次の各項で、複数のデータベース内の情報のアクセスおよび変更に関する詳細情報を示します。

- 分散SQLの概要

- シノニムおよび位置の透過性の概要

- Oracle以外のデータベース内の情報のアクセスおよび変更の概要

- ストアド・プロシージャの概要

関連項目:

- 「複数のデータベース内の情報のアクセスおよび変更時期」

分散SQLの概要

分散SQLにより、アプリケーションおよびユーザーは、複数のデータベース内の情報を単一のSQL文で問合せまたは変更できます。分散SQLはデータの物理的な位置をマスクするため、アプリケーションを変更しなくてもデータの位置を変更できます。分散SQLには、分散問合せ(データにアクセスします)と分散トランザクション(データを変更します)があります。分散トランザクションでは、2フェーズ・コミット・メカニズムにより、分散トランザクションに関係する各データベースでトランザクション内のすべての文を1単位としてコミットまたはロール・バックすることでデータの整合性が保証されます。

アプリケーションまたはユーザーが分散トランザクションのコミットを試行する場合、アプリケーションまたはユーザーが接続されているデータベースはグローバル・コーディネータと呼ばれます。グローバル・コーディネータは、次のフェーズを開始することによって2フェーズ・コミットを完了します。

- 準備フェーズ: グローバル・コーディネータは、分散トランザクション内の関係する他のデータベースに対して、障害が発生した場合でもトランザクションをコミットまたはロール・バックできることの確認を求めます。いずれかのデータベースが準備フェーズを完了できない場合は、トランザクションがロール・バックされます。

- コミット・フェーズ: 他のすべてのデータベースが、準備されていることをグローバル・コーディネータに通知する場合、グローバル・コーディネータはトランザクションをコミットし、他のすべてのデータベースにトランザクションのコミットを要求します。

関連項目:

- 『Oracle Database管理者ガイド』

シノニムおよび位置の透過性の概要

シノニムは、別のデータベース・オブジェクトの別名として機能するデータベース・オブジェクトです。パブリック・シノニムとプライベート・シノニムの両方を作成できます。すべてのデータベース・ユーザーがパブリック・シノニムにアクセスできます。プライベート・シノニムは、特定のユーザーのスキーマにあり、プライベート・シノニムへのアクセス権を付与されたユーザーのみがこれを使用できます。

分散環境では、シノニムはデータベース・オブジェクトの位置の透過性を提供できます。シノニムは、データベース・オブジェクトの位置をアプリケーションおよびユーザーから隠します。データベース・オブジェクトを移動または名前変更する必要がある場合は、シノニムを再定義でき、アプリケーションおよびユーザーは変更を行わずにシノニムを使用し続けることができます。

たとえば、リモート・データベースにあるhr.employees表にii2.example.comというグローバル名でアプリケーションがアクセスする必要があるとします。リモート・データベースへのデータベース・リンクが存在し、データベース・リンクの名前はii2.example.comです。この場合は、hrスキーマに表hr.employees@ii2.example.comを指すemployeesという名前のシノニムを作成できます。シノニムがある場合、ローカル・データベースのアプリケーションはhr.employeesを使用してリモート表にアクセスできます。

Oracle以外のデータベース内の情報のアクセスおよび変更の概要

分散SQLを使用して、Oracle DatabaseだけでなくOracle以外のデータベース内のデータをフェデレートできます。Oracle Database Gatewayにより、Oracle Databaseは、Sybase、DB2、Informix、Microsoft SQL Server、INGRES、Teradataデータベースなど、Oracle以外の複数のデータベース内にあるデータにアクセスして変更できます。このアクセスは、エンド・ユーザーに対して完全に透過的です。つまり、Oracle DatabaseとOracle以外のデータベースのどちらのデータにアクセスするかにかかわらず、同じSQL文を発行できます。

注意:
特定のOracle Database Gatewayの機能は、アクセスされるOracle以外のデータベースの機能によって制限されます。特定のOracle Database Gatewayの制限の詳細は、特定のゲートウェイのOracleドキュメントを参照してください。

関連項目:

- 「Oracle以外のデータベースにあるデータの処理」

ストアド・プロシージャの概要

フェデレーテッド環境で複雑な操作を実行する際のネットワーク・トラフィックを削減するために、ストアド・プロシージャを使用できます。 プロシージャまたはファンクションは、特定の問題を解決するため、または関連する一連のタスクを実行するために実行されるスキーマ・オブジェクトです。ファンクションがコール元に必ず単一の値を返すのに対し、プロシージャは値を返さないという点を除き、プロシージャとファンクションは同一です。一般に、アクションの実行にはプロシージャを使用し、値の計算にはファンクションを使用します。このマニュアルでは、ストアド・プロシージャという一般用語にはプロシージャとファンクションの両方が含まれます。

Oracle Databaseでは、PL/SQLまたはJavaに書き込まれるストアド・プロシージャがサポートされますが、このマニュアルでは、PL/SQLストアド・プロシージャについてのみ説明します。PL/SQLストアド・プロシージャは、SQL文のセットと、グループ化されてデータベースに格納されている他のPL/SQL構成メンバーから構成されます。ストアド・プロシージャでは、SQLの容易性および柔軟性を構造化プログラミング言語のプロシージャ型機能と組み合せることができます。

SQL文と同様に、ストアド・プロシージャを実行するには、物理的な位置を認識する必要はありません。同様に、適切なOracle Database Gatewayを使用して、Oracle以外のデータベースにあるストアド・プロシージャもコールできます。この場合、ゲートウェイはPL/SQLコールをOracle以外のデータベースのストアド・プロシージャにマッピングします。

関連項目:

- 「チュートリアル: リモートOracle Database内のストアド・プロシージャの実行」

- PL/SQLストアド・プロシージャの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

- Javaストアド・プロシージャの詳細は、『Oracle Database Java開発者ガイド』を参照してください。

複数のOracle Database内の情報のアクセスおよび変更の準備

この項では、他のデータベースにある情報にアクセスしそれを変更するためのデータベースの準備に必要なアクションについて説明します。

複数のデータベース内の情報のアクセスおよび変更を準備するには:

1. 分散環境の各Oracle DatabaseでGLOBAL_NAMES初期化パラメータをTRUEに設定します。方法については、「GLOBAL_NAMES初期化パラメータをTRUEに設定」を参照してください。

2. ネットワーク接続を構成して、データベースが相互に通信できるようにします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

チュートリアル: 複数のOracle Databaseの問合せ

分散問合せは、2つ以上のデータベース内の情報にアクセスします。シノニムまたはSELECT文で、名前の最後に@dblinkを付けることにより、リモート表、ビュー、またはマテリアライズド・ビューを識別できます。 dblinkは、リモート・データベース・オブジェクトを含むデータベースへのデータベース・リンクです。

この項の分散問合せを実行する前に、次の条件を満たします。

- 「複数のOracle Database内の情報のアクセスおよび変更の準備」で説明する前提条件を満たします。

- ローカル・データベースから、問合せに含まれるデータベース・オブジェクトを含む任意のリモート・データベースへのデータベース・リンクを作成します。この項の例では、ii1.example.comデータベースのSYSTEMユーザーが、ii2.example.comデータベースのSYSTEMユーザーに接続するデータベース・リンクを使用します。このようなデータベース・リンクの作成の詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

- hrサンプル・スキーマがローカル・データベースにインストールされ、oeサンプル・スキーマがリモート・データベースにインストールされていることを確認します。これらのサンプル・スキーマは、Oracle Databaseとともにデフォルトでインストールされます。

この項では、ii1.example.comとii2.example.comをサンプル・データベースとして使用します。使用している環境で、これらの条件を満たす任意の2つのデータベースをかわりに使用できます。

この例では、次のことを想定します。

- 会社が人事情報をii1.example.comデータベースのhrスキーマに保持し、注文入力情報をii2.example.comデータベースに保持しています。

- hr.employees表のemployee_idはoe.orders表のsales_rep_idに対応します。

- 管理者は、注文に関する質問があり、注文について営業担当者に問い合せる必要があります。

この場合、営業担当者の連絡先情報は、ii1.example.comデータベースのhr.employees表にあり、注文情報はii2.example.comデータベースのoe.orders表にあります。

ii1.example.comデータベースとii2.example.comデータベースの情報を組み合せて営業担当者の連絡先情報を表示する分散問合せを実行するには:

1. リモート・データベース・オブジェクトのシノニムを作成します。この例では、ii2.example.comデータベースにあるoe.orders表を指すordというシノニムをhrスキーマ内に作成します。

1. SYSTEMユーザーとしてEnterprise Managerにログインします。

2. ii1.example.comデータベース・インスタンスの「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「データベース・オブジェクト」セクションの「シノニム」をクリックします。

5. 「シノニム」ページで、「作成」をクリックします。

6. 「シノニムの作成」ページで、「一般」セクションの「名前」フィールドにordと入力します。

7. 「タイプ」に対して「スキーマ」を選択した状態で、「スキーマ」フィールドにhrと入力し、懐中電灯アイコンをクリックしてhrスキーマを選択します。

8. 「データベース」セクションで、「リモート」を選択します。

9. 「サービス名」フィールドの懐中電灯アイコンをクリックして、SYSTEMユーザーのii2.example.comデータベース・リンクを選択します。

10. 「元となるオブジェクト」セクションで、oe.ordersと入力します。

11. 「OK」をクリックしてシノニムを作成します。

注意:
SQL文CREATE SYNONYMを使用して、シノニムを作成することもできます。

2. SQL*Plusのコマンドラインを開き、SYSTEMユーザーとしてii1.example.comデータベースに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

3. 次の問合せを実行します。

COLUMN FIRST_NAME HEADING 'First Name' FORMAT A20
COLUMN LAST_NAME HEADING 'Last Name' FORMAT A20
COLUMN PHONE_NUMBER HEADING 'Phone Number' FORMAT A20

SELECT e.first_name, e.last_name, e.phone_number
FROM hr.employees e, hr.ord o
WHERE o.order_id    = 2456 AND
e.employee_id = o.sales_rep_id;

出力は、次のようになります。

First Name           Last Name            Phone Number
-------------------- -------------------- --------------------
Danielle             Greene               011.44.1346.229268

関連項目:

- 「複数のデータベース内の情報のアクセスおよび変更時期」

チュートリアル: 複数のOracle Database内のデータの変更

分散トランザクションには、2つ以上のデータベース内のデータまたはデータベース・オブジェクトの構造を個別に、またはグループとして変更する1つ以上の文が含まれます。シノニム、またはリモート・データベース内のデータを変更する文では、名前の最後に@dblinkを追加することでデータベース・オブジェクトを識別できます。 dblinkは、リモート・データベース・オブジェクトを含むデータベースへのデータベース・リンクです。

表のデータを変更する文は、データ操作言語(DML)と呼ばれます。データベース・オブジェクトの構造を変更する文は、データ定義言語(DDL)文と呼ばれます。DML文とDDL文は、どちらも分散トランザクションの一部にすることができます。

この項の分散トランザクションを実行する前に、次の条件を満たします。

- 「複数のOracle Database内の情報のアクセスおよび変更の準備」で説明する前提条件を満たします。

- ローカル・データベースから、トランザクションに含まれるデータベース・オブジェクトを含む任意のリモート・データベースへのデータベース・リンクを作成します。この項の例では、ii1.example.comデータベースのSYSTEMユーザーが、ii2.example.comデータベースのSYSTEMユーザーに接続するデータベース・リンクを使用します。このようなデータベース・リンクの作成の詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

- hrサンプル・スキーマがローカル・データベースにインストールされ、oeサンプル・スキーマがリモート・データベースにインストールされていることを確認します。これらのサンプル・スキーマは、Oracle Databaseとともにデフォルトでインストールされます。

この項では、ii1.example.comとii2.example.comをサンプル・データベースとして使用します。使用している環境で、これらの条件を満たす任意の2つのデータベースをかわりに使用できます。

この例では、次のことを想定します。

- 会社が人事情報をii1.example.comデータベースのhrスキーマに保持し、注文入力情報をii2.example.comデータベースに保持しています。

- hr.employees表のemployee_idはoe.orders表のsales_rep_idに対応します。

- 営業担当者は、営業マネージャにジョブをプロモートしました。 hr.employees表内のこの営業担当者のemployee_idは154です。この従業員のjob_idおよびmanager_idデータをhr.employees表で変更する必要があります。

- プロモートされた営業担当者の現在の注文は、別の営業担当者に転送されます。 hr.employees内で、注文を担当する営業担当者のemployee_idは148です。 sales_rep_id 154に現在割り当てられているoe.orders表のすべての注文は、sales_rep_id 148に変更する必要があります。

会社は、これらの変更を単一の分散トランザクションでコミットすることを希望します。

ii1.example.comデータベースとii2.example.comデータベースの両方でデータを変更する分散トランザクションを実行するには:

1. リモート・データベース・オブジェクトのシノニムを作成します。この例では、ii2.example.comデータベースにあるoe.orders表を指すordというシノニムをhrスキーマ内に作成します。このシノニムの作成方法は、「チュートリアル: 複数のOracle Databaseの問合せ」の手順1を参照してください。

2. SQL*Plusのコマンドラインを開き、SYSTEMユーザーとしてii1.example.comデータベースに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

3. 各データベースのデータを更新し、変更をコミットします。

UPDATE hr.employees SET
job_id = 'SA_MAN', manager_id = 100
WHERE employee_id = 154;

UPDATE hr.ord
SET   sales_rep_id = 148
WHERE sales_rep_id = 154;

COMMIT;

関連項目:

- 「複数のデータベース内の情報のアクセスおよび変更時期」

チュートリアル: リモートOracle Database内のストアド・プロシージャの実行

リモート・プロシージャ・コール(RPC)は、リモート・データベースのプロシージャまたはファンクションを実行します。RPCは、リモート・プロシージャに定義されている作業を実行します。リモート・プロシージャまたはファンクションを実行するには、名前の最後に@dblinkを追加することでリモート・プロシージャまたはファンクションを識別できます。 dblinkは、リモート・プロシージャまたはファンクションを含むデータベースへのデータベース・リンクです。リモート・プロシージャまたはファンクションを指すシノニムも作成できます。

この項のサンプルRPCを実行する前に、次の条件を満たします。

- 「複数のOracle Database内の情報のアクセスおよび変更の準備」で説明する前提条件を満たします。

- ローカル・データベースから、コールされるプロシージャまたはファンクションを含む任意のリモート・データベースへのデータベース・リンクを作成します。この項の例では、ii1.example.comデータベースのSYSTEMユーザーが、ii2.example.comデータベースのSYSTEMユーザーに接続するデータベース・リンクを使用します。このようなデータベース・リンクの作成の詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

- hrサンプル・スキーマがリモート・データベースにインストールされていることを確認します。 hrサンプル・スキーマは、Oracle Databaseとともにデフォルトでインストールされます。

この項では、ii1.example.comとii2.example.comをサンプル・データベースとして使用します。使用している環境で、これらの条件を満たす任意の2つのデータベースをかわりに使用できます。

この例では、次のことを想定します。

- 会社が人事情報をii2.example.comデータベースのhrスキーマに保持しています。

- hrスキーマはローカルii1.example.comデータベースに存在しません。

- 従業員が会社を退職するときに、hrスキーマのadd_job_historyというプロシージャはhr.job_history表に行を挿入します。この行には、従業員の会社での履歴に関する情報が含まれます。

- employee_idが127の従業員が会社を退職します。

- ii1.example.comデータベースに接続し、ii2.example.comデータベースのadd_job_historyプロシージャを実行して、従業員127のジョブ履歴を記録します。

RPCを実行して従業員のジョブ履歴を記録するには:

1. SQL*Plusのコマンドラインを開き、SYSTEMユーザーとしてii1.example.comデータベースに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. ii2.example.comデータベースのadd_job_historyプロシージャを実行して、従業員のジョブ履歴を記録します。

exec hr.add_job_history@ii2.example.com(127,'14-JAN-99','26-JUN-06','ST_CLERK',50);

3. 変更をコミットします。

COMMIT;

この手順は、リモート・プロシージャがコミットする場合は不要です。

4. オプションとして、ii2.example.comデータベースのhr.job_history表を問い合せて、挿入された行を確認します。

SELECT * FROM hr.job_history@ii2.example.com ORDER BY employee_id;

出力は、次のようになります。

EMPLOYEE_ID START_DAT END_DATE  JOB_ID     DEPARTMENT_ID
----------- --------- --------- ---------- -------------
101 21-SEP-89 27-OCT-93 AC_ACCOUNT           110
101 28-OCT-93 15-MAR-97 AC_MGR               110
102 13-JAN-93 24-JUL-98 IT_PROG               60
114 24-MAR-98 31-DEC-99 ST_CLERK              50
122 01-JAN-99 31-DEC-99 ST_CLERK              50
127 14-JAN-99 26-JUN-06 ST_CLERK              50
176 24-MAR-98 31-DEC-98 SA_REP                80
176 01-JAN-99 31-DEC-99 SA_MAN                80
200 17-SEP-87 17-JUN-93 AD_ASST               90
200 01-JUL-94 31-DEC-98 AC_ACCOUNT            90
201 17-FEB-96 19-DEC-99 MK_REP                20

employee_idが127の従業員のジョブ履歴が表に記録されていることに注意してください。

関連項目:

- 「複数のデータベース内の情報のアクセスおよび変更時期」

Oracle以外のデータベースにあるデータの処理

Oracle Database Gatewayにより、Oracle Databaseは、Sybase、DB2、Informix、Microsoft SQL Server、INGRES、Teradataデータベースなど、Oracle以外の複数のデータベース内にあるデータにアクセスして変更できます。最良のパフォーマンスおよび有用性のために、Oracle以外のデータベースを処理する際には、確立されたベスト・プラクティスに従う必要があります。

この項の内容は次のとおりです。

- Oracle以外のデータベースで動作するOracle Databaseの構成

- Oracle以外のデータベースの処理のベスト・プラクティス

関連項目:

- 「複数のデータベース内の情報のアクセスおよび変更時期」

- 「Oracle以外のデータベース内の情報のアクセスおよび変更の概要」

Oracle以外のデータベースで動作するOracle Databaseの構成

データの問合せ、データの変更、またはOracle以外のデータベース内のストアド・プロシージャを実行する前に、いくつかのタスクを実行する必要があります。

Oracle以外のデータベース内のデータの操作を開始するには:

1. Oracle以外のデータベースごとに、Oracle Database Gatewayソフトウェアをインストールし、構成します。Oracle Database Gatewayソフトウェアは、Oracle Databaseを実行しているコンピュータ・システム、Oracle以外のデータベースを実行しているコンピュータ・システムまたは第3のコンピュータ・システムにインストールできます。特定のOracle Database Gatewayのインストールおよび構成の詳細は、そのゲートウェイのOracleドキュメントを参照してください。

2. Oracle Databaseが、手順1で構成されたOracle Database Gatewayのリスナーと通信できるように、Oracle Net Servicesを構成します。方法については、『Oracle Database Net Services管理者ガイド』を参照してください。

Oracle Database Gatewayとの通信が確立された後で、Oracle DatabaseはOracle以外のデータベースと通信できます。Oracle Databaseは、異機種間サービスを使用してOracle Database Gatewayと通信します。異機種間サービスの構成オプションの詳細は、『Oracle Database Heterogeneous Connectivity User's Guide』を参照してください。

3. Oracle以外のデータベースへのデータベース・リンクを作成します。このデータベース・リンクを作成するときは、明示的にCONNECT TO句を使用する必要があります。手順1および2を完了すると、Oracle Databaseに接続するときと同様にデータベース・リンクを作成できます。詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

これらの手順を完了した後で、Oracle以外のデータベース内のデータおよびプロシージャに透過的にアクセスできます。Oracle以外のデータベースを操作するには、次の項の手順に従って、Oracle以外のデータベース内のデータベース・オブジェクトを指定します。

- 「チュートリアル: 複数のOracle Databaseの問合せ」

- 「チュートリアル: 複数のOracle Database内のデータの変更」

- 「チュートリアル: リモートOracle Database内のストアド・プロシージャの実行」

Oracle以外のデータベースの処理のベスト・プラクティス

Oracle Database Gatewayのパフォーマンスは、ネットワークのスピード、使用可能なメモリー、データベースからデータベースへ転送されるデータ量および同時セッションの数などの、いくつかの要素から影響を受けます。これらの要素には、より高いパフォーマンスを得るために調整できるものもあります。

次のベスト・プラクティスで、より高いパフォーマンスを実現できます。

- 事後処理の削減

- Oracle以外のデータベースのチューニング

- 関連する初期化パラメータの設定

- Oracle Database Gatewayインストールの場所の確認

- 十分なメモリーの確認

- 大/小文字の差異の考慮

事後処理の削減

大量の事後処理がある場合、パフォーマンスに悪影響を与えます。より高いパフォーマンスを実現するには、可能なかぎりSQL文をOracle以外のデータベースで処理するようにします。 WHERE句の一部がOracle以外のデータベースへ送信されたSQLから欠落したり、結合が分割されると、問合せは事後処理になります。

次のベスト・プラクティスに従って事後処理を削減します。

- 可能であれば、WHERE句でSQLファンクションを使用しないでください。 WHERE句のSQLファンクションはゲートウェイのパフォーマンスに影響を与えます。Oracle以外のデータベース内で一致しないOracleファンクションを使用している場合、ゲートウェイは補正を行います。データはOracle以外のデータベースから取得され、ファンクションはOracle Databaseに適用されます。

- ヒントを使用して問合せ計画を改善します。ゲートウェイ・トレース・ファイルまたは実行計画を参照して、Oracle以外のデータベースに送信するSQLを決定します。たとえば、SQL文にOracle以外のデータベースでの表の結合が含まれていて、それらが事後処理である場合、ヒントを使用して、Oracle以外のデータベースでの結合を実行できます。

Oracle以外のデータベースのチューニング

オプティマイザに最適な計画を生成する十分な情報がない場合、パフォーマンスは悪影響を受けます。Oracleオプティマイザは、Oracle以外のデータベースの表および索引統計を使用し最適なパスを決定して、Oracle以外のデータベースのデータにアクセスします。この情報が欠落または不正確な場合、アクセス・パスは最適ではありません。Oracle以外のデータベースで索引を定義すると、ゲートウェイのパフォーマンスが向上します。Oracleオプティマイザの詳細は、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください。

関連する初期化パラメータの設定

次の初期化パラメータをカスタマイズして、パフォーマンスを向上できます。

- HS_RPC_FETCH_SIZE

- HS_FDS_FETCH_ROWS

- HS_LANGUAGE

たとえば、Oracle以外のデータベースでアクセスしているデータが、Oracle Databaseで使用しているキャラクタ・セットと同じ場合、HS_LANGUAGE初期化パラメータをOracle Databaseのキャラクタ・セットに設定します。

Oracle Database Gatewayインストールの場所の確認

Oracle Database Gatewayのインストールの場所がパフォーマンスに影響する可能性があります。たとえば、CPUに制約がある場合、Oracle Databaseを実行するコンピュータ・システムでOracle Database Gatewayをインストールしないでください。

十分なメモリーの確認

Oracle Database Gatewayが実行されているコンピュータ・システムに十分なメモリーがあることを確認してください。メモリー要件に影響するいくつかの要素があります。これらには、処理されているSQL文、同時セッションの数、オープン・カーソルの数、アクセスされている表の列の数などが含まれます。

大/小文字の差異の考慮

Oracle以外のデータベースを操作する場合は、識別子を二重引用符で囲まないかぎりOracle Databaseの文字がデフォルトで大文字になることに注意してください。たとえば、empという名前のSybase表を参照するには、次の例のように二重引用符で囲んだ名前を入力します。

SELECT * FROM "emp"@SYBS;

一方、ユーザーSmithが所有しているempという名前のSybase表をOracleアプリケーションから参照するには、次のように入力します。

SELECT * FROM "Smith"."emp"@SYBS;

empという名前のSybase表がSMITH(大文字の表所有者名)によって所有されている場合は、次の例に示すように二重引用符を付けずに所有者名を入力できます。

SQL> SELECT * FROM SMITH."emp"@SYBS;

SQL> SELECT * FROM smith."emp"@SYBS;

SQL> SELECT * FROM SmItH."emp"@SYBS;

関連項目:

- 特定のOracle Database Gatewayに関するOracleドキュメント

- 『Oracle Database Heterogeneous Connectivity User's Guide』

4 Oracle Streamsを使用したデータのレプリケート

この章では、Oracle Streamsレプリケーションに関する概念を示し、データベース間のデータの連続的なレプリケート方法を説明します。

この章は次の項で構成されています。

- Oracle Streamsレプリケーションの概要

- Oracle Streamsレプリケーションの準備

- Oracle Streamsレプリケーションの構成: 例

関連項目:

- 第5章「Oracle Streamsレプリケーション環境の管理」

- 第6章「Oracle Streamsレプリケーション環境の拡張」

- 『Oracle Streamsレプリケーション管理者ガイド』

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

Oracle Streamsレプリケーションの概要

レプリケーションは、複数のデータベースでデータベース・オブジェクトとデータを共有するプロセスです。データベース・オブジェクトとデータを複数のデータベースでメンテナンスするために、あるデータベースでのこれらのデータベース・オブジェクトの1つに対する変更が他のデータベースと共有されます。このようにして、レプリケーション環境内のすべてのデータベースでデータベース・オブジェクトとデータの同期が維持されます。

一部のレプリケーション環境は、共有データベース・オブジェクトに対して行われた変更を絶えずレプリケートする必要があります。 Oracle Streamsは、連続レプリケーションのためのOracle Database機能です。通常、このような環境では、共有データベース・オブジェクトを含むデータベースがほぼ常にネットワークに接続され、これらのネットワーク接続上でデータベース変更を絶えずプッシュします。

1つの共有データベース・オブジェクトに対して変更が行われると、Oracle Streamsは次のアクションを実行して、同じ変更が他の各データベースの対応する共有データベース・オブジェクトに対して行われるようにします。

1. Oracle Streamsは、変更を自動的に取得し、それをキューにステージングします。

2. Oracle Streamsは、共有データベース・オブジェクトを含む他の各データベース内のキューに変更を自動的にプッシュします。

3. Oracle Streamsは、他の各データベースでの変更を自動的に処理します。処理中に、Oracle Streamsはキューから変更をデキューし、変更を共有データベース・オブジェクトに適用します。

図4-1に、Oracle Streamsの情報フローを示します。

図4-1 Oracle Streamsの情報フロー

「図4-1 Oracle Streamsの情報フロー」の説明

Oracle Streamsレプリケーションを使用して、複数のデータベースでデータを共有し、これらのデータベースでデータを効率よく最新に保つことができます。たとえば、全世界にいくつかのコール・センターを持つ会社は、顧客情報を各コール・センターのローカル・データベースに格納できます。このような環境では、Oracle Streamsでの連続レプリケーションにより、ある場所の顧客データに対して行った変更が、できるだけ早く他のすべての場所にプッシュされるようにすることができます。

Oracle Streamsを使用してデータベース・オブジェクトに対する変更を取得する場合、変更は論理変更レコード(LCR)に書式設定されます。LCRは、データベース変更を説明する特定の形式のメッセージです。変更がデータ操作言語(DML)操作だった場合は、行LCRにより、DML操作の結果として発生した行変更がそれぞれカプセル化されます。1つのDML操作によって複数の行変更が発生する場合があるため、1つのDML操作によって複数の行LCRが発生することがあります。変更がデータ定義言語(DDL)操作だった場合、1つのDDL LCRがDDL変更をカプセル化します。

次の各項で、Oracle Streamsレプリケーションを詳細に説明します。

- 変更の取得の概要

- データベース間の変更の伝播の概要

- 変更の適用の概要

- 取得、伝播および適用の動作を制御するルールの概要

- 同一でないコピーのルールベースの変換の概要

- サプリメンタル・ロギングの概要

- 競合と競合解消の概要

- 変更の循環を回避するためのタグの概要

- Oracle Streamsレプリケーション環境の一般的なタイプの概要

- Oracle Streamsが提供する主要なPL/SQLパッケージおよびデータ・ディクショナリ・ビューの概要

関連項目:

- 「Oracle Streamsでのデータのレプリケート時期」

変更の取得の概要

Oracle Streamsは、データベース変更を自動的に取得する2つの方法を提供します。

- 取得プロセスは、比較的大量の表、スキーマ全体またはデータベースに対するデータ操作言語(DML)変更の取得に使用します。また、取得プロセスは、表およびその他のデータベース・オブジェクトに対するデータ定義言語(DDL)変更の取得に使用する必要があります。詳細は、「取得プロセスでの変更の取得の概要」を参照してください。

- 同期取得は、比較的少数の表に対するDML変更の取得に使用します。詳細は、「同期取得での変更の取得の概要」を参照してください。

単一の取得プロセスまたは単一の同期取得は、1つのデータベースのみに対して行われた変更を取得できます。変更が発生したデータベースは、変更のソース・データベースと呼ばれます。

注意:
このマニュアルの例ではDMLの変更のみをレプリケートします。DMLを変更する前に、DDL変更のレプリケートを理解する必要があります。DDL変更のレプリケートの詳細は、『Oracle Streamsレプリケーション管理者ガイド』および『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

関連項目:

- 「取得プロセスの管理」

- 「Oracle Streamsレプリケーションの準備」

取得プロセスでの変更の取得の概要

取得プロセスは、REDOログに記録された変更を非同期に取得するOracle Databaseのオプションのバックグラウンド処理です。取得プロセスは、データベース変更を取得すると、それを論理変更レコード(LCR)に変換し、LCRをエンキューします。エンキューは、メッセージをキューに置くプロセスです。

取得プロセスには常に1つのキューが関連付けられており、このキューのみにLCRをエンキューします。パフォーマンスを向上させるために、取得されたLCRは常にバッファ・キューに格納されます(バッファ・キューは、キューに関連付けられているシステム・グローバル領域(SGA)メモリーです)。

図4-2では、取得プロセスがどのように動作するかを示します。

図4-2 取得プロセス

「図4-2 取得プロセス」の説明

取得プロセスは、ソース・データベースまたはリモート・データベース上で実行できます。ソース・データベース上で実行する場合、取得プロセスはローカル取得プロセスと呼ばれます。リモート・データベース上で実行する場合、取得プロセスはダウンストリーム取得プロセスと呼ばれます。

ダウンストリーム取得では、REDO転送サービスは、ソース・データベースのログ・ライター・プロセス(LGWR)を使用して、ダウンストリーム取得を実行するデータベースにREDOデータを送信します。異なるデータベースが変更を取得するため、ダウンストリーム取得プロセスではソース・データベースのリソースが少なくてすみます。一方、ローカル取得プロセスは、ダウンストリーム取得よりも構成と管理が簡単です。ローカル取得プロセスによって、プラットフォームまたはOracle Databaseのバージョンが異なるレプリケーション環境にも柔軟性が提供されます。

関連項目:

- 「チュートリアル: ダウンストリーム取得プロセスを使用した2データベース・レプリケーションの構成」

- 「チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成」

- 「取得プロセスの管理」

- 「取得プロセスの監視」

- 『Oracle Streams概要および管理』

- 『Oracle Database 2日でデータベース管理者』

同期取得での変更の取得の概要

REDOログの非同期マイニングのかわりに、同期取得は内部メカニズムを使用して、データ操作言語(DML)の変更が表に対して行われたときにその変更を取得します。単一のDML変更によって、表の1つ以上の行が変更されることがあります。同期取得はそれぞれの行変更を取得し、それを行の論理変更レコード(LCR)に変換してエンキューします。

同期取得は常に単一のキューに関連付けられ、行LCRをこのキューにのみエンキューします。同期取得は常に行LCRを永続キューにエンキューします。永続キューは、メモリーではなくハード・ディスク上のキュー表にメッセージを格納するキューの部分です。

通常、同期取得は、比較的少数の表に対する変更を取得するレプリケーション環境で使用するのが最適です。多くの表、スキーマ全体またはデータベース全体に対する変更を取得する必要がある場合は、同期取得のかわりに取得プロセスを使用する必要があります。

図4-3では、同期取得がどのように動作するかを示します。

図4-3 同期取得

「図4-3 同期取得」の説明

注意:
Oracle Database 11g Standard Editionを使用している場合、同期取得はデータベース変更を自動的に取得できる唯一のOracle Streamsコンポーネントです。取得プロセスを使用するには、Oracle Database 11g Enterprise Editionが必要です。

関連項目:

- 「チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成」

- 『Oracle Streams概要および管理』

データベース間の変更の伝播の概要

伝播は1つのキューから他のキューにメッセージを送信します。Oracle Streamsを使用して、同じデータベース内、または異なるデータベース内の2つのキュー間のメッセージ伝播を構成できます。Oracle Streamsは、データベース・リンクとOracle Schedulerジョブを使用してメッセージを送信します。伝播は常に「ソース・キュー」と「宛先キュー」の間で行われます。Oracle Streamsレプリケーション環境では、伝播は通常、ローカル・データベース内のソース・キューからリモート・データベース内の宛先キューにデータベース変更を記述するメッセージを(LCRの形式で)送信します。

図4-4では、伝播を示します。

図4-4 伝播

「図4-4 伝播」の説明

関連項目:

- 「伝播の有効化および無効化」

- 「伝播の監視」

- 「チュートリアル: データベース・リンクの作成」

- Oracle Schedulerについては、『Oracle Database管理者ガイド』を参照してください。

変更の適用の概要

データベース変更が取得されて伝播された後、これらの変更はキューに存在し、レプリケーション・プロセスを完了するために適用する準備ができます。 適用プロセスは、論理変更レコード(LCR)およびその他のタイプのメッセージを特定のキューからデキューするオプションのOracle Databaseバックグラウンド・プロセスです。デキューは、メッセージをキューから取得するプロセスです。単純なOracle Streamsレプリケーション環境では、通常、適用プロセスはデキューするLCR内の変更をローカル・データベースのデータベース・オブジェクトに直接適用します。

適用プロセスは、常に単一のキューに関連付けられ、このキューからのみメッセージをデキューします。単一の適用プロセスは、バッファ・キューまたは永続キューからメッセージをデキューできますが、両方からデキューすることはできません。したがって、適用プロセスが、取得プロセスによって取得された変更を適用する場合は、バッファ・キューからLCRをデキューするように適用プロセスを構成する必要があります。一方、適用プロセスが、同期取得によって取得された変更を適用する場合は、永続キューからLCRをデキューするように適用プロセスを構成する必要があります。

図4-5では、適用プロセスがどのように動作するかを示します。

図4-5 適用プロセス

「図4-5 適用プロセス」の説明

適用プロセスは、LCRを正常に適用できない場合に、LCR、およびトランザクション内の他のすべてのLCRをエラー・キューという特別なキューに移動します。エラー・キューには、データベースの現在の適用エラーがすべて含まれます。データベースに複数の適用プロセスがある場合、エラー・キューには各適用プロセスの適用エラーが含まれます。エラーの原因となった条件を修正してから、エラー・キュー内の対応するトランザクションを再実行して変更を適用します。たとえば、表の行を変更してトランザクション・エラーの原因となった条件を修正し、トランザクションを再実行できます。

適用プロセスが変更をデータベース・オブジェクトに適用するためには、インスタンス化システム変更番号(SCN)をデータベース・オブジェクトに対して設定する必要があります。インスタンス化SCNは、ソース・データベースのSCNの後にコミットされた変更のみが適用プロセスによって適用されることを指定するデータベース・オブジェクトのSCNです。表のインスタンス化SCNでは、ソース・データベースと宛先データベースで指定されたSCNに一貫性があることを前提としています。通常、インスタンス化SCNは、Oracle Streamsレプリケーション環境を構成するときに自動的に設定されます。

注意:
適用プロセスは、デキューするメッセージを、適用ハンドラに渡すこともできます。適用ハンドラは、SQL文のコレクション、またはメッセージのカスタム処理を実行するユーザー定義PL/SQLプロシージャです。適用ハンドラについては、このマニュアルでは説明しません。詳細は、『Oracle Streams概要および管理』を参照してください。

関連項目:

- 「適用プロセスの管理」

- 「適用プロセスの監視」

取得、伝播および適用の動作を制御するルールの概要

Oracle Streamsレプリケーション構成では、レプリケート対象を指定する必要があります。取得プロセス、同期取得、伝播および適用プロセスは、Oracle Streamsクライアントと呼ばれます。Oracle Streamsクライアントがレプリケートする対象は、ルールによって決まります。ルールはOracle Streamsクライアントごとに個別に設定でき、異なるOracle Streamsクライアント間でルールが一致している必要はありません。

ルールはルール・セットに編成でき、各Oracle Streamsクライアントの動作は、Oracle Streamsクライアントに関連付けられているルール・セット内のルールによって決まります。 ポジティブ・ルール・セットとネガティブ・ルール・セットを取得プロセス、伝播および適用プロセスに関連付けることができますが、同期取得に関連付けることができるのはポジティブ・ルール・セットのみです。

レプリケーション環境では、データベース変更がルール・セットを満たす場合にOracle Streamsクライアントがそのタスクを実行します。一般に、変更がOracle Streamsクライアントのルール・セットを満たすのは、変更についてネガティブ・ルール・セットのどのルールもTRUEと評価されず、ポジティブ・ルール・セットの1つ以上のルールが変更についてTRUEと評価される場合です。ネガティブ・ルール・セットが常に最初に評価されます。

Oracle Streamsレプリケーション環境でルール・セットを使用すると、具体的には次のことができます。

- 取得プロセスがREDOログから取得する変更または破棄する変更を指定します。REDOログ内で検出された変更が取得プロセスのルール・セットを満たしている場合、取得プロセスはその変更を取得します。REDOログ内で検出された変更が取得プロセスのルール・セットを満たしていない場合、取得プロセスはその変更を破棄します。

- 同期取得が取得する変更を指定します。データ操作言語(DML)の変更が同期取得のルール・セットを満たす場合、同期取得は変更がコミットされた直後に変更を取得します。表に対して行われたDML変更が同期取得のルール・セットを満たさない場合、同期取得は変更を取得しません。

- 伝播があるキューから別のキューに送信する変更、または破棄する変更を指定します(LCRにカプセル化されています)。キュー内のLCRが伝播のルール・セットを満たしている場合、伝播はそのLCRを送信します。キュー内のLCRが伝播のルール・セットを満たしていない場合、伝播はそのLCRを破棄します。

- 適用プロセスがデキューするLCR、または破棄するLCRを指定します。キュー内のLCRが適用プロセスのルール・セットを満たしている場合、適用プロセスはそのLCRをデキューして処理します。キュー内のLCRが適用プロセスのルール・セットを満たしていない場合、適用プロセスはLCRを破棄します。

関連項目:

- ルールの詳細は、『Oracle Streams概要および管理』を参照してください。

同一でないコピーのルールベースの変換の概要

ルールベース変換は、複数のデータベースでデータベース・オブジェクトが同一でない場合に柔軟性を提供する追加の構成オプションです。ルールベース変換では、各データベースで正常に適用できるように、データベース・オブジェクトに対する変更を修正できます。ルールベース変換は、ポジティブ・ルール・セット内のルールがTRUEと評価された場合のメッセージに対する修正を示します。

たとえば、変更が発生したデータベースで表に5つの列があり、別のデータベースの共有表には5つの列のうちの4つしかないとします。データ操作言語(DML)操作がソース・データベースの表に対して実行されると、行変更が取得され、行LCRとして書式設定されます。ルールベース変換は、他のデータベースに正常に適用できるようにこれらの行LCR内の余分な列を削除できます。行LCRが変換されない場合、行LCRには余分な列があるため他のデータベースでの適用プロセスでエラーが発生します。

ルールベース変換には、宣言とカスタムの2種類があります。宣言ルールベース変換には、DML変更(行LCR)の結果として発生した行変更の一般的な変換シナリオのセットが含まれます。カスタム・ルールベース変換には、変換を実行するためのユーザー定義PL/SQLファンクションが必要です。このマニュアルでは、宣言ルールベース変換についてのみ説明します。

次の宣言ルールベース変換を使用できます。

- 追加列変換は、列を行LCRに追加します。

- 削除列変換は、行LCRから列を削除します。

- 保存列変換は、行LCRに列のリストを保存しますが、リストにない列は削除します。

- 名前変更列変換は、行LCR内の列の名前を変更します。

- 名前変更スキーマ変換は、行LCR内のスキーマの名前を変更します。

- 名前変更表変換は、行LCR内の表の名前を変更します。

これらの宣言ルールベース変換の1つを追加するときに、変換に関連付けるルールを指定します。指定したルールが行LCRについてTRUEと評価される場合、Oracle Streamsは行LCRで宣言変換を内部的に実行します。通常、ルールとルール・セットはOracle Streamsレプリケーション環境を構成するときに自動的に作成されます。

1つのルールに対して複数の宣言ルールベース変換を構成できますが、カスタム・ルールベース変換は、1つのルールに対して1つのみ構成できます。また、1つのルールに対して宣言ルールベース変換とカスタム・ルールベース変換の両方を構成することもできます。

変換は、Oracle Streams情報フローの任意のステージ(取得中、伝播中または適用中)で発生します。変換がいつ発生するかは、変換が関連付けられているルールによって決まります。たとえば、伝播中に変換を実行するには、変換を伝播のポジティブ・ルール・セットのルールに関連付けます。

関連項目:

- ルールベースの変換の詳細は、『Oracle Streams概要および管理』を参照してください。

サプリメンタル・ロギングの概要

サプリメンタル・ロギングは、操作(行の更新など)が実行されるたびにREDOログに配置される追加の列データのプロセスです。取得プロセスは、この追加情報を取得し、論理変更レコード(LCR)に配置します。これらのLCRを適用する適用プロセスは、データベース変更を正しく適用するためにこの追加情報を必要とします。

関連項目:

- サプリメンタル・ロギングの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

競合と競合解消の概要

競合は、表のデータを共有している2つの異なるデータベースが表の同じ行をほぼ同時に変更した場合に発生します。これらの変更がこれらのデータベースの一方で取得され、もう一方のデータベースに送信されると、適用プロセスは、行LCRを表に適用しようとしたときに競合を検出します。デフォルトでは、適用エラーがエラー・キューに入れられ、そこで手動で解消できます。適用エラーを回避するには、適用プロセスが環境に最適な方法で競合を処理するように競合解消を構成する必要があります。

Oracle Databaseには、行のUPDATEが原因で競合が発生した場合に競合を解消する競合ハンドラが組み込まれています。これらのハンドラは、組込み更新競合ハンドラと呼ばれています。

適用プロセスで、デキューされた行LCRに対する更新競合が発生した場合、2つのデータベースのデータの一貫性を維持するために行LCRを適用するか破棄する必要があります。更新競合を解消する最も一般的な方法は、最新のタイムスタンプを持つ変更を保持し、古い変更を破棄することです。表に最新の時刻競合解消を構成する方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

次の各項で、特定のタイプのレプリケーション環境で競合解消を構成する方法を説明します。

- チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成

- チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成

- チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成

注意:
競合は、単一のデータベースに対する変更のみが取得されるレプリケーション環境では発生しません。このようなレプリケーション環境では、通常、他のデータベースのレプリカは読取り専用になります。

関連項目:

- 「チュートリアル: 表の最新時刻競合解消の構成」

- 「構成された更新競合ハンドラの表示」

- 競合および競合解消の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

変更の循環を回避するためのタグの概要

変更循環は、発生元のデータベースに変更を再び送信することを意味します。通常は、変更循環によって各データベース変更の結果が発生元のデータベースに無限にループするため、変更循環を回避する必要があります。このようなループによって、データベース内に意図しないデータが生成され、ネットワーキングと環境のコンピュータ・リソースに負荷がかかります。デフォルトでは、Oracle Streamsは変更循環を回避するように設計されています。

タグは、変更レコード内の追加情報です。データベース変更を記録する各REDOエントリと、データベース変更をカプセル化する各論理変更レコード(LCR)には、タグが含まれます。タグのデータ型はRAWです。

デフォルトでは、変更レコードには次のタグ値があります。

- ユーザーまたはアプリケーションがデータベース変更を生成する場合、各変更のタグ値はNULLです。特定のデータベース・セッションに対してこのデフォルトを変更できます。

- 適用プロセスがデータベース・オブジェクトにデータベース変更を適用することによってその変更を生成する場合、各変更のタグ値は'00''(ゼロが2つ)と等価の16進数になります。特定の適用プロセスのデフォルトは変更可能です。

LCRのタグ値は、LCRがどのように取得されたかによって決まります。

- 取得プロセスによって取得されたLCRには、取得されたREDOレコードのタグ値があります。

- 同期取得によって取得されたLCRには、変更を行ったデータベース・セッションのタグ値があります。

Oracle Streamsクライアントのルールには、タグ値の条件を含めることができます。たとえば、取得プロセスのルールは、REDOレコードのタグ値に基づいてREDOログ内の変更が取得されるかどうかを決定できます。Oracle Streamsレプリケーション環境では、Oracle Streamsクライアントはタグとルールを使用して変更循環を回避します。

次の各項で、特定のタイプのレプリケーション環境で変更循環が回避される方法を説明します。

- チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成

- チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成

- チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成

注意:

- 変更循環は、単一のデータベースに対する変更のみが取得されるレプリケーション環境では発生しません。

- タグを使用して、特定のセッションで行われた変更のレプリケートを回避することもできます。セッションにタグを設定するには、DBMS_STREAMS.SET_TAGプロシージャを使用します。例については、「データベース・オブジェクトでの適用エラーの修正」を参照してください。

関連項目:

- 「適用エラーの管理」

- タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

Oracle Streamsレプリケーション環境の一般的なタイプの概要

Oracle Streamsにより、多くの異なるタイプのカスタム・レプリケーション環境を構成できます。ただし、最も一般的なのは、2データベース、ハブアンドスポークおよびn-wayの3つのタイプのレプリケーション環境です。

次の各項で、これらの一般的なレプリケーション環境タイプについて説明し、どのタイプを使用するのが最適かの決定を支援します。

- 2データベース・レプリケーション環境の概要

- ハブアンドスポーク・レプリケーション環境の概要

- n-wayレプリケーション環境の概要

2データベース・レプリケーション環境の概要

2データベース・レプリケーション環境は、レプリケートされたデータベース・オブジェクトを2つのデータベースのみで共有するレプリケーション環境です。一方のデータベースでレプリケートされたデータベース・オブジェクトに対して行われた変更は、取得された後、もう一方のデータベースに直接送信されて適用されます。2データベース・レプリケーション環境では、一方のデータベースのみでデータベース・オブジェクトに対する変更が許可される場合も、両方のデータベースでデータベース・オブジェクトに対する変更が許可される場合もあります。

レプリケートされたデータベース・オブジェクトに対する変更が一方のデータベースのみで許可されている場合、もう一方のデータベースには、これらのデータベース・オブジェクトの読取り専用レプリカが含まれます。これを単方向レプリケーション環境と呼び、通常は次の基本コンポーネントが含まれます。

- 1つ目のデータベースには、レプリケートされたデータベース・オブジェクトに対する変更を取得する取得プロセスまたは同期取得があります。

- 1つ目のデータベースには、取得した変更を2つ目のデータベースに送信する伝播があります。

- 2つ目のデータベースには、1つ目のデータベースから変更を適用する適用プロセスがあります。

- パフォーマンスを最適化するために、各取得プロセスと適用プロセスには固有のキューがあります。

図4-6に、単方向レプリケーション用に構成された2データベース・レプリケーション環境を示します。

図4-6 2データベース・レプリケーション環境の単方向レプリケーション

「図4-6 2データベース・レプリケーション環境の単方向レプリケーション」の説明

2データベース・レプリケーション環境では、両方のデータベースで、レプリケートされたデータベース・オブジェクトを変更できます。この場合、データベース・オブジェクトに対する変更は、両方のデータベースで取得され、他方のデータベースに送信されて取得されます。これを双方向レプリケーション環境と呼び、通常は次の基本コンポーネントが含まれます。

- 各データベースには、レプリケートされたデータベース・オブジェクトに対する変更を取得する取得プロセスまたは同期取得があります。

- 各データベースには、取得した変更をもう一方のデータベースに送信する伝播があります。

- 各データベースには、もう一方のデータベースから変更を適用する適用プロセスがあります。

- パフォーマンスを最適化するために、各取得プロセスと適用プロセスには固有のキューがあります。

図4-7に、双方向レプリケーション用に構成された2データベース・レプリケーション環境を示します。

図4-7 2データベース・レプリケーション環境の双方向レプリケーション

「図4-7 2データベース・レプリケーション環境の双方向レプリケーション」の説明

通常、双方向レプリケーション環境では、レプリケートされたデータベース・オブジェクトの同期化を維持するために競合解消を構成する必要があります。Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードを使用するか、またはDBMS_STREAMS_ADMパッケージの構成プロシージャを使用して、2データベース・レプリケーション環境を構成できます。

関連項目:

- 「チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成」

- 「チュートリアル: ダウンストリーム取得プロセスを使用した2データベース・レプリケーションの構成」

- 「チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成」

- 「競合と競合解消の概要」

ハブアンドスポーク・レプリケーション環境の概要

ハブアンドスポーク・レプリケーション環境は、集中データベース(ハブ)がセカンダリ・データベース(スポーク)と通信する環境です。スポークは相互に直接通信しません。ハブアンドスポーク・レプリケーション環境では、スポークはレプリケートされたデータベース・オブジェクトに対する変更を許可する場合と許可しない場合があります。

スポークが変更を許可しない場合、スポークにはハブのデータベース・オブジェクトの読取り専用レプリカが含まれます。このタイプのハブアンドスポーク・レプリケーション環境には、通常は次の基本コンポーネントがあります。

- ハブには、レプリケートされたデータベース・オブジェクトに対する変更を取得する取得プロセスまたは同期取得があります。

- ハブには、取得された変更を各スポークに送信する伝播があります。

- 各スポークには、ハブから変更を適用する適用プロセスがあります。

- パフォーマンスを最適化するために、各取得プロセスと適用プロセスには固有のキューがあります。

図4-8に、読取り専用スポークのあるハブアンドスポーク・レプリケーション環境を示します。

図4-8 読取り専用スポークのあるハブアンドスポーク・レプリケーション環境

「図4-8 読取り専用スポークのあるハブアンドスポーク・レプリケーション環境」の説明

スポークがデータベース・オブジェクトに対する変更を許可する場合、通常は変更が取得されてハブに送信され、ハブが他のスポークに変更をレプリケートします。このタイプのハブアンドスポーク・レプリケーション環境には、通常は次の基本コンポーネントがあります。

- ハブには、レプリケートされたデータベース・オブジェクトに対する変更を取得する取得プロセスまたは同期取得があります。

- ハブには、取得された変更を各スポークに送信する伝播があります。

- 各スポークには、レプリケートされたデータベース・オブジェクトに対する変更を取得する取得プロセスまたは同期取得があります。

- 各スポークには、スポークで行われた変更をハブに送信する伝播があります。

- 各スポークには、ハブからの変更と他のスポークからの変更を適用する適用プロセスがあります。

- ハブには、各スポークからの変更を適用する個別の適用プロセスがあります。各適用プロセスは、それぞれのスポークから変更を適用する必要があります。

- パフォーマンスを最適化するために、各取得プロセスと適用プロセスには固有のキューがあります。

図4-9に、読取り/書込みスポークのあるハブアンドスポーク・レプリケーション環境を示します。

図4-9 読取り/書込みスポークのあるハブアンドスポーク・レプリケーション環境

「図4-9 読取り/書込みスポークのあるハブアンドスポーク・レプリケーション環境」の説明

通常、スポーク・データベースでの変更が許可されるハブアンドスポーク・レプリケーション環境では、レプリケートされたデータベース・オブジェクトの同期化を維持するために競合解消を構成する必要があります。ハブアンドスポーク・レプリケーション環境では、レプリケートされたデータベース・オブジェクトに対する変更が一部のスポークでは許可されますが、残りのスポークでは許可されない場合があります。

Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードを使用するか、またはDBMS_STREAMS_ADMパッケージの構成プロシージャを使用して、ハブアンドスポーク・レプリケーション環境を構成できます。

ハブアンドスポーク・レプリケーションが有効な場合については、「Oracle Streamsでのデータのレプリケート時期」を参照してください。

関連項目:

- 「チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成」

- 「競合と競合解消の概要」

n-wayレプリケーション環境の概要

n-wayレプリケーション環境は、各データベースが環境内の他のデータベースと相互に直接通信する環境です。あるデータベースでのレプリケートされたデータベース・オブジェクトに対する変更は、取得されて環境内の他の各データベースに直接送信され、そこで適用されます。

n-wayレプリケーション環境には、通常は次の基本コンポーネントがあります。

- 各データベースには、レプリケートされたデータベース・オブジェクトに対する変更を取得する1つ以上の取得プロセスまたは同期取得があります。

- 各データベースには、取得された変更を他のデータベースに相互に送信する伝播があります。

- 各データベースには、他の各データベースからの変更を適用する適用プロセスがあります。別の適用プロセスが、各ソース・データベースから変更を適用する必要があります。

- パフォーマンスを最適化するために、各取得プロセスと適用プロセスには固有のキューがあります。

図4-10に、n-wayレプリケーション環境を示します。

図4-10 n-wayレプリケーション環境

「図4-10 n-wayレプリケーション環境」の説明

オラクル社が提供する次のパッケージを使用して、n-wayレプリケーション環境を構成できます。

- DBMS_STREAMS_ADMでは、キューの設定、取得プロセスまたは同期取得の作成、伝播の作成、適用プロセスおよびレプリケーション環境でのルールおよびルール・セットの構成などの、ほとんどの構成アクションを実行できます。

- DBMS_CAPTURE_ADMでは、レプリケーション環境で構成した取得プロセスを開始できます。

- DBMS_APPLY_ADMでは、競合解消を構成し、その他の構成タスクと同様に適用プロセスを開始できます。

n-wayレプリケーションが有効な場合については、「Oracle Streamsでのデータのレプリケート時期」を参照してください。

通常、n-wayレプリケーション環境では、レプリケートされたデータベース・オブジェクトの同期化を維持するために競合解消を構成する必要があります。

n-wayレプリケーション環境の構成は、このマニュアルの対象外です。n-wayレプリケーション環境を構成する例の詳細は、「Oracle Streamsの拡張例」を参照してください。

Oracle Streamsが提供する主要なPL/SQLパッケージおよびデータ・ディクショナリ・ビューの概要

Oracle Enterprise Manager以外にも、Oracle Streamsレプリケーション環境を構成および管理するためのPL/SQLパッケージが提供されています。また、Oracle Streamsレプリケーション環境を監視するためのデータ・ディクショナリ・ビューも提供されています。

次の各項で、Oracle Streamsが提供する主要なPL/SQLパッケージおよびデータ・ディクショナリ・ビューについて説明します。

- Oracle Streamsが提供する主要なPL/SQLパッケージの概要

- Oracle Streamsの主要なデータ・ディクショナリ・ビューの概要

Oracle Streamsが提供する主要なPL/SQLパッケージの概要

表4-1に、Oracle Streamsレプリケーション環境の構成および管理に重要なPL/SQLパッケージを示します。

表4-1 Oracle Streamsが提供する主要なPL/SQLパッケージ

パッケージ

説明

DBMS_STREAMS_ADM

このパッケージを使用すると、Oracle Streams環境で一般的なタスクを簡単に実行できます。このパッケージには、Oracle Streamsレプリケーション環境を構成および維持するためのプロシージャが含まれます。また、表、スキーマおよびデータベース・レベルで、取得プロセス、同期取得、伝播および適用プロセスのための単純なルールを追加および削除するための管理インタフェースも備わっています。さらに、キューの作成や、Oracle Streamsメタデータ(データ・ディクショナリ情報など)の管理のためのプロシージャが含まれます。

DBMS_CAPTURE_ADM

このパッケージには、取得プロセスを起動、停止および構成するための管理インタフェースが用意されています。また、同期取得を構成するための管理インタフェースも用意されています。このパッケージには、宛先データベースでインスタンス化するために、ソース・データベースでデータベース・オブジェクトを準備するための管理プロシージャもあります。

DBMS_PROPAGATION_ADM

このパッケージでは、伝播の起動、停止および構成のための管理インタフェースが提供されます。

DBMS_APPLY_ADM

このパッケージでは、適用プロセスの起動、停止および構成のための管理インタフェースが提供されます。また、競合の検出と解消の構成および適用エラーの管理のためのサブプログラムも含まれます。さらに、このパッケージには、適用ハンドラを構成できるプロシージャも含まれます。このパッケージには、宛先データベースでオブジェクトのインスタンス化SCNを設定する管理プロシージャが用意されています。

DBMS_STREAMS_AUTH

このパッケージでは、Oracle Streams管理者に対する権限の付与および取消しのためのサブプログラムが提供されます。

DBMS_STREAMS_ADVISOR_ADM

このパッケージでは、Oracle Streams環境についての情報の収集および収集した情報に基づくデータベース管理者へのアドバイスを行うためのインタフェースが提供されます。このパッケージは、Oracle Streamsパフォーマンス・アドバイザの一部です。

関連項目:

- これらのOracle Streamsパッケージおよびその他のOracle Streamsパッケージの詳細は、『Oracle Streams概要および管理』を参照してください。

- 「ハブアンドスポーク・レプリケーション環境の概要」

Oracle Streamsの主要なデータ・ディクショナリ・ビューの概要

表4-2に、Oracle Streamsレプリケーション環境の監視に重要なデータ・ディクショナリ・ビューを示します。

表4-2 Oracle Streamsの主要なデータ・ディクショナリ・ビュー

データ・ディクショナリ・ビュー

説明

ALL_APPLY

DBA_APPLY

適用プロセスに関する情報を表示します。

ALL_APPLY_CONFLICT_COLUMNS

DBA_APPLY_CONFLICT_COLUMNS

競合ハンドラに関する情報を表示します。

ALL_APPLY_ERROR

DBA_APPLY_ERROR

適用プロセスが生成するエラー・トランザクションに関する情報を表示します。

ALL_CAPTURE

DBA_CAPTURE

取得プロセスに関する情報を表示します。

ALL_PROPAGATION

DBA_PROPAGATION

伝播に関する情報を表示します。

ALL_STREAMS_COLUMNS

DBA_STREAMS_COLUMNS

同期取得および適用プロセスでサポートされていない列に関する情報を表示します。

ALL_STREAMS_RULES

DBA_STREAMS_RULES

取得プロセス、同期取得、伝播および適用プロセスで使用されるルールに関する情報を表示します。

ALL_STREAMS_UNSUPPORTED

DBA_STREAMS_UNSUPPORTED

取得プロセスでサポートされていないデータベース・オブジェクトに関する情報を表示します。

ALL_SYNC_CAPTURE

DBA_SYNC_CAPTURE

同期取得に関する情報を表示します。

V$BUFFERED_QUEUES

バッファ・キューおよびバッファ・キュー内のメッセージに関する情報を表示します。

V$PROPAGATION_RECEIVER

伝播によってバッファ・キュー内に受信されるメッセージに関する情報を表示します。

V$PROPAGATION_SENDER

伝播によってバッファ・キューから送信されるメッセージに関する情報を表示します。

V$STREAMS_APPLY_COORDINATOR

有効化されている適用プロセスのコーディネータに関する情報を表示します。

V$STREAMS_APPLY_READER

有効化されている適用プロセスのリーダー・サーバーに関する情報を表示します。

V$STREAMS_APPLY_SERVER

有効化されている適用プロセスの適用サーバーに関する情報を表示します。

V$STREAMS_CAPTURE

有効化されている取得プロセスに関する情報を表示します。

V$STREAMS_TRANSACTION

取得プロセスまたは適用プロセスによって処理されているトランザクションに関する情報を表示します。このビューでは、長時間実行トランザクションを識別し、各トランザクションで処理されている論理変更レコード(LCR)の数を判断できます。このビューには、取得プロセスで取得されたLCRに関する情報のみが表示されます。

関連項目:

- これらのOracle Streamsデータ・ディクショナリ・ビューおよびその他のデータ・ディクショナリ・ビューの詳細は、『Oracle Streams概要および管理』を参照してください。

- 「Oracle Streamsレプリケーション環境の監視」

Oracle Streamsレプリケーションの準備

Oracle Streamsレプリケーションを構成する前に、レプリケーション環境に参加するデータベースを準備します。

Oracle Streamsレプリケーションを準備するには:

1. Oracle Streamsでレプリケーション環境を構成する前に、初期化パラメータを正しく設定します。

- グローバル名: Oracle Streamsレプリケーション環境に参加する各データベースでGLOBAL_NAMES初期化パラメータをTRUEに設定します。詳細は、「GLOBAL_NAMES初期化パラメータをTRUEに設定」を参照してください。

- 互換性: Oracle Streamsの最新の機能を使用するには、COMPATIBLE初期化パラメータをできるだけ高く設定することをお薦めします。可能な場合は、このパラメータを11.2.0以上に設定します。

- システム・グローバル領域(SGA)およびOracle Streamsプール: Oracle Streamsプールが、レプリケーション環境に対して作成されるOracle Streamsコンポーネントを十分に収容できる大きさであることを確認します。Oracle Streamsプールは、システム・グローバル領域(SGA)の一部です。MEMORY_TARGET初期化パラメータ(自動メモリー管理)、SGA_TARGET初期化パラメータ(自動共有メモリー管理)またはSTREAMS_POOL_SIZE初期化パラメータを設定することでOracle Streamプールを管理できます。Oracle Streamsプールの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。
Oracle Streamsコンポーネントのメモリー要件は次のとおりです。

- 各キューには、少なくとも250MBのメモリーが必要です。各キューには、取得した変更を格納するための十分なメモリーが必要です。

- 各取得プロセスの並列処理には、少なくとも15MBのメモリーが必要です。取得プロセスが変更を取得する際に使用する処理の数は、取得プロセス・パラメータparallelismで制御されます。取得プロセスのパフォーマンスは、取得プロセスの並行性を調整すると改善される場合があります。

- 各伝播には少なくとも1MBのメモリーが必要です。

- 各適用プロセスの並列処理には、少なくとも1MBのメモリーが必要です。適用プロセスが変更を適用する際に使用する処理の数は、適用プロセス・パラメータparallelismで制御されます。適用プロセスのパフォーマンスは、適用プロセスの並行性を調整すると改善される場合があります。

- 処理とセッション: Oracle Streams取得プロセス、伝播および適用プロセスは、バックグラウンドで実行されるプロセスを使用します。これらのプロセスに適応するにはPROCESSESおよびSESSIONS初期化パラメータの値を増やすことが必要な場合があります。

2. Oracle Streamsレプリケーション環境のベスト・プラクティスを確認し、環境を構成する際にはそれに従います。ベスト・プラクティスの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。
ベスト・プラクティスに従えば、パフォーマンスの最適な環境を構成して問題を回避することができます。Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードおよびDBMS_STREAMS_ADMパッケージの構成プロシージャを使用すれば、自動的にベスト・プラクティスに従います。ウィザードや構成プロシージャを使用せずにOracle Streamsレプリケーション環境を構成する場合は、ベスト・プラクティスをよく確認し、可能なかぎりそれに従ってください。

次に、Oracle Streamsの構成時に従う必要のある重要なベスト・プラクティスを示します。

- Oracle Streams管理者に個別の表領域を構成します。「チュートリアル: Oracle Streams管理者の構成」 の手順がこのベスト・プラクティスに従っています。

- 取得プロセス、同期取得および適用プロセスに個別のキューを使用します。最適なパフォーマンスを得るには、通常、これらのコンポーネントがキューを共有しないようにする必要があります。

- キュー・ツー・キュー伝播を使用します。

Oracle Streams環境を構成した後は、Oracle Streams環境での操作時に次の重要なベスト・プラクティスに従う必要があります。

- パフォーマンスを監視し、必要に応じて調整します。

- キューのサイズを監視します。

- バックアップに関するOracle Streamsのベスト・プラクティスに従います。

- Oracle Streamsの情報に関するアラート・ログを確認します。

- 最適なパフォーマンスを得るために、取得プロセスの並列性を設定します。

- 最適なパフォーマンスを得るために、適用プロセスの並列性を設定します。

- 適用エラーを確認し、発生する場合は管理します。

これらのベスト・プラクティスと、その他のOracle Streamsのベスト・プラクティスの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

関連項目:

- 「Oracle Streamsレプリケーションの概要」

- 「Oracle Streamsレプリケーション環境の管理」

- 『Oracle Database 2日でデータベース管理者』

- Oracle Streams環境で重要な初期化パラメータの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

Oracle Streamsレプリケーションの構成: 例

この項では、Oracle Streamsレプリケーション環境の構成方法について、例を使用して説明します。例では、最も一般的なタイプのOracle Streamレプリケーション環境を構成します。

次に、例について説明します。

- チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成
この例では、2つのデータベースでhrスキーマにあるすべての表にデータ操作言語(DML)の変更をレプリケートするOracle Streamsレプリケーション環境を構成します。構成では、レプリケートされたデータベース・オブジェクトに対する変更を取得する取得プロセスを使用します。

例は、単方向レプリケーションまたは双方向レプリケーション用に環境を構成する方法を示しています。単方向レプリケーションでは、1つのデータベースのみがデータベース・オブジェクトを変更できます。双方向レプリケーションでは、両方のデータベースがデータベース・オブジェクトを変更できます。

この構成は、2つのデータベースのみを含む比較的単純なレプリケーション環境を構成する際に有効です。2つ目のデータベースをレポートまたはデータ分析に使用するには、単方向レプリケーション環境を構成します。両方のデータベースでデータの読取り/書込みが必要な場合は、双方向レプリケーション環境を構成します。たとえば、双方向レプリケーションは、スケーラビリティやデータの可用性を向上させることができます。

2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

- チュートリアル: ダウンストリーム取得プロセスを使用した2データベース・レプリケーションの構成
この例では、2つのデータベースでhrスキーマにあるすべての表にDML変更をレプリケートするOracle Streamsレプリケーション環境を構成します。例は、単方向レプリケーションの構成方法を示していて、レプリケートされたデータベース・オブジェクトに対する変更は、1つのソース・データベースでのみ許可されます。構成では、ソース・データベースでデータベース・オブジェクトに対して行った変更を取得するために、宛先データベースでダウンストリーム取得プロセスを使用しています。宛先データベースでは、データベース・オブジェクトは読取り専用です。

この構成は、プライマリ・データベースから別のデータベースにレポートまたはデータ分析をオフロードする際に使用します。この例では、2つ目のデータベースで取得プロセスを実行し、プライマリ・データベースの負荷を削減しています。

2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

- チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成
この例では、3つのデータベースでhrスキーマにあるすべての表にDML変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、1つのハブと2つのスポークを持つハブアンドスポーク・レプリケーション環境を構成します。ハブアンドスポーク・レプリケーション環境は、1つの中央データベース(ハブ)がセカンダリ・データベース(スポーク)と通信する環境です。この例では、スポーク・データベースによって、レプリケートされたデータベース・オブジェクトに対する変更が可能になります。構成では、レプリケートされたデータベース・オブジェクトに対する変更を取得する取得プロセスを使用します。

この構成は、複数のセカンダリ・データベースにデータをレプリケートする必要のある中央データベースが存在する場合に使用します。たとえば、本社に中央データベースがあり、販売代理店に複数のセカンダリ・データベースがある企業にこの構成が有効です。

ハブアンドスポーク・レプリケーション環境の詳細は、「ハブアンドスポーク・レプリケーション環境の概要」を参照してください。

- チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成
この例では、2つのデータベースでhrスキーマにあるemployees表およびdepartments表にDML変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、2つのデータベース間での双方向レプリケーションを構成しています。このため、データベース・オブジェクトに対する変更は両方のデータベースで許可されています。構成では、レプリケートされたデータベース・オブジェクトに対する変更を取得する同期取得を使用します。

この構成は、2つのデータベースと少数の表のみを使用する比較的単純なレプリケーション環境を構成する際に使用します。Oracle Database 11g Standard Editionをインストールしている場合は、同期取得を使用することもできます。取得プロセスを使用するには、Oracle Database 11g Enterprise Editionが必要です。

2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

この項では、表の競合解消を構成する例も示します。詳細は、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。競合解消は、レプリケートされた表に対するDML変更の実行を複数のデータベースに対して許可するレプリケーション環境で使用します。この例は、最新時刻の競合解消を構成しています。このため、表に対する行変更によって競合が発生すると、最新の変更は保持され、古い変更は破棄されます。競合解消の詳細は、「競合と競合解消の概要」を参照してください。

注意:
一般的なOracle Streamsレプリケーション環境には、他にn-way環境があります。詳細は、「n-wayレプリケーション環境の概要」を参照してください。

関連項目:

- 「Oracle Streamsレプリケーション環境の一般的なタイプの概要」

チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成

この例では、hrスキーマにあるすべての表に、データ操作言語(DML)変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、変更を取得するローカル取得プロセスを使用して2データベース・レプリケーション環境を構成します。この例では、グローバル・データベース名db1.example.comおよびdb2.example.comを使用します。ただし、例を完了するために、ご使用の環境のデータベースに置き換えることもできます。2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

この例では、Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードを使用して2データベース・レプリケーション環境を構成します。このウィザードは、1つ以上のスキーマをレプリケートするOracle Streams環境を構成する最速で最も単純な方法です。また、ウィザードはOracle Streamsレプリケーション環境に対して確立されたベスト・プラクティスに従います。

レプリケーション用に構成されているデータベース・オブジェクトは、ウィザードの実行時に、宛先データベースに存在する場合としない場合があります。宛先データベースにデータベース・オブジェクトが存在しない場合、ウィザードはデータ・ポンプ・エクスポート/インポートを使用して、宛先データベースでデータベース・オブジェクトをインスタンス化します。インスタンス化の際に、これらのデータベース・オブジェクトにインスタンス化SCNが設定されます。宛先データベースにデータベース・オブジェクトが存在する場合、ウィザードは既存のデータベース・オブジェクトを保持して、インスタンス化SCNを設定します。この例では、ウィザードを実行する前に、db1.example.comデータベースとdb2.example.comデータベースの両方にhrスキーマが存在しています。

この例では、単方向レプリケーションまたは双方向レプリケーションの構成方法を示しています。双方向レプリケーションを構成するには、追加の手順を実行して、ウィザードの適切なページで「双方向レプリケーションの設定」を選択する必要があります。

図4-11に、この例で作成する環境の概要を示します。双方向レプリケーションに必要な追加のコンポーネントはグレーで表示され、そのアクションは破線で示されています。

図4-11 ローカル取得プロセスを使用した2データベース・レプリケーション環境

「図4-11 ローカル取得プロセスを使用した2データベース・レプリケーション環境」の説明

2データベース・レプリケーション環境を構成するには:

1. 2データベース・レプリケーション環境を準備するには、次のタスクを完了します。

1. db1.example.comデータベースがdb2.example.comデータベースと通信できるように、ネットワーク接続を構成します。
データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の構成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

3. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

4. ARCHIVELOGモードで実行するようにdb1.example.comデータベースを構成します。取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

5. 双方向レプリケーション環境を構成する場合は、ARCHIVELOGモードで実行するようにdb2.example.comデータベースを構成します。単方向レプリケーション環境を構成する場合、この手順は不要なため、手順2に進みます。

2. Enterprise Managerで、Oracle Streams管理者としてソース・データベースにログインします。

この例では、ソース・データベースはdb1.example.comです。

3. データベース・インスタンスの「データベース」ホームページに移動します。

4. 「データ移動」をクリックして「データ移動」サブページを開きます。

5. 「Streams」セクションの「設定」をクリックします。
「Streams」ページが表示され、「設定」オプションが表示されます。

tdpii_setup_streams.gifの説明

6. 「Streamsレプリケーションの設定」で、「スキーマのレプリケート」を選択します。

7. 「ホスト資格証明」セクションで、ホスト・コンピュータ・システムの管理ユーザーのユーザー名とパスワードを入力します。

8. 「続行」をクリックします。

9. 「オブジェクト選択」ページで、「HR」を選択して、「次へ」をクリックします。

10. 「宛先オプション」ページで、ホスト名、ポート、SIDまたはサービス名およびOracle Streams管理者資格証明を指定して、宛先データベースを指定します。

11. 「次へ」をクリックします。
「レプリケーション・オプション」ページが表示されます。

tdpii_setup_rep_options.gifの説明

12. 「レプリケーション・オプション」ページを完了します。

1. 「ディレクトリ・パス」セクションで、手順7で指定したホスト・ユーザーがディレクトリに対して読取りおよび書込みを行うことができ、データ・ポンプ・エクスポート・ダンプ・ファイルに対する十分な領域がある場合、ソース・データベースと宛先データベースのディレクトリ・パスをそのままにしておきます。変更する場合は、別のディレクトリ・パスを指定するか、またはこれらの要件を満たすディレクトリ・オブジェクトを作成して指定します。

2. 「拡張オプション」を拡張します。
tdpii_setup_ro_advanced.gifの説明

3. 「オプション」セクションで「データ操作言語(DML)の変更を取得、伝播および適用」が選択されていることを確認します。

4. DDL変更をレプリケートしない場合は、「データ定義言語(DDL)の変更を取得、伝播および適用」を選択解除します。

5. 双方向レプリケーションを構成するには、「双方向レプリケーションの設定」を選択します。

13. 「次へ」をクリックします。

14. 「ジョブのスケジュール」ページで、「即時」を選択するか、後でジョブを実行する時刻を指定します。

15. 「次へ」をクリックします。

16. 「確認」ページで、構成情報を確認して、「発行」をクリックします。

17. 確認ページで、オプションとして、ジョブ・リンクをクリックしてジョブを監視します。
ジョブを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPT、DBA_RECOVERABLE_SCRIPT_PARAMS、DBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。ジョブがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してエラーからリカバリしてください。

ジョブが正常に完了すると、次の特性を持つ2データベース・レプリケーション環境が構成されます。

- db1.example.comでは、サプリメンタル・ロギングがhrスキーマの表に対して構成されています。

- db1.example.comデータベースには次のコンポーネントがあります。

- システムで生成された名前を持つ取得プロセス。取得プロセスはhrスキーマへのDML変更を取得します。

- システムで生成された名前を持つキュー。このキューは、データベースの取得プロセスに対するものです。

- システムで生成された名前を持つ、変更をdb1.example.comデータベースにあるキューからdb2.example.comデータベースにあるキューに送信する伝播。

- db2.example.comデータベースには次のコンポーネントがあります。

- システムで生成された名前を持つ、db1.example.comデータベースから送信された変更を受信するキュー。このキューは、ローカル・データベースの適用プロセスに対するものです。

- システムで生成された名前を持つ適用プロセス。適用プロセスはキューから変更をデキューし、それをhrスキーマに適用します。

- 双方向レプリケーション環境の場合は、次のものも構成されます。

- db2.example.comでは、hrスキーマの表に対するサプリメンタル・ロギング。

- db2.example.comでは、システムで生成された名前を持つ取得プロセス。取得プロセスはhrスキーマへのDML変更を取得します。

- db2.example.comでは、システムで生成された名前を持つキュー。このキューは、データベースの取得プロセスに対するものです。

- db1.example.comでは、システムで生成された名前を持つ、db2.example.comデータベースから送信された変更を受信するキュー。このキューは、ローカル・データベースの適用プロセスに対するものです。

- db1.example.comでは、システムで生成された名前を持つ適用プロセス。適用プロセスはキューから変更をデキューし、それをhrスキーマに適用します。

- 双方向レプリケーション環境の場合は、変更の循環を回避するため、次のようにタグが使用されています。

- 各適用プロセスは適用タグを使用し、適用プロセスによって適用される変更のREDOレコードにはタグが含まれます。各適用プロセスは、レプリケーション環境で一意な適用タグを使用します。

- 各取得プロセスは、REDOレコード内のタグに関係なく、レプリケートされたデータベース・オブジェクトの変更すべてを取得します。したがって、各取得プロセスは、そのソース・データベースで適用プロセスによって適用された変更を取得します。

- 各伝播は、レプリケートされたデータベース・オブジェクトに対する変更すべてを、レプリケーション環境のもう一方のデータベースに送信しますが、他のデータベースで発生した変更は除きます。伝播ルールでは、伝播がこれらの変更を破棄するよう指示します。

レプリケーション環境で変更の循環を回避する方法の詳細は、「変更の循環を回避するためのタグの概要」を参照してください。単方向レプリケーションを構成した場合は、変更は単一のロケーションでのみ取得されるため、変更の循環は発生しません。

Oracle Streamsレプリケーション構成を確認するには:

1. db1.example.comデータベースで、取得プロセスが有効化され、取得タイプがローカルであることを確認します。確認には、「取得プロセスの情報の表示」の手順に従って、「取得」サブページで「ステータス」および「取得タイプ」フィールドを確認します。

2. db1.example.comデータベースで、伝播が有効化されていることを確認します。確認には、「伝播の情報の表示」の手順に従って、「伝播」サブページで「ステータス」フィールドを確認します。

3. db2.example.comデータベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」フィールドを確認します。

4. 双方向レプリケーションを構成した場合は、次の追加の手順を実行します。

1. db2.example.comデータベースで、取得プロセスが有効化され、取得タイプがローカルであることを確認します。

2. db2.example.comデータベースで、伝播が有効化されていることを確認します。

3. db1.example.comデータベースで、適用プロセスが有効化されていることを確認します。

変更をレプリケートするには:

1. hrスキーマに対する変更を取得するデータベースで、hrスキーマの任意の表に対してDML変更を行います。この例では、db1.example.comデータベースがhrスキーマに対する変更を取得し、双方向レプリケーションに構成した場合、db2.example.comもhrスキーマに対する変更を取得します。

2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用して他のデータベースで変更された表を問い合せてDML変更を表示します。

注意:
ウィザードは、宛先データベースで読取り専用になるレプリケート表を構成しません。単方向レプリケーションでこれらの表を読取り専用にする必要がある場合、宛先データベースで権限を構成します。ただし、適用プロセスの適用ユーザーは、レプリケートされたデータベース・オブジェクトに対するDML変更が可能である必要があります。この例では、適用ユーザーはOracle Streams管理者です。権限の構成の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

関連項目:

- 「ハブアンドスポーク・レプリケーション環境の概要」

- 「Oracle Streamsでのデータのレプリケート時期」

- 第5章「Oracle Streamsレプリケーション環境の管理」

- DBMS_STREAMS_ADM提供のPL/SQLパッケージを使用してこのレプリケーション環境を構成する例は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

チュートリアル: ダウンストリーム取得プロセスを使用した2データベース・レプリケーションの構成

この例では、hrスキーマにあるすべての表に、データ操作言語(DML)変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、宛先データベースでダウンストリーム取得プロセスを使用して2データベース・レプリケーション環境を構成します。この例では、グローバル・データベース名src.example.comおよびdest.example.comを使用します。ただし、例を完了するために、ご使用の環境のデータベースに置き換えることもできます。2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

この例では、ダウンストリーム取得プロセスは宛先データベースdest.example.comで実行されます。したがって、変更の取得に必要なリソースはソース・データベースsrc.example.comで解放されます。この例では、アーカイブ・ログ・ダウンストリーム取得プロセスではなく、リアルタイム・ダウンストリーム取得プロセスを構成します。リアルタイム・ダウンストリーム取得は、ソース・データベースでの変更の取得に必要な時間を短縮できるという利点があります。時間を短縮できるのは、データを取得する前にREDOログ・ファイルがアーカイブされるまで待つ必要がないためです。

この例では、レプリケートされたデータベース・オブジェクトが宛先データベースでレポートおよび分析に使用されると想定しています。このため、これらのデータベース・オブジェクトは、dest.example.comデータベースでは読取り専用であると想定しています。

この例では、Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードを使用して2データベース・レプリケーション環境を構成します。このウィザードは、1つ以上のスキーマをレプリケートするOracle Streams環境を構成する最速で最も単純な方法です。また、ウィザードはOracle Streamsレプリケーション環境に対して確立されたベスト・プラクティスに従います。

レプリケーション用に構成されているデータベース・オブジェクトは、ウィザードの実行時に、宛先データベースに存在する場合としない場合があります。宛先データベースにデータベース・オブジェクトが存在しない場合、ウィザードはデータ・ポンプ・エクスポート/インポートを使用して、宛先データベースでデータベース・オブジェクトをインスタンス化します。インスタンス化の際に、これらのデータベース・オブジェクトにインスタンス化SCNが設定されます。宛先データベースにデータベース・オブジェクトが存在する場合、ウィザードは既存のデータベース・オブジェクトを保持して、インスタンス化SCNを設定します。この例では、ウィザードを実行する前に、src.example.comデータベースとdest.example.comデータベースの両方にhrスキーマが存在しています。

図4-12に、この例で作成する環境の概要を示します。

図4-12 ダウンストリーム取得プロセスを使用した2データベース・レプリケーション環境

「図4-12 ダウンストリーム取得プロセスを使用した2データベース・レプリケーション環境」の説明

注意:
ローカル取得プロセスでは、ダウンストリーム取得プロセスに比べ、プラットフォームまたはOracle Databaseのバージョンが異なるレプリケーション環境においてより高い柔軟性が提供されます。詳細は、『Oracle Streams概要および管理』を参照してください。

2データベース・レプリケーション環境を構成するには:

1. 2データベース・レプリケーション環境を準備するには、次のタスクを完了します。

1. src.example.comデータベースとdest.example.comデータベースが相互に通信できるように、ネットワーク接続を構成します。
データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の構成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

3. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

4. ARCHIVELOGモードで実行するように両方のデータベースを構成します。ダウンストリーム取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースとダウンストリーム取得データベースをARCHIVELOGモードで実行する必要があります。この例では、src.example.comおよびdest.example.comデータベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

5. REDOデータの転送をサポートするために、両方のデータベースで認証を構成します。
REDO転送セッションは、Secure Sockets Layer(SSL)プロトコルまたはリモート・ログイン・パスワード・ファイルのいずれかを使用して認証されます。ソース・データベースにリモート・ログイン・パスワード・ファイルがある場合は、それをダウンストリーム取得データベース・システムの適切なディレクトリにコピーします。パスワード・ファイルは、ソース・データベースおよびダウンストリーム取得データベースで同じである必要があります。

この例で、ソース・データベースはsrc.example.comで、ダウンストリーム取得データベースはdest.example.comです。REDO転送の認証要件の詳細は、『Oracle Data Guard概要および管理』を参照してください。

2. ソース・データベースとダウンストリーム・データベースの両方で初期化パラメータを構成して、ダウンストリーム取得をサポートします。

ソース・データベースsrc.example.comのオンラインREDOログからダウンストリーム・データベースdest.example.comのスタンバイREDOログにREDOデータが転送されるように、REDO転送サービスに対して両方のデータベースで、初期化パラメータを適切に設定する必要があります。

ダウンストリーム取得をサポートするように初期化パラメータを構成するには:

1. Enterprise Managerで、Oracle Streams管理者としてソース・データベースにログインします。
この例では、ソース・データベースはsrc.example.comです。

2. データベース・インスタンスの「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「Streams」セクションの「設定」をクリックします。
「Streams」ページが表示され、「設定」オプションが表示されます。

tdpii_setup_streams.gifの説明

5. 「ダウンストリーム取得の設定」を選択します。

6. 「ホスト資格証明」セクションで、ホスト・コンピュータ・システムの管理ユーザーのユーザー名とパスワードを入力します。

7. 「続行」をクリックします。
「ダウンストリーム取得の設定」ページが表示されます。

tdpii_down.gifの説明

8. 「ダウンストリーム・データベースの詳細」セクションで、ダウンストリーム取得データベースのホスト名、ポートおよびSIDまたはサービス名を指定し、ダウンストリーム・データベースのOracle Streams管理者の資格証明を入力します。
この例では、ダウンストリーム取得データベースはdest.example.comです。

9. 「取得プロセスの詳細」セクションで、「取得プロセス名」フィールドにcaptureと入力し、「リアルタイムのダウンストリーム取得」が選択されていることを確認します。

10. 「ログの詳細」セクションで、「スタンバイREDOログ・ファイルの場所」フィールドに、ダウンストリーム・データベースを実行しているコンピュータ・システム上のアーカイブREDOログ・ファイルの場所を入力します。
ディスク・ディレクトリへの有効なパス名を指定するか、または高速リカバリ領域を使用する場合はUSE_DB_RECOVERY_FILE_DESTを指定します。これは、スタンバイREDOログから書き込まれたアーカイブREDOログ・ファイルのローカルの宛先です。リモート・ソース・データベースからのログ・ファイルは、ローカル・データベースのログ・ファイルとは別に保持する必要があります。高速リカバリ領域の構成の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

11. 「ログの詳細」セクションで、「ダウンストリーム取得に対するログ・パラメータの構成」が選択されていること、および「ログ・パラメータ」のLOG_ARCHIVE_DEST_nパラメータがソース・データベースで使用されていないことを確認します。

12. 「OK」をクリックします。

13. 「ジョブのスケジュール」ページで、「即時」を選択するか、後でジョブを実行する時刻を指定します。

14. 「OK」をクリックします。

15. 確認ページで、オプションとして、ジョブ・リンクをクリックしてジョブを監視します。

ジョブが正常に完了すると、ダウンストリーム取得が構成されます。ジョブが正常に完了するまで先に進まないでください。

3. Oracle Streams管理者としてEnterprise Managerのソース・データベースにログインしている状態で、データベース・インスタンスの「データベース」ホームページに移動します。

4. 「データ移動」をクリックして「データ移動」サブページを開きます。

5. 「Streams」セクションの「設定」をクリックします。
「Streams」ページが表示され、「設定」オプションが表示されます。

6. 「Streamsレプリケーションの設定」で、「スキーマのレプリケート」を選択します。

7. 「ホスト資格証明」セクションで、ホスト・コンピュータ・システムの管理ユーザーのユーザー名とパスワードを入力します。

8. 「続行」をクリックします。

9. 「オブジェクト選択」ページで、「HR」を選択して、「次へ」をクリックします。
HRユーザーを表示するには、「次へ」リンクのクリックが必要な場合があります。

10. 「宛先オプション」ページで、ホスト名、ポート、SIDまたはサービス名およびOracle Streams管理者資格証明を指定して、宛先データベースを指定します。
この例では、宛先データベースはdest.example.comです。

11. 「次へ」をクリックします。
「レプリケーション・オプション」ページが表示されます。

tdpii_setup_rep_options.gifの説明

12. 「レプリケーション・オプション」ページを完了します。

1. 「ディレクトリ・パス」セクションで、手順7で指定したホスト・ユーザーがディレクトリに対して読取りおよび書込みを行うことができ、データ・ポンプ・エクスポート・ダンプ・ファイルに対する十分な領域がある場合、ソース・データベースと宛先データベースのディレクトリ・パスをそのままにしておきます。変更する場合は、別のディレクトリ・パスを指定するか、またはこれらの要件を満たすディレクトリ・オブジェクトを作成して指定します。

2. 「拡張オプション」を拡張します。
tdpii_setup_ro_advanced.gifの説明

3. 「オプション」セクションで「データ操作言語(DML)の変更を取得、伝播および適用」が選択されていることを確認します。

4. 「オプション」セクションで「データ定義言語(DDL)の変更を取得、伝播および適用」を選択解除し、「双方向レプリケーションの設定」が選択されていないことを確認します。

5. 「取得プロセス」セクションで、「ダウンストリーム取得」を選択します。

6. 「取得プロセス」セクションで、ダウンストリーム取得データベースのホスト名、ポートおよびSIDまたはサービス名を入力し、ダウンストリーム・データベースのOracle Streams管理者の資格証明を入力します。

7. 「取得名」フィールドにcaptureと入力します。このダウンストリーム取得プロセスは、手順2で構成しました。

8. 「適用名」フィールドにapplyと入力します。

13. 「次へ」をクリックします。

14. 「ジョブのスケジュール」ページで、「即時」を選択するか、後でジョブを実行する時刻を指定します。

15. 「次へ」をクリックします。

16. 「確認」ページで、構成情報を確認して、「発行」をクリックします。

17. 確認ページで、ジョブ・リンクをクリックしてジョブを監視します。ジョブが正常に完了するまで次の手順に進まないでください。
ジョブを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPT、DBA_RECOVERABLE_SCRIPT_PARAMS、DBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。ジョブがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してエラーからリカバリしてください。

18. SQL*Plusで、管理ユーザーとしてソース・データベースsrc.example.comに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

19. ソース・データベースで現行のログ・ファイルを次のようにアーカイブします。

ALTER SYSTEM ARCHIVE LOG CURRENT;

ソース・データベースで現行のログ・ファイルをアーカイブすると、ソース・データベースのREDOログのリアルタイム・マイニングが開始されます。

例を完了すると、次の特性を持つ2データベース・レプリケーション環境が構成されます。

- src.example.comデータベースでは、サプリメンタル・ロギングがhrスキーマの表に対して構成されています。

- dest.example.comデータベースには次のコンポーネントがあります。

- captureという名前のダウンストリーム取得プロセス。この取得プロセスは、ソース・データベースsrc.example.comから送信されるREDOログ情報で、hrスキーマに対する変更を取得します。

- システムで生成された名前を持つキュー。このキューは、データベースの取得プロセスおよび適用プロセスに対するものです。

- applyという名前の適用プロセス。この適用プロセスは、変更をhrスキーマに適用します。

Oracle Streamsレプリケーション構成を確認するには:

1. dest.example.comデータベースで、取得プロセスが有効化され、取得タイプがダウンストリームであることを確認します。確認には、「取得プロセスの情報の表示」の手順に従って、「取得」サブページで「ステータス」および「取得タイプ」フィールドを確認します。
取得プロセスが、異常なほど長い時間、REDOデータを待機していると思われる場合は、アラート・ログでエラーを確認します。詳細は、『Oracle Streams概要および管理』を参照してください。

2. dest.example.comデータベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」フィールドを確認します。

変更をレプリケートするには:

1. src.example.comデータベースで、hrスキーマの任意の表に対してDML変更を行った後、変更をコミットします。

2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用してdest.example.comデータベースで変更された表を問い合せてDML変更を表示します。

注意:
ウィザードは、宛先データベースで読取り専用になるレプリケート表を構成しません。これらの表を読取り専用にする必要がある場合、宛先データベースで権限を構成します。ただし、適用プロセスの適用ユーザーは、レプリケートされたデータベース・オブジェクトに対するDML変更が可能である必要があります。この例では、適用ユーザーはOracle Streams管理者です。権限の構成の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

関連項目:

- 「ハブアンドスポーク・レプリケーション環境の概要」

- 「Oracle Streamsでのデータのレプリケート時期」

- 第5章「Oracle Streamsレプリケーション環境の管理」

- ダウンストリーム取得プロセスの詳細は、『Oracle Streams概要および管理』を参照してください。

- DBMS_STREAMS_ADM提供のPL/SQLパッケージを使用してこのレプリケーション環境を構成する例は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成

この例では、hrスキーマにあるすべての表に、データ操作言語(DML)変更をレプリケートするOracle Streamsハブアンドスポーク・レプリケーション環境を構成します。この例では、各データベースで取得プロセスを使用してこれらの変更を取得します。ハブアンドスポーク・レプリケーションとは、中央のハブ・データベースが1つ以上のスポーク・データベースでの変更をレプリケートすることを意味します。スポーク・データベースは、相互に直接通信しません。このサンプル構成では、ハブ・データベースが、1つのスポーク・データベースで生成された変更を他のスポーク・データベースに送信します。ハブアンドスポーク・レプリケーション環境の詳細は、「ハブアンドスポーク・レプリケーション環境の概要」を参照してください。

この例では、Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードを使用して、ハブアンドスポーク・レプリケーション環境を構成します。このウィザードは、1つ以上のスキーマをレプリケートするOracle Streams環境を構成する最速で最も単純な方法です。また、ウィザードはOracle Streamsレプリケーション環境に対して確立されたベスト・プラクティスに従います。

この例では、ハブ・データベースのグローバル名はhub.example.com、スポーク・データベースのグローバル名はspoke1.example.comおよびspoke2.example.comです。ただし、例を完了するために、ご使用の環境のデータベースに置き換えることもできます。

レプリケーション用に構成されているデータベース・オブジェクトは、ウィザードの実行時に、宛先データベースに存在する場合としない場合があります。宛先データベースにデータベース・オブジェクトが存在しない場合、ウィザードはデータ・ポンプ・エクスポート/インポートを使用して、宛先データベースでデータベース・オブジェクトをインスタンス化します。インスタンス化の際に、これらのデータベース・オブジェクトにインスタンス化SCNが設定されます。宛先データベースにデータベース・オブジェクトが存在する場合、ウィザードは既存のデータベース・オブジェクトを保持して、インスタンス化SCNを設定します。この例では、ウィザードを実行する前に、各データベースにhrスキーマが存在しています。

図4-13に、この例で作成する環境の概要を示します。

図4-13 取得プロセスと読取り/書込みスポークを持つハブアンドスポーク環境

「図4-13 取得プロセスと読取り/書込みスポークを持つハブアンドスポーク環境」の説明

読取り/書込みスポークのあるこのハブアンドスポーク・レプリケーション環境を構成するには:

1. ハブアンドスポーク・レプリケーション環境を準備するには、次のタスクを完了します。

1. 次のデータベースが相互に通信できるように、ネットワーク接続を構成します。

- hub.example.comデータベースとspoke1.example.comデータベース

- hub.example.comデータベースとspoke2.example.comデータベース

データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の構成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

3. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

4. ARCHIVELOGモードで実行するように各ソース・データベースを構成します。取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースをARCHIVELOGモードで実行する必要があります。この例では、すべてのデータベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

2. Enterprise Managerで、Oracle Streams管理者としてハブ・データベースhub.example.comにログインします。

3. データベース・インスタンスの「データベース」ホームページに移動します。

4. 「データ移動」をクリックして「データ移動」サブページを開きます。

5. 「Streams」セクションの「設定」をクリックします。
「Streams」ページが表示され、「設定」オプションが表示されます。

tdpii_setup_streams.gifの説明

6. 「Streamsレプリケーションの設定」で、「スキーマのレプリケート」を選択します。

7. 「ホスト資格証明」セクションで、ホスト・コンピュータ・システムの管理ユーザーのユーザー名とパスワードを入力します。

8. 「続行」をクリックします。

9. 「オブジェクト選択」ページで、「HR」を選択して、「次へ」をクリックします。

10. 「宛先オプション」ページで、ホスト名、ポート、SIDまたはサービス名およびOracle Streams管理者資格証明を指定して、スポーク・データベースspoke1.example.comを指定します。

(レプリケーションをspoke2.example.comデータベースで構成する場合は、spoke2.example.comを指定します。)

11. 「次へ」をクリックします。
「レプリケーション・オプション」ページが表示されます。

tdpii_setup_rep_options.gifの説明

12. 「レプリケーション・オプション」ページを完了します。

1. 「ディレクトリ・パス」セクションで、手順7で指定したホスト・ユーザーがディレクトリに対して読取りおよび書込みを行うことができ、データ・ポンプ・エクスポート・ダンプ・ファイルに対する十分な領域がある場合、ソース・データベースと宛先データベースのディレクトリ・パスをそのままにしておきます。変更する場合は、別のディレクトリ・パスを指定するか、またはこれらの要件を満たすディレクトリ・オブジェクトを作成して指定します。

2. 「拡張オプション」を拡張します。
tdpii_setup_ro_advanced.gifの説明

3. 「オプション」セクションで「データ操作言語(DML)の変更を取得、伝播および適用」が選択されていることを確認します。

4. DDL変更をレプリケートしない場合は、「データ定義言語(DDL)の変更を取得、伝播および適用」を選択解除します。

5. 「双方向レプリケーションの設定」を選択します。

6. 「取得プロセス」セクションで、「取得名」にcapture_hnsと入力します。

7. 「伝播プロセス」セクションで、「伝播名」にpropagation_spoke1と入力します。(レプリケーションをspoke2.example.comデータベースで構成する場合は、propagation_spoke2と入力します。)

8. 「適用プロセス」セクションで、「適用名」にapply_spoke1と入力します。(レプリケーションをspoke2.example.comデータベースで構成する場合は、apply_spoke2と入力します。)

13. 「次へ」をクリックします。

14. 「ジョブのスケジュール」ページで、「即時」を選択するか、後でジョブを実行する時刻を指定します。

15. 「次へ」をクリックします。

16. 「確認」ページで、構成情報を確認して、「発行」をクリックします。

17. 確認ページで、オプションとして、ジョブ・リンクをクリックしてジョブを監視します。

ジョブを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPT、DBA_RECOVERABLE_SCRIPT_PARAMS、DBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。ジョブがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してエラーからリカバリしてください。

18. Oracle Streams管理者としてhub.example.comデータベースに接続している状態で、手順3から17をもう一度完了します。ただし、手順10では、「宛先オプション」ページで、ホスト名、ポート、SIDまたはサービス名およびOracle Streams管理者資格証明を指定して、スポーク・データベースspoke2.example.comを指定します。
また、手順12gでは「伝播名」にpropagation_spoke2を入力し、手順12hでは「適用名」にapply_spoke2を入力します。

例を完了すると、次の特性を持つハブアンドスポーク・レプリケーション環境が構成されます。

- 各データベースで、サプリメンタル・ロギングがhrスキーマの表に対して構成されています。

- 各データベースには、capture_hnsという名前の取得プロセスがあります。取得プロセスは、データベースのhrスキーマに対する変更を取得します。

- 各データベースには、システムで生成された名前を持つキューがあります。各キューは、データベースの取得プロセスに対するものです。

- ハブ・データベースhub.example.comには、次の追加コンポーネントがあります。

- apply_spoke1という名前の適用プロセス。この適用プロセスは、spoke1.example.comデータベースから送信されたhrスキーマに対する変更を適用します。

- システムで生成された名前を持つキュー。このキューは、データベースのapply_spoke1適用プロセスに対するものです。

- apply_spoke2という名前の適用プロセス。この適用プロセスは、spoke2.example.comデータベースから送信されたhrスキーマに対する変更を適用します。

- システムで生成された名前を持つキュー。このキューは、データベースのapply_spoke2適用プロセスに対するものです。

- propagation_spoke1という名前の伝播。この伝播は、hrスキーマに対する変更をローカル・キューからspoke1.example.comデータベースのキューに送信します。

- propagation_spoke2という名前の伝播。この伝播は、hrスキーマに対する変更をローカル・キューからspoke2.example.comデータベースのキューに送信します。

- スポーク・データベースspoke1.example.comには、次の追加コンポーネントがあります。

- apply_spoke1という名前の適用プロセス。この適用プロセスは、hub.example.comデータベースから送信されたhrスキーマに対する変更を適用します。

- システムで生成された名前を持つキュー。このキューは、データベースのapply_spoke1適用プロセスに対するものです。

- propagation_spoke1という名前の伝播。この伝播は、hrスキーマに対する変更をローカル・キューからhub.example.comデータベースのキューに送信します。

- スポーク・データベースspoke2.example.comには、次の追加コンポーネントがあります。

- apply_spoke2という名前の適用プロセス。この適用プロセスは、hub.example.comデータベースから送信されたhrスキーマに対する変更を適用します。

- システムで生成された名前を持つキュー。このキューは、データベースのapply_spoke2適用プロセスに対するものです。

- propagation_spoke2という名前の伝播。この伝播は、hrスキーマに対する変更をローカル・キューからhub.example.comデータベースのキューに送信します。

- 変更の循環を回避するため、次のようにタグが使用されています。

- 各適用プロセスは適用タグを使用し、適用プロセスによって適用される変更のREDOレコードにはタグが含まれます。各適用プロセスは、レプリケーション環境で一意な適用タグを使用します。

- 各取得プロセスは、REDOレコード内のタグに関係なく、レプリケートされたデータベース・オブジェクトの変更すべてを取得します。したがって、各取得プロセスは、そのソース・データベースで適用プロセスによって適用された変更を取得します。

- 各伝播は、レプリケートされたデータベース・オブジェクトに対する変更すべてを、レプリケーション環境の他のデータベースに送信しますが、他のデータベースで発生した変更は除きます。伝播ルールでは、伝播がこれらの変更を破棄するよう指示します。

レプリケーション環境で変更の循環を回避する方法の詳細は、「変更の循環を回避するためのタグの概要」および『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

Oracle Streamsレプリケーション構成を確認するには:

1. 各データベースで、取得プロセスが有効化され、取得タイプがローカルであることを確認します。確認には、「取得プロセスの情報の表示」の手順に従って、「取得」サブページで「ステータス」および「取得タイプ」フィールドを確認します。

2. 各データベースで、伝播が有効化されていることを確認します。確認には、「伝播の情報の表示」の手順に従って、「伝播」サブページで「ステータス」フィールドを確認します。ハブ・データベースには2つの伝播が必要で、両方の伝播が有効化されている必要があります。各スポーク・データベースには、有効化されている1つの伝播が必要です。

3. 各データベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」フィールドを確認します。ハブ・データベースには2つの適用プロセスが必要で、両方の適用プロセスが有効化されている必要があります。各スポーク・データベースには、有効化されている1つの適用プロセスが必要です。

変更をレプリケートするには:

1. データベースの1つで、DML変更をhrスキーマの任意の表に対して行います。

2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用して他のデータベースで変更された表を問い合せてDML変更を表示します。

関連項目:

- 「ハブアンドスポーク・レプリケーション環境の概要」

- 「Oracle Streamsでのデータのレプリケート時期」

- 第5章「Oracle Streamsレプリケーション環境の管理」

- DBMS_STREAMS_ADM提供のPL/SQLパッケージを使用してこのレプリケーション環境を構成する例は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成

この項の例では、hrスキーマにある2つの表に、データ操作言語(DML)変更をレプリケートするOracle Streamsレプリケーション環境を構成します。この例では、各データベースで同期取得を使用して変更を取得します。この例では、Oracle Streamsレプリケーション環境で、データベースのグローバル名にsync1.example.comおよびsync2.example.comを使用します。ただし、例を完了するために、ご使用の環境の2つのデータベースに置き換えることもできます。2データベース・レプリケーション環境の詳細は、「2データベース・レプリケーション環境の概要」を参照してください。

具体的に、この例では、sync1.example.comおよびsync2.example.comデータベースでhr.employeesおよびhr.departments表を共有するOracle Streamsの2データベース・レプリケーション環境を構成します。2つのデータベースは、すべてのDML変更をこれらの表にレプリケートします。 hrサンプル・スキーマは、Oracle Databaseとともにデフォルトでインストールされます。

注意:
同期取得は、表レベルの変更のみ取得できます。スキーマ・レベルまたはデータベース・レベルの変更は取得できません。同期取得を構成するには、DBMS_STREAMS_ADMパッケージのADD_TABLE_RULESおよびADD_SUBSET_RULESプロシージャを使用します。

図4-14に、この例で作成する環境の概要を示します。

図4-14 同期取得を使用した2データベース・レプリケーション環境

「図4-14 同期取得を使用した2データベース・レプリケーション環境」の説明

このレプリケーション環境を同期取得で構成するには:

1. 2データベース・レプリケーション環境を準備するには、次のタスクを完了します。

1. ネットワーク接続を構成して、2つのデータベースが相互に通信できるようにします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. レプリケーション環境に参加する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の構成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

3. Oracle Streamsレプリケーション環境に参加する各データベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

4. hr.employeesおよびhr.departments表が2つのデータベースに存在し、これらのデータベースで一貫していることを確認します。データベース・オブジェクトが1つのデータベースにのみ存在する場合は、エクスポート/インポートを使用してこれらを他のデータベースで作成および移入できます。エクスポート/インポートの詳細は、『Oracle Databaseユーティリティ』を参照してください。

2. 各データベースに2つのANYDATAキューを作成します。この例では、各データベースに次の2つのキューを作成します。

- Oracle Streams管理者strmadminが所有する、capture_queueという名前のキュー。このキューはデータベースでの同期取得によって使用されます。

- Streams管理者strmadminが所有する、apply_queueという名前のキュー。このキューはデータベースでの適用プロセスによって使用されます。

方法については、「ANYDATAキューの作成」を参照してください。

3. 各データベースから他のデータベースへのデータベース・リンクを作成します。

1. sync1.example.comデータベースからsync2.example.comデータベースに、データベース・リンクを作成します。データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、データベース・リンクはsync2.example.comデータベースでOracle Streams管理者に接続する必要があります。データベース・リンクの名前およびサービス名は、どちらもsync2.example.comである必要があります。

2. sync2.example.comデータベースからsync1.example.comデータベースに、データベース・リンクを作成します。データベース・リンクは、Oracle Streams管理者のスキーマに作成する必要があります。また、データベース・リンクはsync1.example.comデータベースでOracle Streams管理者に接続する必要があります。データベース・リンクの名前およびサービス名は、どちらもsync1.example.comである必要があります。

詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

4. sync1.example.comデータベースで適用プロセスを構成します。この適用プロセスは、sync2.example.comデータベースで取得され、sync1.example.comデータベースに伝播された共有表への変更を適用します。

1. SQL*Plusを開き、sync1.example.comデータベースにOracle Streams管理者として接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 適用プロセスを作成します。

BEGIN
DBMS_APPLY_ADM.CREATE_APPLY(
queue_name     => 'strmadmin.apply_queue',
apply_name     => 'apply_emp_dep',
apply_captured => FALSE);
END;
/

適用プロセスは永続キュー内の変更を適用するため、apply_capturedパラメータがFALSEに設定されます。これらは、同期取得によって取得された変更です。 apply_capturedパラメータは、適用プロセスが取得プロセスによって取得された変更を適用する場合にのみTRUEに設定する必要があります。

適用プロセスは起動しないでください。

3. 適用プロセス・ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name      => 'hr.employees',
streams_type    => 'apply',
streams_name    => 'apply_emp_dep',
queue_name      => 'strmadmin.apply_queue',
source_database => 'sync2.example.com');
END;
/

このルールは、apply_queueキューに出現するhr.employees表に対するすべてのDML変更を適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync2.example.comソース・データベースで取得された変更のみ適用することも指定します。

4. 適用プロセス・ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name      => 'hr.departments',
streams_type    => 'apply',
streams_name    => 'apply_emp_dep',
queue_name      => 'strmadmin.apply_queue',
source_database => 'sync2.example.com');
END;
/

このルールは、apply_queueキューに出現するhr.departments表に対するすべてのDML変更を適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync2.example.comソース・データベースで取得された変更のみ適用することも指定します。

5. sync2.example.comデータベースで適用プロセスを構成します。この適用プロセスは、sync1.example.comデータベースで取得され、sync2.example.comデータベースに伝播された変更を適用します。

1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。
SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。

2. 適用プロセスを作成します。

BEGIN
DBMS_APPLY_ADM.CREATE_APPLY(
queue_name     => 'strmadmin.apply_queue',
apply_name     => 'apply_emp_dep',
apply_captured => FALSE);
END;
/

適用プロセスは永続キュー内の変更を適用するため、apply_capturedパラメータがFALSEに設定されます。これらの変更は、同期取得によって取得されました。 apply_capturedパラメータは、適用プロセスが取得プロセスによって取得された変更を適用する場合にのみTRUEに設定する必要があります。

適用プロセスは起動しないでください。

3. 適用プロセス・ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name      => 'hr.employees',
streams_type    => 'apply',
streams_name    => 'apply_emp_dep',
queue_name      => 'strmadmin.apply_queue',
source_database => 'sync1.example.com');
END;
/

このルールは、apply_queueキューに出現するすべてのDML変更をhr.employees表に適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync1.example.comソース・データベースで取得された変更のみ適用することも指定します。

4. 適用プロセス・ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name      => 'hr.departments',
streams_type    => 'apply',
streams_name    => 'apply_emp_dep',
queue_name      => 'strmadmin.apply_queue',
source_database => 'sync1.example.com');
END;
/

このルールは、apply_queueキューに出現するすべてのDML変更をhr.departments表に適用するよう適用プロセスapply_emp_depに指示します。ルールは、適用プロセスがsync1.example.comソース・データベースで取得された変更のみ適用することも指定します。

6. sync1.example.comデータベースのキューからsync2.example.comデータベースのキューに変更を送信する伝播を作成します。

1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

2. sync2.example.comデータベースに対する変更を送信する伝播の作成を作成します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name              => 'hr.employees',
streams_name            => 'send_emp_dep',
source_queue_name       => 'strmadmin.capture_queue',
destination_queue_name  => 'strmadmin.apply_queue@sync2.example.com',
source_database         => 'sync1.example.com',
queue_to_queue          => TRUE);
END;
/

ADD_TABLE_PROPAGATION_RULESプロシージャは、伝播およびポジティブ・ルール・セットを作成します。このプロシージャは、sync2.example.comデータベース内のapply_queueキューのhr.employees表にDML変更を送信するよう指示する伝播ルール・セットにルールの追加もします。

3. 伝播ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name              => 'hr.departments',
streams_name            => 'send_emp_dep',
source_queue_name       => 'strmadmin.capture_queue',
destination_queue_name  => 'strmadmin.apply_queue@sync2.example.com',
source_database         => 'sync1.example.com',
queue_to_queue          => TRUE);
END;
/

ADD_TABLE_PROPAGATION_RULESプロシージャは、sync2.example.comデータベース内のapply_queueキューのhr.departments表にDML変更を送信するよう指示する伝播ルール・セットにルールを追加します。

7. sync2.example.comデータベースのキューからsync1.example.comデータベースのキューに変更を送信する伝播を作成します。

1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

2. sync1.example.comデータベースに対する変更を送信する伝播の作成を作成します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name              => 'hr.employees',
streams_name            => 'send_emp_dep',
source_queue_name       => 'strmadmin.capture_queue',
destination_queue_name  => 'strmadmin.apply_queue@sync1.example.com',
source_database         => 'sync2.example.com',
queue_to_queue          => TRUE);
END;
/

ADD_TABLE_PROPAGATION_RULESプロシージャは、伝播およびポジティブ・ルール・セットを作成します。このプロシージャでは、sync1.example.comデータベース内のapply_queueキューのhr.employees表にDML変更を送信するよう指示する伝播ルール・セットにルールを追加します。

3. 伝播ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_PROPAGATION_RULES(
table_name              => 'hr.departments',
streams_name            => 'send_emp_dep',
source_queue_name       => 'strmadmin.capture_queue',
destination_queue_name  => 'strmadmin.apply_queue@sync1.example.com',
source_database         => 'sync2.example.com',
queue_to_queue          => TRUE);
END;
/

ADD_TABLE_PROPAGATION_RULESプロシージャは、sync1.example.comデータベース内のapply_queueキューのhr.departments表にDML変更を送信するよう指示する伝播ルール・セットにルールを追加します。

8. sync1.example.comデータベースで同期取得を構成します。

1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

2. ADD_TABLE_RULESプロシージャを実行して、同期取得を作成し、hr.employees表に対する変更を取得するよう指示するルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name    => 'hr.employees',
streams_type  => 'sync_capture',
streams_name  => 'sync_capture',
queue_name    => 'strmadmin.capture_queue');
END;
/

3. 同期取得ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name    => 'hr.departments',
streams_type  => 'sync_capture',
streams_name  => 'sync_capture',
queue_name    => 'strmadmin.capture_queue');
END;
/

これらのプロシージャを実行して次のアクションを実行します。

- 現在のデータベースでsync_captureという名前の同期取得を作成します。同じ名前の同期取得は存在できません。

- 同期取得を有効にします。同期取得は無効にできません。

- strmadminが所有するcapture_queueという名前の既存のキューで同期取得を関連付けます。

- 同期取得sync_captureのポジティブ・ルール・セットを作成します。ルール・セットにはシステムで作成された名前があります。

- hr.employees表に対するDML変更を取得するルールを作成し、同期取得のポジティブ・ルール・セットにルールを追加します。ルールにはシステムで生成された名前があります。

- 表に対してDBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATIONファンクションを自動的に実行することで、インスタンス化用にhr.employees表を準備します。

- hr.departments表に対するDML変更を取得するルールを取得するルールを作成し、同期取得のポジティブ・ルール・セットにルールを追加します。ルールにはシステムで生成された名前があります。

- 表に対してDBMS_CAPTURE_ADM.PREPARE_SYNC_INSTANTIATIONファンクションを自動的に実行することで、インスタンス化用にhr.departments表を準備します。

9. sync2.example.comデータベースで同期取得を構成します。

1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

2. ADD_TABLE_RULESプロシージャを実行して、同期取得を作成し、hr.employees表に対する変更を取得するよう指示するルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name    => 'hr.employees',
streams_type  => 'sync_capture',
streams_name  => 'sync_capture',
queue_name    => 'strmadmin.capture_queue');
END;
/

3. 同期取得ルール・セットにルールを追加します。

BEGIN
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
table_name    => 'hr.departments',
streams_type  => 'sync_capture',
streams_name  => 'sync_capture',
queue_name    => 'strmadmin.capture_queue');
END;
/

手順8では、これらのプロシージャによって現在のデータベースで実行されるアクションについて説明します。

10. sync2.example.comデータベースで表のインスタンス化SCNを設定します。

1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

2. sync2.example.comデータベースでhr.employees表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync2.example.com(
source_object_name    => 'hr.employees',
source_database_name  => 'sync1.example.com',
instantiation_scn     => iscn);
END;
/

3. sync2.example.comデータベースでhr.departments表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync2.example.com(
source_object_name    => 'hr.departments',
source_database_name  => 'sync1.example.com',
instantiation_scn     => iscn);
END;
/

インスタンス化SCNは、適用プロセスが表に変更を適用できる最小のSCNです。適用プロセスがsync2.example.comデータベースの共有表への変更を適用する前に、インスタンス化SCNを各表に対して設定する必要があります。

11. sync1.example.comデータベースで表のインスタンス化SCNを設定します。

1. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

2. sync1.example.comデータベースでhr.employees表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync1.example.com(
source_object_name    => 'hr.employees',
source_database_name  => 'sync2.example.com',
instantiation_scn     => iscn);
END;
/

3. sync2.example.comデータベースでhr.departments表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@sync1.example.com(
source_object_name    => 'hr.departments',
source_database_name  => 'sync2.example.com',
instantiation_scn     => iscn);
END;
/

12. 各データベースで適用プロセスを起動します。

1. SQL*Plusで、sync1.example.comデータベースにOracle Streams管理者として接続します。

2. 適用プロセスを開始します。

BEGIN
DBMS_APPLY_ADM.START_APPLY(
apply_name => 'apply_emp_dep');
END;
/

3. SQL*Plusで、sync2.example.comデータベースにOracle Streams管理者として接続します。

4. 適用プロセスを開始します。

BEGIN
DBMS_APPLY_ADM.START_APPLY(
apply_name => 'apply_emp_dep');
END;
/

適用プロセスの開始にEnterprise Managerを使用する方法については、「適用プロセスの起動と停止」を参照してください。

13. sync1.example.comおよびsync2.example.comの各データベースのhr.departmentsおよびhr.employeesの各表に対して、最新時刻競合解消を構成します。方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

次のような特性を持つ2データベース・レプリケーション環境が構成されます。

- 各データベースには、sync_captureという名前の同期取得があります。この同期取得は、hr.employees表およびhr.departments表に対するすべてのDML変更を取得します。

- 各データベースには、capture_queueという名前のキューがあります。このキューは、データベースでの同期取得用です。

- 各データベースには、apply_emp_depという名前の適用プロセスがあります。この適用プロセスは、hr.employees表およびhr.departments表に対するすべてのDML変更を適用します。

- 各データベースには、apply_queueという名前のキューがあります。このキューは、データベースでの適用プロセス用です。

- 各データベースには、send_emp_depという名前の伝播があります。この伝播は、ローカル・データベース内のcapture_queueから、他のデータベース内のapply_queueに変更を送信します。この伝播では、hr.employees表およびhr.departments表に対するすべてのDML変更が送信されます。

- 変更の循環を回避するため、次のようにタグが使用されています。

- 各適用プロセスでは、デフォルトの適用タグを使用します。デフォルトの適用タグは、'00'(ゼロが2つ)と等価の16進数になります。

- 各同期取得は、NULLタグを含むセッションの変更のみを取得します。したがって、同期取得は、ローカル適用プロセスによって適用される変更は取得しません。同期取得のルールは、これらの変更を取得しないよう同期取得に指示します。

レプリケーション環境で変更の循環を回避する方法の詳細は、「変更の循環を回避するためのタグの概要」を参照してください。

Oracle Streamsレプリケーション構成を確認するには:

1. 各データベースで、次の手順を実行して同期取得が構成されることを確認します。

1. SQL*Plusを起動して、データベースにOracle Streams管理者として接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 次のようにALL_SYNC_CAPTUREデータ・ディクショナリ・ビューを問い合せます。

SELECT CAPTURE_NAME FROM ALL_SYNC_CAPTURE;

各データベースにsync_captureという名前の同期取得が存在していることを確認します。

2. 各データベースで、伝播が有効化されていることを確認します。確認には、「伝播の情報の表示」の手順に従って、「伝播」サブページで「ステータス」を確認します。

3. 各データベースで、適用プロセスが有効化されていることを確認します。確認には、「適用プロセスの情報の表示」の手順に従って、「適用」サブページで「ステータス」を確認します。

変更をレプリケートするには:

1. データベースの1つで、hr.employees表またはhr.departments表に対してDML変更を行います。

2. 変更のレプリケーションが完了するまで待ってから、SQL*Plusを使用して他のデータベースのhr.employees表またはhr.departments表を問い合せて変更を表示します。

関連項目:

- 「同期取得での変更の取得の概要」

- 「ハブアンドスポーク・レプリケーション環境の概要」

- 「Oracle Streamsでのデータのレプリケート時期」

- 第5章「Oracle Streamsレプリケーション環境の管理」

チュートリアル: 表の最新時刻競合解消の構成

レプリケーション環境では、競合解消によって競合が自動的に解消されます。競合解消の詳細は、「競合と競合解消の概要」を参照してください。

更新競合を解消する最も一般的な方法は、最新のタイムスタンプを持つ変更を保持し、古い変更を破棄することです。この方法では、適用中に競合が検出された場合、適用プロセスは、変更のタイムスタンプ列が表の対応する行よりも新しい場合に変更を適用します。表のタイムスタンプ列が最新の場合、適用プロセスは変更を破棄します。

この項の例では、次のアクションを完了することにより、hr.departments表の最新時刻競合解消を構成します。

- TIMESTAMP WITH TIME ZONEデータ型のtime列を表に追加する

- 行が変更されたときに最新の時刻を持つ行の時間列を更新するようにトリガーを構成する

- 表の列にサプリメンタル・ロギングを追加する

- DBMS_APPLY_ADMパッケージのSET_UPDATE_CONFLICT_HANDLERプロシージャを実行して、表の競合解消を構成する

この項の手順を使用して、任意の表の競合解消を構成できます。これを構成するには、hrをスキーマ名で置換し、departmentsを表名で置換します。また、SET_UPDATE_CONFLICT_HANDLERプロシージャを実行するときに、hr.departments表の列を、使用する表の列で置換します。

hr.departments表の最新時刻競合解消を構成するには:

1. 表にtime列を追加します。

1. SQL*Plusで、Oracle Streams管理者やSYSTEMなどの管理ユーザーとしてデータベースに接続します。別の方法として、時間列が追加される表を所有しているユーザーとして接続することもできます。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. SQL文ALTER TABLEを使用して、表にtime列を追加します。この例では、次の文を実行してtime列をhr.departments表に追加します。

ALTER TABLE hr.departments ADD (time TIMESTAMP WITH TIME ZONE);

2. トリガーを作成して変更が発生した時刻で各マスター表のtime列を更新します。

ヒント:
トリガーを使用してtime列を更新するかわりに、アプリケーションで表に対して列を修正または挿入するたびに、time列を移入できます。

1. Oracle Enterprise Managerで、SYSTEMまたはOracle Streams管理者などの管理者ユーザーとしてデータベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「プログラム」セクションで「トリガー」をクリックします。

5. 「トリガー」ページで、「作成」をクリックします。
「トリガーの作成」ページが表示され、「一般」サブページが表示されます。

tdpii_create_trigger.gifの説明

6. 「名前」フィールドにトリガーの名前を入力します。この例では、insert_departments_timeを入力します。

7. 表を所有しているスキーマを「スキーマ」フィールドに入力します。この例では、「スキーマ」フィールドにはhrと入力します。

8. 「トリガー本体」フィールドに次のように入力します。

BEGIN
-- Consider time synchronization problems. The previous update to this
-- row might have originated from a site with a clock time ahead of
-- the local clock time.
IF :OLD.TIME IS NULL OR :OLD.TIME < SYSTIMESTAMP THEN
:NEW.TIME := SYSTIMESTAMP;
ELSE
:NEW.TIME := :OLD.TIME + 1 / 86400;
END IF;
END;

9. 「イベント」をクリックして「イベント」サブページを開きます。

10. 「対象オブジェクト」リストで「表」が選択されていることを確認します。

11. 「表(Schema.Table)」フィールドにschema.tableの形式で表名を入力するか、懐中電灯アイコンを使用してデータベース・オブジェクトを検索します。この例では、hr.departmentsを入力します。

12. 「起動タイミング」に「前」が選択されていることを確認してください。

13. 「イベント」に「選択」および「列の更新」を選択します。
表内の列が表示されます。

14. 新規のtime列を除く表のすべての列を選択します。

15. 「拡張」をクリックして、「拡張」サブページを開きます。

16. 「行レベル・トリガー」を選択します。

17. 「OK」をクリックしてトリガーを作成します。

注意:
SQL文CREATE TRIGGERを使用して、トリガーを作成することもできます。

3. SQL*Plusで、データベースにOracle Streams管理者として接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

4. 表の列にサプリメンタル・ロギングを追加します。

ALTER TABLE hr.departments ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

サプリメンタル・ロギングは、適用中の競合解消に必要です。

5. SET_UPDATE_CONFLICT_HANDLERプロシージャを実行して、表の最新時刻競合解消を構成します。

たとえば、次のプロシージャを実行して、hr.departments表の最新時刻競合解消を構成します。

DECLARE
cols  DBMS_UTILITY.NAME_ARRAY;
BEGIN
cols(1) := 'department_id';
cols(2) := 'department_name';
cols(3) := 'manager_id';
cols(4) := 'location_id';
cols(5) := 'time';
DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER(
object_name        =>  'hr.departments',
method_name        =>  'MAXIMUM',
resolution_column  =>  'time',
column_list        =>  cols);
END;
/

cols列リストの表内のすべての列を含みます。

6. レプリケーション環境で競合解消が必要な表について、これらの手順を繰り返します。複数のデータベースで表の競合解消を構成することが必要な場合があります。
レプリケーション環境を構成または拡張する例を実行している場合は、適切な表に対して最新時刻競合解消を構成します。

- 「チュートリアル: ローカル取得プロセスを使用した2データベース・レプリケーションの構成」では、db1.example.comおよびdb2.example.comデータベースでhrスキーマのすべての表に対して競合解消を構成します。このスキーマには、countries、departments、employees、jobs、job_history、locationsおよびregionsの各表が含まれます。

- 「チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成」では、hub1.example.com、spoke1.example.com、spoke2.example.comの各データベースでhrスキーマ内のすべての表に対して競合解消を構成します。このスキーマには、countries、departments、employees、jobs、job_history、locationsおよびregionsの各表が含まれます。

- 「チュートリアル: 同期取得を使用した2データベース・レプリケーションの構成」では、sync1.example.comおよびsync2.example.comデータベースでhr.departmentsおよびhr.employees表に対して競合解消を構成します。

- 「チュートリアル: レプリケーション環境へのデータベース・オブジェクトの追加」では、hub.example.com、spoke1.example.comおよびspoke2.example.comデータベースでoe.ordersおよびoe.order_items表に対して競合解消を構成します。

- 「チュートリアル: レプリケーション環境へのデータベースの追加」では、spoke3.example.comデータベースでhrスキーマのすべての表に対して競合解消を構成します。このスキーマには、countries、departments、employees、jobs、job_history、locationsおよびregionsの各表が含まれます。

例からこの項に移動した場合は、ここでその例に戻ります。

関連項目:

- 「競合と競合解消の概要」

- 「構成された更新競合ハンドラの表示」

5 Oracle Streamsレプリケーション環境の管理

この章では、Oracle Streamsレプリケーション環境の管理、監視およびトラブルシューティング方法を説明します。

この章は次の項で構成されています。

- Oracle Streamsレプリケーション環境の管理

- Oracle Streamsレプリケーション環境の監視

- Oracle Streamsレプリケーション環境のトラブルシューティング

注意:
このマニュアルでは、Oracle Enterprise Managerで実行できるOracle Streams管理操作の一部のみを扱っています。使用方法の詳細は、Oracle Enterprise Managerオンライン・ヘルプを参照してください。

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 第6章「Oracle Streamsレプリケーション環境の拡張」

- 『Oracle Streams概要および管理』

- 『Oracle Streamsレプリケーション管理者ガイド』

Oracle Streamsレプリケーション環境の管理

Oracle Streamsレプリケーション環境では、管理はそれほど必要ありません。環境が正しく構成されている場合は、必要な最小限の管理作業で変更がデータベース・オブジェクトに自動的にレプリケートされます。この項では、Oracle Streamsレプリケーション環境で必要になることのある管理タスクの実行方法を説明します。

次の各項で、Oracle Streamsレプリケーション環境の管理を説明します。

- 取得プロセスの管理

- 伝播の有効化および無効化

- 適用プロセスの管理

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 「Oracle Streamsレプリケーション環境の監視」

- 「Oracle Streamsレプリケーション環境のトラブルシューティング」

取得プロセスの管理

Enterprise Managerを使用して、取得プロセスを管理できます。この項では、取得プロセスの最も一般的な管理タスクを完了する方法を説明します。

次の各項で、取得プロセスの管理について説明します。

- 取得プロセスの起動と停止

- 取得プロセスのパラメータの設定

関連項目:

- 「取得プロセスでの変更の取得の概要」

- 「取得プロセスの監視」

取得プロセスの起動と停止

この項では、Enterprise Managerで取得プロセスを起動および停止する方法を説明します。

取得プロセスは、サポートされていないデータ型などのエラーを検出した場合に自動的に停止することがあります。この状況が発生した場合は、Enterprise Managerの「レプリケーションの管理」ページの「取得」サブページにエラーが表示されます。この場合は、エラーを解決して取得プロセスを再起動する必要があります。

また、取得プロセスは、取得プロセスが停止していたときにデータベース・オブジェクトに対して行われた変更を取得できることにも注意してください。これらの変更はREDOログに記録され、取得プロセスは、再起動後にREDOログ内で取得するように構成されている変更を検索します。データベース・オブジェクトに対する特定の変更を取得しないようにするには、タグを使用する必要があります。詳細は、「変更の循環を回避するためのタグの概要」を参照してください。

取得プロセスを起動または停止するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、起動または停止する取得プロセスを選択します。必要に応じて、検索ツールを使用して取得プロセスを検索してから選択します。

6. 「アクション」リストで、無効になっている取得プロセスまたは中断した取得プロセスを起動するには「有効化」、有効になっている取得プロセスを停止するには「無効化」を選択します。

7. 「実行」をクリックします。

8. 取得プロセスを無効にしている場合は、確認ページで「はい」をクリックして、無効化を終了します。

注意:
DBMS_CAPTURE_ADMパッケージのSTART_CAPTUREプロシージャおよびSTOP_CAPTUREプロシージャを使用して、取得プロセスを起動および停止することもできます。

関連項目:

- 「取得プロセスの監視」

- 「取得プロセスでの変更の取得の概要」

取得プロセスのパラメータの設定

この項では、Enterprise Managerで取得プロセス・パラメータを設定する方法を説明します。取得プロセス・パラメータは、取得プロセスの動作を制御します。パラメータを設定して、取得プロセスの特定の動作を変更できます。たとえば、PARALLELISM取得プロセス・パラメータを変更して、変更を取得するプロセス数を制御できます。通常は、取得プロセスの並列性を調整して、取得プロセスのパフォーマンスを最適化します。

取得プロセス・パラメータを設定するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、変更する取得プロセスを選択します。必要に応じて、検索ツールを使用して取得プロセスを検索してから選択します。

6. 「アクション」で「構成」を選択します。

7. 「実行」をクリックして「構成」サブページを開きます。

8. 「編集」をクリックして「取得構成の編集」ページを開きます。
tdpii_edit_capture.gifの説明

9. 「パラメータ」セクションで、1つ以上の取得プロセス・パラメータを変更します。
パラメータの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 parallelismパラメータを変更した場合は、 「適用」をクリックしたときに取得プロセスが自動的に停止し、再起動します。

10. 「適用」をクリックすると変更が保存されます。

注意:
DBMS_CAPTURE_ADM.SET_PARAMETERプロシージャを使用して、取得プロセス・パラメータを設定することもできます。

関連項目:

- 「取得プロセスの監視」

- 「取得プロセスでの変更の取得の概要」

伝播の有効化および無効化

この項では、Enterprise Managerで伝播を有効または無効にする方法を説明します。

伝播がメッセージを送信するデータベースが停止している場合、またはネットワークの問題のため伝播によるメッセージの送信が不能な場合は、伝播を無効にできます。このような状況では、伝播を無効にし、問題が解決したら有効にできます。

また、16回連続試行してもメッセージの送信に失敗した場合は、伝播が自動的に中断されます。この状況が発生した場合は、Enterprise Managerの「レプリケーションの管理」ページの「伝播」サブページにエラーが表示されます。この場合は、エラーを解決し、伝播を有効にする必要があります。

伝播を有効または無効にするには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、有効または無効にする伝播を選択します。必要に応じて、検索ツールを使用して伝播を検索してから選択します。

6. 「アクション」リストで、無効になっている伝播または中断した伝播を起動するには「有効化」、有効になっている伝播を停止するには「無効化」を選択します。

7. 「実行」をクリックします。

注意:
DBMS_PROPAGATION_ADMパッケージのSTART_PROPAGATIONプロシージャおよびSTOP_PROPAGATIONプロシージャを使用して、伝播を起動および停止することもできます。

関連項目:

- 「データベース間の変更の伝播の概要」

- 「伝播の監視」

- 伝播および伝播スケジュールの管理の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

適用プロセスの管理

Enterprise Managerを使用して、適用プロセスを管理できます。この項では、適用プロセスの最も一般的な管理タスクを完了する方法を説明します。

次の各項で、適用プロセスの管理について説明します。

- 適用プロセスの起動と停止

- 適用プロセスのパラメータの設定

関連項目:

- 「変更の適用の概要」

- 「適用プロセスの監視」

- 「適用エラーの管理」

適用プロセスの起動と停止

この項では、Enterprise Managerで適用プロセスを起動および停止する方法を説明します。

適用プロセスは、表に存在しない行の更新試行などのエラーが発生した場合に自動的に停止します。この状況が発生した場合は、Enterprise Managerの「レプリケーションの管理」ページの「適用」サブページで、適用プロセスのステータスが「中断」になります。この場合は、エラーを解決して適用プロセスを再起動する必要があります。

適用プロセスを起動または停止するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、起動または停止する適用プロセスを選択します。必要に応じて、検索ツールを使用して適用プロセスを検索してから選択します。

6. 「アクション」リストで、無効になっている適用プロセスまたは中断した適用プロセスを起動するには「有効化」、有効になっている適用プロセスを停止するには「無効化」を選択します。

7. 「実行」をクリックします。

8. 適用プロセスを無効にしている場合は、確認ページで「はい」をクリックして、無効化を終了します。

注意:
DBMS_APPLY_ADMパッケージのSTART_APPLYプロシージャおよびSTOP_APPLYプロシージャを使用して、適用プロセスを起動および停止することもできます。

関連項目:

- 「適用プロセスの監視」

- 「適用エラーの管理」

- 「変更の適用の概要」

適用プロセスのパラメータの設定

この項では、Enterprise Managerで適用プロセス・パラメータを設定する方法を説明します。適用プロセス・パラメータは、適用プロセスの動作を制御します。パラメータを設定して、適用プロセスの特定の動作を変更できます。たとえば、parallelism適用プロセス・パラメータを変更して、変更を適用するプロセス数を制御できます。通常は、適用プロセスの並列性を調整して、適用プロセスのパフォーマンスを最適化します。

適用プロセス・パラメータを設定するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、変更する適用プロセスを選択します。必要に応じて、検索ツールを使用して適用プロセスを検索してから選択します。

6. 「アクション」で「構成」を選択します。

7. 「実行」をクリックして「構成」サブページを開きます。

8. 「編集」をクリックして「構成適用の編集」ページを開きます。
tdpii_edit_apply.gifの説明

9. 「パラメータ」セクションで、1つ以上の適用プロセス・パラメータを変更します。
パラメータの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 parallelismパラメータを変更した場合は、「適用」をクリックしたときに適用プロセスが自動的に停止し、再起動します。

10. 「適用」をクリックすると変更が保存されます。

注意:
DBMS_APPLY_ADM.SET_PARAMETERプロシージャを使用して、適用プロセス・パラメータを設定することもできます。

関連項目:

- 「適用プロセスの監視」

- 「適用エラーの管理」

- 「変更の適用の概要」

Oracle Streamsレプリケーション環境の監視

この項では、Enterprise ManagerとSQL*Plusを使用して、レプリケーション・コンポーネントとレプリケーション・トポロジに関する一般情報を表示する方法を説明します。取得プロセス、伝播および適用プロセスの監視方法も説明します。

次の各項で、Oracle Streamsレプリケーション環境の監視を説明します。

- データベースのレプリケーション・コンポーネントの概要の表示

- ストリーム・パスの表示

- Oracle Streamsコンポーネントのパフォーマンス分析情報の表示

- データベースのOracle Streams環境のトポロジの表示

- 取得プロセスの監視

- 伝播の監視

- 適用プロセスの監視

- 「バッファ・キューの統計」の表示

関連項目:

- 「Oracle Streamsレプリケーション環境の管理」

- 第4章「Oracle Streamsを使用したデータのレプリケート」

データベースのレプリケーション・コンポーネントの概要の表示

Enterprise Managerの「レプリケーションの管理」ページの「概要」サブページには、現在のデータベース内のOracle Streamsコンポーネントに関する情報が表示されます。次のような情報があります。

- Streamsプールのサイズに関する一般情報

- ローカル・データベース内の取得プロセス、伝播および適用プロセスの数

- 現在エラーになっている取得プロセス、伝播および適用プロセスの数

- ローカル・データベースでOracle Streamsコンポーネントを通過するストリーム・パスのサマリー

- 取得プロセス、伝播および適用プロセスの待機時間およびスループットを示すグラフ

番号をクリックしてドリルダウンし、コンポーネントに関する詳細情報を表示したり、コンポーネントを管理したりできます。

データベースのレプリケーション・コンポーネントの概要を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

tdpii_streams_main1.gifの説明

ストリーム・パスの表示

Oracle Enterprise Managerは、Oracle Streamsパフォーマンス・アドバイザを使用して、データベース上のOracle Streamsコンポーネントのストリーム・パスを追跡します。Oracle Streamsコンポーネントには、取得プロセス、キュー、伝播送信者、伝播受信者または適用プロセスがあります。Oracle Streamsパフォーマンス・アドバイザを使用すると、これらのコンポーネントの実行状況を監視できます。また、Oracle Streamsパフォーマンス・アドバイザは、コンポーネント間のリンク、および取得から処理までの情報の流れ方を追跡します。

ストリーム・パスとは、ソースから宛先までのメッセージのフローです。ストリーム・パスは、取得プロセス、同期取得またはアプリケーションがメッセージをキューにエンキューした場所から始まります。ストリーム・パスは、適用プロセスがメッセージをデキューした場所で終了します。ストリーム・パスは、適用プロセスに到達するまでに複数のキューおよび伝播を通過する可能性があります。このため、適用プロセスに到達するまでの1つのストリーム・パスが、複数のソース・コンポーネントと宛先コンポーネントのペアで構成される可能性があります。

データベースでOracle Streamsコンポーネントのストリーム・パスを表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。

5. 「表示」で、「パス・レベル」オプションを選択します。

tdpii_streams_paths.gifの説明

ストリーム・パスの詳細は、『Oracle Streams概要および管理』を参照してください。統計の詳細は、統計のリンクをクリックしてください。

また、パス・レベル・ビューには、いずれかのコンポーネントがボトルネック・コンポーネントかどうかが示されます。ボトルネック・コンポーネントとは、最もビジーなコンポーネントまたはアイドル時間が最も短いコンポーネントです。ボトルネック・コンポーネントがある場合は、これらのコンポーネントのステータスを確認します。無効になっている場合は、有効にできます。これらのコンポーネントが有効になっている場合は、パフォーマンスが向上するようコンポーネントを変更できるかどうかを調べることができます。

注意:
Database Controlでは、リモート・データベース上で実行されるコンポーネントの統計にはリンクを使用できません。

Oracle Streamsコンポーネントのパフォーマンス分析情報の表示

Oracle Enterprise Managerは、Oracle Streamsパフォーマンス・アドバイザを使用して、データベース上のOracle Streamsコンポーネントのパフォーマンスを監視します。

データベースでOracle Streamsコンポーネントのパフォーマンス分析情報を表示するには:

1. Enterprise ManagerにOracle Streams管理者などの管理ユーザーとしてログインします。

2. 管理するデータベースの「データベース」ホームページに移動します。

3. 「関連リンク」セクションの「アドバイザ・セントラル」をクリックします。

4. 「アドバイザ・セントラル」ページで、「Streamsパフォーマンス・アドバイザ」をクリックします。
「Streamsパフォーマンス・アドバイザ」ページは、各コンポーネントのパフォーマンス分析情報のサマリーを表示します。

5. 詳細なパフォーマンス分析情報を表示するには、次のオプションを選択します。

- すべてのコンポーネントに関する詳細なパフォーマンス分析情報を表示するには、「すべての詳細の表示」をクリックします。

- コンポーネントに関する詳細なパフォーマンス分析情報を表示するには、コンポーネントを選択して、「詳細の表示」をクリックします。

『Oracle Streams概要および管理』には、これらのページに表示されるコンポーネントのタイプと統計に関する詳細情報が含まれています。

データベースのOracle Streams環境のトポロジの表示

Oracle Streamsトポロジには、ローカル・データベース、およびOracle Streams環境でローカル・データベースと対話する他のデータベースのグラフィカル表現が表示されます。レプリケーション環境では、トポロジは、表示されているデータベースに関する次の情報を示します。

- 現在のデータベースからOracle Streams環境の他のデータベースへの伝播に使用されるデータベース・リンク。現在のデータベースを始点とする各矢印は、現在のデータベースから別のデータベースへの伝播に使用されるデータベース・リンクを示します。レプリケーション環境では、データベース・リンクを使用して、レプリケートされたオブジェクトに対する変更を他のデータベースに送信します。

- Oracle Streams環境の他のデータベースから現在のデータベースへの伝播に使用されるデータベース・リンクで、現在のデータベースの適用プロセスは、伝播されるメッセージを現在のデータベースに適用します。現在のデータベースを終点とする各矢印は、別のデータベースから現在のデータベースでメッセージが適用される現在のデータベースへの伝播に使用されるデータベース・リンクを示します。

Oracle Streamsトポロジを表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「トポロジ」をクリックして「トポロジ」サブページを開きます。

「概要」ウィンドウで、トポロジの特定部分を選択して詳細に表示したり、ズーム・イン/ズーム・アウトできます。トポロジ内のデータベースを選択し、データベースに関する情報を示す「選択の詳細」ウィンドウを表示することもできます。

Oracle Streamsトポロジの詳細は、「凡例」リンクをクリックしてください。

次の図は、Oracle Streamsレプリケーション環境のOracle Streamsトポロジの例を示しています。

tdpii_streams_topology.gifの説明

前の図のOracle Streamsトポロジには、ハブアンドスポーク・レプリケーション構成が示されています。この構成には、次の要素が含まれています。

- 現在のデータベースの名前は、hubです。

- spoke1.example.comデータベースは、現在のデータベースと相互に作用するレプリケーション環境の一部です。このデータベースからハブ・データベース、およびハブ・データベースからこのデータベースへのデータベース・リンクがあります。

- spoke2.example.comデータベースは、現在のデータベースと相互に作用するレプリケーション環境の一部です。このデータベースからハブ・データベース、およびハブ・データベースからこのデータベースへのデータベース・リンクがあります。

関連項目:

- 「ハブアンドスポーク・レプリケーション環境の概要」

取得プロセスの監視

Enterprise Managerを使用して、取得プロセスに関する詳細情報を表示できます。取得プロセスの統計も表示できます。

次の各項で、取得プロセスの監視について説明します。

- 取得プロセスの情報の表示

- 取得プロセスに関する統計情報の表示

- アクティブな取得プロセス・トランザクションの表示

関連項目:

- 「取得プロセスでの変更の取得の概要」

- 「取得プロセスの管理」

取得プロセスの情報の表示

Enterprise Managerを使用して、取得プロセスに関する情報を表示できます。この情報には、取得プロセスのステータスと状態、および取得プロセスに関するその他の情報が含まれます。

Enterprise Managerで取得プロセスに関する詳細情報を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

「Streams」サブページには、データベース内の各取得プロセスに関する一般情報が表示されます。この情報には、取得プロセスのステータス、状態、待機時間およびスループットが含まれます。

5. コンポーネントのリストで、監視する取得プロセスを選択します。必要に応じて、検索ツールを使用して取得プロセスを検索してから選択します。

6. 「アクション」で「詳細の表示」を選択します。

7. 「実行」をクリックして「取得の詳細を表示」ページを開きます。

tdpii_view_capture_details.gifの説明

「取得の詳細を表示」ページには、取得プロセスに関する詳細情報が表示されます。

注意:
取得プロセスに関する情報を、ALL_CAPTUREおよびV$STREAMS_CAPTUREデータ・ディクショナリ・ビューに問い合せることもできます。

関連項目:

- 「取得プロセスでの変更の取得の概要」

- 「取得、伝播および適用の動作を制御するルールの概要」

- 「取得プロセスの管理」

取得プロセスに関する統計情報の表示

Enterprise Managerを使用して、取得プロセスの統計を表示できます。統計には、取得プロセス・キュー内のメッセージ数、取得プロセスで取得およびエンキューされたメッセージ数、および取得プロセスに関連するその他の統計が含まれます。

Enterprise Managerで取得プロセスの統計を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

Streamsサブページには、データベース内の各取得プロセスに関する一般情報が表示されます。この情報には、取得プロセスのステータス、状態、待機時間およびスループットが含まれます。

5. コンポーネントのリストで、監視する取得プロセスを選択します。必要に応じて、検索ツールを使用して取得プロセスを検索してから選択します。

6. 「アクション」で「統計の表示」を選択します。

7. 「実行」をクリックして「取得の統計を表示」ページを開きます。

tdpii_view_capture_stats.gifの説明

「取得の統計を表示」ページには、次の情報が表示されます。

- 「キュー統計」グラフでは、取得プロセス・キュー内の現在のメッセージ数を表示します。グラフの「エンキューされたメッセージ数」行には、現在バッファ・キュー入っているメッセージの合計数が表示されます。グラフの「オーバーフローしたメッセージ数」行には、メモリーから永続キュー表にオーバーフローしたメッセージの合計数が表示されます。

- 「メッセージの統計」グラフは、取得プロセスが前回起動した後にエンキューおよび取得された変更の合計数を示します。 「エンキューされた合計メッセージ数」は、取得プロセスによってエンキューされた変更の数を示します。 「取得された合計メッセージ数」は、取得プロセス・ルールと比較して詳細に評価された変更の数を示します。変更が取得プロセス・ルールを満たさない場合、変更はエンキューされません。

- 「取得の統計」セクションには、取得プロセスの現在の状態と、時間および取得された変更(メッセージ)に関連する統計が表示されます。これらの統計の詳細は、『Oracle Databaseリファレンス』でV$STREAMS_CAPTURE動的パフォーマンス・ビューに関する項を参照してください。

関連項目:

- 「取得プロセスでの変更の取得の概要」

- 「取得プロセスの管理」

アクティブな取得プロセス・トランザクションの表示

Enterprise Managerを使用して、取得プロセスによって現在処理されているトランザクションを表示できます。Enterprise Managerには次の情報が表示されます。

- 「トランザクションID」: 各トランザクションのトランザクションID

- 「累積メッセージ」: トランザクションに累積したメッセージの数
Oracle Streamsレプリケーション環境では、各メッセージは論理変更レコード(LCR)です。トランザクションの変更の取得中にStreamsプロセスが再起動された場合、この列はStreamsプロセスが開始されてからトランザクションで取得されたLCRの数を示します。

- 「先頭SCN」: トランザクションの最初のメッセージのシステム変更番号(SCN)

- 「最終SCN」: トランザクションの最終メッセージのSCN

- 「アクティブ化時刻」: トランザクションの最初のメッセージが記録された時刻
Oracle Streamsレプリケーション環境では、取得プロセスにより取得された変更は、データベースのREDOログに記録されます。

- 「アクティブ継続時間」(秒): ストリームでのトランザクションの時間。これは、アクティブ化時刻から現在の時刻までの時間です。

アクティブな取得プロセス・トランザクションを表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

「取得」サブページには、データベース内の各取得プロセスに関する一般情報が表示されます。この情報には、取得プロセスのステータス、状態、待機時間およびスループットが含まれます。

5. 取得プロセスの「現在アクティブなトランザクション」フィールドの番号リンクをクリックして、「取得の統計を表示」ページを開きます。
「アクティブなStreamsトランザクションのリスト」セクションには、アクティブな取得プロセス・トランザクションが表示されます。

tdpii_active_cap_trans.gifの説明

「セッションID」フィールドおよび「合計メッセージ」フィールドは取得プロセスに該当しません。

6. トランザクションの詳細を表示するためにドリルダウンするには、トランザクションを選択して、「トランザクションの詳細を表示」をクリックします。

7. 「LogMiner」ページで、「続行」をクリックします。

8. 「LogMinerの結果」ページの「トランザクションの結果」セクションの表で「トランザクションID」リンクをクリックします。
「トランザクション詳細」ページには、トランザクションの変更に関する詳細情報が表示されます。

tdpii_cap_trans_detailes.gifの説明

関連項目:

- 「取得プロセスでの変更の取得の概要」

- 「取得プロセスの管理」

伝播の監視

Enterprise Managerを使用して、伝播に関する詳細情報を表示できます。伝播の統計も表示できます。

次の各項で、伝播の監視について説明します。

- 伝播の情報の表示

- 伝播に関する統計情報の表示

関連項目:

- 「データベース間の変更の伝播の概要」

- 「伝播の有効化および無効化」

伝播の情報の表示

Enterprise Managerを使用して、伝播に関する情報を表示できます。この情報には、伝播のステータス、伝播が失敗したかどうか、および伝播に関するその他の情報が含まれます。

Enterprise Managerで伝播に関する情報を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、監視する伝播を選択します。必要に応じて、検索ツールを使用して伝播を検索してから選択します。

6. 「アクション」で「詳細の表示」を選択します。

7. 「実行」をクリックして「伝播の詳細を表示」ページを開きます。

tdpii_view_prop_details.gifの説明

「伝播の詳細を表示」ページには、伝播プロセスに関する詳細情報が表示されます。

注意:
伝播に関する情報を、次のデータ・ディクショナリ・ビューに問い合せることもできます。

- ALL_PROPAGATION

- V$PROPAGATION_SENDER

- V$PROPAGATION_RECEIVER

関連項目:

- 「データベース間の変更の伝播の概要」

- 「取得、伝播および適用の動作を制御するルールの概要」

- 「伝播の有効化および無効化」

伝播に関する統計情報の表示

Enterprise Managerを使用して、伝播の統計を表示できます。統計には、伝播ソース・キュー内のメッセージ数、伝播によって送信されたメッセージ数および伝播に関連するその他の統計が含まれます。

Enterprise Managerで伝播の統計を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、監視する伝播を選択します。必要に応じて、検索ツールを使用して伝播を検索してから選択します。

6. 「アクション」で「統計の表示」を選択します。

7. 「実行」をクリックして「伝播の統計を表示」ページを開きます。

「伝播の統計を表示」ページには、次のサブページが表示されます。

- 「バッファ・キュー」オプションには、伝播で使用されるキューのバッファ・キュー部分にエンキューされたメッセージの伝播統計が表示されます。このサブページを使用して、伝播が取得プロセスで取得された変更を送信する場合の伝播統計を表示します。

- 「永続キュー」オプションには、伝播で使用されるキューの永続キュー部分にエンキューされたメッセージの伝播統計が表示されます。このサブページを使用して、伝播が同期取得で取得された変更を送信する場合の伝播統計を表示します。

どちらのオプションにも、キュー内のメッセージ数と、伝播により送信されたメッセージ数を数時間にわたって示すグラフがあります。両方のオプションには、メッセージの合計数や、伝播が前回起動した後に伝播されたバイト数など、その他の伝播統計も含まれます。

tdpii_prop_stats.gifの説明

注意:
バッファ・キュー統計および伝播統計を、次の動的パフォーマンス・ビューに問い合せることもできます。

- V$BUFFERED_QUEUES

- V$PROPAGATION_SENDER

- V$PROPAGATION_RECEIVER

関連項目:

- 「データベース間の変更の伝播の概要」

- 「伝播の有効化および無効化」

適用プロセスの監視

Enterprise Managerを使用して、適用プロセスに関する詳細情報を表示できます。適用プロセスの統計も表示できます。

次の各項で、適用プロセスの監視について説明します。

- 適用プロセスの情報の表示

- 適用プロセスに関する統計情報の表示

- アクティブな適用プロセス・トランザクションおよびオーバーフローした適用プロセス・トランザクションの表示

- 構成された更新競合ハンドラの表示

関連項目:

- 「変更の適用の概要」

- 「適用プロセスの管理」

- 「適用エラーの管理」

適用プロセスの情報の表示

Enterprise Managerを使用して、適用プロセスに関する情報を表示できます。この情報には、適用プロセスのステータスと状態、および適用プロセスに関するその他の情報が含まれます。

Enterprise Managerで適用プロセスに関する情報を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、監視する適用プロセスを選択します。必要に応じて、検索ツールを使用して適用プロセスを検索してから選択します。

6. 「アクション」で「詳細の表示」を選択します。

7. 「実行」をクリックして「適用の詳細表示」ページを開きます。

tdpii_view_apply_details.gifの説明

「適用の詳細表示」ページには、適用プロセスに関する詳細情報が表示されます。

注意:
適用プロセスに関する情報を、次のデータ・ディクショナリ・ビューに問い合せることもできます。

- ALL_APPLY

- V$STREAMS_APPLY_COORDINATOR

- V$STREAMS_APPLY_READER

- V$STREAMS_APPLY_SERVER

関連項目:

- 「変更の適用の概要」

- 「取得、伝播および適用の動作を制御するルールの概要」

- 「適用プロセスの管理」

適用プロセスに関する統計情報の表示

Enterprise Managerを使用して、適用プロセスの統計を表示できます。統計には、適用プロセス・キュー内のメッセージ数、適用プロセスで適用されたメッセージ数、および適用プロセスに関連するその他の統計が含まれます。

Enterprise Managerで適用プロセスの統計を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. コンポーネントのリストで、監視する適用プロセスを選択します。必要に応じて、検索ツールを使用して適用プロセスを検索してから選択します。

6. 「アクション」で「統計の表示」を選択します。

7. 「実行」をクリックして「適用の統計を表示」ページを開きます。

「適用の統計を表示」ページには、次のサブページがあります。

- 「キュー」サブページは、適用プロセス・キューの永続キュー部分とバッファ・キュー部分両方にあった過去数時間のメッセージ数が表示されます。適用プロセスが、同期取得で取得された変更を適用する場合は、永続キュー統計を分析します。適用プロセスが、取得プロセスで取得された変更を適用する場合は、バッファ・キュー統計を分析します。

- 「リーダー」サブページには、リーダー・サーバーの統計が表示されます。リーダー・サーバーは、適用プロセス・キューからメッセージをデキューし、別々のトランザクションにアセンブルします。

- 「座標」サブページには、コーディネータ・プロセスの統計が表示されます。コーディネータ・プロセスは、リーダー・サーバーからトランザクションを取得し、適用サーバーに渡します。

- 「サーバー」サブページには、適用サーバーの統計が表示されます。適用サーバーは、データベース・オブジェクトに対する変更を適用するか、適用ハンドラに変更を渡します。特定の適用サーバーの詳細を表示するには、その適用サーバーを選択し、「詳細の表示」をクリックします。

tdpii_apply_co_stats.gifの説明

注意:
バッファ・キュー統計および適用プロセス統計を、次の動的パフォーマンス・ビューに問い合せることもできます。

- V$BUFFERED_QUEUES

- V$STREAMS_APPLY_COORDINATOR

- V$STREAMS_APPLY_READER

- V$STREAMS_APPLY_SERVER

関連項目:

- 「変更の適用の概要」

- 「適用プロセスの管理」

アクティブな適用プロセス・トランザクションおよびオーバーフローした適用プロセス・トランザクションの表示

Enterprise Managerを使用して、適用プロセスによって現在処理されているトランザクションを表示できます。アクティブなトランザクションとは、適用プロセスのために現在バッファ・キューに入っているメッセージがあるトランザクションです。オーバーフローしたトランザクションとは、バッファ・キューからハード・ディスクにオーバーフローしたメッセージがあるトランザクションです。

Enterprise Managerには、アクティブなトランザクションに関する次の情報が表示されます。

- 「トランザクションID」: 各トランザクションのトランザクションID

- 「セッションID」: 適用プロセスのコーディネータ・プロセスのセッションID

- 「合計メッセージ」: トランザクションにあるメッセージの合計数
トランザクションにあるメッセージの合計数は、適用プロセスに対してのみ計算されます。Oracle Streamsレプリケーション環境では、各メッセージは論理変更レコード(LCR)です。

- 「累積メッセージ」: トランザクションに累積したメッセージの数
トランザクションの受信中にStreamsプロセスが再起動された場合、この列はStreamsプロセスが開始されてからトランザクションで受信されたLCRの数を示します。

- 「先頭SCN」: トランザクションの最初のメッセージのシステム変更番号(SCN)

- 「最終SCN」: トランザクションの最終メッセージのSCN

- 「アクティブ化時刻」: トランザクションの最初のメッセージが記録された時刻
Oracle Streamsレプリケーション環境では、取得プロセスにより取得された変更は、データベースのREDOログに記録されます。

- 「アクティブ継続時間」(秒): ストリームでのトランザクションの時間。これは、アクティブ化時刻から現在の時刻までの時間です。

Enterprise Managerには、オーバーフローしたトランザクションに関する次の情報が表示されます。

- 「トランザクションID」: 各トランザクションのトランザクションID

- 「セッションID」: 適用プロセスのリーダー・サーバーのセッションID

- 「先頭SCN」: トランザクションの最初のメッセージのSCN

- 「メッセージ数」: トランザクションにあるオーバーフローしたメッセージの数
Oracle Streamsレプリケーション環境では、各メッセージは論理変更レコード(LCR)です。

- 「最初のメッセージの作成時間」: トランザクションの最初のメッセージが記録された時刻
Oracle Streamsレプリケーション環境では、取得プロセスにより取得された変更は、データベースのREDOログに記録されます。

- 「オーバーフロー作成時間」: トランザクションにある最初のメッセージがバッファ・キューからハード・ディスクにオーバーフローした時間(オーバーフロー作成時間)

アクティブな適用プロセス・トランザクションおよびオーバーフローした適用プロセス・トランザクションを表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. 次のいずれかのアクションを実行します。

- アクティブな適用プロセス・トランザクションを表示するには、適用プロセスの「現在アクティブなトランザクション」フィールドの番号リンクをクリックします。
「適用の統計を表示」ページの「アクティブなStreamsトランザクションのリスト」セクションには、アクティブな適用プロセス・トランザクションが表示されます。

tdpii_active_app_trans.gifの説明

- オーバーフローした適用プロセス・トランザクションを表示するには、適用プロセスの「現在オーバーフローしているトランザクション」フィールドにある番号リンクをクリックします。
「適用の統計を表示」ページの「オーバーフローしたStreamsトランザクション・リスト」セクションには、オーバーフローした適用プロセス・トランザクションが表示されます。

tdpii_spilled_app_trans.gifの説明

関連項目:

- 「変更の適用の概要」

- 「適用プロセスの管理」

構成された更新競合ハンドラの表示

レプリケーション環境で、更新競合ハンドラは、同じ行が2つの異なるデータベースでほぼ同時に更新された場合に発生する競合を自動的に解消します。ALL_APPLY_CONFLICT_COLUMNSデータ・ディクショナリ・ビューを使用して、更新競合ハンドラをリストできます。

構成された更新競合ハンドラを表示するには:

1. SQL*Plusを開き、データベースにOracle Streams管理者として接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 次の問合せを実行します。

COLUMN OBJECT_OWNER HEADING 'Table|Owner' FORMAT A5
COLUMN OBJECT_NAME HEADING 'Table Name' FORMAT A12
COLUMN METHOD_NAME HEADING 'Method' FORMAT A12
COLUMN RESOLUTION_COLUMN HEADING 'Resolution|Column' FORMAT A13
COLUMN COLUMN_NAME HEADING 'Column Name' FORMAT A30

SELECT OBJECT_OWNER,
OBJECT_NAME,
METHOD_NAME,
RESOLUTION_COLUMN,
COLUMN_NAME
FROM ALL_APPLY_CONFLICT_COLUMNS
ORDER BY OBJECT_OWNER, OBJECT_NAME, RESOLUTION_COLUMN;

出力は、次のようになります。

Table                           Resolution
Owner Table Name   Method       Column        Column Name
----- ------------ ------------ ------------- ------------------------------
HR    COUNTRIES    MAXIMUM      TIME          TIME
HR    COUNTRIES    MAXIMUM      TIME          REGION_ID
HR    COUNTRIES    MAXIMUM      TIME          COUNTRY_NAME
HR    DEPARTMENTS  MAXIMUM      TIME          TIME
HR    DEPARTMENTS  MAXIMUM      TIME          MANAGER_ID
HR    DEPARTMENTS  MAXIMUM      TIME          LOCATION_ID
HR    DEPARTMENTS  MAXIMUM      TIME          DEPARTMENT_NAME

この例の出力は、最新時間の競合解消がhr.countries表およびhr.departments表に対して構成されていることを示しています。 「Column Name」の下にリストされている任意の列で競合が発生した場合は、「TIME」解決列の時間が最大(最新)の変更が使用され、その他の変更は破棄されます。

関連項目:

- 「競合と競合解消の概要」

- 「チュートリアル: 表の最新時刻競合解消の構成」

「バッファ・キューの統計」の表示

Enterprise Managerを使用して、レプリケーション環境の取得プロセス、伝播または適用プロセスで使用されるバッファ・キューの統計を表示できます。取得プロセスを使用して変更を取得するOracle Streamsレプリケーション環境では、各取得プロセスは変更をそのキューのバッファ・キュー部分にエンキューします。変更は、あるキューから別のキューに伝播されたときにバッファ・キューに残り、適用プロセスがバッファ・キューから変更をデキューします。

バッファ・キュー統計を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「Streams」セクションの「アドバンスト・キューの管理」をクリックします。
「アドバンスト・キューの管理」ページが表示されます。

5. 監視するキューを選択します。必要に応じて、検索ツールを使用してキューを検索してから選択します。

6. 「アクション」リストの「キュー統計」を選択します。

7. 「実行」をクリックして「キュー統計」ページを開きます。

8. 「バッファ・キューの統計」をクリックして「バッファ・キューの統計」サブページを開きます。
tdpii_buf_q_stats.gifの説明

この「バッファ・キューの統計」サブページには、選択したキューのバッファ・キュー部分に関する次の情報が表示されます。

- キュー内の変更の数およびメモリーからディスクにあふれた変更の数に関する情報。

- ローカル取得プロセスによってエンキューされた変更の数。取得プロセスがローカルの場合、「送信者キュー」フィールドは空です。

- リモート取得プロセスによって異なるデータベースで取得され、バッファ・キューに送信された変更の数。取得プロセスがリモートの場合、「送信者キュー」フィールドには、変更の送信元のキューおよびデータベースが含まれます。

- ローカル適用プロセスによってバッファ・キューからデキューされた変更の数。

- 伝播によってバッファ・キューから別のキューに送信された変更の数。

注意:
バッファ・キュー統計を、次の動的パフォーマンス・ビューに問い合せることもできます。

- V$BUFFERED_QUEUES

- V$BUFFERED_PUBLISHERS

- V$BUFFERED_SUBSCRIBERS

関連項目:

- 「Oracle Streamsレプリケーションの概要」

- 「キューの変更」

Oracle Streamsレプリケーション環境のトラブルシューティング

この項では、Oracle Streamsレプリケーション環境で最も一般的な問題について説明します。これらの問題の修正方法も説明します。

次の各項で、Oracle Streamsレプリケーション環境のトラブルシューティングを説明します。

- Enterprise Managerでの自動化されたアラートへの対応

- 適用エラーの管理

- レプリケーション先が使用できない場合のレプリケーション環境の管理

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 第5章「Oracle Streamsレプリケーション環境の管理」

- Oracle Streamsのトラブルシューティングの詳細は、『Oracle Streams概要および管理』を参照してください。

Enterprise Managerでの自動化されたアラートへの対応

アラートとは、潜在的に問題があったり、クリティカルのしきい値を超えた場合に発せられる警告のことです。アラートには2つのタイプがあります。

- ステートレス: 必ずしもシステムの状態と結び付かない単一イベントを示すアラート。たとえば、取得が特定のエラーで中断したことを示すアラートはステートレス・アラートです。

- ステートフル: 特定のシステム状態に関連するアラート。ステートフル・アラートは、通常は数値に基づき、警告レベルとクリティカル・レベルでしきい値が定義されます。たとえば、警告レベルが85%でクリティカル・レベルが95%の現在のOracle Streamsプール・メモリー使用率に関するアラートは、ステートフル・アラートです。

データベースのアラートを表示するには:

1. Enterprise ManagerにOracle Streams管理者などの管理ユーザーとしてログインします。

2. 管理するデータベースの「データベース」ホームページに移動します。

3. 「アラート」セクションで、データベースのアラートを表示します。Oracle Streamsサマリーも「高可用性」セクションで利用できます。これらのセクションを表示するには、下にスクロールすることが必要な場合があります。

Oracle Streamsには独自のアラートのセットがあります。表5-1で、Oracle Streamsに関連したアラートを説明します。

表5-1 Oracle Streamsアラート

アラート

メッセージ

アラート・タイプ

取得の中断アラート

STREAMSの取得プロセスcapture_nameは、ORA-error_numberで中断しました

ステートレス

伝播の中断アラート

STREAMSの伝播プロセスsource_queue、destination_queue、database_linkは、16の失敗後に中断しました

ステートレス

適用の中断アラート

STREAMSの適用プロセスapply_nameは、ORA-error_numberで中断しました

ステートレス

適用エラー・アラート

適用プロセスapply_nameのSTREAMSエラー・キューには、ORA-error_numberとなる新しいトランザクションがあります

ステートレス

Oracle Streamsプール・アラート

アラート・インフラストラクチャによって自動的に設定されます

ステートフル

アラートは、統計がメトリックしきい値を渡すときにも表示されます。たとえば、アラートは、Oracle Streams統計が待機時間またはスループットのしきい値を渡すときに表示されます。

注意:
Oracle Streamsアラートは情報のみです。Oracle Streamsアラートを管理する必要はありません。Oracle Streams環境を定期的に監視し、問題発生時に対処する場合、Oracle Streamsアラートを監視する必要はありません。

関連項目:

- 「Oracle Streamsレプリケーション環境のトラブルシューティング」

- 『Oracle Streams概要および管理』

取得の中断アラート

このアラートはクリティカル・エラーを示します。取得プロセスは停止し、取得プロセスに依存するレプリケーションもすべて停止します。また、取得プロセスは、再起動するまでREDOログのスキャンをこれ以上実行しません。

レスポンス

次のいずれかの方法で正確なエラー・メッセージを取得します。

- Enterprise Managerでの方法については、「取得プロセスの情報の表示」を参照してください。

- SQL*Plusで、ALL_CAPTUREビューを問い合せます。

エラーに適したアクションを実行します。

適切なアクションを実行した後で、次のいずれかの方法で取得プロセスを再起動します。

- Enterprise Managerでの方法については、「取得プロセスの起動と停止」を参照してください。

- SQL*Plusで、DBMS_CAPTURE_ADM.START_CAPTUREプロシージャを実行します。

関連項目:

- 「Enterprise Managerでの自動化されたアラートへの対応」

- 「取得プロセスでの変更の取得の概要」

- 「取得プロセスの管理」

- 「取得プロセスの監視」

- 『Oracle Streams概要および管理』

伝播の中断アラート

このアラートはクリティカル・エラーを示します。伝播が停止し、通常は1つのキューから別のキューに伝播によって送信されるメッセージがソース・キューに残ります。伝播に依存するレプリケーションも停止します。最終的に、ソース・キューが非常に大きくなり、メッセージがディスクにあふれることがあります。メッセージがディスクにあふれると、Oracle Streamsのパフォーマンスが低下します。

レスポンス

次のいずれかの方法で正確なエラー・メッセージを取得します。

- Enterprise Managerでの方法については、「伝播の情報の表示」を参照してください。

- SQL*Plusで、DBA_QUEUE_SCHEDULESビューを問い合せます。

エラーに適したアクションを実行します。

適切なアクションを実行した後で、次のいずれかの方法で伝播を再起動します。

- Enterprise Managerでの方法については、「伝播の有効化および無効化」を参照してください。

- SQL*Plusで、DBMS_PROPAGATION_ADM.START_PROPAGATIONプロシージャを実行します。

関連項目:

- 「Enterprise Managerでの自動化されたアラートへの対応」

- 「データベース間の変更の伝播の概要」

- 「伝播の監視」

- 『Oracle Streams概要および管理』

適用の中断アラート

このアラートはクリティカル・エラーを示します。適用プロセスが停止し、通常は適用プロセスによってデキューされるメッセージが適用プロセス・キューに残ります。適用プロセスに依存するレプリケーションも停止します。最終的に、適用プロセス・キューが非常に大きくなり、メッセージがディスクにあふれることがあります。適用プロセス・キューにメッセージを送信する他のキューも大きくなり、メッセージがディスクにあふれることがあります。メッセージがディスクにあふれると、Oracle Streamsのパフォーマンスが低下します。

レスポンス

次のいずれかの方法で正確なエラー・メッセージを取得します。

- Enterprise Managerでの方法については、「適用プロセスの情報の表示」を参照してください。

- SQL*Plusで、ALL_APPLYビューを問い合せます。

エラーに適したアクションを実行します。エラーがORA-26714エラーの場合は、DISABLE_ON_ERROR適用プロセス・パラメータをNに設定して、今後のユーザー・エラーでの中断を回避することを検討してください。方法については、「適用プロセスのパラメータの設定」を参照してください。

適切なアクションを実行した後で、次のいずれかの方法で適用プロセスを再起動します。

- Enterprise Managerでの方法については、「適用プロセスの起動と停止」を参照してください。

- SQL*Plusで、DBMS_APPLY_ADM.START_APPLYプロシージャを実行します。

関連項目:

- 「Enterprise Managerでの自動化されたアラートへの対応」

- 『Oracle Streams概要および管理』

適用エラー・アラート

このアラートは、適用プロセスがトランザクションを適用したときにエラーが発生したことを示します。適用プロセスは、トランザクション内のすべてのメッセージをエラー・キューに移動します。エラー・トランザクションに依存する他のトランザクションも適用エラーになる可能性があり、エラー・キューがすぐに大きくなることがあります。したがって、管理者はできるだけ早く適用エラーを解決する必要があります。

レスポンス

エラー・キューの適用エラーは、次のいずれかの方法で管理します。

- Enterprise Managerでの方法については、「適用エラーの管理」を参照してください。

- SQL*Plusで、ALL_APPLY_ERRORビューを問い合せ、エラーを表示して解決し、DBMS_APPLY_ADMパッケージのプロシージャを使用してエラーを実行または削除します。

関連項目:

- 「Enterprise Managerでの自動化されたアラートへの対応」

- 「変更の適用の概要」

- 「適用プロセスの管理」

- 「適用プロセスの監視」

- 『Oracle Streams概要および管理』

Oracle Streamsプール・アラート

メトリックとは、システムの状態の報告に使用される測定の単位です。Oracle Streamsプールのメモリー使用率がSTREAMS_POOL_USED_PCTメトリックで指定された割合を超えた場合、このアラートが生成されます。

このアラートは、データベースで自動メモリー管理または自動共有メモリー管理を使用していない場合にのみ発生します。具体的には、このアラートは、次の初期化パラメータが0に設定されているか、未設定の場合にのみ発生します。

- MEMORY_TARGET

- SGA_TARGET

注意:
自動メモリー管理または自動共有メモリー管理を使用することをお薦めします。

レスポンス

メトリックしきい値は、アラート・インフラストラクチャで自動的に、またはEnterprise Managerを使用して設定できます。現在実行中のワークロードが標準的な場合は、Oracle Streamsプールのサイズを増やすことを検討してください。「データベース」ホームページのヘッダーにある、関連項目の一部のリンクからメトリックを管理できます。メトリックしきい値の表示および設定の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

関連項目:

- 「Enterprise Managerでの自動化されたアラートへの対応」

- 「Oracle Streamsレプリケーションの準備」

- 『Oracle Streams概要および管理』

適用エラーの管理

適用エラーは様々な理由で発生します。トランザクションでの変更が原因で適用エラーが発生した場合、適用プロセスによって、その変更だけでなく同じトランザクションの他の変更もすべてエラー・キューに移動されます。適用エラーが発生した場合は、その原因を特定して修正してください。特定のエラー・トランザクションだけ、または1つの適用プロセスのすべてのエラー・トランザクションを再試行できます。

次の各項で、適用エラーの管理について説明します。

- データベース・オブジェクトでの適用エラーの修正

- 適用エラー・トランザクションの再試行または削除

関連項目:

- 「変更の適用の概要」

- 「適用プロセスの管理」

- 「適用プロセスの監視」

- 『Oracle Streams概要および管理』

データベース・オブジェクトでの適用エラーの修正

エラー・トランザクションを再試行する前に、データベース・オブジェクトに対してデータ操作言語(DML)またはデータ定義言語(DDL)の変更を実行し、1つ以上の適用エラーの原因となった状況を修正する必要がある場合があります。データベース・オブジェクトに対する変更を行うが、その変更をレプリケートしたくない場合は、変更を行うセッションにセッション・タグを設定します。

たとえば、hr.employees表を更新して適用エラーを修正するには:

1. SQL*Plusを開き、hr.employees表を更新できるユーザーとして接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. セッション・タグを設定します。

BEGIN
DBMS_STREAMS.SET_TAG(
tag  =>  HEXTORAW('1D'));
END;
/

取得プロセスと同期取得によって変更が取得されないようにする値をタグに設定してください。

3. hr.employees表を更新してエラーを解決します。

4. SQL*Plusセッションを終了します。

1つ以上のエラー・トランザクションの原因となった問題を解決した後で、エラー・トランザクションを再試行または削除できます。方法については、「適用エラー・トランザクションの再試行または削除」を参照してください。

特定の適用エラーとその修正方法の詳細は、『Oracle Streams概要および管理』を参照してください。

適用エラー・トランザクションの再試行または削除

「データベース・オブジェクトでの適用エラーの修正」では、1つ以上のエラー・トランザクションの原因となった問題を解決する方法を説明します。問題を解決した後で、エラー・トランザクションを再試行または削除できます。

- トランザクションの変更を宛先表に行う必要がある場合は、トランザクションを再試行します。再試行するのは、これらの変更を行うために表のデータをまだ変更していない場合のみです。

- トランザクションのすべての変更を宛先表に行った場合、または表に変更を加えない場合は、トランザクションを削除します。

適用エラー・トランザクションを再試行または削除するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strms_ap_error.gifの説明

適用プロセスに1つ以上のエラーがある場合、ステータス・アイコンが変化して警告記号が表示されます。また、適用エラーによって、適用プロセスが中断する場合があります。中断すると、適用プロセスのステータスがABORTEDに変更されます。

5. コンポーネントのリストで、エラー・トランザクションが存在する適用プロセスを選択します。必要に応じて、検索ツールを使用して適用プロセスを検索してから選択します。

6. 「アクション」で「エラーの表示」を選択します。

7. 「実行」をクリックして「適用の詳細表示」ページを開きます。
「エラー」セクションの「トランザクション・エラー」にエラーが表示されます。

tdpii_apply_errors.gifの説明

エラー・トランザクションの「エラーLCRの表示」フィールドのアイコンをクリックして、エラーに関する詳細情報を表示できます。詳細情報は「エラーLCRの表示」ページに表示され、トランザクションの各変更が含まれます。

tdpii_view_error_lcrs.gifの説明

さらにドリルダウンするには、行変更を選択して「値の比較」をクリックします。「値の比較」ページが表示され、行変更が変更の適用先となる表のデータと比較されます。

tdpii_compare_error_values.gifの説明

8. エラーの詳細をドリルダウンした場合は、「適用の詳細表示」リンクをクリックし、「トランザクション・エラー」を展開して、「適用エラー」ページに戻ります。

9. 「適用エラー」ページで、次のいずれかのアクションを実行します。

- すべてのエラー・トランザクションを再試行するには、「すべてのエラーの再試行」をクリックします。

- すべてのエラー・トランザクションを削除するには、「すべて削除」をクリックします。

- 特定のエラー・トランザクションを再試行するには、エラー・トランザクションを選択し、「エラーの再試行」をクリックします。

- 特定のエラー・トランザクションを削除するには、エラー・トランザクションを選択し、「削除」をクリックします。

注意:
DBMS_APPLY_ADMパッケージの次のプロシージャを使用して、エラー・トランザクションを削除または再実行することもできます。

- DELETE_ALL_ERRORS

- DELETE_ERROR

- EXECUTE_ALL_ERRORS

- EXECUTE_ERROR

レプリケーション先が使用できない場合のレプリケーション環境の管理

Oracle Streamsレプリケーション環境の宛先キューが、伝播された変更の受入れを停止することがあります。宛先キューは、たとえばキューを含むデータベースが停止した場合、宛先キューに問題がある場合、キューを含むデータベースを実行しているシステムが停止した場合などに変更の受入れを停止することがあります。

取得プロセスを使用するレプリケーション環境で宛先が使用不能の場合は、宛先キューに送信できない取得済の変更がソース・キューに残ります。ソース・キューのサイズが増大し、最終的に変更がバッファ・キュー・メモリーからディスクにあふれます。この状況が発生した場合は、Oracle Streamsレプリケーション環境のパフォーマンスが低下します。

大量の取得済変更がディスクにあふれているかどうかを判断するには、「取得プロセスに関する統計情報の表示」の手順に従います。「キュー統計」グラフは、取得プロセス・キュー内の、ディスクにあふれている現在の変更数を示します。

レプリケーション環境で変更を取得するための取得プロセスを使用する場合は、2つの取得プロセス・パラメータを設定して、使用できない宛先を自動的に管理できます。split_thresholdおよびmerge_theshold取得プロセス・パラメータは、Oracle Streamsが分離およびマージ操作を自動的に実行するかどうかを制御します。これらのパラメータが自動分離およびマージを指定するように設定されている場合、Oracle Schedulerジョブは取得プロセスから流れているストリームを監視します。Oracle Schedulerジョブがストリームの問題を特定した場合、ジョブは新しいOracle Schedulerジョブを送信して、問題のあるストリームを取得プロセスから流れている他のストリームから分離します。他のOracle Schedulerジョブはストリームの監視を続行し、問題が解決した場合、Oracle Schedulerジョブはストリームを他のストリームに戻してマージします。

split_threshold取得プロセス・パラメータがINFINITEに設定されている場合、自動分離は無効です。split_thresholdパラメータがINFINITEに設定されていない場合、自動分離は有効です。自動分離は、split_thresholdパラメータで指定された秒数の間、適用プロセスとの通信が失われた場合のみ発生します。たとえば、適用プロセスが無効になった場合や宛先データベースが停止した場合に、適用プロセスとの通信が失われます。

注意:
1つのストリームが他のストリームより遅い速度で変更を処理している場合、自動分離は発生しません。通常、この状況では、速度が遅いストリームが他のストリームとは別の取得プロセスを使用するように環境を再構成することをお薦めします。

使用できない宛先を管理するには:

1. 取得プロセスが自動分割およびマージを有効にするように、次のパラメータが適切に設定されていることを確認します。

- split_threshold: このパラメータがINFINITEに設定されていないことを確認します。このパラメータのデフォルト設定は1800です。

- merge_threshold: このパラメータが負の値に設定されていないことを確認します。このパラメータのデフォルト設定は60です。

詳細は、『取得プロセスのパラメータの設定』を参照してください。

2. DBA_STREAMS_SPLIT_MERGEビューを定期的に監視して、自動分割およびマージ操作が処理されているかどうかを確認します。
自動分割が発生した場合、取得プロセス、キュー、伝播などの特定のコンポーネントがクローニングされ、それぞれにシステムで生成された名前が与えられます。DBA_STREAMS_SPLIT_MERGEビューには、クローニングされた各コンポーネントの名前および分割やマージ操作に関する他の情報が含まれます。

3. 分割およびマージ操作が処理されている場合、宛先の問題を解決します。宛先データベースの適用プロセスが、クローニングされた取得プロセスから変更を受け入れると、問題が解決されます。

4. クローニングされた取得プロセスが無効になっている場合は、クローニングされた取得プロセスを起動します。詳細は、「取得プロセスの起動と停止」を参照してください。

関連項目:

- 分離およびマージの使用方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

- 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

- 第4章「Oracle Streamsを使用したデータのレプリケート」

6 Oracle Streamsレプリケーション環境の拡張

この章では、データベース・オブジェクトまたはデータベースを追加することによるOracle Streamsレプリケーション環境の拡張について説明します。

この章は次の項で構成されています。

- Oracle Streamsレプリケーション環境の拡張の概要

- チュートリアル: レプリケーション環境へのデータベース・オブジェクトの追加

- チュートリアル: レプリケーション環境へのデータベースの追加

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 第5章「Oracle Streamsレプリケーション環境の管理」

- 「Oracle Streamsでのデータのレプリケート時期」

- 『Oracle Streams概要および管理』

- 『Oracle Streamsレプリケーション管理者ガイド』

Oracle Streamsレプリケーション環境の拡張の概要

組織でのニーズが変化すると、Oracle Streamsレプリケーション環境の拡張が必要な場合があります。Oracle Streamsレプリケーション環境は、データベース・オブジェクトまたはデータベースを追加することによって拡張することができます。

Oracle Streamsレプリケーション環境の拡張には2つの方法があります。

- 「Streamsレプリケーションの設定」ウィザードまたは単一の構成プロシージャを使用

- 複数の手順でOracle Streamsコンポーネントを個別に追加

「Streamsレプリケーションの設定」ウィザードまたは単一の構成プロシージャを使用

環境が特定の条件を満たす場合は、次のいずれかの方法によりOracle Streamsレプリケーション環境を拡張できます。

- Oracle Enterprise Managerで「Streamsレプリケーションの設定」ウィザードを実行

- DBMS_STREAMS_ADMパッケージにある次のいずれかのプロシージャを実行:

- MAINTAIN_GLOBALプロシージャでは、データベースのオブジェクトすべてに変更をレプリケートする環境にデータベースを追加できます。

- MAINTAIN_SCHEMASプロシージャでは、レプリケーション環境の既存データベースに1つ以上の新規スキーマを追加、または現在レプリケートされているスキーマをレプリケートする新規データベースを追加できます。

- MAINTAIN_SIMPLE_TTSプロシージャでは、既存のレプリケーション環境に新規の単純表領域を追加、または現在レプリケートされている単純表領域をレプリケートする新規データベースを追加できます。

- MAINTAIN_TABLESプロシージャでは、レプリケーション環境の既存データベースに1つ以上の新規表を追加するか、現在レプリケートされている表をレプリケートする新規データベースを追加できます。

- MAINTAIN_TTSプロシージャでは、既存のレプリケーション環境に新規の表領域セットを追加、または現在レプリケートされている表領域セットをレプリケートする新規データベースを追加できます。

ウィザードまたはいずれかのプロシージャを使用してOracle Streamsレプリケーション環境を拡張するには、環境が次の条件を満たしている必要があります。

- Streamsレプリケーションの設定ウィザードまたはDBMS_STREAMS_ADMパッケージのいずれかの構成プロシージャで構成された、2データベース・レプリケーション環境またはハブアンドスポーク・レプリケーション環境である必要があります。これらのレプリケーション環境については、「Oracle Streamsレプリケーション環境の一般的なタイプの概要」を参照してください。

- Oracle Streamsレプリケーション環境のデータベースでは同期取得を使用できません。同期取得の詳細は、「同期取得での変更の取得の概要」を参照してください。

- データベースを環境に追加する場合、変更を取得する各データベースはローカル取得プロセスを使用する必要があります。どのデータベースでもダウンストリーム取得プロセスは使用できません。1つ以上のデータベース・オブジェクトを環境に追加する場合、そのデータベースはローカルかダウンストリームのいずれかの取得プロセスを使用できます。ダウンストリーム取得の詳細は、「取得プロセスでの変更の取得の概要」を参照してください。

- レプリケーション環境にデータベース・オブジェクトを追加する場合、そのデータベース・オブジェクトは、ウィザードを実行する場所、または構成プロシージャのsource_databaseパラメータで指定されたデータベースに存在する必要があります。

レプリケーション環境がこれらの条件を満たす場合は、「Streamsレプリケーションの設定」ウィザードまたは単一のプロシージャを使用して環境を拡張します。

次は、ウィザードまたはプロシージャを実行する前に、レプリケートされたデータベース・オブジェクトが目的の宛先データベースに存在する場合の追加要求です。

- レプリケーション環境にデータベース・オブジェクトを追加する場合で、1つ以上のデータベース・オブジェクトがソース・データベース以外のデータベースに存在する場合、次の要件を満たす必要があります。

- ウィザードまたはプロシージャを実行する前に、各宛先データベースのレプリケートされたデータベース・オブジェクトが、ソース・データベースのレプリケートされたデータベース・オブジェクトと一致することを確認します。

- ウィザードまたはプロシージャを実行した後、各宛先データベースのレプリケートされたデータベース・オブジェクトそれぞれにインスタンス化SCNが設定されていることを確認します。インスタンス化SCNの監視および設定の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

- レプリケーション環境にデータベースを追加する場合で、追加されるデータベースに現在の環境でレプリケーションされたデータベース・オブジェクトが存在する場合、次の要件を満たす必要があります。

- ウィザードまたはプロシージャを実行する前に、追加される各データベースのレプリケートされたデータベース・オブジェクトが、ソース・データベースのレプリケートされたデータベース・オブジェクトと一致することを確認します。

- ウィザードまたはプロシージャを実行した後、追加されたデータベースのレプリケートされたデータベース・オブジェクトそれぞれにインスタンス化SCNが設定されていることを確認します。インスタンス化SCNの監視および設定の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

ウィザードを使用してレプリケーション環境に追加する方法については、次の各項を参照してください。

- チュートリアル: レプリケーション環境へのデータベース・オブジェクトの追加

- チュートリアル: レプリケーション環境へのデータベースの追加

単一のプロシージャを使用してレプリケーション環境に追加する方法については、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

複数の手順でOracle Streamsコンポーネントを個別に追加

「Streamsレプリケーションの設定」ウィザード、またはDBMS_STREAMS_ADMパッケージの構成プロシージャを使用してOracle Streamsレプリケーション環境を拡張できない場合は、構成手順を手動で完了する必要があります。この手順には、必要なルールとOracle Streamsコンポーネントを環境に追加するなど、いくつかの構成手順が含まれます。

Oracle Streamsレプリケーション環境を手動で拡張する必要がある場合は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 「ハブアンドスポーク・レプリケーション環境の概要」

- DBMS_STREAMS_ADMのプロシージャの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

チュートリアル: レプリケーション環境へのデータベース・オブジェクトの追加

この項では、Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードを使用して、既存のハブアンドスポーク・レプリケーション環境に表を追加する例を説明します。この例を完了すると、Oracle Streamsレプリケーション環境によって、その環境のデータベースに追加された表に対する変更がレプリケートされます。

具体的には、この項の例では、「チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成」で構成したレプリケーション環境を拡張します。この構成には、次のような特徴があります。

- hrスキーマが、hub.example.com、spoke1.example.com、spoke2.example.comの各データベースでレプリケートされます。

- hub.example.comデータベースが、ハブアンドスポーク環境におけるハブ・データベースであり、他のデータベースがスポーク・データベースです。

- スポーク・データベースでは、レプリケートされたスキーマへの変更が可能で、各データベースはそのローカル取得プロセスでこれらの変更を取得します。

- 競合を解消するために、各データベースでレプリケートされた各表に、更新競合ハンドラが構成されます。

この例では、環境に次の表を追加します。

- oe.orders

- oe.order_items

この例ではoeサンプル・スキーマにある表を使用します。 oeサンプル・スキーマはOracle Databaseとともにデフォルトでインストールされます。

注意:
「Streamsレプリケーションの設定」ウィザードを使用してOracle Streamsレプリケーション環境を拡張する前に、「Oracle Streamsレプリケーション環境の拡張の概要」で説明されている条件を環境が満たしていることを確認してください。

Oracle Streamsレプリケーション環境にデータベース・オブジェクトを追加するには:

1. ハブアンドスポーク環境で、ハブ・データベースの取得プロセスを停止します。

この例では、hub.example.comデータベースの取得プロセスを停止します。取得プロセスを停止しても、レプリケートされたデータベース・オブジェクトは変更に対してオープンなままにしておくことができます。これらの変更は、取得プロセスが再開されたときに取得されます。

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. 停止する取得プロセスを選択します。必要に応じて、検索ツールを使用して取得プロセスを検索してから選択します。

6. 「アクション」で「無効化」を選択します。

7. 「実行」をクリックします。

8. 確認ページで「はい」をクリックして、取得プロセスを定位します。

注意:
DBMS_CAPTURE_ADM.STOP_CAPTUREプロシージャを使用して、取得プロセスを停止することもできます。

2. Oracle Streams管理者としてOracle Enterprise Managerのハブ・データベースに接続している状態で、データベース・インスタンスの「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「Streams」セクションの「設定」をクリックします。
「Streams」ページが表示され、「設定」オプションが表示されます。

5. 「Streamsレプリケーションの設定」で、「表のレプリケート」を選択します。

6. 「ホスト資格証明」セクションで、ホスト・コンピュータ・システムの管理ユーザーのユーザー名とパスワードを入力します。

7. 「続行」をクリックします。

8. 「オブジェクト選択」ページで、「追加」をクリックして「表の選択」ページを開きます。

9. 検索ツールを使用して、oe.ordersおよびoe.order_items表を表示し、これらの表を選択します。
たとえば、「スキーマ」フィールドにoeと入力して「実行」をクリックすると、これらの表が表示されます。

10. 「選択」をクリックします。「オブジェクト選択」ページにoe.ordersおよびoe.order_items表が表示されます。

11. 「次へ」をクリックします。

12. 「宛先オプション」ページで、ホスト名、ポート、SIDまたはサービス名およびOracle Streams管理者資格証明を指定して、スポーク・データベースspoke1.example.comを指定します。

(レプリケーションをspoke2.example.comデータベースで構成する場合は、spoke2.example.comを指定します。)

13. 「次へ」をクリックします。

14. 「レプリケーション・オプション」ページを完了します。

1. 「ディレクトリ・パス」セクションで、手順6で指定したホスト・ユーザーがディレクトリに対して読取りおよび書込みを行うことができ、データ・ポンプ・エクスポート・ダンプ・ファイルに対する十分な領域がある場合、ソース・データベースと宛先データベースのディレクトリ・パスをそのままにしておきます。変更する場合は、別のディレクトリ・パスを指定するか、またはこれらの要件を満たすディレクトリ・オブジェクトを作成して指定します。

2. 「拡張オプション」を拡張します。

3. 「オプション」セクションで「データ操作言語(DML)の変更を取得、伝播および適用」が選択されていることを確認します。

4. DDL変更をレプリケートしない場合は、「データ定義言語(DDL)の変更を取得、伝播および適用」を選択解除します。

5. 「双方向レプリケーションの設定」を選択します。

6. 「取得プロセス」セクションで、「取得名」にcapture_hnsと入力します。

7. 「伝播プロセス」セクションで、「伝播名」にpropagation_spoke1と入力します。(レプリケーションをspoke2.example.comデータベースで構成する場合は、propagation_spoke2と入力します。)

8. 「適用プロセス」セクションで、「適用名」にapply_spoke1と入力します。(レプリケーションをspoke2.example.comデータベースで構成する場合は、apply_spoke2と入力します。)

15. 「次へ」をクリックします。

16. 「ジョブのスケジュール」ページで、「即時」を選択するか、後でジョブを実行する時刻を指定します。

17. 「次へ」をクリックします。

18. 「確認」ページで、構成情報を確認して、「発行」をクリックします。

19. 確認ページで、オプションとして、ジョブ・リンクをクリックしてジョブを監視します。

ジョブを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPT、DBA_RECOVERABLE_SCRIPT_PARAMS、DBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。ジョブがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してエラーからリカバリしてください。

20. Oracle Streams管理者としてハブ・データベースに接続している状態で、手順1から19をもう一度完了します。ただし、手順12では、「宛先オプション」ページで、ホスト名、ポート、SIDまたはサービス名およびOracle Streams管理者資格証明を指定して、スポーク・データベースspoke2.example.comを識別します。
また、手順14gでは「伝播名」にpropagation_spoke2を入力し、手順14hでは「適用名」にapply_spoke2を入力します。

21. スポーク・データベースで、レプリケートされた表のインスタンス化SCNを設定します。

注意:
この例でこの手順が必要なのは、ウィザードの実行前に、レプリケートされた表がスポーク・データベースに存在していたためです。ウィザードの実行前に、レプリケートされた表がスポーク・データベースに存在していなかった場合は、ウィザードによって、レプリケートされた表にインスタンス化SCNが設定されるため、この手順は必要ありません。インスタンス化SCNが設定されたときに共有表がソース・データベースと宛先データベースで一貫していること、およびSCNがインスタンス化SCNに使用されるまでソース・データベースの表が変更されないことを確認します。

1. SQL*Plusで、hub.example.comデータベースにOracle Streams管理者として接続します。
SQL*Plusでのデータベースへの接続の詳細は、『Oracle Database管理者ガイド』を参照してください。

2. spoke1.example.comデータベースでoe.orders表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@spoke1.example.com(
source_object_name    => 'oe.orders',
source_database_name  => 'hub.example.com',
instantiation_scn     => iscn);
END;
/

3. spoke1.example.comデータベースでoe.order_items表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@spoke1.example.com(
source_object_name    => 'oe.order_items',
source_database_name  => 'hub.example.com',
instantiation_scn     => iscn);
END;
/

4. spoke2.example.comデータベースでoe.orders表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@spoke2.example.com(
source_object_name    => 'oe.orders',
source_database_name  => 'hub.example.com',
instantiation_scn     => iscn);
END;
/

5. spoke2.example.comデータベースでoe.order_items表のインスタンス化SCNを設定します。

DECLARE
iscn  NUMBER;    -- Variable to hold instantiation SCN value
BEGIN
iscn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN@spoke2.example.com(
source_object_name    => 'oe.order_items',
source_database_name  => 'hub.example.com',
instantiation_scn     => iscn);
END;
/

22. hub.example.com、spoke1.example.comおよびspoke2.example.comの各データベースのoeスキーマにあるorders表およびorder_items表に対して最新時刻競合解消を構成します。方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

チュートリアル: レプリケーション環境へのデータベースの追加

この項では、Oracle Enterprise Managerの「Streamsレプリケーションの設定」ウィザードを使用して、既存のハブアンドスポーク・レプリケーション環境に新しいスポーク・データベースを追加する例を説明します。この例を完了すると、Oracle Streamsレプリケーション環境によって、新しいデータベースのスキーマに対する変更がレプリケートされます。

具体的には、この項の例では、「チュートリアル: ローカル取得プロセスでのハブアンドスポーク・レプリケーションの構成」で構成したレプリケーション環境を拡張します。この構成には、次のような特徴があります。

- hrスキーマが、hub.example.com、spoke1.example.com、spoke2.example.comの各データベースでレプリケートされます。

- hub.example.comデータベースが、ハブアンドスポーク環境におけるハブ・データベースであり、他のデータベースがスポーク・データベースです。

- スポーク・データベースでは、レプリケートされたスキーマへの変更が可能で、各データベースはそのローカル取得プロセスでこれらの変更を取得します。

この例では、レプリケーション環境にspoke3.example.comデータベースを追加します。

注意:
「Streamsレプリケーションの設定」ウィザードを使用してOracle Streamsレプリケーション環境を拡張する前に、「Oracle Streamsレプリケーション環境の拡張の概要」で説明されている条件を環境が満たしていることを確認してください。

既存のOracle Streamsレプリケーション環境にデータベースを追加するには:

1. 次のタスクを完了して、新しいデータベースの環境を準備します。

1. ハブ・データベースが新しいスポーク・データベースと通信できるようにネットワーク接続を構成します。この例では、hub.example.comデータベースとspoke3.example.comデータベースが相互に通信できるようにネットワーク接続を構成します。
データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 新しいスポーク・データベースでOracle Streams管理者を構成します。この例では、spoke3.example.comデータベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の構成」を参照してください。この例では、Oracle Streams管理者がstrmadminであると想定します。

3. 新しいスポーク・データベースで初期化パラメータを正しく設定します。この例では、spoke3.example.comデータベースで初期化パラメータを正しく設定します。方法については、「Oracle Streamsレプリケーションの準備」を参照してください。

4. ARCHIVELOGモードで実行するように新しいスポーク・データベースを構成します。取得プロセスがソース・データベースで生成された変更を取得するには、ソース・データベースをARCHIVELOGモードで実行する必要があります。この例では、spoke3.example.comデータベースをARCHIVELOGモードで実行する必要があります。ARCHIVELOGモードで実行するためのデータベースの構成の詳細は、『Oracle Database管理者ガイド』を参照してください。

2. ハブアンドスポーク環境で、ハブ・データベースの取得プロセスを停止します。

この例では、hub.example.comデータベースの取得プロセスを停止します。取得プロセスを停止しても、レプリケートされたデータベース・オブジェクトは変更に対してオープンなままにしておくことができます。これらの変更は、取得プロセスが再開されたときに取得されます。

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。
「レプリケーションの管理」ページが表示され、「概要」サブページが表示されます。

4. 「Streams」をクリックして「Streams」サブページを開きます。
tdpii_strrms_strms.gifの説明

5. 停止する取得プロセスを選択します。必要に応じて、検索ツールを使用して取得プロセスを検索してから選択します。

6. 「アクション」で「無効化」を選択します。

7. 「実行」をクリックします。

8. 確認ページで「はい」をクリックして、取得プロセスを定位します。

注意:
DBMS_CAPTURE_ADM.STOP_CAPTUREプロシージャを使用して、取得プロセスを停止することもできます。

3. Oracle Streams管理者としてOracle Enterprise Managerのハブ・データベースに接続している状態で、データベース・インスタンスの「データベース」ホームページに移動します。

4. 「データ移動」をクリックして「データ移動」サブページを開きます。

5. 「Streams」セクションの「設定」をクリックします。
「Streams」ページが表示され、「設定」オプションが表示されます。

6. 「Streamsレプリケーションの設定」で、「スキーマのレプリケート」を選択します。

7. 「ホスト資格証明」セクションで、ホスト・コンピュータ・システムの管理ユーザーのユーザー名とパスワードを入力します。

8. 「続行」をクリックします。

9. 「オブジェクト選択」ページで、「HR」を選択して、「次へ」をクリックします。

10. 「宛先オプション」ページで、ホスト名、ポート、SIDまたはサービス名およびOracle Streams管理者資格証明を指定して、スポーク・データベースspoke3.example.comを指定します。

11. 「次へ」をクリックします。

12. 「レプリケーション・オプション」ページを完了します。

1. 「ディレクトリ・パス」セクションで、手順7で指定したホスト・ユーザーがディレクトリに対して読取りおよび書込みを行うことができ、データ・ポンプ・エクスポート・ダンプ・ファイルに対する十分な領域がある場合、ソース・データベースと宛先データベースのディレクトリ・パスをそのままにしておきます。変更する場合は、別のディレクトリ・パスを指定するか、またはこれらの要件を満たすディレクトリ・オブジェクトを作成して指定します。

2. 「拡張オプション」を拡張します。

3. 「オプション」セクションで「データ操作言語(DML)の変更を取得、伝播および適用」が選択されていることを確認します。

4. DDL変更をレプリケートしない場合は、「データ定義言語(DDL)の変更を取得、伝播および適用」を選択解除します。

5. 「双方向レプリケーションの設定」を選択します。

6. 「取得プロセス」セクションで、「取得名」にcapture_hnsと入力します。

7. 「伝播プロセス」セクションで、「伝播名」にpropagation_spoke3と入力します。

8. 「適用プロセス」セクションで、「適用名」にapply_spoke3と入力します。

13. 「次へ」をクリックします。

14. 「ジョブのスケジュール」ページで、「即時」を選択するか、後でジョブを実行する時刻を指定します。

15. 「次へ」をクリックします。

16. 「確認」ページで、構成情報を確認して、「発行」をクリックします。

17. 確認ページで、オプションとして、ジョブ・リンクをクリックしてジョブを監視します。
ジョブを実行すると、進捗情報がDBA_RECOVERABLE_SCRIPT、DBA_RECOVERABLE_SCRIPT_PARAMS、DBA_RECOVERABLE_SCRIPT_BLOCKSおよびDBA_RECOVERABLE_SCRIPT_ERRORSデータ・ディクショナリ・ビューに記録されます。ジョブがエラーによって停止した場合は、DBMS_STREAMS_ADMパッケージ内のRECOVER_OPERATIONプロシージャの使用方法について、『Oracle Streamsレプリケーション管理者ガイド』を参照してエラーからリカバリしてください。

18. spoke3.example.comデータベースでhrスキーマ内のすべての表に対して最新時刻競合解消を構成します。このスキーマには、countries、departments、employees、jobs、job_history、locationsおよびregionsの各表が含まれます。方法については、「チュートリアル: 表の最新時刻競合解消の構成」を参照してください。

関連項目:

- 第4章「Oracle Streamsを使用したデータのレプリケート」

7 マテリアライズド・ビューを使用したデータのレプリケート

この章では、マテリアライズド・ビューを使用したデータのレプリケートに関する概念情報を示します。また、データベース間のデータの連続的なレプリケート方法を説明します。

この章は次の項で構成されています。

- マテリアライズド・ビュー・レプリケーションの概要

- マテリアライズド・ビュー・レプリケーションの準備

- マテリアライズド・ビュー・サイトの構成

- マスター・サイトでのマテリアライズド・ビュー・ログの構成

- マテリアライズド・ビューを使用した読取り専用データのレプリケート

- マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート

- リフレッシュ・グループの構成

関連項目:

- 第8章「マテリアライズド・ビュー・レプリケーション環境の管理」

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 第1章「データ・レプリケーションと統合の概要」

マテリアライズド・ビュー・レプリケーションの概要

レプリケーションは、複数のデータベースでデータベース・オブジェクトとデータを共有するプロセスです。レプリケートされたデータベース・オブジェクトとデータを複数のデータベースでメンテナンスするために、あるデータベースでのこれらのデータベース・オブジェクトの1つに対する変更が他のデータベースと共有されます。このようにして、レプリケーション環境内のすべてのデータベースでデータベース・オブジェクトとデータの同期が維持されます。

外交販売など多くの環境では、データベースがネットワークに接続されていない期間があります。このような環境では、オンデマンドで、または夜間などにスケジュールした一定間隔でレプリカがデータを同期する必要があります。これらのデータベースは、ネットワークに再接続されたときに、同じデータを共有している他のデータベースと同期されます。

これらのニーズに対処するために、Oracle Databaseには、マテリアライズド・ビュー・レプリケーションというレプリケーション・タイプが用意されています。マテリアライズド・ビューには、ある単一の時点での表の完全コピーまたは部分コピーが含まれます。マテリアライズド・ビューは、読取り専用または更新可能にすることができます。

- 読取り専用マテリアライズド・ビューは、表のコピーへの読取り専用アクセスを可能にします。読取り専用マテリアライズド・ビューを使用して、アプリケーションおよびユーザーは、リモートの場所に存在する表のローカル・コピーにアクセスできます。読取り専用マテリアライズド・ビューは、データへのローカル・アクセスを可能にし、複数の場所にある同じデータに対する問合せを許可することにより、任意の単一の場所で必要なリソースを削減します。たとえば、読取り専用マテリアライズド・ビューは、通常はレポートの目的で使用されます。

- 更新可能マテリアライズド・ビューは、表のコピーへの読取り/書込みアクセスを提供します。更新可能マテリアライズド・ビューを使用して、アプリケーションおよびユーザーは、表と表のコピーの両方を変更でき、これらの変更をある時点で同期できます。たとえば、更新可能マテリアライズド・ビューは、通常は地域のオフィスに製品カタログを定期的に配布するため、また営業員が顧客サイトから注文を行えるようにするために使用されます。

簡単な一括デプロイメントと切断されたコンピューティングがサポートされるため、読取り専用マテリアライズド・ビューと更新可能マテリアライズド・ビューはどちらもモバイル・コンピューティング・アプリケーションに特に適しています。

次の各項で、マテリアライズド・ビュー・レプリケーションの詳細を説明します。

- マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要

- マテリアライズド・ビューのリフレッシュの概要

- リフレッシュ・グループの概要

関連項目:

- 「マテリアライズド・ビューでのデータのレプリケート時期」

- 「マテリアライズド・ビューを使用した読取り専用データのレプリケート」

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート」

マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要

レプリケーション環境では、マテリアライズド・ビューはデータをマスター・サイトという別のデータベース内の表と共有します。マスター・サイトのマテリアライズド・ビューに関連付けられている表はマスター表と呼ばれます。マテリアライズド・ビューには、ある単一の時点のマスター表の完全コピーまたは部分コピーが含まれます。マテリアライズド・ビューが存在するデータベースはマテリアライズド・ビュー・サイトと呼ばれます。

関連項目:

- 「マテリアライズド・ビュー・サイトの構成」

マテリアライズド・ビューのリフレッシュの概要

マテリアライズド・ビューをリフレッシュすると、マテリアライズド・ビューのデータがそのマスター表のデータと同期します。マテリアライズド・ビューは、固定スケジュールまたはオンデマンドでのリフレッシュの実行時期を制御します。リフレッシュの際には、マスター表の行データがプル・ダウンされ、マテリアライズド・ビュー・サイトに適用されます。Oracle Databaseには、次のリフレッシュ方式があります。

- 高速リフレッシュは、最後のリフレッシュ以降に変更された行のみプル・ダウンします。

- 完全リフレッシュでは、マテリアライズド・ビュー全体が更新されます。

- 強制リフレッシュでは、可能な場合に高速リフレッシュが実行されます。高速リフレッシュが不可能な場合、強制リフレッシュでは、完全リフレッシュが実行されます。

高速リフレッシュは、完全リフレッシュよりも効率的です。マテリアライズド・ビューの高速リフレッシュは、マスター表にマテリアライズド・ビュー・ログがある場合にのみ可能です。マテリアライズド・ビュー・ログは、マスター表に対して実行されたすべての挿入、更新および削除操作を記録するマスター・サイトの表です。

マテリアライズド・ビュー・ログは、単一のマスター表に関連付けられ、各マスター表には、マスター表からリフレッシュするマテリアライズド・ビューの数に関係なく1つのマテリアライズド・ビュー・ログしかありません。マテリアライズド・ビューに高速リフレッシュが実行されると、マテリアライズド・ビューが最後にリフレッシュされた後に追加されたマテリアライズド・ビュー・ログ内のエントリがマテリアライズド・ビューに適用されます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュ」

- 「リフレッシュ・グループの概要」

- 「現在リフレッシュされているマテリアライズド・ビューの判断」

リフレッシュ・グループの概要

トランザクションで2つ以上のマテリアライズド・ビュー間に一貫性が求められる場合、マテリアライズド・ビューをリフレッシュ・グループに編成できます。リフレッシュ・グループをリフレッシュすることにより、リフレッシュ・グループのマテリアライズド・ビューすべてのデータがトランザクションにおいて同じ一貫した時点に対応付けられます。リフレッシュ・グループ内のマテリアライズド・ビューを個別にリフレッシュすることもできます。ただし、マテリアライズド・ビューを個別にリフレッシュした場合、リフレッシュ・グループ内の残りのマテリアライズド・ビューはリフレッシュされないため、リフレッシュ・グループのメリットがなくなります。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「リフレッシュ・グループのリフレッシュ」

マテリアライズド・ビュー・レプリケーションの準備

マテリアライズド・ビュー・レプリケーションを構成する前に、レプリケーション環境に参加するデータベースを準備します。

マテリアライズド・ビュー・レプリケーションを準備するには:

1. 可能な場合は、レプリケートされた各表に主キーがあることを確認します。主キーが可能でない場合は、レプリケートされた各表に、表の各行の一意識別子として使用できる列または列のセットが必要です。レプリケーション環境で使用することを計画している表に主キーまたは一意列のセットがない場合は、これらの表を適宜変更します。

2. マテリアライズド・ビュー・レプリケーションを構成する前に、レプリケーション環境の各データベースで初期化パラメータを正しく設定します。

- グローバル名: レプリケーション環境に参加する各データベースでGLOBAL_NAMES初期化パラメータをTRUEに設定します。詳細は、「GLOBAL_NAMES初期化パラメータをTRUEに設定」を参照してください。

- システム・グローバル領域(SGA)および共有プール: 共有プールが、レプリケーション環境に対して作成されるコンポーネントを十分に収容できる大きさであることを確認します。共有プールは、SGAの一部です。MEMORY_TARGET初期化パラメータ(自動メモリー管理)、SGA_TARGET初期化パラメータ(自動共有メモリー管理)またはSHARED_POOL_SIZE初期化パラメータを設定することにより、共有プールを管理できます。通常、非レプリケーション環境よりもレプリケーション環境の方がOracle Databaseの共有プールが大きくなります。

初期化パラメータの変更の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

3. ネットワーク接続を構成して、レプリケーション環境内のデータベースが相互に通信できるようにします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

関連項目:

- 「マテリアライズド・ビューを使用した読取り専用データのレプリケート」

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート」

- レプリケーション環境での初期化パラメータの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

マテリアライズド・ビュー・サイトの構成

マテリアライズド・ビューを構成する前に、レプリケーション環境のマテリアライズド・ビュー・サイトとして機能するデータベースを構成する必要があります。この項の手順を完了すると、マテリアライズド・ビュー環境で必要なユーザーとデータベース・リンクが構成されます。また、更新可能なマテリアライズド・ビューを構成すると、これらの手順でも更新可能なマテリアライズド・ビューへの変更に対してスケジュールされたリンクおよびパージを構成されます。

Enterprise Managerでマテリアライズド・ビュー・サイトを構成するには:

1. 「マテリアライズド・ビュー・レプリケーションの準備」で説明するアクションを完了します。

2. Oracle Enterprise Managerでは、SYSTEMなどの管理ユーザーとしてマテリアライズド・ビュー・サイトにログインします。

3. 「データベース」ホームページに移動します。

4. 「データ移動」をクリックして「データ移動」サブページを開きます。

5. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

6. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

7. 「レプリケーション用のマテリアライズド・ビュー・サイトの構成」を選択します。

8. 「続行」をクリックして、レプリケーション用のマテリアライズド・ビュー・サイトを構成するウィザードを開きます。

tdpii_add_rep_sites.gifの説明

ウィザードのページに入力して、マテリアライズド・ビュー・サイトを構成します。「ユーザーの作成」ページで、マテリアライズド・ビュー管理者の適切なパスワードを入力します。パスワードの選択の詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

ヒント:
ウィザードの「スキーマの作成」ページでは、レプリケートするデータベース・オブジェクトを含んだスキーマが選択されていることを確認してください。

ウィザードを終了すると、マテリアライズド・ビュー・サイトを構成するようにEnterprise Managerジョブがスケジュールされます。ジョブが正常に実行されると、マテリアライズド・ビュー・サイトは構成され、それぞれにマテリアライズド・ビュー管理者ができます。デフォルトでは、マテリアライズド・ビュー管理者の名前はmvadminです。ウィザードが完了したら、このユーザーのパスワードを指定します。各マテリアライズド・ビューには、ウィザードの「スキーマの作成」ページで指定した各スキーマが含まれています。

9. 各マテリアライズド・ビュー・サイトで、レプリケート・スキーマに必要なデータベース・リンクを作成します。
マテリアライズド・ビュー・サイトのスキーマにマテリアライズド・ビューを作成するには、スキーマは、データベース・リンクを通じて、マスター・サイト内の対応するスキーマに接続する必要があります。

データベース・リンクを作成するには:

1. コマンドラインでSQL*Plusを開き、レプリケート・スキーマの所有者としてマテリアライズド・ビュー・データベースに接続します。

たとえば、ii2.example.comデータベース内のhrスキーマにマテリアライズド・ビューを作成することを計画している場合、次を入力します。

sqlplus hr@ii2.example.com
Enter password: password

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. マスター・データベースで、対応するレプリケート・スキーマに接続するデータベース・リンクを作成します。

たとえば、ii1.example.comデータベース内のhrスキーマに接続するデータベースを・リンクを作成して、次を入力します。

CREATE DATABASE LINK ii1.example.com CONNECT TO hr
IDENTIFIED BY password USING 'ii1.example.com';

3. マテリアライズド・ビュー・データベースの各レプリケート・スキーマに対し、手順aからbを繰り返します。

4. 各マテリアライズド・ビュー・データベースに対して手順aからcを繰り返します。

関連項目:

- 「マテリアライズド・ビューでのデータのレプリケート時期」

- 「マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要」

マスター・サイトでのマテリアライズド・ビュー・ログの構成

マテリアライズド・ビューを高速リフレッシュするには、マスター・サイトのマスター表に対してマテリアライズド・ビュー・ログを構成します。高速リフレッシュは、前回のリフレッシュ後に変更された行のみを更新するので、完全リフレッシュより効率的です。詳細は、「マテリアライズド・ビューのリフレッシュの概要」を参照してください。

マテリアライズド・ビュー・ログを構成するには:

1. Oracle Enterprise Managerで、SYSTEMなどの管理ユーザーとしてマスター・サイトにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

5. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

6. 「高速リフレッシュ用にソース・データベース表にマテリアライズド・ビュー・ログを作成」を選択します。

7. 「続行」をクリックして「マテリアライズド・ビュー・ログの作成」ページを開きます。
tdpii_create_mv_log.gifの説明

8. Schema.Tableフィールドにschema.tableの形式でスキーマ名とマスター表の表名を入力するか、懐中電灯アイコンをクリックして表を検索します。

9. 「列の移入」をクリックします。

10. 作成しているマテリアライズド・ビュー・ログの特定の表領域がある場合は、「表領域」フィールドに表領域名を入力します。それ以外の場合は、フィールドを<Default>のままにします。

11. 「リフレッシュ・タイプ」で「主キー」が選択されていることを確認してください。

12. 「OK」をクリックしてマテリアライズド・ビュー・ログを作成します。

13. 各マスター表で手順5から12を繰り返します。

注意:
SQL文CREATE MATERIALIZED VIEW LOGを使用して、マテリアライズド・ビュー・ログを作成することもできます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「マスター・サイトのマテリアライズド・ビュー・ログの表示」

- 「マテリアライズド・ビュー・ログが大きくなりすぎるのを防止」

- 「チュートリアル: マスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップ」

マテリアライズド・ビューを使用した読取り専用データのレプリケート

表の読取り専用レプリカは、レプリケートされたデータの変更をアプリケーションに許可することなくレプリケートされたデータへのアクセスを可能にするデータベースに適しています。

次の各項で、マテリアライズド・ビューを使用した読取り専用データのレプリケートを説明します。

- マテリアライズド・ビューを使用した読取り専用データのレプリケートの概要

- チュートリアル: マテリアライズド・ビューを使用した読取り専用データ・レプリケーションの構成

関連項目:

- 「マテリアライズド・ビューでのデータのレプリケート時期」

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート」

- 「マテリアライズド・ビュー・レプリケーション環境の管理」

マテリアライズド・ビューを使用した読取り専用データのレプリケートの概要

読取り専用マテリアライズド・ビューは、マスター・サイトで発生した表データへの読取り専用アクセスを可能にします。ネットワークの可用性にかかわらず、アプリケーションは読取り専用マテリアライズド・ビューにデータを問い合せて、マスター・サイトへのネットワーク・アクセスを回避できます。ただし、システム全体のアプリケーションは、挿入、更新および削除操作を実行するためにマスター・サイトのデータにアクセスする必要があります。

図7-1に、読取り専用マテリアライズド・ビューの動作を示します。

図7-1 読取り専用マテリアライズド・ビュー

「図7-1 読取り専用マテリアライズド・ビュー」の説明

図7-1は、クライアント・アプリケーションがマテリアライズド・ビュー・サイトの読取り専用マテリアライズド・ビューに対してローカル問合せを実行できることを示しています。これらのアプリケーションはリモート・マスターのデータを更新できます。マテリアライズド・ビューは、マテリアライズド・ビューがネットワーク上でリフレッシュされる際にマスターでの変更で更新されます。

チュートリアル: マテリアライズド・ビューを使用した読取り専用データ・レプリケーションの構成

この項の例では、マテリアライズド・ビューを使用した読取り専用データ・レプリケーションを構成します。具体的には、この例ではマテリアライズド・ビュー・サイトに次の読取り専用マテリアライズド・ビューを作成します。

- マスター・サイトのhr.employees表に基づくmvadmin.employees_mvrマテリアライズド・ビュー。

- マスター・サイトのhr.departments表に基づくmvadmin.departments_mvrマテリアライズド・ビュー。

これらの読取り専用マテリアライズド・ビューを構成するには:

1. 次の項で説明するアクションを完了します。

- 「マテリアライズド・ビュー・レプリケーションの準備」

- 「マテリアライズド・ビュー・サイトの構成」

- マテリアライズド・ビューの高速リフレッシュを実行する場合は、「マスター・サイトでのマテリアライズド・ビュー・ログの構成」を参照してください。この例では、hr.departments表とhr.employees表のマテリアライズド・ビュー・ログを作成します。

2. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー・サイトは、マテリアライズド・ビューを作成するデータベースです。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

3. 「データベース」ホームページに移動します。

4. 「データ移動」をクリックして「データ移動」サブページを開きます。

5. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

6. 「アドバンスト・レプリケーション: 設定」ページで、「読取り専用マテリアライズド・ビュー」を拡張します。

7. 「マテリアライズド・ビューの作成」を選択します。

8. 「続行」をクリックして「マテリアライズド・ビューの作成」ページを開きます。
tdpii_create_mv.gifの説明

9. 次のアクションを完了して、hr.employees_mvrマテリアライズド・ビューを作成します。

1. 「名前」フィールドにemployees_mvrと入力します。

2. 「スキーマ」フィールドにhrと入力します。

3. 作成しているマテリアライズド・ビューの特定の表領域がある場合は、「表領域」フィールドに表領域名を入力します。それ以外の場合は、フィールドを<Default>のままにします。

4. 「マテリアライズド・ビューをクエリー・リライトに対して有効化」を選択解除します。

5. 次の項目が選択されていないことを確認します。

- マテリアライズド・ビューを更新可能にする

- 既存の表からの作成

6. 「マテリアライズド・ビュー問合せ」フィールドに次のように入力します。

SELECT employee_id,
first_name,
last_name,
email,
phone_number,
hire_date,
job_id,
salary,
commission_pct,
manager_id,
department_id
FROM hr.employees@master_site

master_siteを、マスター表を含むマスター・サイトのグローバル名で置換します。

7. 「マテリアライズド・ビューを作成後に分析」を選択解除します。

8. 必要に応じて、他のサブページでマテリアライズド・ビューのオプションを設定します。

9. 「OK」をクリックしてマテリアライズド・ビューを作成します。

hr.employees_mvrマテリアライズド・ビューは、マスターhr.employees表の完全なコピーです。データのサブセットを含むマテリアライズド・ビューを作成するには、SELECT文にWHERE句を含めます。

10. 「アドバンスト・レプリケーション: 設定」ページで、「読取り専用マテリアライズド・ビュー」を拡張します。

11. 「マテリアライズド・ビューの作成」を選択します。

12. 「続行」をクリックして「マテリアライズド・ビューの作成」ページを開きます。

13. 次のアクションを完了して、hr.departments_mvrマテリアライズド・ビューを作成します。

1. 「名前」フィールドにdepartments_mvrと入力します。

2. 「スキーマ」フィールドにhrと入力します。

3. 作成しているマテリアライズド・ビューの特定の表領域がある場合は、「表領域」フィールドに表領域名を入力します。それ以外の場合は、フィールドを<Default>のままにします。

4. 「マテリアライズド・ビューをクエリー・リライトに対して有効化」を選択解除します。

5. 次の項目が選択されていないことを確認します。

- マテリアライズド・ビューを更新可能にする

- 既存の表からの作成

6. 「マテリアライズド・ビュー問合せ」フィールドに次のように入力します。

SELECT department_id,
department_name,
manager_id,
location_id
FROM hr.departments@master_site

master_siteを、マスター表を含むマスター・サイトで置換します。

7. 「マテリアライズド・ビューを作成後に分析」を選択解除します。

8. 必要に応じて、他のサブページでマテリアライズド・ビューのオプションを設定します。

9. 「OK」をクリックしてマテリアライズド・ビューを作成します。

14. リフレッシュ・グループを作成し、それにマテリアライズド・ビューを追加して、リフレッシュされる、ある単一の時点でこれらが一貫するようにします。この例では、hr.employees_mvrおよびhr.departments_mvrマテリアライズド・ビューをリフレッシュ・グループに追加します。詳細は、「リフレッシュ・グループの構成」を参照してください。

注意:
SQL文CREATE MATERIALIZED VIEWを使用して、マテリアライズド・ビューを作成することもできます。

関連項目:

- 「マテリアライズド・ビューでのデータのレプリケート時期」

- 「マテリアライズド・ビューを使用した読取り専用データのレプリケートの概要」

- 「マテリアライズド・ビュー・レプリケーション環境の管理」

マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート

表の読取り/書込みレプリカは、レプリケートされたデータの変更をアプリケーションに許可するデータベースに適しています。

次の各項で、マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートを説明します。

- マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートの概要

- マテリアライズド・ビューを使用した読取り/書込みデータのレプリケーションの構成

関連項目:

- 「マテリアライズド・ビューでのデータのレプリケート時期」

- 「マテリアライズド・ビューを使用した読取り専用データのレプリケート」

- 第8章「マテリアライズド・ビュー・レプリケーション環境の管理」

マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートの概要

更新可能マテリアライズド・ビューでは、ユーザーがマテリアライズド・ビューの行を挿入、更新および削除できます。更新可能マテリアライズド・ビューがリフレッシュされると、これらの変更はマスター・サイトにプッシュされ、マスター表に適用されます。

図7-2に、更新可能マテリアライズド・ビューの動作を示します。

図7-2 更新可能マテリアライズド・ビュー

「図7-2 更新可能マテリアライズド・ビュー」の説明

図7-2は、クライアント・アプリケーションがマテリアライズド・ビュー・サイトの更新可能マテリアライズド・ビューを問い合せて更新できることを示しています。また、これらのアプリケーションはリモート・マスター・サイトのデータを更新することもできます。マテリアライズド・ビューによってネットワーク上のリフレッシュが初期化されるとき、リフレッシュには主に2つの段階があります。まず、マテリアライズド・ビュー上で実行されたトランザクションがマスター・サイトにプッシュされ、適切に適用されます。次に、更新の競合があればそれを解消した後で、変更された行データをマテリアライズド・ビューがマスター・サイトからプルして適用します。

次の各項で、マテリアライズド・ビューを使用したレプリケーションの詳細を説明します。

- レプリケーション・グループと更新可能マテリアライズド・ビューの概要

- スケジュールされたリンクと遅延トランザクションの概要

- 競合と更新可能マテリアライズド・ビューの概要

関連項目:

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケーションの構成」

- 第8章「マテリアライズド・ビュー・レプリケーション環境の管理」

レプリケーション・グループと更新可能マテリアライズド・ビューの概要

レプリケーション・グループは、論理的に関連するレプリケーション・オブジェクトのコレクションです。関連するデータベース・オブジェクトをレプリケーション・グループ内で編成することにより、多くのオブジェクトをまとめて管理するのが簡単になります。マスター・サイトでは、レプリケーション・グループはマスター・グループと呼ばれます。マテリアライズド・ビュー・サイトでは、レプリケーション・グループはマテリアライズド・ビュー・グループと呼ばれます。

更新可能マテリアライズド・ビューに対する変更をリフレッシュ中にマスターにプッシュするには、次の条件が満たされている必要があります。

- 更新可能マテリアライズド・ビューは、マテリアライズド・ビュー・グループに属する必要があります。

- マテリアライズド・ビュー・グループは、マスター・サイトのマスター・グループに基づいている必要があります。

マテリアライズド・ビュー・グループには、マスター・グループ内のすべての表または表のサブセットのマテリアライズド・ビューを含めることができます。

図7-3は、2つのマテリアライズド・ビュー・グループを示しています。マテリアライズド・ビュー・グループAには、マスター・グループの表のサブセットに対応するマテリアライズド・ビューが含まれ、マテリアライズド・ビュー・グループBには、マスター・グループの各表のマテリアライズド・ビューが含まれます。

図7-3 マスター・グループに対応するマテリアライズド・ビュー・グループ

「図7-3 マスター・グループに対応するマテリアライズド・ビュー・グループ」の説明

マテリアライズド・ビュー・グループとリフレッシュ・グループを同じサイトで使用している場合、単一リフレッシュ・グループには複数のマテリアライズド・ビュー・グループを含めることができます。マテリアライズド・ビュー・グループは、リフレッシュ・グループと異なりますが、同じマテリアライズド・ビューを含む場合があります。

図7-4に、2つのマテリアライズド・ビュー・グループを含むリフレッシュ・グループを示します。

図7-4 リフレッシュ・グループは複数のマテリアライズド・ビュー・グループのオブジェクトを含むことができる

「図7-4 リフレッシュ・グループは複数のマテリアライズド・ビュー・グループのオブジェクトを含むことができる」の説明

関連項目:

- 「リフレッシュ・グループの概要」

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケーションの構成」

スケジュールされたリンクと遅延トランザクションの概要

マテリアライズド・ビュー・サイトでは、遅延トランザクションには更新可能マテリアライズド・ビューに対する変更が含まれます。遅延トランザクションは、マテリアライズド・ビュー・サイトに格納されるため、マスター・サイトに送信でき、マスター表に適用できます。

更新可能マテリアライズド・ビューのリフレッシュは、最初にマテリアライズド・ビュー・サイトの遅延トランザクションをマスター・サイトにプッシュします。次に、マスター・サイトのデータがプルされて、マテリアライズド・ビューに適用されます。

オプションとして、リフレッシュとは関係のない定期的な間隔で遅延トランザクションをプッシュすることを選択できます。 スケジュールされたリンクは、遅延トランザクションをプッシュするためのユーザー定義スケジュールがあるデータベース・リンクです。スケジュールされたリンクは、マテリアライズド・ビュー・サイトが遅延トランザクション・キューをそのマスター・サイトに送信する方法を決定します。スケジュールされたリンクを作成する場合、Oracle Databaseはローカル・ジョブ・キューにジョブを作成して、マスター・サイトに遅延トランザクション・キューをプッシュします。

マテリアライズド・ビュー・サイトにマスター・サイトへの常時接続がある場合は、オプションとして、スケジュールされたリンクを使用して遅延トランザクションを定期的な間隔でマスター・サイトにプッシュできます。マテリアライズド・ビュー・サイトが長時間マスター・サイトから切断されている場合、通常はスケジュールどおりに遅延トランザクションをプッシュしないことをお薦めします。この場合は、オンデマンドでリフレッシュするのが最適で、これにより、変更がマスター・サイトにもプッシュされます。

更新可能マテリアライズド・ビューに対する変更がマスター・サイトにプッシュされた後は、マテリアライズド・ビュー・サイトに格納する必要がなくなります。遅延トランザクション・キューのサイズを維持するために、正常に完了した遅延トランザクションをパージする必要があります。これらの遅延トランザクションは、パージ・スケジュールに従って一定の間隔でパージできます。

関連項目:

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートの概要」

- 「マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要」

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「マテリアライズド・ビュー・サイトの構成」

- 「更新可能マテリアライズド・ビューの遅延トランザクションに関する情報の表示」

競合と更新可能マテリアライズド・ビューの概要

更新可能マテリアライズド・ビューを使用する場合は、競合が発生する可能性があります。マスター表とマテリアライズド・ビューの同じ行に変更がほぼ同時に加えられた場合は、競合が発生します。リフレッシュ時に、前回のリフレッシュ後にマスター表および対応するマテリアライズド・ビューで同じ行が変更された場合、マスター・サイトは競合を検出します。

デフォルトでは、Oracle Databaseは競合更新を必ず検出し、ログに記録します。 競合解消を使用して、各競合がビジネス・ルールに従って解消されるようにし、すべてのサイトでデータが正しく収束するようにできます。Oracle Databaseには、マスター・サイトで構成できる組込みの競合解消方法があります。

関連項目:

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケーションの構成」

- 『Oracle Databaseアドバンスト・レプリケーション』

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートの概要」

- 「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」

マテリアライズド・ビューを使用した読取り/書込みデータのレプリケーションの構成

この項では、マテリアライズド・ビューを使用した読取り/書込みデータ・レプリケーションを構成する方法を示します。具体的には、この例では次のものを構成します。

- マスター表を含むマスター・サイトのマスター・グループ。詳細は、「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」を参照してください。

- マスター・サイトのマスター表に基づく更新可能マテリアライズド・ビューを含むマテリアライズド・ビュー・サイトにあるマテリアライズド・ビュー・グループ。マテリアライズド・ビューを更新可能にするには、そのマテリアライズド・ビューがマテリアライズド・ビュー・サイトのマテリアライズド・ビュー・グループ内にあり、マテリアライズド・ビュー・グループがマスター・サイトのマスター・グループに対応している必要があります。詳細は、「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」を参照してください。

- マスター表のマスター・サイトでの最新のタイムスタンプ競合解消。競合解消により、マスター表および対応する更新可能マテリアライズド・ビュー内の同じ行がほぼ同時に変更された場合に、マスター表とマテリアライズド・ビューの一貫性が保たれます。詳細は、「競合と更新可能マテリアライズド・ビューの概要」を参照してください。
競合が発生した場合、最新のタイムスタンプ競合解消とは、最新の変更は保持され、古い変更は破棄されることを意味します。ある時点で行がマテリアライズド・ビュー内で更新されると、後でマスター表の行も更新され、マテリアライズド・ビューがリフレッシュされると、マスター表の行は自動的にマテリアライズド・ビューの行に置換されます。マテリアライズド・ビューの行がマスター表の行より先に更新されている場合、マテリアライズド・ビューの行は、リフレッシュ中にマスター表の行を置換します。

これらの更新可能マテリアライズド・ビューを構成するには:

1. 次の項で説明するアクションを完了します。

- 「マテリアライズド・ビュー・レプリケーションの準備」

- 「マテリアライズド・ビュー・サイトの構成」

- マテリアライズド・ビューの高速リフレッシュを実行する場合は、「マスター・サイトでのマテリアライズド・ビュー・ログの構成」を参照してください。マスター表になる各マスター表のマテリアライズド・ビュー・ログを構成します。

2. マスター・サイトを構成します。マスター・サイトには、更新可能なマテリアライズド・ビューがベースとなっているマスター表を含みます。

1. Oracle Enterprise Managerで、SYSTEMなどの管理ユーザーとしてマスター・サイトになるデータベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

5. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

6. 「レプリケーション用のマスター・サイトの構成」を選択します。

7. 「続行」をクリックして、レプリケーション用のマスター・サイトを構成するウィザードを開きます。
tdpii_setup_master_sites.gifの説明

ウィザードのページに入力して、マスター・サイトを構成します。

ウィザードを終了すると、マスター・サイトを構成するようにEnterprise Managerジョブがスケジュールされます。ジョブが正常に実行されると、マスター・サイトは構成され、レプリケーション管理者ができます。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。ウィザードが完了したら、このユーザーのパスワードを指定します。

3. 最新のタイムスタンプ競合解消の各マスター表にtime列を追加します。

1. SQL*Plusで、SYSTEMなどの管理ユーザーとしてデータベースに接続します。別の方法として、時間列が追加される表を所有しているユーザーとして接続することもできます。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. SQL文ALTER TABLEを使用して、表にtime列を追加します。たとえば、次のSQL文は、time列をhr.departments表に追加します。

ALTER TABLE hr.departments ADD (time TIMESTAMP WITH TIME ZONE);

4. トリガーを作成して変更が発生した時刻で各マスター表のtime列を更新します。

ヒント:
トリガーを使用してtime列を更新するかわりに、アプリケーションで表に対して列を修正または挿入するたびに、time列を移入できます。

1. Oracle Enterprise Managerで、SYSTEMなどの管理者ユーザーとしてマスター表を含むデータベースにログインします。

手順3の完了後にEnterprise Managerからログアウトしなければ、管理ユーザーとしてマスター・サイトにログインした状態を保持できます。

2. 「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「プログラム」セクションで「トリガー」をクリックします。

5. 「トリガー」ページで、「作成」をクリックします。

「トリガーの作成」ページが表示され、「一般」サブページが表示されます。

tdpii_create_trigger_system.gifの説明

6. 「名前」フィールドにトリガーの名前を入力します。

7. 「スキーマ」フィールドに管理ユーザー名を保持します。

8. 「トリガー本体」フィールドに次のように入力します。

BEGIN
-- The IF/THEN statement ensures that the trigger does not fire during
-- materialized view refresh.
IF (DBMS_REPUTIL.FROM_REMOTE = FALSE AND
DBMS_SNAPSHOT.I_AM_A_REFRESH = FALSE)
THEN
:NEW.TIME := SYSTIMESTAMP;
END IF;
END;

9. 「イベント」をクリックして「イベント」サブページを開きます。

10. 「対象オブジェクト」リストで「表」が選択されていることを確認します。

11. 「表(Schema.Table)」フィールドにschema.tableの形式で表名を入力するか、懐中電灯アイコンを使用してデータベース・オブジェクトを検索します。

12. 「起動タイミング」に「前」が選択されていることを確認してください。

13. 「イベント」に「選択」および「列の更新」を選択します。
表内の列が表示されます。

14. 新規のtime列を除く表のすべての列を選択します。

15. 「詳細」をクリックします。

16. 「行レベル・トリガー」を選択します。

17. 「OK」をクリックしてトリガーを作成します。

18. 各マスター表で手順eからqを繰り返し、トリガーを作成します。

19. Enterprise Managerからログアウトします。

注意:
SQL文CREATE TRIGGERを使用して、トリガーを作成することもできます。

5. マスター・グループを作成します。

1. Enterprise Managerで、レプリケーション管理者としてマスター・サイトにログインします。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。
「アドバンスト・レプリケーション: 設定」ページが表示されます。

5. 「マルチマスター・レプリケーション」を拡張します。

6. 「マスター・グループの作成」を選択します。

7. 「続行」をクリックして「マスター・グループの作成」ウィザードを開きます。
tdpii_create_mg_gen.gifの説明

ウィザードのページに入力して、マスター・グループを構成します。

ヒント:

- 「オブジェクトの追加」ページで、マテリアライズド・ビューのマスター表になる表を追加します。

- 「マスター・サイトの追加」ページで、追加のマスター・サイトを追加しないでください。

ウィザードを終了すると、マスター・グループを構成するようにEnterprise Managerジョブがスケジュールされます。

6. 各マスター表の競合解消を構成するには:

1. マスター・サイトにレプリケーション管理者としてログインしながら、新規マスター・グループを含むデータベースの「データベース」ホームページに移動します。

2. 「データ移動」をクリックして「データ移動」サブページを開きます。

3. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

4. 「マルチマスター・レプリケーション」セクションで、「マスター・グループ」に関連付けられている数字をクリックします。

5. 「マスター・グループ」ページで、マスター・グループ・ステータスがNORMALの場合、「停止」をクリックします。ステータスがQUIESCEDの場合、次の手順に移動します。

6. コマンドラインでSQL*Plusを開き、レプリケーション管理者としてマスター・サイトに接続します。
たとえば、レプリケーション管理者がrepadminで、マスター・サイトがii1.example.comの場合、次を入力します。

sqlplus repadmin@ii1.example.com
Enter password: password

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

7. SQL*PlusのDBMS_REPCATパッケージでMAKE_COLUMN_GROUPプロシージャを実行して、レプリケート表の列グループを作成します。

たとえば、hr.departments表の列グループを作成して、次のプロシージャを実行します。

BEGIN
DBMS_REPCAT.MAKE_COLUMN_GROUP(
sname                => 'hr',
oname                => 'departments',
column_group         => 'dep_time_cg',
list_of_column_names => 'department_id,
department_name,
manager_id,
location_id,
time');
END;
/

list_of_columnsパラメータのすべての表列を含みます。

MAKE_COLUMN_GROUPプロシージャの詳細は、『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』を参照してください。

8. SQL*PlusのDBMS_REPCATパッケージでADD_UPDATE_RESOLUTIONプロシージャを実行して、表のLATEST TIME競合解消を指定します。

たとえば、次のプロシージャを実行して、hr.departments表の手順gで作成した列グループを使用してLATEST TIME競合解消を指定します。

BEGIN
DBMS_REPCAT.ADD_UPDATE_RESOLUTION (
sname                 => 'hr',
oname                 => 'departments',
column_group          => 'dep_time_cg',
sequence_no           => 1,
method                => 'LATEST TIMESTAMP',
parameter_column_name => 'time');
END;
/

column_groupパラメータの手順gで作成した列グループを指定し、parameter_column_name列の時間列を指定します。

ADD_UPDATE_RESOLUTIONプロシージャの詳細は、『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』を参照してください。

9. マスター・グループの各表で手順gからhを繰り返します。

10. Enterprise Managerで、レプリケーション管理者としてマスター・サイトにログインします。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。

11. 「データベース」ホームページに移動します。

12. 「データ移動」をクリックして「データ移動」サブページを開きます。

13. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

14. 「マルチマスター・レプリケーション」セクションで、「マスター・グループ」に関連付けられている数字をクリックします。

15. 「マスター・グループ」ページで、マスター・グループを選択します。

16. 「編集」をクリックしてマスター・グループを編集するページを開きます。

17. 「オブジェクト」をクリックして「オブジェクト」サブページを開きます。

18. 競合解消に追加した各オブジェクトに関する「レプリケーション・サポートの作成」を選択していることを確認します。

19. 「適用」をクリックすると変更が保存されます。

20. ページ上部の「マスター・グループ」をクリックして「マスター・グループ」ページに戻ります。

21. マスター・グループの「再開」をクリックします。

7. マテリアライズド・ビュー・グループを作成します。

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー・サイトは、マテリアライズド・ビューを作成するデータベースです。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「設定」をクリックします。

5. 「アドバンスト・レプリケーション: 設定」ページで、「更新可能なマテリアライズド・ビュー・レプリケーション」を拡張します。

6. 「マテリアライズド・ビュー・グループの作成」を選択します。

7. 「続行」をクリックして「マテリアライズド・ビュー・グループの作成」ウィザードを開きます。
tdpii_create_mvg_gen.gifの説明

ウィザードのページに入力して、マテリアライズド・グループを構成します。

ヒント:
「マテリアライズド・ビューのカスタマイズ」ページの各マテリアライズド・ビューについて:

- マスター・サイトで各表が使用する競合解決の「最小通信」を選択します。このオプションは、競合解消メカニズムのサポートに必要なデータ量を削減します。

- 更新可能にする各マテリアライズド・ビューで「更新可能」を選択します。

- 高速リフレッシュを実行する各マテリアライズド・ビューで「高速リフレッシュ」を選択します。

ウィザードを終了すると、マテリアライズド・ビュー・グループを構成するようにEnterprise Managerジョブがスケジュールされます。

8. 変更が発生したときに最新の時刻を持つ各マテリアライズド・ビューのtime列を更新するトリガーを作成します。トリガーは最新のタイムスタンプ競合解消に必要です。

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー・サイトは、マテリアライズド・ビューを作成するデータベースです。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 各マテリアライズド・ビューに対して手順4のbから4のqを完了します。

9. マテリアライズド・ビュー・グループの構成中に既存のリフレッシュ・グループを指定しなかった場合は、リフレッシュ・グループを作成し、マテリアライズド・ビューをそのグループに追加して、リフレッシュされたときにこれらがある時点で一貫するようにします。詳細は、「リフレッシュ・グループの構成」を参照してください。

関連項目:

- 「マテリアライズド・ビューでのデータのレプリケート時期」

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケートの概要」

- 「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」

- 「競合と更新可能マテリアライズド・ビューの概要」

- 第8章「マテリアライズド・ビュー・レプリケーション環境の管理」

リフレッシュ・グループの構成

2つ以上のマテリアライズド・ビューをある時点で一致させる必要がある場合は、マテリアライズド・ビューが同じリフレッシュ・グループに属している必要があります。

リフレッシュ・グループを作成し、これにマテリアライズド・ビューを追加するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「リフレッシュ・グループ」に関連付けられている数字をクリックします。

6. 「リフレッシュ・グループ」ページで、「作成」をクリックします。
「リフレッシュ・グループの作成」ページが表示され、「一般」サブページが表示されます。

tdpii_create_ref_grp.gifの説明

7. 次のアクションを完了します。

- リフレッシュ・グループの名前を「名前」フィールドに入力します。

- 「スキーマ」フィールドにリフレッシュ・グループの所有者を入力します。通常は、マテリアライズド・ビュー管理者がリフレッシュ・グループを所有します。

- 必要に応じて、「次の日付」および「間隔」設定を調整します。「次の日付」設定は、リフレッシュ・グループの次のリフレッシュが発生する時期を決定します。「間隔」設定は、リフレッシュ・グループが自動的にリフレッシュされる頻度を決定します。「変更」をクリックして、各設定を調整する新しいページを開きます。
マテリアライズド・ビュー・サイトとマスター・サイト間に制限された接続がある場合は、オンデマンドでリフレッシュできます。この場合は、「間隔」フィールドをクリアします。

- 「リフレッシュ前にマテリアライズド・ビューから変更をマスターに送信」を選択します。このオプションでは、リフレッシュ時に、マテリアライズド・ビュー・サイトがマテリアライズド・ビューのリフレッシュ前に、マスター表の更新可能なマテリアライズド・ビューに対する変更のプッシュを指定します。

8. 「マテリアライズド・ビュー」サブページを開いて、「マテリアライズド・ビュー」をクリックします。
tdpii_create_ref_grp_mvs.gifの説明

9. 「追加」をクリックして「検索と選択: マテリアライズド・ビュー」ページを開きます。

10. 検索ツールを使用して、リフレッシュ・グループに追加するマテリアライズド・ビューをリストします。

11. リフレッシュ・グループに追加するマテリアライズド・ビューを選択します。

12. 「OK」をクリックして「マテリアライズド・ビュー」サブページに戻ります。選択したマテリアライズド・ビューがリフレッシュ・グループにリストされます。

13. 「OK」をクリックして、リフレッシュ・グループを作成します。

注意:
DBMS_REFRESHパッケージの次のプロシージャを使用して、リフレッシュ・グループを作成し、これにオブジェクトを追加することもできます。

- MAKE

- ADD

関連項目:

- 「リフレッシュ・グループの概要」

- 「リフレッシュ・グループのリフレッシュ」

- 「リフレッシュ・グループへのマテリアライズド・ビューの追加」

- 「リフレッシュ・グループに関する情報の表示」

8 マテリアライズド・ビュー・レプリケーション環境の管理

この章では、マテリアライズド・ビュー・レプリケーション環境の管理、監視およびトラブルシューティング方法を説明します。

この章は次の項で構成されています。

- マテリアライズド・ビュー・レプリケーション環境の管理

- マテリアライズド・ビュー・レプリケーション環境の監視

- マテリアライズド・ビュー・レプリケーション環境のトラブルシューティング

関連項目:

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

- 第1章「データ・レプリケーションと統合の概要」

マテリアライズド・ビュー・レプリケーション環境の管理

マテリアライズド・ビューが構成された後で、それらをリフレッシュしてマスター表と同期できます。この項では、マテリアライズド・ビューのリフレッシュおよびリフレッシュ・グループへのマテリアライズド・ビューの追加の方法を説明します。

マテリアライズド・ビュー・サイトでマテリアライズド・ビューが不要になることがあります。この項では、マテリアライズド・ビューの削除およびマスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップに関する情報も示します。

次の各項で、マテリアライズド・ビュー・レプリケーション環境の管理を説明します。

- マテリアライズド・ビューのリフレッシュ

- リフレッシュ・グループへのマテリアライズド・ビューの追加

- マテリアライズド・ビューの削除

- チュートリアル: マスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップ

関連項目:

- 「マテリアライズド・ビュー・レプリケーション環境の監視」

- 「マテリアライズド・ビュー・レプリケーション環境のトラブルシューティング」

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

マテリアライズド・ビューのリフレッシュ

マテリアライズド・ビューをリフレッシュすると、マスター表と同期します。マテリアライズド・ビューを最後にリフレッシュした後でマスター表に加えられた変更は、リフレッシュ時にマテリアライズド・ビューに適用されます。マテリアライズド・ビューが更新可能な場合は、最後のリフレッシュ後にマテリアライズド・ビューに加えられた変更も、リフレッシュ時にマスター表に適用されます。

マテリアライズド・ビューのグループを1つのアプリケーションなどの特定の目的に使用している場合、通常は、これらのマテリアライズド・ビューを1つのリフレッシュ・グループに配置することが最適です。リフレッシュ・グループをリフレッシュすると、リフレッシュ・グループ内のマテリアライズド・ビューは、ある一致した時点でリフレッシュされます。マテリアライズド・ビューを個別にリフレッシュすることもできますが、その場合、マテリアライズド・ビューはある時点で一致しません。

次の各項で、マテリアライズド・ビューのリフレッシュについて説明します。

- リフレッシュ・グループのリフレッシュ

- マテリアライズド・ビューのリフレッシュ

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「リフレッシュ・グループの概要」

- 「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」

リフレッシュ・グループのリフレッシュ

リフレッシュ・グループをリフレッシュすると、リフレッシュ・グループ内のすべてのマテリアライズド・ビューが、ある一致した時点でリフレッシュされます。

リフレッシュ・グループをリフレッシュするには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「リフレッシュ・グループ」に関連付けられている数字をクリックします。

6. 「リフレッシュ・グループ」ページで、検索ツールを使用して、リフレッシュするリフレッシュ・グループをリストします。

7. リストでリフレッシュ・グループを選択します。

8. 「編集」をクリックします。
「リフレッシュ・グループの編集」ページが表示され、「一般」サブページが表示されます。

tdpii_edit_ref_grp.gifの説明

9. 「リフレッシュ」セクションの「今すぐリフレッシュ」をクリックします。

注意:
DBMS_REFRESH.REFRESHプロシージャを使用して、リフレッシュ・グループをリフレッシュすることもできます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「リフレッシュ・グループの概要」

- 「リフレッシュ・グループの構成」

- 「リフレッシュ・グループに関する情報の表示」

マテリアライズド・ビューのリフレッシュ

マテリアライズド・ビューをリフレッシュすると、マスター表と一致します。マテリアライズド・ビューがリフレッシュ・グループの一部である場合、通常は個別のマテリアライズド・ビューではなくリフレッシュ・グループをリフレッシュするのが最適です。リフレッシュ・グループをリフレッシュすると、リフレッシュ・グループ内のすべてのマテリアライズド・ビューがある時点で一致します。

マテリアライズド・ビューをリフレッシュするには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「マテリアライズド・ビュー」に関連付けられている数字をクリックします。

6. 「マテリアライズド・ビュー」ページで、検索ツールを使用して、リフレッシュするマテリアライズド・ビューをリストします。
すべてのマテリアライズド・ビューをリストするには、「スキーマ」フィールドと「オブジェクト名」フィールドを空白にしたまま「実行」をクリックします。

7. リストでマテリアライズド・ビューを選択します。
tdpii_mvs.gifの説明

8. 「アクション」リストで「リフレッシュ」を選択します。

9. 「実行」をクリックして、選択したマテリアライズド・ビューの「マテリアライズド・ビューのリフレッシュ」ページを開きます。
tdpii_refresh_mv.gifの説明

10. 必要に応じてオプションを調整します。
通常は、デフォルト値を使用できます。

11. 「OK」をクリックします。

12. 確認ページで、「はい」をクリックしてマテリアライズド・ビューをリフレッシュします。

注意:
DBMS_MVIEW.REFRESHプロシージャを使用して、マテリアライズド・ビューをリフレッシュすることもできます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「リフレッシュ・グループの概要」

リフレッシュ・グループへのマテリアライズド・ビューの追加

2つ以上のマテリアライズド・ビューをある時点で一致させる必要がある場合は、マテリアライズド・ビューが同じリフレッシュ・グループに属している必要があります。

マテリアライズド・ビューをリフレッシュ・グループに追加するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「リフレッシュ・グループ」に関連付けられている数字をクリックします。

6. 「グループのリフレッシュ」ページで、検索ツールを使用して、変更するリフレッシュ・グループをリストします。

7. リフレッシュ・グループを選択します。

8. 「編集」をクリックします。

9. 「リフレッシュ・グループの編集」ページで、「マテリアライズド・ビュー」をクリックします。

10. 「マテリアライズド・ビュー」サブページで、「追加」をクリックします。

11. 「検索と選択: マテリアライズド・ビュー」ページで、検索ツールを使用して、リフレッシュ・グループに追加するマテリアライズド・ビューをリストします。
tdpii_select_mv.gifの説明

12. リフレッシュ・グループに追加するマテリアライズド・ビューを選択します。

13. 「OK」をクリックします。

14. 「リフレッシュ・グループの編集」ページで、「適用」をクリックしてリフレッシュ・グループへのマテリアライズド・ビューの追加を終了します。

注意:
DBMS_REFRESH.ADDプロシージャを使用して、リフレッシュ・グループにマテリアライズド・ビューを追加することもできます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「リフレッシュ・グループの概要」

- 「リフレッシュ・グループのリフレッシュ」

- 「リフレッシュ・グループの構成」

- 「リフレッシュ・グループに関する情報の表示」

マテリアライズド・ビューの削除

マテリアライズド・ビューがマテリアライズド・ビュー・サイトで不要になった場合は、マテリアライズド・ビューを削除できます。可能な場合は、マテリアライズド・ビュー・サイトがマスター・サイトに接続できるときにマテリアライズド・ビューを削除する必要があります。マテリアライズド・ビューに関する情報は、ネットワーク接続が確立されたときにマスター・サイトから自動的に削除されます。

マテリアライズド・ビュー・サイトがマスター・サイトに接続できないときにマテリアライズド・ビューを削除する必要がある場合は、マテリアライズド・ビューに関する情報をマスター・サイトから手動で削除する必要があります。マテリアライズド・ビューを削除した後でこの情報を削除する方法は、「チュートリアル: マスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップ」を参照してください。

マテリアライズド・ビューを削除するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「マテリアライズド・ビュー」に関連付けられている数字をクリックします。

6. 「マテリアライズド・ビュー」ページで、検索ツールを使用して、削除するマテリアライズド・ビューをリストします。
すべてのマテリアライズド・ビューをリストするには、「スキーマ」フィールドと「オブジェクト名」フィールドを空白にしたまま「実行」をクリックします。

7. リストでマテリアライズド・ビューを選択します。
tdpii_mvs.gifの説明

8. 「削除」をクリックします。

9. 確認ページで、「はい」をクリックしてマテリアライズド・ビューを削除します。

注意:
SQL文DROP MATERIALIZED VIEWを使用して、マテリアライズド・ビューを削除することもできます。

関連項目:

- 「マテリアライズド・ビュー・レプリケーションの概要」

チュートリアル: マスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップ

マテリアライズド・ビュー・サイトがネットワーク上でマスター・サイトに接続していなかったときにマテリアライズド・ビューを削除した場合は、マスター・サイトでマテリアライズド・ビュー・サポートをクリーン・アップする必要があります。マテリアライズド・ビュー・サポートのクリーン・アップには、次のアクションが含まれます。

- マテリアライズド・ビューの登録解除
マテリアライズド・ビューを登録解除すると、マスター・サイトのデータ・ディクショナリ内のマテリアライズド・ビューに関する情報が削除されます。

- マテリアライズド・ビュー・ログのパージまたはマテリアライズド・ビュー・ログの削除
マテリアライズド・ビューのマスター表が他のマテリアライズド・ビューのマスター表である場合は、削除したマテリアライズド・ビューの情報のマテリアライズド・ビュー・ログをパージする必要があります。マテリアライズド・ビューのマスター表が他のマテリアライズド・ビューのマスター表でない場合は、マテリアライズド・ビュー・ログを削除できます。

Oracle Databaseは、マテリアライズド・ビュー・ログのどの行がマテリアライズド・ビューのリフレッシュ中に使用されたかを自動的に追跡し、これらの行をログからパージして、ログ・サイズが無限に増大しないようにします。複数のマテリアライズド・ビューが同じマテリアライズド・ビュー・ログを使用できるため、あるマテリアライズド・ビューのリフレッシュにすでに使用された行も、別のマテリアライズド・ビューをリフレッシュするのに必要です。Oracle Databaseは、すべてのマテリアライズド・ビューが行を使用するまで、その行をログから削除しません。マスター・サイトをクリーン・アップしないでマテリアライズド・ビューを削除した場合、そのマテリアライズド・ビューのマテリアライズド・ビュー・ログが非常に大きくなることがあります。

この項の例では、次のマテリアライズド・ビュー・サポートをクリーン・アップします。

- マスター・サイトはii1.example.comです。

- マテリアライズド・ビュー・サイトはii2.example.comです。

- マテリアライズド・ビューの名前はemployees_mvrです。

- マテリアライズド・ビューの所有者はhrです。

マスター・サイトでこのマテリアライズド・ビューのサポートをクリーン・アップするには:

1. コマンドラインでSQL*Plusを開き、マスター・サイトii1.example.comにレプリケーション管理者やSYSTEMなどの管理ユーザーとして接続します。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. マテリアライズド・ビューのマスター表のマテリアライズド・ビュー・ログをパージまたは削除します。

- マスター表が、削除されたマテリアライズド・ビュー以外のマテリアライズド・ビューのマスター表でもある場合は、削除されたマテリアライズド・ビューに関する情報のマテリアライズド・ビュー・ログをパージします。

BEGIN
DBMS_MVIEW.PURGE_MVIEW_FROM_LOG (
mviewowner => 'hr',
mviewname  => 'employees_mvr',
mviewsite  => 'ii2.example.com');
END;
/

- マスター表が、削除されたマテリアライズド・ビュー以外のマテリアライズド・ビューのマスター表でない場合は、マスター表のマテリアライズド・ビュー・ログを削除します。

DROP MATERIALIZED VIEW LOG ON hr.employees;

3. マテリアライズド・ビューを登録解除します。

BEGIN
DBMS_MVIEW.UNREGISTER_MVIEW (
mviewowner => 'hr',
mviewname  => 'employees_mvr',
mviewsite  => 'ii2.example.com');
END;
/

マテリアライズド・ビューの所有者、名前またはマテリアライズド・ビュー・サイトが不明な場合は、ALL_REGISTERED_MVIEWSデータ・ディクショナリ・ビューを問い合せてこの情報を取得できます。

関連項目:

- マテリアライズド・ビューの削除

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「マテリアライズド・ビュー・レプリケーションの概要」

マテリアライズド・ビュー・レプリケーション環境の監視

この項では、Enterprise ManagerとSQL*Plusを使用してマテリアライズド・ビュー・レプリケーション環境に関する情報を表示する方法を説明します。マテリアライズド・ビュー・サイトとマスター・サイトの両方でこの情報を表示します。

次の各項で、マテリアライズド・ビュー・レプリケーション環境の監視を説明します。

- データベースのレプリケーション・コンポーネントの概要の表示

- マテリアライズド・ビューに関する情報の表示

- 現在リフレッシュされているマテリアライズド・ビューの判断

- マテリアライズド・ビュー・グループに関する情報の表示

- 更新可能マテリアライズド・ビューの遅延トランザクションに関する情報の表示

- リフレッシュ・グループに関する情報の表示

- マスター・サイトのマテリアライズド・ビュー・ログの表示

- マスター・サイトのマテリアライズド・ビューの表示

関連項目:

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

- 「マテリアライズド・ビュー・レプリケーション環境の管理」

- 「マテリアライズド・ビュー・レプリケーション環境のトラブルシューティング」

データベースのレプリケーション・コンポーネントの概要の表示

Enterprise Managerの「アドバンスト・レプリケーション: 管理」ページには、データベースのレプリケーション・コンポーネントの概要が表示されます。

データベースのレプリケーション・コンポーネントの概要を表示するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

tdpii_adv_rep_main.gifの説明

各レプリケーション・コンポーネントは、現在のデータベースのコンポーネントの数量を示す数値に関連付けられています。数値をクリックすると、これらのコンポーネントに関する詳細情報が表示され、これらのコンポーネントを管理できます。

マテリアライズド・ビュー・サイトを表示している場合は、次のコンポーネントを監視できます。

- 「一般」セクションの「スケジュール済リンク」は、マテリアライズド・ビュー・サイトのスケジュールされたリンク数を示します。スケジュールされたリンクを使用して、遅延トランザクションを自動的にプッシュします。詳細は、「スケジュールされたリンクと遅延トランザクションの概要」を参照してください。

- 「マテリアライズド・ビュー・サイト」セクションの「マテリアライズド・ビュー・グループ」は、マテリアライズド・ビュー・サイトのマテリアライズド・ビュー・グループの数を示します。マテリアライズド・ビューをグループに編成すると、管理が簡単になります。また、マテリアライズド・ビューを更新可能にするには、マテリアライズド・ビュー・グループに入れる必要があります。マテリアライズド・ビュー・グループの詳細は、「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」を参照してください。

- 「マテリアライズド・ビュー・サイト」セクションの「マテリアライズド・ビュー」は、マテリアライズド・ビュー・サイトのマテリアライズド・ビューの数を示します。マテリアライズド・ビューの詳細は、「マテリアライズド・ビュー・レプリケーションの概要」を参照してください。

- 「マテリアライズド・ビュー・サイト」セクションの「リフレッシュ・グループ」は、マテリアライズド・ビュー・サイトのリフレッシュ・グループの数を示します。リフレッシュ・グループがリフレッシュされると、リフレッシュ・グループ内のマテリアライズド・ビューが同じ時点で一致します。詳細は、「リフレッシュ・グループの概要」を参照してください。

1つ以上のマテリアライズド・ビュー・サイトのマスター・サイトを表示している場合は、次のコンポーネントを監視できます。

- 「マルチマスター・レプリケーション」セクションの「マスター・グループ」は、マスター・サイトのマスター・グループの数を示します。マテリアライズド・ビュー・サイトのマテリアライズド・ビュー・グループは、マスター・グループに基づくことができます。マスター・グループとマテリアライズド・ビュー・グループの詳細は、「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」を参照してください。

- 「マスター・サイト」セクションの「マテリアライズド・ビュー・ログ」は、マスター・サイトのマテリアライズド・ビュー・ログの数を示します。マテリアライズド・ビュー・ログにより、マテリアライズド・ビューをリフレッシュできます。マテリアライズド・ビュー・ログの詳細は、「マテリアライズド・ビューのリフレッシュの概要」を参照してください。

- 「一般」セクションの「エラー・トランザクション」は、マスター・サイトのエラー・トランザクションの数を示します。エラー・トランザクションは、更新可能マテリアライズド・ビューがリフレッシュされ、解消できない競合が発生した場合に発生することがあります。詳細は、「競合と更新可能マテリアライズド・ビューの概要」を参照してください。

関連項目:

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

- 「マテリアライズド・ビュー・レプリケーション環境の管理」

マテリアライズド・ビューに関する情報の表示

マテリアライズド・ビューには、ある単一の時点での表の完全コピーまたは部分コピーが含まれます。レプリケーション環境では、通常、マテリアライズド・ビューはベースとなっている表とは異なるデータベースにあります。

マテリアライズド・ビューに関する情報を表示するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションの「マテリアライズド・ビュー」に関連付けられている数字をクリックして、「マテリアライズド・ビュー」ページを開きます。

6. 検索ツールを使用して、表示するマテリアライズド・ビューをリストします。すべてのマテリアライズド・ビューをリストするには、「スキーマ」フィールドと「オブジェクト名」フィールドを空白にしたまま「実行」をクリックします。
tdpii_mvs.gifの説明

「マテリアライズド・ビュー」ページには、マスター表、マスター・サイト(「マスター・リンク」列内)、および最終リフレッシュ時刻を含め、リストされている各マテリアライズド・ビューに関する重要情報が表示されます。

7. マテリアライズド・ビューの詳細は、そのマテリアライズド・ビューを選択し、「表示」をクリックしてマテリアライズド・ビューを表示するページを開きます。

tdpii_view_mv.gifの説明

「マテリアライズド・ビューの表示: 」ページには、マテリアライズド・ビューに関する詳細情報が表示されます。情報は、「一般」、「リフレッシュ」、「記憶域」、「索引記憶域」、「オプション」および「マスター情報」の各セクションに編成されています。

注意:
マテリアライズド・ビューに関する情報を、ALL_MVIEWSデータ・ディクショナリ・ビューに問い合せることもできます。

関連項目:

- 「マテリアライズド・ビュー・レプリケーションの概要」

- 「マテリアライズド・ビュー・レプリケーション環境の管理」

現在リフレッシュされているマテリアライズド・ビューの判断

マテリアライズド・ビューをリフレッシュすると、マテリアライズド・ビューのデータがそのマスター表のデータと同期します。V$MVREFRESH動的パフォーマンス・ビューを問い合せて、どのマテリアライズド・ビューが現在リフレッシュされているかを判断できます。

マテリアライズド・ビューを含むデータベースを停止する前に、いずれかのマテリアライズド・ビューが現在リフレッシュされているかどうかを確認するのが最適です。いずれかのマテリアライズド・ビューがリフレッシュされている場合は、すべてのリフレッシュが完了するまで待ってから、データベースを停止します。

マテリアライズド・ビュー・サイトでどのマテリアライズド・ビューが現在リフレッシュされているかを判断するには:

1. SQL*Plusを開き、マテリアライズド・ビュー管理者としてマテリアライズド・ビュー・サイトに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 次の問合せを実行します。

COLUMN CURRMVOWNER HEADING 'Owner' FORMAT A15
COLUMN CURRMVNAME HEADING 'Materialized|View' FORMAT A25

SELECT CURRMVOWNER, CURRMVNAME FROM V$MVREFRESH;

出力は、次のようになります。

Materialized
Owner           View
--------------- -------------------------
HR              COUNTRIES_MV
HR              EMPLOYEES_MV

マテリアライズド・ビューの遅延トランザクションがマスターにプッシュされている場合、V$MVREFRESH動的パフォーマンス・ビューに、更新可能なマテリアライズド・ビューに関する情報は含まれません。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「マテリアライズド・ビューのリフレッシュ」

マテリアライズド・ビュー・グループに関する情報の表示

マテリアライズド・ビュー・グループを使用すると、論理的に関連するマテリアライズド・ビューを簡単に管理できます。たとえば、スキーマ内のすべてのマテリアライズド・ビューまたはアプリケーションによって使用されているすべてのマテリアライズド・ビューをマテリアライズド・ビュー・グループに追加できます。また、マテリアライズド・ビューを更新可能にするには、それらがマテリアライズド・ビュー・グループに属している必要があります。

マテリアライズド・ビュー・サイトのマテリアライズド・ビュー・グループに関する情報を表示するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「マテリアライズド・ビュー・グループ」に関連付けられている数字をクリックします。
「マテリアライズド・ビュー・グループ」ページが表示され、マテリアライズド・ビュー・サイトのマテリアライズド・ビュー・グループの名前がリストされます。

6. マテリアライズド・ビュー・グループに関する詳細情報を表示するには、マテリアライズド・ビュー・グループの名前をクリックして「マテリアライズド・ビュー・グループの表示」ページを開きます。

tdpii_view_mv_group.gifの説明

「マテリアライズド・ビュー・グループの表示」ページには、次の情報が含まれます。

- 「マスターへのリンク」フィールドには、データベース・リンクの名前。マスター・サイトには、マテリアライズド・ビュー・グループ内のマテリアライズド・ビューのマスター表が含まれます。

- 伝播により伝播スケジュールに応じたメッセージが送信されるため、「伝播モード」フィールドには「非同期」と表示されます。

- 「説明」フィールドには、グループに説明がある場合のマテリアライズド・ビュー・グループの説明。

- 「オブジェクト」セクションには、マテリアライズド・ビュー・グループ内のデータベース・オブジェクトのリストと各データベース・オブジェクトに関する情報

注意:
マテリアライズド・ビュー・グループに関する情報を、次のデータ・ディクショナリ・ビューに問い合せることもできます。

- ALL_REPGROUP

- ALL_REPSITES

関連項目:

- 「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」

- 「マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要」

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート」

更新可能マテリアライズド・ビューの遅延トランザクションに関する情報の表示

マテリアライズド・ビュー・サイトでは、遅延トランザクションには更新可能マテリアライズド・ビューに対する変更が含まれます。遅延トランザクションは、マテリアライズド・ビュー・サイトに格納されるため、マスター・サイトに送信でき、マスター表に適用できます。マテリアライズド・ビューの遅延トランザクションは、マテリアライズド・ビューがリフレッシュされると必ずプッシュされます。スケジュールされたリンクは、遅延トランザクションがリフレッシュ・プロセスに依存せずにマスター・サイトにいつプッシュされるかを決定します。

更新可能マテリアライズド・ビューの遅延トランザクションに関する情報を表示するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「一般」セクションの「遅延トランザクション」に関連付けられている数字をクリックして、「管理: 遅延トランザクション」ページを開きます。
tdpii_def_trans.gifの説明

「管理: 遅延トランザクション」ページには、トランザクションIDと、各遅延トランザクションに関する次の情報が表示されます。

- 「宛先」フィールドは、遅延トランザクションがプッシュされるマスター・サイトを示します。

- 「開始時間」フィールドは、マテリアライズド・ビュー・サイトの遅延トランザクション・キューに遅延トランザクションがいつ入れられたかを示します。

- 「コール数」フィールドは、通常はトランザクションで変更された個々の行数を示します。

6. 「トランザクションID」列でトランザクションIDをクリックして、「遅延トランザクション」ページを開き、トランザクションに関する詳細情報を表示します。
tdpii_def_tran.gifの説明

「遅延トランザクション」ページには、マテリアライズド・ビューと、そのマテリアライズド・ビューを変更した操作のタイプが表示されます。たとえば、REP_UPDATEは更新操作を表します。

7. 遅延トランザクション内の特定の変更に関する詳細情報を表示するには、変更を選択し、「詳細」をクリックします。
tdpii_def_change.gifの説明

このページには、マテリアライズド・ビュー内の各列が、元の値と、該当する場合には新しい値とともに表示されます。列に新しい値がある場合は、変更された列値を元の値から新しい値に変更します。

関連項目:

- 「スケジュールされたリンクと遅延トランザクションの概要」

- 「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」

- 「マテリアライズド・ビューを使用した読取り/書込みデータのレプリケート」

- 遅延トランザクションに関連するデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』を参照してください。

リフレッシュ・グループに関する情報の表示

リフレッシュ・グループをリフレッシュすると、リフレッシュ・グループ内のすべてのマテリアライズド・ビューが、ある一致した時点でリフレッシュされます。

マテリアライズド・ビュー・サイトのリフレッシュ・グループに関する情報を表示するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「リフレッシュ・グループ」に関連付けられている数字をクリックします。
「リフレッシュ・グループ」ページが表示されます。

6. 検索ツールを使用して、表示するリフレッシュ・グループをリストします。すべてのリフレッシュ・グループをリストするには、「スキーマ」フィールドと「オブジェクト名」フィールドを空白にしたまま「実行」をクリックします。
tdpii_refresh_groups.gifの説明

グループのリフレッシュ・ページには、マテリアライズド・ビュー・サイトのリフレッシュ・ビュー・グループの名前をリストします。これには、各リフレッシュ・グループの次の情報が含まれます。

- 「中断」列は、リフレッシュ・ジョブが正しく動作しているかどうかを示します。「いいえ」は、ジョブが正しく動作していることを意味します。「はい」は、ジョブが中断していることを意味します。リフレッシュ・グループのリフレッシュ試行が16回失敗すると、リフレッシュ・ジョブは中断しているとみなされます。リフレッシュ・ジョブが中断している場合は、「マテリアライズド・ビュー・リフレッシュの問題の修正」を参照してください。

- 「次の日付」列は、リフレッシュ・グループが次回自動的にリフレッシュされる日時を示します。

- 「間隔」列は、リフレッシュ・グループの自動リフレッシュ間隔を示します。

7. リフレッシュ・グループの詳細は、そのリフレッシュ・グループを選択し、「表示」をクリックして「リフレッシュ・グループの表示」ページを開きます。

tdpii_view_refresh_group.gifの説明

「リフレッシュ・グループの表示」ページには、リフレッシュ・グループに関する詳細情報が表示されます。情報は、「一般」、「リフレッシュ」および「マテリアライズド・ビュー」の各セクションに編成されています。

注意:
リフレッシュ・グループに関する情報を、ALL_REFRESHデータ・ディクショナリ・ビューに問い合せることもできます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「リフレッシュ・グループの概要」

- 「リフレッシュ・グループの構成」

- 「リフレッシュ・グループのリフレッシュ」

マスター・サイトのマテリアライズド・ビュー・ログの表示

マテリアライズド・ビュー・ログは、マテリアライズド・ビューの高速リフレッシュが可能になるようにマスター表に対する変更を追跡します。

マスター・サイトのマテリアライズド・ビュー・ログに関する情報を表示するには:

1. Enterprise Managerでは、レプリケーション管理者またはSYSTEMなどの管理ユーザーとしてマスター・サイトにログインします。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。

2. 「データ移動」をクリックして「データ移動」サブページを開きます。

3. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

4. 「マスター・サイト」セクションの「マテリアライズド・ビュー・ログ」に関連付けられている数字をクリックします。
「マテリアライズド・ビュー・ログ」ページが表示されます。

5. 検索ツールを使用して、表示するマテリアライズド・ビューをリストします。
すべてのマテリアライズド・ビュー・ログをリストするには、「スキーマ」フィールドと「オブジェクト名」フィールドを空白にしたまま「実行」をクリックします。

「マテリアライズド・ビュー・ログ」ページには、リストされている各マテリアライズド・ビュー・ログのスキーマ、基礎となるログ表およびマスター表がリストされます。

6. マテリアライズド・ビュー・ログの詳細は、そのマテリアライズド・ビュー・ログを選択し、「表示」をクリックして「マテリアライズド・ビュー・ログの表示」ページを開きます。

tdpii_view_mv_log.gifの説明

「マテリアライズド・ビュー・ログの表示」ページには、マテリアライズド・ビュー・ログに関する詳細情報が表示されます。情報は、「一般」、「オプション」および「記憶域」セクションに編成されています。

注意:
マテリアライズド・ビュー・ログに関する情報を、ALL_MVIEW_LOGSデータ・ディクショナリ・ビューに問い合せることもできます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「マスター・サイトでのマテリアライズド・ビュー・ログの構成」

- 「マテリアライズド・ビュー・ログが大きくなりすぎるのを防止」

- 「チュートリアル: マスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップ」

マスター・サイトのマテリアライズド・ビューの表示

マテリアライズド・ビュー・サイトでマテリアライズド・ビューを構成すると、マテリアライズド・ビューがマスター・サイトに登録されます。ALL_REGISTERED_MVIEWSデータ・ディクショナリ・ビューを問い合せて、マスター・サイトに登録されている各マテリアライズド・ビューに関する次の情報を表示できます。

- マテリアライズド・ビューの所有者

- マテリアライズド・ビューの名前

- マテリアライズド・ビューを含むマテリアライズド・ビュー・サイト

- マテリアライズド・ビューが更新可能か読取り専用か

この情報を表示するには:

1. SQL*Plusを開き、レプリケーション管理者やSYSTEMなどの管理ユーザーとしてマスター・サイトに接続します。デフォルトでは、レプリケーション管理者のユーザー名はrepadminです。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. 次の問合せを実行します。

COLUMN OWNER HEADING 'Owner' FORMAT A20
COLUMN NAME HEADING 'Name' FORMAT A20
COLUMN MVIEW_SITE HEADING 'Materialized|View Site' FORMAT A15
COLUMN UPDATABLE HEADING 'Updatable?' FORMAT A10

SELECT OWNER, NAME, MVIEW_SITE, UPDATABLE
FROM ALL_REGISTERED_MVIEWS;

出力は、次のようになります。

Materialize
Owner                Name                 View Site       Updatable?
-------------------- -------------------- --------------- ----------
HR                   COUNTRIES_MV         II2.EXAMPLE.COM YES
HR                   DEPARTMENTS_MV       II2.EXAMPLE.COM YES
HR                   EMPLOYEES_MV         II2.EXAMPLE.COM YES
HR                   JOBS_MV              II2.EXAMPLE.COM YES
HR                   JOB_HISTORY_MV       II2.EXAMPLE.COM YES
HR                   LOCATIONS_MV         II2.EXAMPLE.COM YES
HR                   REGIONS_MV           II2.EXAMPLE.COM YES

関連項目:

- 「マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要」

- 「レプリケーション・グループと更新可能マテリアライズド・ビューの概要」

マテリアライズド・ビュー・レプリケーション環境のトラブルシューティング

この項では、マテリアライズド・ビュー・レプリケーション環境で最も一般的な問題について説明します。これらの問題の修正方法も説明します。

次の各項で、マテリアライズド・ビュー・レプリケーション環境のトラブルシューティングを説明します。

- マテリアライズド・ビュー・リフレッシュの問題の修正

- マテリアライズド・ビュー・ログが大きくなりすぎるのを防止

関連項目:

- 『Oracle Databaseアドバンスト・レプリケーション』

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

- 「マテリアライズド・ビュー・レプリケーション環境の管理」

- 「マテリアライズド・ビュー・レプリケーション環境の監視」

マテリアライズド・ビュー・リフレッシュの問題の修正

マテリアライズド・ビュー・サイトで1つ以上のマテリアライズド・ビューをリフレッシュできない場合の一般的な原因と解決方法を次に示します。

- ネットワークの問題により、1つ以上のマテリアライズド・ビューをリフレッシュできません。複数のリフレッシュ・グループと複数のマテリアライズド・ビューがマテリアライズド・ビュー・サイトにあり、いずれもリフレッシュできない場合は、ネットワークの問題が最も可能性の高い原因です。この場合は、ネットワークの問題を解決し、関連するマテリアライズド・ビューをリフレッシュします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

- マテリアライズド・ビューのマスター・サイトが停止しています。マスター・サイトが開いていない場合は、マテリアライズド・ビューをリフレッシュできません。複数のマスター・サイトを使用するマテリアライズド・ビューのあるマテリアライズド・ビュー・サイトがあり、特定のマスター・サイトのマテリアライズド・ビューのみリフレッシュできない場合は、マスター・サイトの問題が最も可能性の高い原因です。この場合は、マスター・サイトでデータベースをチェックします。停止している場合は起動し、関連するマテリアライズド・ビューをリフレッシュします。データベースの開始の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

- データベース・リンクが中断しています。マテリアライズド・ビュー・グループ内のすべてのマテリアライズド・ビューをリフレッシュできない場合は、マテリアライズド・ビューのリフレッシュに使用されているデータベース・リンクが中断している可能性があります。データベース・リンクが中断している場合は、データベース・リンクを削除してから再び作成することにより、問題を解決できます。

中断しているデータベース・リンクを再作成するには:

1. Enterprise ManagerにSYSTEMなどの管理ユーザーとしてログインします。

2. 「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「データベース・オブジェクト」セクションの「データベース・リンク」をクリックします。
「データベース・リンク」ページが表示されます。

5. 検索ツールを使用して、マテリアライズド・ビューで使用されるデータベース・リンクをリストします。
データベース・リンク名は、マテリアライズド・ビューのマスター・サイトのグローバル名と同じである必要があります。

6. データベース・リンクを選択します。

7. 「表示」をクリックします。

8. データベース・リンクを表示するページで「テスト」をクリックして、データベース・リンクがアクティブかどうかを確認します。アクティブな場合、マテリアライズド・ビューのリフレッシュの問題は、別の問題が原因です。データベース・リンクがアクティブでない場合は、手順9から13に従って削除し、再作成します。

9. 「OK」をクリックして「データベース・リンク」ページに戻ります。

10. データベース・リンクを選択します。

11. 「削除」をクリックします。

12. 確認ページで「はい」をクリックしてデータベース・リンクを削除します。

13. 「チュートリアル: データベース・リンクの作成」の手順に従って、このデータベース・リンクを再作成します。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「マテリアライズド・ビューのリフレッシュ」

- 『Oracle Databaseアドバンスト・レプリケーション』

マテリアライズド・ビュー・ログが大きくなりすぎるのを防止

マテリアライズド・ビュー・ログは、マスター・サイトのマスター表に対する変更を追跡します。マテリアライズド・ビューに高速リフレッシュが実行される場合、マテリアライズド・ビュー・ログ内の変更はマテリアライズド・ビューに適用されます。マテリアライズド・ビュー・ログを使用するすべてのマテリアライズド・ビューに変更が適用されると、変更がマテリアライズド・ビュー・ログから削除されます。

マテリアライズド・ビュー・ログは、マテリアライズド・ビュー・ログを使用する1つ以上のマテリアライズド・ビューが比較的長期間リフレッシュされない場合に非常に大きくなることがあります。この状況により、他のマテリアライズド・ビューのリフレッシュ・パフォーマンスが低下することがあります。次に、一般的な原因と解決方法を示します。

- ネットワークの問題により、マテリアライズド・ビュー・ログを使用する1つ以上のマテリアライズド・ビューをリフレッシュできません。この場合は、ネットワークの問題を解決し、関連するマテリアライズド・ビューをリフレッシュします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

- マテリアライズド・ビュー・サイトがネットワークに接続されていないときに、マテリアライズド・ビュー・サイトでマテリアライズド・ビューが削除されました。マテリアライズド・ビューが削除され、ネットワーク接続が使用可能な場合は、マテリアライズド・ビューに関する情報がマスター・サイトから自動的に削除されます。一方、ネットワーク接続が使用可能でない場合は、マテリアライズド・ビューに関する情報がマスター・サイトに残り、手動でクリーン・アップする必要があります。詳細は、「チュートリアル: マスター・サイトでのマテリアライズド・ビュー・サポートのクリーン・アップ」を参照してください。

- マテリアライズド・ビューが十分な頻度でリフレッシュされていません。マテリアライズド・ビューは、手動でリフレッシュするか、リフレッシュ・グループ内にある場合は自動的にリフレッシュできます。
マテリアライズド・ビューを手動でリフレッシュする場合に、マテリアライズド・ビュー・ログが非常に大きくなる場合は、より頻繁にリフレッシュする必要があります。詳細は、「マテリアライズド・ビューのリフレッシュ」を参照してください。

マテリアライズド・ビューが、十分な頻度でリフレッシュされていないリフレッシュ・グループにある場合は、リフレッシュ・グループのリフレッシュ間隔を短くできます。

リフレッシュ・グループのリフレッシュ間隔を変更するには:

1. Enterprise Managerで、マテリアライズド・ビュー・サイトにマテリアライズド・ビュー管理者としてログインします。マテリアライズド・ビュー管理者のデフォルトのユーザー名はmvadminです。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・レプリケーション」セクションの「管理」をクリックします。
「アドバンスト・レプリケーション: 管理」ページが表示され、「概要」サブページが表示されます。

5. 「マテリアライズド・ビュー・サイト」セクションで、「リフレッシュ・グループ」に関連付けられている数字をクリックします。

6. 「グループのリフレッシュ」ページで、検索ツールを使用して、変更するリフレッシュ・グループをリストします。

7. リフレッシュ・グループを選択します。

8. 「編集」をクリックします。
「リフレッシュ・グループの編集」ページが表示され、「一般」サブページが表示されます。

tdpii_edit_ref_grp.gifの説明

9. 「リフレッシュ」セクションで、「間隔」フィールドの「変更」をクリックします。

10. 「毎」フィールドとリストを使用して間隔を短くします。

11. 「OK」をクリックします。

12. 「リフレッシュ・グループの編集」ページで、「適用」をクリックして変更を保存します。

注意:
DBMS_REFRESH.CHANGEプロシージャを使用して、リフレッシュ・グループのリフレッシュ間隔を変更することもできます。

関連項目:

- 「マテリアライズド・ビューのリフレッシュの概要」

- 「リフレッシュ・グループの概要」

- 「マスター・サイト、マスター表およびマテリアライズド・ビュー・サイトの概要」

- 「マスター・サイトでのマテリアライズド・ビュー・ログの構成」

- 『Oracle Databaseアドバンスト・レプリケーション』

9 Oracle Streams Advanced Queuingを使用したメッセージ送信

この章では、データベースおよびアプリケーション間でメッセージを送信するOracle Streamsアドバンスト・キューイング(AQ)環境の構成方法を説明します。この項では、構成後のメッセージング環境の管理、監視およびトラブルシューティングについても説明します。

この章は次の項で構成されています。

- メッセージ機能の概要

- メッセージ機能の準備

- チュートリアル: Oracle Database間でのメッセージの送信

- チュートリアル: メッセージ通知の構成

- キューの変更

- キュー表の変更

- 伝播の変更

- メッセージング環境の監視

- メッセージング環境のトラブルシューティング

メッセージ機能の概要

メッセージング環境は、情報をキューに格納します。エンキューは、メッセージをキューに置くプロセスです。デキューは、メッセージをキューから取得するプロセスです。

キュー内の情報は、タスクを完了するために使用されることも、アプリケーションによって処理されることもあります。メッセージング環境では、アプリケーションの非同期な相互通信が可能です。つまり、アプリケーションは他のアプリケーションが特定のタスクを完了するまで待機する必要がありません。非同期通信の重要性は、メッセージング・システムがそれを利用するアプリケーションの機能に最小の影響しか与えないという点にあります。

たとえば、他のアプリケーションとの通信が必要な場合、アプリケーションはメッセージをキューに置くことができます。メッセージは、他方のアプリケーションによって取得されるまでキュー内に格納されます。実際、メッセージのエンキュー時に他方のアプリケーションが実行されていなくても、メッセージは後で処理されます。メッセージは、取得側アプリケーションにアクションの実行を指示する場合も、あるいは取得側アプリケーションによる処理が必要な情報を含んでいる場合もあります。

組織に、相互通信が必要な複数の異なるシステムがある場合は、メッセージング環境が適切なソリューションになります。様々なシステムが異なる場所にある場合があり、一部は他のシステムより古く、一部は異なるプラットフォームで稼働していることがあります。メッセージングは、これらのシステム間で重要な情報を転送する標準的な信頼性のある方法を提供します。

Oracle Databaseのメッセージング機能は、Oracle Streams Advanced Queuing(AQ)と呼ばれます。Oracle Streams AQはメッセージ機能の利点を提供するとともに、メッセージング・システムとOracle Databaseを統合します。したがって、Oracle Streams AQはOracle Databaseの信頼性、スケーラビリティ、セキュリティ、管理性をもたらします。

Oracle Streams AQを使用して、単一データベース内のキュー間または異なるデータベースのキュー間でメッセージを送信するメッセージング環境を構成できます。キュー間でメッセージを送信するメッセージング環境には、次のコンポーネントが含まれます。

- キュー: メッセージをメッセージング環境に格納する抽象ストレージ・ユニット

- プロデューサ: メッセージをエンキューするユーザーまたはアプリケーション

- 伝播: 設定されたスケジュールに従って、あるキューから別のキューにメッセージをコピーするOracle Schedulerジョブ

- コンシューマ: メッセージをデキューするユーザーまたはアプリケーション

シングル・ユーザーまたはアプリケーションは、プロデューサおよびコンシューマとして動作できます。メッセージング環境では、サブスクライバおよびメッセージ・クライアントは、コンシューマです。サブスクライバおよびメッセージ・クライアントは、キューからメッセージをデキューすることを許可されたメカニズムで、ルールを使用してどのメッセージをデキューするかを判断できます。

Oracle Streams AQは多くの機能を提供し、その一部はこのマニュアルの対象外です。次の各項で、Oracle Streams AQのいくつかの機能の概要を示します。

- メッセージの順序付けの概要

- メッセージ・モードの概要

- メッセージ通知の概要

- 伝播の概要

- Oracle Messaging Gatewayの概要

関連項目:

- 「データベース間のメッセージの送信時期」

- メッセージ機能クライアントの詳細は、『Oracle Streams概要および管理』を参照してください。

- サブスクライバおよびOracle Streams AQのすべての他の機能の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

メッセージの順序付けの概要

メッセージの順序付けでは、メッセージがデキューされる順序を決定します。Oracle Streams Advanced Queuing(AQ)には、メッセージの順序付けに次のオプションが用意されています。

- エンキュー時間: メッセージは、エンキューされたのと同じ順序でデキューされます。このオプションは、先入れ先出し(FIFO)の順序付けと呼ばれることがあります。たとえば、銀行アプリケーションは、多くの場合にこの順序付けを使用して、財務トランザクションが常に発生した時刻に従って順序付けされるようにします。

- 優先度: 優先度は、エンキュー中にメッセージに対して指定され、メッセージは優先度に基づいてデキューされます。たとえば、輸送会社では、一部の荷物の優先度が他よりも高いため、この順序付けを使用することがあります。

- コミット時間: メッセージは、メッセージをエンキューしたトランザクションがコミットされた時刻に基づいてデキューされます。通常、コミット時間順序付けは、メッセージによってトランザクション依存関係のあるデータベース変更が行われる場合に使用されます。たとえば、会社の売上げを処理するアプリケーションは、メッセージによって依存性を持つ複数のデータベース表が変更される場合にコミット時間順序付けを使用できます。

メッセージ・モードの概要

Oracle Streams Advanced Queuing(AQ)では、次のメッセージ・モードがサポートされています。

- 永続メッセージ機能: メッセージは、ディスク上のキュー表と呼ばれるデータベース表に常に格納されます。この記憶域のタイプは、永続キュー記憶域と呼ばれることがあります。

- バッファ・メッセージ機能: メッセージは、メモリーに格納されますが、一定の条件でキュー表にあふれることがあります。この記憶域のタイプは、バッファ・キュー記憶域と呼ばれることがあります。

バッファ・メッセージ機能は、より高いパフォーマンスを提供しますが、メッセージ保持などの一部のメッセージ機能をサポートしません。メッセージ保持では、デキュー後にメッセージがキュー表に保持される時間を指定できます。また、データベースが予期せず停止した場合、永続メッセージはディスクに保持されますが、バッファ・メッセージはメモリーに格納されているため失われることがあります。

メッセージ保留は、一部の組織で必要な場合がある監査証跡を提供します。たとえば、メッセージがキュー表に格納されている間でも、ユーザーおよびアプリケーションは問合せを実行してそのメッセージに関する情報を収集することができます。その例として、販売アプリケーションでは販売情報を収集して注文に関するレポートを生成できます。

関連項目:

- 永続メッセージ機能とバッファ・メッセージ機能の相違点については、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

メッセージ通知の概要

Oracle Streams Advanced Queuing(AQ)には、対象のメッセージがエンキューされたときにアプリケーションおよびユーザーに通知する機能があります。 通知によって、アプリケーションおよびユーザーは、作業中にキューで新しいメッセージを頻繁にチェックする必要がなくなります。アプリケーションへの通知の送信には、PL/SQL、Java Message Service(JMS)またはOracle Call Interface(OCI)のコールバック機能を使用できます。通知は、指定した電子メール・アドレスやHTTPポストに送信することもできます。また、通知はRAWデータ型形式でもXML形式でも表示することができます。通知を受信する際、アプリケーションおよびユーザーはデータベースに接続している必要はありません。対象のメッセージがキューに出現したことを通知されてからデータベースに接続し、キューをチェックできます。

関連項目:

- 「メッセージ機能の準備」

- 「チュートリアル: メッセージ通知の構成」

伝播の概要

伝播は、あるキューから別のキューにメッセージを送信するプロセスです。これらのキューは同じデータベースにあっても異なるデータベースにあってもかまいません。伝播はメッセージング・システムに必須の要素ではありません。伝播により、アプリケーションは同じデータベースまたは同じキューに接続されていなくても相互に通信できます。また、複数の伝播を使用して、あるキューから他の複数のキューに同じメッセージを送信できます。

伝播では、データベース・リンクを使用して、異なるデータベースのキュー間でメッセージを送信します。データベース・リンクは、Oracle Databaseから別のデータベースへの1方向通信パスを定義するポインタです。伝播は、伝播ジョブと呼ばれるOracle Schedulerジョブによって実行されます。伝播スケジュールによって、伝播がメッセージを送信する頻度が決定され、各伝播ジョブのスケジュールを制御できます。

Oracle Streams Advanced Queuing(AQ)は、キューとキューの間(キュー・ツー・キュー)でも、キューとデータベース・リンクの間(キュー・ツーdblink)でも伝播をサポートしています。 キュー・ツー・キュー伝播では、常に独自の排他的な伝播ジョブを使用してソース・キューから宛先キューにメッセージを伝播します。そのため、キュー・ツー・キューの各伝播スケジュールは個別の管理が可能です。複数のキュー・ツー・キュー伝播では、1つのデータベース・リンクを使用できます。1つのキューからメッセージを送信する複数の伝播をファイングレイン制御する際に、キュー・ツー・キュー伝播を使用し、各伝播が異なるスケジュールを使用する必要があります。

一方、キュー・ツーdblink伝播の場合は、同じデータベース・リンクを使用する同じソース・キューからのキュー・ツーdblink伝播の間で、伝播ジョブが共有されます。複数の伝播によって、1つのソース・キューからリモート・データベースの複数のキューにメッセージが送信される場合、同じ伝播スケジュールが共有されます。伝播スケジュールに変更があれば、データベース・リンクを使用する同じソース・キューからのキュー・ツーdblink伝播のすべてに影響します。1つのキューからメッセージを送信する複数の伝播を一括処理する際、キュー・ツーdblink伝播を使用し、すべての伝播が同じスケジュールを使用する必要があります。

関連項目:

- 「メッセージ機能の準備」

- 「チュートリアル: Oracle Database間でのメッセージの送信」

- 「伝播の変更」

- 「チュートリアル: データベース・リンクの作成」

- 『Oracle Streams概要および管理』

Oracle Messaging Gatewayの概要

Oracle Messaging Gatewayは、Oracle Streams Advanced Queuing(AQ)メッセージング・システムを、IBM Websphere MQ(以前はMQSeriesと呼ばれていました)やTIBCO Rendezvousなどの他のメッセージング・システムと統合します。この統合により、Oracle Streams AQを使用するOracle Databaseアプリケーションは、Oracle以外のメッセージング・システムを使用する他のアプリケーションと、双方向でシームレスに通信できます。

Messaging Gatewayでは、ゲートウェイ・エージェントを使用して、Oracle Streams AQキューからOracle以外のメッセージング・システムのキューにメッセージを送信します。また、ゲートウェイ・エージェントによってOracle Streams AQキューがOracle以外のメッセージング・システムからメッセージを受信できるようになります。

Messaging Gatewayは、Oracle以外のメッセージング・システムに直接マッピングできるOracle Streams AQタイプの自動タイプ変換をサポートします。直接マッピングできないタイプの場合は、カスタム変換を定義してタイプをマッピングできます。一度定義されると、カスタム変換は伝播の間実行されます。

Messaging Gatewayは、メッセージ・システムのネイティブ・メッセージの書式をサポートします。Oracle Streams AQメッセージには、RAWまたはOracle Streams AQにサポートされるOracleのオブジェクト型ペイロードが含まれます。IBM Websphere MQメッセージは、テキストまたはバイト形式のメッセージです。TIBCO Rendezvousメッセージは、TIBCO Rendezvousワイヤ書式のデータ型です。

Oracle Streams AQキューには、インターネットを通じて安全にアクセスできます。Messaging Gatewayは、安全なインターネット対応メッセージングをOracle Streams AQキューとOracle以外のメッセージング・システムのキューの間に提供します。

関連項目:

- Oracle Messaging Gatewayとその使用方法の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

メッセージ機能の準備

この項では、メッセージング環境用のデータベースの準備に必要なアクションについて説明します。

メッセージング環境用にデータベースを準備するには:

1. メッセージング環境に関係する各データベースでGLOBAL_NAMES初期化パラメータをTRUEに設定します。方法については、「GLOBAL_NAMES初期化パラメータをTRUEに設定」を参照してください。

2. ネットワーク接続を構成して、メッセージを送信するデータベースがメッセージを受信するデータベースと通信できるようにします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

3. メッセージング環境に関係する各データベースでOracle Streams管理者を構成します。方法については、「チュートリアル: Oracle Streams管理者の構成」を参照してください。

4. Oracle Streamsプールが、メッセージング環境に対して作成されるキューを収容するのに十分な大きさであることを確認します。各キューには、少なくとも10MBのメモリーが必要です。Oracle Streamsプールは、システム・グローバル領域(SGA)の一部です。MEMORY_TARGET初期化パラメータ(自動メモリー管理)、SGA_TARGET初期化パラメータ(自動共有メモリー管理)またはSTREAMS_POOL_SIZE初期化パラメータを設定することでOracle Streamプールを管理できます。Oracle Streamsプールの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

関連項目:

- 「メッセージ機能の概要」

- 「チュートリアル: Oracle Database間でのメッセージの送信」

- 「チュートリアル: メッセージ通知の構成」

チュートリアル: Oracle Database間でのメッセージの送信

この項の例には、本社のOracle Databaseに注文を入力する企業が関係します。注文が入力されると、企業はメッセージング・システムを使用して、注文IDと注文日を異なる場所の倉庫にあるOracle Databaseに送信します。これらのメッセージは、倉庫の従業員に注文を通知し、従業員が注文を履行して出荷できるようにします。倉庫の従業員は、本社のデータにアクセスして、特定の注文に関する詳細情報を検索できます。

この例では、注文入力スキーマとしてoeサンプル・スキーマを使用します。 oeサンプル・スキーマはOracle Databaseとともにデフォルトでインストールされます。

この例では、本社のデータベースのグローバル名はii1.example.comで、倉庫のデータベースのグローバル名はii2.example.comです。ただし、例を完了するために、ご使用の環境の2つのデータベースに置き換えることもできます。

図9-1に、この例で作成するメッセージング環境の概要を示します。

図9-1 データベース間でメッセージを送信するメッセージング環境の例

「図9-1 データベース間でメッセージを送信するメッセージング環境の例」の説明

この例を開始する前に、「メッセージ機能の準備」で説明されているタスクを完了します。

注文に関するメッセージをii1.example.comデータベースからii2.example.comデータベースに送信するメッセージング・システムを構成するには:

- タスク1: 各データベースでのメッセージ・タイプの作成

- タスク2: キューの構成とキュー間の伝播の構成

- タスク3: メッセージ・エンキュー・メカニズムの構成

- タスク4: メッセージをデキューするためのメッセージ・クライアントの構成

- タスク5: メッセージのエンキュー

- タスク6: メッセージのデキュー

関連項目:

- 「データベース間のメッセージの送信時期」

タスク1: 各データベースでのメッセージ・タイプの作成

注文について送信する情報を定義するユーザー定義タイプを作成します。この例では、注文IDと注文日を含むメッセージ用にstrmadmin.order_id_dateタイプを作成します。

各データベースにstrmadmin.order_id_dateタイプを作成するには:

1. まだ準備していない場合は、メッセージ機能用に環境を準備します。詳細は、「メッセージ機能の準備」を参照してください。

2. Oracle Enterprise Managerで、Oracle Streams管理者としてii1.example.comデータベースにログインします。

3. 「データベース」ホームページに移動します。

4. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

5. 「ユーザー定義タイプ」セクションの「オブジェクト・タイプ」をクリックします。

6. 「オブジェクト・タイプ」ページで、「作成」をクリックして「オブジェクト・タイプの作成」ページを開きます。
tdpii_create_object_type.gifの説明

7. 「名前」フィールドにorder_id_dateと入力します。

8. 「スキーマ」フィールドでstrmadminが選択されていることを確認します。

9. 「属性」セクションで「データ型」に対して「事前定義済タイプ」が選択されていることを確認します。

10. 「属性」セクションで「追加」をクリックして、「事前定義済タイプ属性の追加」ページを開きます。
tdpii_add_type_attribute.gifの説明

11. 属性を追加するには:

1. 「名前」フィールドにorder_idと入力します。

2. 「タイプ」ではNUMBERを選択します。

3. 「長さ」フィールドに12と入力します。

4. 「OK」をクリックします。

12. 「オブジェクト・タイプの作成」ページの「属性」セクションで「事前定義済タイプ」が選択されていることを確認します。

13. 「属性」セクションで「追加」をクリックして、「事前定義済タイプ属性の追加」ページを開きます。

14. 属性を追加するには:

1. 「名前」フィールドにorder_dateと入力します。

2. 「タイプ」ではVARCHAR2を選択します。

3. 「長さ」フィールドに100と入力します。

4. 「OK」をクリックします。

15. 「オブジェクト・タイプの作成」ページで、「OK」をクリックしてタイプを作成します。

16. Enterprise ManagerのOracle Streams管理者としてii2.example.comデータベースにログインします。

17. ii2.example.comデータベースで手順3から15を完了して、両方のデータベースがstrmadmin.order_id_dateタイプを持つようにします。

18. この拡張例を続行するには、「タスク2: キューの構成とキュー間の伝播の構成」の手順に進んでください。

注意:
SQL文CREATE TYPEを使用して、タイプを作成することもできます。

タスク2: キューの構成とキュー間の伝播の構成

各データベースにキューを作成し、注文に関するメッセージをii1.example.comデータベースのキューからii2.example.comデータベースのキューに送信する伝播を作成します。

伝播を作成するには:

1. streams_queueという名前のキューをii1.example.comデータベースとii2.example.comデータベース両方のOracle Streams管理者のスキーマに作成します。方法については、「ANYDATAキューの作成」を参照してください。

2. ii2.example.comという名前のデータベース・リンクをii1.example.comのOracle Streams管理者スキーマに作成します。Oracle Streams管理者スキーマに接続するデータベース・リンクをii2.example.comに構成します。データベース・リンクのサービス名は、ii2.example.comである必要があります。詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

3. Oracle Enterprise Managerで、Oracle Streams管理者としてii1.example.comデータベースにログインします。

4. 「データベース」ホームページに移動します。

5. 「高可用性」の下にある「Streamsコンポーネント」の番号リンクをクリックします。

6. 「レプリケーションの管理」ページで、「関連リンク」の「伝播の設定」をクリックして「伝播の設定」ページを開きます。
tdpii_setup_propgation.gifの説明

7. 「伝播名」フィールドにsend_ordersと入力します。

8. 「ソース・キュー」フィールドにstrmadmin.streams_queueと入力します。このキューは、注文に関するメッセージがエンキューされるii1.example.comデータベースのキューです。

9. 手順2で作成したデータベース・リンクの名前を「接続先データベース・リンク」フィールドに入力します。この例では、データベース・リンク名はii2.example.comです。

10. 「宛先キュー」フィールドで、strmadmin.streams_queueを入力します。これは注文に関するメッセージが送信されるii2.example.comデータベースのキューです。

11. 「ポジティブ・ルール・セット」フィールドと「ネガティブ・ルール・セット」フィールドは空のままにします。伝播にルール・セットがない場合は、ソース・キュー内のすべてのメッセージが宛先キューに送信されます。

12. 「キューからキューへの伝播」オプションを有効にします。

13. 「OK」をクリックして伝播を作成します。

14. この拡張例を続行するには、「タスク3: メッセージ・エンキュー・メカニズムの構成」の手順に進んでください。

注意:
DBMS_PROPAGATION_ADM.CREATE_PROPAGATIONプロシージャを使用して、伝播を作成することもできます。

タスク3: メッセージ・エンキュー・メカニズムの構成

メッセージング・システム内のメッセージをエンキューするメカニズムを構成します。通常、アプリケーションは、別のアプリケーションによってデキューされ、処理されるメッセージを作成し、エンキューします。簡略化のために、この例ではenqueue_ordersというトリガーを作成して、注文の注文IDと注文日を含むメッセージをエンキューします。トリガーは、注文がoe.orders表に挿入されたときに起動します。

メッセージ・エンキュー・メカニズムを構成するには:

1. Oracle Streams管理者に、DBMS_STREAMS_MESSAGINGパッケージに対するEXECUTE権限を付与します。

この例では、DBMS_STREAMS_MESSAGINGパッケージのENQUEUEプロシージャを実行するトリガーを構成します。トリガー内のこのプロシージャを実行するユーザーには、プロシージャを含むパッケージに対する明示的なEXECUTE権限が必要です。ロールを通じて権限を付与することはできません。したがって、Oracle Streams管理者にはパッケージに対する明示的なEXECUTE権限を付与する必要があります。

1. strmadminユーザーに権限を付与できる管理ユーザーとして、Enterprise Managerにログインします。たとえば、SYSDBA権限を持つユーザーとしてログインできます。この例では、ii1.example.comデータベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「サーバー」をクリックして「サーバー」サブページを開きます。

4. 「セキュリティ」セクションで「ユーザー」をクリックします。
「ユーザー」ページが表示されます。

5. STRMADMINユーザーを選択します。

6. 「編集」をクリックします。
「ユーザーの編集」ページが表示され、「一般」サブページが表示されます。

7. 「オブジェクト権限」をクリックして「オブジェクト権限」サブページを開きます。
tdpii_edit_user.gifの説明

8. 「オブジェクト・タイプの選択」リストの「パッケージ」を選択します。

9. 「追加」をクリックしてパッケージ・オブジェクト権限の追加ページを開きます。
tdpii_add_package_privs.gifの説明

10. 「パッケージ・オブジェクトの選択」フィールドにSYS.DBMS_STREAMS_MESSAGINGと入力します。

11. 「使用可能な権限」リストから「選択した権限」リストにEXECUTEを移動します。

12. 「OK」をクリックして権限を追加します。

13. 「適用」をクリックして権限を付与します。

14. Enterprise Managerからログアウトします。

注意:
SQL文GRANTを使用して、ユーザーに権限を付与することもできます。

2. oe.orders表に変更があったときメッセージを自動的にエンキューするトリガーを、ii1.example.comデータベースに作成します。

1. Oracle Streams管理者としてEnterprise Managerのii1.example.comデータベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「プログラム」セクションで「トリガー」をクリックします。

5. 「トリガー」ページで、「作成」をクリックします。
「トリガーの作成」ページが表示され、「一般」サブページが表示されます。

tdpii_create_trigger.gifの説明

6. 「名前」フィールドにenqueue_ordersと入力します。

7. 「スキーマ」フィールドでstrmadminが入力されていることを確認します。

8. 「トリガー本体」フィールドに次のように入力します。

DECLARE
message  strmadmin.order_id_date;
BEGIN
message := strmadmin.order_id_date(
order_id   => :NEW.order_id,
order_date => TO_CHAR(:NEW.order_date));
DBMS_STREAMS_MESSAGING.ENQUEUE (
queue_name => 'strmadmin.streams_queue',
payload    => ANYDATA.CONVERTOBJECT(message));
END;

9. 「イベント」をクリックして「イベント」サブページを開きます。

10. 「対象オブジェクト」リストで「表」が選択されていることを確認します。

11. 「表(Schema.Table)」フィールドにoe.ordersと入力します。

12. 「起動タイミング」では「後」を選択します。

13. 「イベント」では「挿入」を選択します。この例では、メッセージが既存の注文に対する変更ではなく新しい注文を追跡するため、「挿入」のみが選択されている必要があります。

14. 「詳細」をクリックします。

15. 「行レベル・トリガー」を選択します。

16. 「参照」セクションの「旧値(OLD AS)」フィールドにOLDを入力します。

17. 「参照」セクションの「新規値(NEW AS)」フィールドにNEWを入力します。

18. 「OK」をクリックしてトリガーを作成します。

注意:
SQL文CREATE TRIGGERを使用して、トリガーを作成することもできます。

3. この拡張例を続行するには、「タスク4: メッセージをデキューするためのメッセージ・クライアントの構成」の手順に進んでください。

タスク4: メッセージをデキューするためのメッセージ・クライアントの構成

メッセージング・システム内のメッセージをデキューするメカニズムを構成します。通常、アプリケーションは別のアプリケーションによって作成されたメッセージをデキューして処理します。簡略化のために、この例ではdequeue_ordersというPL/SQLプロシージャを作成して、注文の注文IDおよび注文日を含むメッセージをデキューします。この例ではプロシージャをコールしてメッセージをデキューしますが、アプリケーションはこのようなプロシージャを定期的に実行できます。

メッセージをデキューするためのメッセージ・クライアントを構成するには:

1. ii2.example.comデータベースのOracle Streams管理者に、SYS.DBMS_STREAMS_MESSAGINGパッケージに対するEXECUTE権限を付与します。ii1.example.comデータベースのOracle Streams管理者にこの権限を付与する例は、「タスク3: メッセージ・エンキュー・メカニズムの構成」の手順1を参照してください。

2. コマンドラインでSQL*Plusを開き、Oracle Streams管理者としてii2.example.comデータベースに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

3. メッセージ・クライアントを作成して、Oracle Streams管理者がstreams_queueキューからメッセージをデキューできるようにします。

BEGIN
DBMS_STREAMS_ADM.ADD_MESSAGE_RULE (
message_type   => 'strmadmin.order_id_date',
rule_condition => ':MSG.ORDER_ID > 0',
streams_type   => 'DEQUEUE',
streams_name   => 'strmadmin',
queue_name     => 'strmadmin.streams_queue');
END;
/

Oracle Streams管理者のユーザー名は、streams_nameパラメータで指定する必要があります。この例では、Oracle Streams管理者のユーザー名はstrmadminです。

メッセージ・クライアントは、ルールを使用して、どのメッセージをデキューするかを判断します。この例では、メッセージ・クライアントのルールは、order_idが0より大きいすべてのメッセージをデキューする必要があることを指定します。このため、このルールを使用すると、メッセージ・クライアントは、strmadmin.streams_queueキューに出現するstrmadmin.order_id_dateタイプの新しいメッセージをすべてデキューします。

4. Oracle Enterprise Managerで、Oracle Streams管理者としてii2.example.comデータベースにログインします。

5. 「データベース」ホームページに移動します。

6. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

7. 「プログラム」セクションで「プロシージャ」をクリックします。

8. 「プロシージャ」ページで「作成」をクリックします。

9. 「プロシージャの作成」ページで、「名前」フィールドにdequeue_ordersと入力します。

10. 「スキーマ」フィールドでstrmadminが入力されていることを確認します。

11. 「ソース」フィールドのサンプル・テキストを削除します。

12. 「ソース」フィールドに次のように入力します。

AS
msg            ANYDATA;
user_msg       strmadmin.order_id_date;
num_var        PLS_INTEGER;
more_messages  BOOLEAN := TRUE;
navigation     VARCHAR2(30);
BEGIN
navigation := 'FIRST MESSAGE';
WHILE (more_messages) LOOP
BEGIN
DBMS_STREAMS_MESSAGING.DEQUEUE(
queue_name   => 'strmadmin.streams_queue',
streams_name => 'strmadmin',
payload      => msg,
navigation   => navigation,
wait         => DBMS_STREAMS_MESSAGING.NO_WAIT);
IF msg.GETTYPENAME() = 'STRMADMIN.ORDER_ID_DATE' THEN
num_var := msg.GETOBJECT(user_msg);
DBMS_OUTPUT.PUT_LINE('Order ID: ' || user_msg.order_id);
DBMS_OUTPUT.PUT_LINE('Order Date: ' || user_msg.order_date);
END IF;
navigation := 'NEXT MESSAGE';
COMMIT;
EXCEPTION WHEN SYS.DBMS_STREAMS_MESSAGING.ENDOFCURTRANS THEN
navigation := 'NEXT TRANSACTION';
WHEN DBMS_STREAMS_MESSAGING.NOMOREMSGS THEN
more_messages := FALSE;
DBMS_OUTPUT.PUT_LINE('No more messages.');
WHEN OTHERS THEN
RAISE;
END;
END LOOP;
END;

13. 「OK」をクリックします。

14. この拡張例を続行するには、「タスク5: メッセージのエンキュー」の手順に進んでください。

注意:
SQL文CREATE PROCEDUREを使用して、プロシージャを作成することもできます。

タスク5: メッセージのエンキュー

「タスク3: メッセージ・エンキュー・メカニズムの構成」の例では、トリガーを作成しました。トリガーは、oe.orders表に挿入された注文に関する情報とともにメッセージをstrmadmin.streams_queueキューにエンキューします。このため、oe.orders表に行を挿入することにより、メッセージをstrmadmin.streams_queueキューにエンキューできます。

行をoe.orders表に挿入するには:

1. コマンドラインでSQL*Plusを開き、oeユーザーとしてii1.example.comデータベースに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. SQL*Plusで、行をoe.orders表に挿入します。

INSERT INTO oe.orders VALUES(3000, SYSDATE, 'direct', 116, 0, 4000.00, 153, NULL);

INSERT INTO oe.orders VALUES(3001, SYSDATE, 'direct', 117, 5, 5000.00, 163, NULL);

INSERT INTO oe.orders VALUES(3002, SYSDATE, 'direct', 118, 7, 6000.00, 159, NULL);

3. SQL*Plusで、変更をコミットします。

COMMIT;

4. この拡張例を続行するには、「タスク6: メッセージのデキュー」の手順に進んでください。

タスク6: メッセージのデキュー

「タスク5: メッセージのエンキュー」の例では、ii1.example.comデータベースのstrmadmin.streams_queueキューにメッセージをエンキューします。メッセージがエンキューされた後で、「タスク2: キューの構成とキュー間の伝播の構成」で構成した伝播により、メッセージがii2.example.comデータベースのstrmadmin.streams_queueキューに送信されます。

この例では、「タスク4: メッセージをデキューするためのメッセージ・クライアントの構成」で作成したdequeue_ordersプロシージャを使用して、ii2.example.comデータベースのキューからメッセージをデキューします。

メッセージをデキューするには:

1. オプションとして、メッセージのデキューを試みる前に、ii2.example.comのstrmadmin.streams_queueキューにメッセージが到着したことを確認することもできます。ii1.example.comのキューからii2.example.comのキューにメッセージを送信する伝播には時間がかかる可能性があります。方法については、「キュー内のメッセージの表示」を参照してください。
「メッセージ」ページには、3つのメッセージが表示されます。各メッセージには、「タスク5: メッセージのエンキュー」でoe.orders表に挿入した注文に関する情報が含まれます。

2. コマンドラインでSQL*Plusを開き、Oracle Streams管理者としてii2.example.comデータベースに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

3. SQL*Plusで、dequeue_ordersプロシージャを実行します。

SET SERVEROUTPUT ON
exec dequeue_orders;

出力は、次のようになります。

Order ID: 3000
Order Date: 01-FEB-07 01.47.48.000000000 PM
Order ID: 3001
Order Date: 01-FEB-07 01.47.57.000000000 PM
Order ID: 3002
Order Date: 01-FEB-07 01.48.04.000000000 PM
No more messages.

PL/SQL procedure successfully completed.

チュートリアル: メッセージ通知の構成

対象のメッセージがエンキューされたときにアプリケーションまたはユーザーに警告するメッセージ通知を構成することができます。

この項の例では、メッセージ通知を使用して、2つのアプリケーションが相互に通信できるようにする方法を示します。この例では、アプリケーションは次の方法で通信します。

1. 最初のアプリケーションは、2番目のアプリケーションで設定する必要のある様々なパラメータと、それらのパラメータの値を判断します。

2. 最初のアプリケーションは、次の属性を含むメッセージをエンキューします。

- parameter: 2番目のアプリケーションで設定するパラメータを指定する

- value: パラメータ値を指定する

3. メッセージ通知は、キュー内に新しいメッセージがあることを2番目のアプリケーションに警告します。

4. 2番目のアプリケーションは、メッセージをデキューし、パラメータをメッセージ内の値に設定します。

簡略化のために、この例では2つのアプリケーションを作成しません。かわりに、メッセージ通知の構成方法、および対象のメッセージがエンキューされたときにメッセージ通知を使用してそのメッセージを自動的にデキューする方法を示します。

図9-2に、この例で作成するメッセージング環境の概要を示します。

図9-2 メッセージ通知を使用するメッセージング環境の例

「図9-2 メッセージ通知を使用するメッセージング環境の例」の説明

注意:
データベース間でメッセージを送信する環境でメッセージ通知を構成できます。データベース間でメッセージを送信する環境の例の詳細は、「チュートリアル: Oracle Database間でのメッセージの送信」を参照してください。

メッセージ通知を構成するには:

- タスク1: メッセージ・タイプの作成

- タスク2: キューおよびメッセージ・クライアントの構成

- タスク3: メッセージをデキューするメカニズムの構成

- タスク4: メッセージ通知の構成

- タスク5: メッセージのエンキューとメッセージ通知のチェック

関連項目:

- 「メッセージ通知の概要」

- メッセージ通知機能の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

タスク1: メッセージ・タイプの作成

ユーザー定義型を作成して、アプリケーションについて追跡する情報を定義します。この例では、パラメータと値を含むメッセージに対してstrmadmin.app_info型を作成します。

strmadmin.app_info型を作成するには:

1. まだ準備していない場合は、メッセージ機能用に環境を準備します。詳細は、「メッセージ機能の準備」を参照してください。

2. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

3. 「データベース」ホームページに移動します。

4. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

5. 「ユーザー定義タイプ」セクションの「オブジェクト・タイプ」をクリックします。

6. 「オブジェクト・タイプ」ページで、「作成」をクリックして「オブジェクト・タイプの作成」ページを開きます。
tdpii_create_object_type.gifの説明

7. 「名前」フィールドにapp_infoと入力します。

8. 「スキーマ」フィールドでstrmadminが選択されていることを確認します。

9. 「属性」セクションで「データ型」に対して「事前定義済タイプ」が選択されていることを確認します。

10. 「属性」セクションで「追加」をクリックして、「事前定義済タイプ属性の追加」ページを開きます。
tdpii_add_type_attribute.gifの説明

11. app_info型に1番目の属性を追加するには:

1. 「名前」フィールドにparameterと入力します。

2. 「タイプ」ではVARCHAR2を選択します。

3. 「長さ」フィールドに20と入力します。

4. 「OK」をクリックします。

12. 「オブジェクト・タイプの作成」ページの「属性」セクションで「データ型」に対して「事前定義済タイプ」が選択されていることを確認します。

13. 「属性」セクションで「追加」をクリックして、「事前定義済タイプ属性の追加」ページを開きます。

14. app_info型に次の属性を追加するには:

1. 「名前」フィールドにvalueと入力します。

2. 「タイプ」ではNUMBERを選択します。

3. 「長さ」フィールドに12と入力します。

4. 「OK」をクリックします。

15. 「オブジェクト・タイプの作成」ページで、「OK」をクリックしてタイプを作成します。

16. この拡張例を続行するには、「タスク2: キューおよびメッセージ・クライアントの構成」の手順に進んでください。

注意:
SQL文CREATE TYPEを使用して、タイプを作成することもできます。

関連項目:

- 「チュートリアル: メッセージ通知の構成」

- 「メッセージ機能の概要」

タスク2: キューおよびメッセージ・クライアントの構成

キュー表とキューを作成して、最初のアプリケーションが2番目のアプリケーションに対して生成するメッセージを格納します。キューの作成後に、メッセージ通知はメッセージをキューからデキューできるコンシューマを必要とします。この例では、メッセージ・クライアントが、streams_queueキューからメッセージをデキューできるコンシューマです。

キューおよびメッセージ・クライアントを構成するには:

1. streams_queueという名前のキューをOracle Streams管理者のスキーマに作成します。方法については、「ANYDATAキューの作成」を参照してください。

2. コマンドラインでSQL*Plusを開き、データベースにOracle Streams管理者として接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

3. メッセージ・クライアントを作成して、Oracle Streams管理者がstreams_queueキューからメッセージをデキューできるようにします。

BEGIN
DBMS_STREAMS_ADM.ADD_MESSAGE_RULE (
message_type   => 'strmadmin.app_info',
rule_condition => ':MSG.VALUE >= 0',
streams_type   => 'DEQUEUE',
streams_name   => 'strmadmin',
queue_name     => 'strmadmin.streams_queue');
END;
/

Oracle Streams管理者のユーザー名は、streams_nameパラメータで指定する必要があります。この例では、Oracle Streams管理者のユーザー名はstrmadminです。新しいメッセージ・クライアントの名前もstrmadminです。

メッセージ・クライアントは、ルールを使用して、どのメッセージをデキューするかを判断します。この例では、メッセージ・クライアントのルールは、valueが0よりも大きいすべてのメッセージをデキューする必要があることを指定します。このため、このルールを使用すると、メッセージ・クライアントは、すべてのパラメータ値が0以上であるため、strmadmin.streams_queueに出現するstrmadmin.app_info型の新しいメッセージをすべてデキューします。

4. この拡張例を続行するには、「タスク3: メッセージをデキューするメカニズムの構成」の手順に進んでください。

関連項目:

- 「チュートリアル: メッセージ通知の構成」

- 「メッセージ機能の概要」

タスク3: メッセージをデキューするメカニズムの構成

この拡張例では、2番目のアプリケーションがstreams_queueキューからメッセージをデキューできる必要があります。簡略化のために、この例ではdequeue_app_messagesというPL/SQLプロシージャを作成して、strmadmin.app_info型のメッセージをデキューします。このプロシージャは、「タスク2: キューおよびメッセージ・クライアントの構成」で作成したメッセージ・クライアントを使用してメッセージをデキューします。

メッセージをデキューするメカニズムを構成するには:

1. Oracle Streams管理者に、DBMS_AQパッケージに対するEXECUTE権限を付与します。
この例では、DBMS_AQパッケージのDEQUEUEプロシージャを実行するプロシージャを構成します。このプロシージャを実行するユーザーには、プロシージャを含むパッケージに対する明示的なEXECUTE権限が必要です。ロールを通じて権限を付与することはできません。したがって、Oracle Streams管理者にはパッケージに対する明示的なEXECUTE権限を付与する必要があります。

1. strmadminユーザーに権限を付与できる管理ユーザーとして、Enterprise Managerにログインします。

2. 「サーバー」サブページに進みます。

3. 「セキュリティ」セクションで「ユーザー」をクリックします。
「ユーザー」ページが表示されます。

4. STRMADMINユーザーを選択します。

5. 「編集」をクリックします。
「ユーザーの編集」ページの「一般」サブページが表示されます。

6. 「オブジェクト権限」をクリックして「オブジェクト権限」サブページを開きます。
tdpii_edit_user.gifの説明

7. 「オブジェクト・タイプの選択」リストの「パッケージ」を選択します。

8. 「追加」をクリックしてパッケージ・オブジェクト権限の追加ページを開きます。
tdpii_add_package_privs.gifの説明

9. 「パッケージ・オブジェクトの選択」フィールドにSYS.DBMS_AQと入力します。

10. 「使用可能な権限」リストから「選択した権限」リストにEXECUTEを移動します。

11. 「OK」をクリックして権限を追加します。

12. 「適用」をクリックして権限を付与します。

注意:
SQL文GRANTを使用して、ユーザーに権限を付与することもできます。

2. メッセージをデキューするPL/SQLプロシージャを作成します。

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「プログラム」セクションで「プロシージャ」をクリックします。

5. 「プロシージャ」ページで「作成」をクリックします。

6. 「プロシージャの作成」ページで、「名前」フィールドにdequeue_app_messagesと入力します。

7. 「スキーマ」フィールドでstrmadminが入力されていることを確認します。

8. 「ソース」フィールドのサンプル・テキストを削除します。

9. 「ソース」フィールドに次のように入力します。

(
context  ANYDATA,
reginfo  SYS.AQ$_REG_INFO,
descr    SYS.AQ$_DESCRIPTOR)
AS
dequeue_options     DBMS_AQ.DEQUEUE_OPTIONS_T;
message_properties  DBMS_AQ.MESSAGE_PROPERTIES_T;
message_handle      RAW(16);
message             ANYDATA;
app_message         strmadmin.app_info;
rc                  PLS_INTEGER;
BEGIN
-- Get the message identifier and consumer name from the descriptor
dequeue_options.msgid := descr.msg_id;
dequeue_options.consumer_name := descr.consumer_name;
-- Dequeue the message
DBMS_AQ.DEQUEUE(
queue_name         => descr.queue_name,
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle);
rc := message.getobject(app_message);
COMMIT;
END;

メッセージ通知PL/SQLプロシージャには次のシグネチャが必要です。

PROCEDURE procedure_name(
context  IN  ANYDATA,
reginfo  IN  SYS.AQ$_REG_INFO,
descr    IN  SYS.AQ$_DESCRIPTOR);

ここで、procedure_nameはプロシージャの名前を意味します。プロシージャは、メッセージ通知で起動されるユーザー定義PL/SQLプロシージャを指定するPLSQLCALLBACKデータ構造体です。

この例のプロシージャは、通知によって送信されたメッセージ識別子とコンシューマ名を使用してstrmadmin.app_info型のメッセージをデキューする単純な通知プロシージャです。

10. 「OK」をクリックしてプロシージャを作成します。

注意:
SQL文CREATE PROCEDUREを使用して、プロシージャを作成することもできます。

3. この拡張例を続行するには、「タスク4: メッセージ通知の構成」の手順に進んでください。

関連項目:

- 「チュートリアル: メッセージ通知の構成」

- 「メッセージ機能の概要」

タスク4: メッセージ通知の構成

この拡張例では、新しいメッセージがstrmadmin.streams_queueキューにエンキューされたときにメッセージ通知がstrmadmin.dequeue_app_messagesプロシージャを起動します。このプロシージャは、新しいメッセージをデキューします。デキュー後に、アプリケーションはカスタマイズされた任意の方法でメッセージを処理できます。この例では、2番目のアプリケーションはメッセージ内の情報を使用してアプリケーション・パラメータ値を設定します。簡略化のために、この例では2番目のアプリケーションを構成しません。

プロシージャを起動するメッセージ通知を構成するには:

1. コマンドラインでSQL*Plusを開き、データベースにOracle Streams管理者として接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. メッセージがエンキューされ、strmadminメッセージ・クライアントがデキューできるときに、strmadmin.dequeue_app_messagesプロシージャを起動するメッセージ通知を設定します。

BEGIN
DBMS_STREAMS_ADM.SET_MESSAGE_NOTIFICATION (
streams_name         => 'strmadmin',
notification_action  => 'strmadmin.dequeue_app_messages',
notification_type    => 'PROCEDURE',
include_notification => TRUE,
queue_name           => 'strmadmin.streams_queue');
END;
/

3. この拡張例を続行するには、「タスク5: メッセージのエンキューとメッセージ通知のチェック」の手順に進んでください。

関連項目:

- 「チュートリアル: メッセージ通知の構成」

- 「メッセージ機能の概要」

タスク5: メッセージのエンキューとメッセージ通知のチェック

この拡張例では、1つのアプリケーションが、2番目のアプリケーションによって処理されるメッセージをエンキューします。簡略化のために、この例ではメッセージを手動でエンキューします。メッセージがエンキューされた後で、メッセージ通知を通じて自動的にデキューされたことを確認できます。

メッセージをエンキューし、メッセージ通知をチェックするには:

1. コマンドラインでSQL*Plusを開き、データベースにOracle Streams管理者として接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. メッセージをstrmadmin.streams_queueキューにエンキューします。

DECLARE
msg    strmadmin.app_info;
BEGIN
msg := strmadmin.app_info(
parameter => 'THRESHOLD',
value     => 1000);
DBMS_STREAMS_MESSAGING.ENQUEUE (
queue_name   => 'strmadmin.streams_queue',
payload      => ANYDATA.CONVERTOBJECT(msg));
COMMIT;
END;
/

DECLARE
msg    strmadmin.app_info;
BEGIN
msg := strmadmin.app_info(
parameter => 'MIN_WAIT',
value     => 1);
DBMS_STREAMS_MESSAGING.ENQUEUE (
queue_name   => 'strmadmin.streams_queue',
payload      => ANYDATA.CONVERTOBJECT(msg));
COMMIT;
END;
/

DECLARE
msg    strmadmin.app_info;
BEGIN
msg := strmadmin.app_info(
parameter => 'BUFFER_SIZE',
value     => 30);
DBMS_STREAMS_MESSAGING.ENQUEUE (
queue_name   => 'strmadmin.streams_queue',
payload      => ANYDATA.CONVERTOBJECT(msg));
COMMIT;
END;
/

3. オプションとして、streams_queueキュー内のメッセージを表示し、これらがメッセージ通知を使用して自動的にデキューされたかどうかを確認します。方法については、「キュー内のメッセージの表示」を参照してください。
この例で構成したメッセージ通知が正常に動作している場合は、「メッセージ」ページに次のいずれかが表示されます。

- 1つ以上のエンキューされたメッセージが、「状態の異なるコンシューマ」フィールドに「処理済」と表示されることがあります。このフィールドの「処理済」値は、メッセージがすべてのコンシューマによってデキューされたことを意味します。

- キューにメッセージは表示されません。最終的に、処理されたメッセージはキューから自動的に削除されます。メッセージが表示されない場合は、エンキューされたメッセージがメッセージ通知によってデキューされ、自動的に削除されました。

関連項目:

- 「チュートリアル: メッセージ通知の構成」

- 「メッセージ機能の概要」

キューの変更

Enterprise Managerを使用して、次のプロパティを含め、既存のキューのプロパティの一部を変更できます。

- 再試行最大数: メッセージが例外キューに移動されるまでに許可されるデキュー試行の数。メッセージング環境が接続不良の場合、メッセージのデキュー処理中に、接続が切断される可能性があります。このような環境では、メッセージが例外キューに移動されるまでアプリケーションが何度もメッセージをデキューするよう、最大再試行数を増やす必要があります。

- 再試行の遅延: アプリケーションのロールバック後、スケジュールされたメッセージの再処理が行われるまでの時間量。メッセージング環境が接続不良の場合、メッセージのデキューに失敗した後、アプリケーションを一定の時間待機させる必要があります。このような環境では、待機時間を指定して再試行の遅延設定を増やす必要があります。

- 保有時間: メッセージがすべてのコンシューマにデキューされた後、メッセージがキュー内に保持される時間。消費されたメッセージを追跡する場合、キュー内に格納されたメッセージに関する情報を記録できる保存期間を設定できます。

これらのプロパティは、キューからメッセージをデキューするアプリケーションで最適な値に設定できます。

キューを変更するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「Streams」セクションで、「アドバンスト・キューの管理」をクリックして「アドバンスト・キューの管理」ページを開きます。

5. 変更するキューを選択します。必要に応じて、検索ツールを使用してキューを検索してから選択します。

6. 「編集」をクリックして「キューの編集」ページを開きます。
tdpii_edit_queue.gifの説明

7. 1つ以上のキュー・プロパティを変更します。

8. 「適用」をクリックすると変更が保存されます。

注意:
DBMS_AQADM.ALTER_QUEUEプロシージャを使用して、キューを変更することもできます。

関連項目:

- メッセージ機能の概要

- 「チュートリアル: Oracle Database間でのメッセージの送信」

- 「チュートリアル: メッセージ通知の構成」

- 「キュー表の変更」

- 「メッセージング環境の監視」

キュー表の変更

Enterprise Managerを使用して、既存のキュー表の記憶域オプションの一部を変更できます。キュー表の記憶域オプションを変更すると、キュー表を使用するキューのパフォーマンスが向上します。

キュー表を変更するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・キューの管理」をクリックします。

5. 「関連リンク」セクションで、「キュー表」をクリックして、「キュー表」ページを開きます。
tdpii_queue_tables.gifの説明

6. 変更するキュー表を選択します。

7. 「編集」をクリックします。
「キュー表の編集」ページが表示され、「一般」サブページが表示されます。

8. 「記憶域」をクリックして「記憶域」サブページを開くか、「LOB記憶域」をクリックして「LOB記憶域」サブページを開きます。
tdpii_edit_queue_table.gifの説明

9. 1つ以上のキュー・プロパティを変更します。

10. 「適用」をクリックすると変更が保存されます。

注意:
DBMS_AQADM.ALTER_QUEUE_TABLEプロシージャを使用して、キュー表を変更することもできます。

関連項目:

- 「メッセージ機能の概要」

- 「チュートリアル: Oracle Database間でのメッセージの送信」

- 「チュートリアル: メッセージ通知の構成」

- 「キューの変更」

- 「メッセージング環境の監視」

伝播の変更

Enterprise Managerを使用して、既存の伝播のスケジュールを変更できます。伝播スケジュールによって、伝播があるキューから別のキューに送信される時期と頻度、および各伝播が終了するまでの時間が決定されます。次のスケジュール・オプションを変更できます。

- 待機時間: 完全に伝播されたキュー内の新しいメッセージが伝播される前に待機する時間

- 伝播の期間: 個々の伝播が終了するまでの時間

- 次回: 個々の伝播間の時間

一般的に、伝播スケジュールを変更して、メッセージング環境での伝播のパフォーマンスを向上します。これらのオプションはデフォルト設定では、通常最適な設定になっています。ただし、これらのオプションに対して異なる設定をして、パフォーマンスを最適化できます。

伝播を変更するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・キューの管理」をクリックして「アドバンスト・キューの管理」ページを開きます。

5. 変更する伝播のソース・キューを選択します。ソース・キューは、伝播がメッセージを宛先キューに送信する元のキューです。

6. 「アクション」リストの「伝播スケジュール」を選択します。

7. 「実行」をクリックして「伝播スケジュール」ページを開きます。
tdpii_prop_sched.gifの説明

8. 変更する伝播スケジュールを選択します。

9. 「編集」をクリックして「伝播スケジュールの編集」ページを開きます。
tdpii_edit_prop_sched.gifの説明

10. 1つ以上のスケジュール・オプションを変更します。

11. 「適用」をクリックすると変更が保存されます。

注意:
DBMS_AQADM.ALTER_PROPAGATION_SCHEDULEプロシージャを使用して、伝播スケジュールを変更することもできます。

関連項目:

- 「伝播の概要」

- 「チュートリアル: Oracle Database間でのメッセージの送信」

メッセージング環境の監視

この項では、Enterprise Managerを使用してメッセージング環境に関する情報を表示する方法を説明します。この項では、キュー内のメッセージ、キュー統計およびキュー・コンシューマを表示する方法も示します。

次の各項で、メッセージング環境の監視について説明します。

- キュー内のメッセージの表示

- 「永続キューの統計」の表示

- メッセージをデキューできるコンシューマの表示

関連項目:

- 「メッセージ機能の概要」

- 「メッセージ機能の準備」

- 「チュートリアル: Oracle Database間でのメッセージの送信」

- 「チュートリアル: メッセージ通知の構成」

- 「メッセージング環境のトラブルシューティング」

キュー内のメッセージの表示

キュー内のメッセージを表示して、アプリケーションがメッセージを正しくエンキューしていることを確認したり、どのメッセージが現在デキューまたは別のキューに伝播される準備ができているかを参照したりできます。

キューに現在格納されているメッセージを表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・キューの管理」をクリックして「アドバンスト・キューの管理」ページを開きます。

5. メッセージを含むキューを選択します。必要に応じて、検索ツールを使用してキューを検索してから選択します。

6. 「アクション」リストの「メッセージ」を選択します。

7. 「実行」をクリックします。

8. 「メッセージ」ページで、「実行」をクリックします。メッセージがリストされます。
tdpii_messages.gifの説明

9. 「状態の異なるコンシューマ」フィールドの番号リンクをクリックして、メッセージのコンシューマを表示します。コンシューマは、メッセージを別のキューに送信する伝播またはメッセージをデキューするアプリケーションです。

関連項目:

- 「キューの変更」

「永続キューの統計」の表示

永続メッセージング・モードを使用している場合、メッセージはハード・ディスクのキュー表に格納されます。この項では、永続モードで永続キューにエンキューされたメッセージの統計の表示について説明します。

永続キュー統計を表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・キューの管理」をクリックして「アドバンスト・キューの管理」ページを開きます。

5. メッセージを含むキューを選択します。必要に応じて、検索ツールを使用してキューを検索してから選択します。

6. 「アクション」リストの「キュー統計」を選択します。

7. 「実行」をクリックします。

8. 「キュー統計」ページで、「メッセージの統計」をクリックしてキューの永続キュー統計を表示します。

tdpii_message_stats.gifの説明

メッセージ統計は、永続キュー内の各状態のメッセージ数を示します。これらは、メッセージがデキューされる合計待機時間と平均待機時間も示します。

注意:

- メッセージは、バッファ・モードでエンキューすることもできます。この場合、メッセージはメモリー内のバッファ・キューに格納されます。これらのメッセージの統計の表示の詳細は、「「バッファ・キューの統計」の表示」を参照してください。

- キュー統計を、V$AQ動的パフォーマンス・ビューに問い合せることもできます。

関連項目:

- 「キューの変更」

メッセージをデキューできるコンシューマの表示

コンシューマは、特定のキューからメッセージをデキューするように構成されます。メッセージング環境では、コンシューマはキューへのサブスクライバによって表現され、複数のコンシューマが単一のサブスクライバを使用できます。

コンシューマは次の処理を行うことができます。

- メッセージをデキューして処理するアプリケーションまたはユーザー

- あるキューから別のキューにメッセージを送信する伝播

- メッセージング環境のカスタム・プロセスのメッセージのデキュー、またはレプリケーション環境のデータベース・オブジェクトに対する変更のデキューを行えるプロセスの適用

特定のキューからメッセージをデキューできるコンシューマを表示するには:

1. Oracle Enterprise Managerで、Oracle Streams管理者としてハブ・データベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「データ移動」をクリックして「データ移動」サブページを開きます。

4. 「アドバンスト・キューの管理」をクリックして「アドバンスト・キューの管理」ページを開きます。

5. キューを選択します。必要に応じて、検索ツールを使用してキューを検索してから選択します。

6. 「アクション」リストの「サブスクライバ」を選択します。

7. 「実行」をクリックして「サブスクライバ」ページを開きます。

tdpii_q_subscribers.gifの説明

「サブスクライバ」ページには、キューに対する各サブスクライバに関する次の情報が含まれます。

- 「名前」フィールドには、サブスクライバの名前が含まれます。

- 「アドレス」フィールドは、通常、サブスクライバが別のキューにメッセージを送信する伝播である場合に移入されます。「アドレス」フィールドは、メッセージを受信するキューの名前を示します。

- 「データベース・リンク」フィールドは、サブスクライバがリモート・データベースにいる場合にリモート・データベースへのデータベース・リンクを示します。

- 「ルール」フィールドは、サブスクライバによって使用されるルールを示します。ルールによって、サブスクライバがデキューするメッセージを決定できます。一部のサブスクライバはルールを使用しません。

- 「変換」フィールドは、サブスクライバによって使用される変換を示します。変換は、デキュー中にメッセージを変更します。一部のサブスクライバは変換を使用しません。

注意:
ALL_QUEUE_SUBSCRIBERSデータ・ディクショナリを問い合せて、メッセージをデキューできるコンシューマを表示することもできます。

関連項目:

- 「メッセージ機能の概要」

- 「変更の適用の概要」

メッセージング環境のトラブルシューティング

この項では、メッセージング環境で最も一般的な問題について説明します。これらの問題の修正方法も説明します。

次の各項で、メッセージング環境のトラブルシューティングについて説明します。

- メッセージのエンキューまたはデキュー中のORA-01031エラーの修正

- メッセージのエンキュー中のORA-24033エラーの修正

- 伝播のORA-02019エラーの修正

- デキューしたメッセージがキュー内に残る理由の理解

関連項目:

- 『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』

- 「メッセージ機能の概要」

メッセージのエンキューまたはデキュー中のORA-01031エラーの修正

必要な権限のないユーザーがメッセージをエンキューまたはデキューしようとする場合、Oracle Databaseから次のエラーが返されます。

ORA-01031: insufficient privileges

Oracle Databaseがこのメッセージを返す場合、エンキューまたはデキュー操作は失敗します。問題を修正するには、キューでのENQUEUEまたはDEQUEUE権限をユーザーに付与します。

ユーザーにENQUEUEまたはDEQUEUE権限を付与するには:

1. コマンドラインでSQL*Plusを開き、Oracle Streams管理者やSYSTEMなどの管理ユーザーとしてデータベースに接続します。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. DBMS_AQADMパッケージでGRANT_QUEUE_PRIVILEGEプロシージャを実行し、必要なキュー権限をユーザーに付与します。
たとえば、strmadmin.streams_queueキューで、ENQUEUE権限をhrユーザーに付与し、次のプロシージャを実行します。

BEGIN
DBMS_AQADM.GRANT_QUEUE_PRIVILEGE (
privilege  => 'ENQUEUE',
queue_name => 'strmadmin.streams_queue',
grantee    => 'hr');
END;
/

strmadmin.streams_queueキューで、DEQUEUE権限をhrユーザーに付与するには、次のプロシージャを実行します。

BEGIN
DBMS_AQADM.GRANT_QUEUE_PRIVILEGE (
privilege  => 'DEQUEUE',
queue_name => 'strmadmin.streams_queue',
grantee    => 'hr');
END;
/

関連項目:

- 『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』

- 「メッセージ機能の概要」

メッセージのエンキュー中のORA-24033エラーの修正

ユーザーまたはアプリケーションがメッセージをエンキューしょうとするとき、メッセージのコンシューマがない場合、Oracle Databaseから次のエラーが返されます。

ORA-24033: no recipients for message

Oracle Databaseがこのメッセージを返す場合、メッセージはエンキューされません。

問題を解決するには:

1. メッセージに対して少なくとも1つのコンシューマを構成します。

2. メッセージをエンキューします。

コンシューマは次の処理を行うことができます。

- メッセージをデキューして処理するアプリケーションまたはユーザー

- あるキューから別のキューにメッセージを送信する伝播

- メッセージング環境のカスタム・プロセスのメッセージのデキュー、またはレプリケーション環境のデータベース・オブジェクトに対する変更のデキューを行えるプロセスの適用

- メッセージをデキューし、アプリケーションに渡すメッセージ・クライアント

関連項目:

- 『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』

- 「メッセージ機能の概要」

伝播のORA-02019エラーの修正

メッセージの送信時、伝播ではソース・キューを所有しているデータベース・ユーザーの権限が使用されます。ソース・キューの所有者が、伝播で使用するデータベース・リンクにアクセスできない場合、Oracle Databaseから次のエラーが返されます。

ORA-02019: connection description for remote database not found

Oracle Databaseがこのメッセージを返す場合、メッセージは伝播されません。この問題を修正する最も簡単な方法は、データベース・リンクを削除し、再作成して、ソース・キューの所有者がデータベースにアクセスできるようにします。

データベース・リンクを削除し、再作成するには:

1. Oracle Enterprise Managerで、SYSTEMまたはOracle Streams管理者などの管理者ユーザーとしてデータベースにログインします。

2. 「データベース」ホームページに移動します。

3. 「スキーマ」をクリックして「スキーマ」サブページを開きます。

4. 「データベース・オブジェクト」セクションの「データベース・リンク」をクリックします。
「データベース・リンク」ページが表示されます。

5. 検索ツールを使用して、削除および再作成するデータベース・リンクを表示します。

6. データベース・リンクを選択します。

7. 「削除」をクリックします。

8. 確認ページで「はい」をクリックしてデータベース・リンクを削除します。

9. 「チュートリアル: データベース・リンクの作成」の手順に従って、このデータベース・リンクを再作成します。

伝播のソース・キューの所有者にデータベース・リンクへのアクセス権があることを確認するには、データベース・リンクを作成したときに、「接続モード」セクションで固定ユーザーとしてこのユーザーを指定します。

関連項目:

- 「伝播の概要」

- データベース・リンクの詳細は、『Oracle Database管理者ガイド』を参照してください。

デキューしたメッセージがキュー内に残る理由の理解

メッセージがデキューされた後、次の理由によりメッセージはキュー内に残ります。

- メッセージの1つ以上のコンシューマがメッセージをデキューしていません。すべてのコンシューマがメッセージをデキューするまで、キューからメッセージは削除されません。

- メッセージはバックグラウンド・プロセスでクリーン・アップされていません。すべてのメッセージのコンシューマがメッセージをデキューした後、バックグラウンド・プロセスでメッセージが自動的に削除されるまで、キュー内にメッセージが残ります。

キュー内でコンシューマがデキューしたメッセージが検出された場合、Enterprise Managerを使用して、メッセージのコンシューマを確認し、すべてのメッセージのコンシューマがメッセージをデキューしたかどうかを判断します。

キュー内でメッセージを確認するには:

1. 「メッセージをデキューできるコンシューマの表示」の手順に従い、メッセージをデキューできるコンシューマを表示します。メッセージに対して、複数のコンシューマがある場合、一部のコンシューマはまだメッセージをデキューできない場合があります。

2. 「キュー内のメッセージの表示」の手順に従います。「状態の異なるコンシューマ」フィールドで、メッセージに対してPROCESSEDが表示された場合、すべてのメッセージのコンシューマはメッセージをデキューします。この場合、バックグラウンド・プロセスでメッセージが自動的に削除されるまで、メッセージはキュー内に残ります。

関連項目:

- 『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』

- 「メッセージ機能の概要」

10 データの比較および収束

この章では、2つの異なるデータベースにある共有データベース・オブジェクト内のデータを比較する方法を説明します。共有データベース・オブジェクト内の相違データを収束する方法も説明します。

この章は次の項で構成されています。

- 異なるデータベース内のデータの比較および収束の概要

- チュートリアル: データの比較および収束の準備

- チュートリアル: 2つの異なるデータベース内のデータの比較

- チュートリアル: 相違データの収束

関連項目:

- 第7章「マテリアライズド・ビューを使用したデータのレプリケート」

- 第4章「Oracle Streamsを使用したデータのレプリケート」

- 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』

- 『Oracle Streamsレプリケーション管理者ガイド』

異なるデータベース内のデータの比較および収束の概要

2つ以上のデータベースでデータベース・オブジェクトを共有できます。同じデータベース・オブジェクトのコピーが複数のデータベースに存在している場合、データベース・オブジェクトは共有データベース・オブジェクトです。共有データベース・オブジェクトは、データ・レプリケーションによってメンテナンスできます。たとえば、マテリアライズド・ビューまたはOracle Streamsコンポーネントは、データベース・オブジェクトをレプリケートし、複数のデータベースでそれらをメンテナンスできます。カスタム・アプリケーションも、共有データベース・オブジェクトをメンテナンスできます。通常、レプリケーション環境では、データを含むオブジェクト(表など)と、その他のタイプのデータベース・オブジェクト(索引など)を共有します。

1つのデータベースで共有データベース・オブジェクトに変更が加えられた場合、変更が転送され、データベース・オブジェクトを共有する他の各データベースに加えられます。こうして、レプリケーション環境は各データベースの共有データベース・オブジェクトを同期します。

データを含む共有データベース・オブジェクトは、異なるデータベースで一貫性がなくなることがあります。つまり、データは共有データベース・オブジェクトの異なる・インスタンスで拡散します。たとえば、データベース・オブジェクトが表の場合は、表の1つのインスタンスが表の別のインスタンスよりも多くの行を持つこと、または表の2つのインスタンスが同じ行に異なるデータを持つことがあります。

Oracle Streamsレプリケーション環境で共有データベース・オブジェクトが拡散する場合、通常は次のいずれかの理由です。

- データ変更が1つ以上のデータベースで取得されていません。

- データ変更は取得されていますが、1つのデータベースから別のデータベースに転送されていません。

- データ変更が取得され、1つのデータベースから別のデータベースに転送されましたが、他のデータベースの共有データベース・オブジェクトに対してその変更が加えられていません。

データ拡散の一般的な原因は、ネットワークの問題、不正な構成またはユーザー・エラーです。共有データベース・オブジェクトが、マテリアライズド・ビューを使用するレプリケーション環境で拡散する場合は、マテリアライズド・ビューのリフレッシュに問題がある可能性があります。

DBMS_COMPARISONパッケージを使用して、異なるデータベースのデータベース・オブジェクトを比較し、差異を識別できます。このパッケージでは、異なるデータベースで一貫するようにデータベース・オブジェクトを収束させることもできます。DBMS_COMPARISONパッケージは、Oracle Databaseとともに必ずインストールされるOracle提供のPL/SQLパッケージです。

DBMS_COMPARISONパッケージは、次のタイプのデータベース・オブジェクトの比較および収束を行うことができます。

- 表

- 単一表ビュー

- マテリアライズド・ビュー

- 表、単一表ビューおよびマテリアライズド・ビューのシノニム

異なるデータベースにある異なるタイプのデータベース・オブジェクトの比較および収束を行うことができます。たとえば、あるデータベースにある表と、別のデータベースにあるマテリアライズド・ビューの比較および収束を行うことができます。

このマニュアルの例では、共有データベース・オブジェクトが2つのデータベースで同じ名前を持ち、データベース・オブジェクト全体が比較および収束されています。ただし、DBMS_COMPARISONパッケージは、異なるデータベースにある共有データベース・オブジェクトの差異について柔軟性を提供します。比較されるデータベース・オブジェクトは、必ずしも同じ名前を持つ必要はありません。また、対応する列が同じデータ型である場合、データベース・オブジェクト内で列名が異なっていてもかまいません。共有データベース・オブジェクト全体、または列および行のサブセットの比較および収束を行うことができます。

比較を作成するには、DBMS_COMPARISONパッケージのCREATE_COMPARISONプロシージャを使用します。このプロシージャは、共有データベース・オブジェクトの1つ以上の索引列を識別します。DBMS_COMPARISONパッケージは、索引列として使用できる少なくとも1つの列を識別できる必要があります。指定されたデータベース・オブジェクトに、索引列として使用できる列がない場合、CREATE_COMPARISONプロシージャはデータベース・オブジェクトの比較を作成できません。

注意:
環境に、拡散した共有データベース・オブジェクトがある場合は、問題の原因を調査して解決する必要があります。DBMS_COMPARISONパッケージは共有データベース・オブジェクトの比較および収束を行うことができますが、これらのデータベース・オブジェクトは拡散しないことをお薦めします。

関連項目:

- DBMS_COMPARISONパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

- DBMS_COMPARISONパッケージの高度な機能の使用方法の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。

チュートリアル: データの比較および収束の準備

2つのデータベースでhr.departments表を共有するとします。この表を異なるデータベースで比較して、データが一貫しているかどうかを確認します。2つのデータベースで表が拡散している場合は、これらを収束させて一貫させます。

このチュートリアルを実行する前に、次の前提条件を満たします。

- ネットワーク接続を構成して、2つのデータベースが相互に通信できるようにします。データベース間のネットワーク接続の構成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

- hrサンプル・スキーマが両方のデータベースにインストールされていることを確認します。 hrサンプル・スキーマは、Oracle Databaseとともにデフォルトでインストールされます。

この例では、データベースのグローバル名はii1.example.comおよびii2.example.comですが、使用している環境で、前提条件を満たす任意の2つのデータベースをかわりに使用できます。

ii1.example.comおよびii2.example.comデータベースのhr.departments表の比較および収束を準備するには:

1. この例の目的を満たすために、2つのデータベースでhr.departments表を拡散させます。

1. コマンドラインでSQL*Plusを開き、ii2.example.comデータベースにhrユーザーとして接続してください。
SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. hr.departments表で、department_idが 270と等しい部門を削除します。

DELETE FROM hr.departments WHERE department_id=270;
COMMIT;

3. hr.departments表で、ある行のデータを変更します。

UPDATE hr.departments SET manager_id=114 WHERE department_id=10;
COMMIT;

4. hr.departments表に行を挿入します。

INSERT INTO hr.departments VALUES(280, 'Bean Counters', 108, 2700);
COMMIT;

5. SQL*Plusを終了します。

EXIT;

注意:
通常、手順1は不要です。この例では、2つのデータベースでhr.departments表を分散するために含まれています。

2. ii1.example.comデータベースからii2.example.comデータベースへのデータベース・リンクを作成します。

データベース・リンクは、ii1.example.comの管理ユーザーのスキーマからii2.example.comの管理ユーザーのスキーマに接続する必要があります。両方のデータベースの管理ユーザーは、hr.departments表にアクセスして変更するために必要な権限と、DBMS_COMPARISONパッケージのサブプログラムを実行するために必要な権限を持っている必要があります。どのユーザーがこれらの権限を持っているかが不明な場合は、SYSTEMユーザーを使用します。また、データベース・リンクの名前とサービス名は、どちらもii2.example.comである必要があります。詳細は、「チュートリアル: データベース・リンクの作成」を参照してください。

チュートリアル: 2つの異なるデータベース内のデータの比較

この例は、「チュートリアル: データの比較および収束の準備」で説明したシナリオの続きです。先に進む前に、その項の手順を完了してください。

DBMS_COMPARISONパッケージのCREATE_COMPARISONプロシージャを使用して、2つの異なるデータベースにある共有データベース・オブジェクトの比較を定義できます。比較が定義された後で、このパッケージのCOMPAREファンクションを使用して、比較で指定したデータベース・オブジェクトを現在の時点で比較できます。 COMPAREファンクションは、特定の比較に対して複数回実行できます。ファンクションを実行するたびに、データベース・オブジェクトのスキャンが1回以上行われ、各スキャンが独自のスキャンIDを持ちます。

ii1.example.comおよびii2.example.comデータベースのhr.departments表全体を比較するには:

1. コマンドラインでSQL*Plusを開き、「チュートリアル: データの比較および収束の準備」で作成したデータベース・リンクを所有する管理ユーザーとしてii1.example.comデータベースに接続します。たとえば、SYSTEMユーザーがデータベース・リンクを所有する場合は、SYSTEMユーザーとして接続します。

sqlplus system@ii1.example.com
Enter password: password

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. CREATE_COMPARISONプロシージャを実行して、hr.departments表の比較を作成します。

BEGIN
DBMS_COMPARISON.CREATE_COMPARISON(
comparison_name => 'compare_departments',
schema_name     => 'hr',
object_name     => 'departments',
dblink_name     => 'ii2.example.com');
END;
/

新しい比較の名前はcompare_departmentsであることに注意してください。この比較は、CREATE_COMPARISONプロシージャを実行するユーザーが所有します。

3. COMPAREファンクションを実行して、2つのデータベースのhr.departments表を比較します。

SET SERVEROUTPUT ON
DECLARE
consistent   BOOLEAN;
scan_info    DBMS_COMPARISON.COMPARISON_TYPE;
BEGIN
consistent := DBMS_COMPARISON.COMPARE(
comparison_name => 'compare_departments',
scan_info       => scan_info,
perform_row_dif => TRUE);
DBMS_OUTPUT.PUT_LINE('Scan ID: '||scan_info.scan_id);
IF consistent=TRUE THEN
DBMS_OUTPUT.PUT_LINE('No differences were found.');
ELSE
DBMS_OUTPUT.PUT_LINE('Differences were found.');
END IF;
END;
/

Scan ID: 1
Differences were found.

PL/SQL procedure successfully completed.

手順2で作成した比較の名前をcomparison_nameパラメータに指定します。

ファクションは、比較のスキャンIDを出力します。比較に関する情報をデータ・ディクショナリ・ビューに問い合せる場合、およびデータベース・オブジェクトを収束させる場合は、スキャンIDが重要です。

ファンクションは、2つのデータベースで表に差異が見つかったかどうかも出力します。

- ファンクションが「違いが見つかりません」と出力する場合、表は2つのデータベースで一貫しています。

- ファンクションが「違いが見つかりました」と出力する場合は、表が2つのデータベースで拡散しています。

4. 前の手順でファンクションから返されたスキャンIDを記録しておきます。この例では、スキャンIDが1であると想定します。

5. 手順3で差異が見つかった場合は、次の問合せを実行して、見つかった差異の数を表示します。

COLUMN OWNER HEADING 'Comparison Owner' FORMAT A16
COLUMN COMPARISON_NAME HEADING 'Comparison Name' FORMAT A20
COLUMN SCHEMA_NAME HEADING 'Schema Name' FORMAT A11
COLUMN OBJECT_NAME HEADING 'Object Name' FORMAT A11
COLUMN CURRENT_DIF_COUNT HEADING 'Differences' FORMAT 9999999

SELECT c.OWNER,
c.COMPARISON_NAME,
c.SCHEMA_NAME,
c.OBJECT_NAME,
s.CURRENT_DIF_COUNT
FROM DBA_COMPARISON c, DBA_COMPARISON_SCAN s
WHERE c.COMPARISON_NAME = s.COMPARISON_NAME AND
c.OWNER           = s.OWNER AND
s.SCAN_ID         = 1;

問合せのWHERE句に、手順4で記録したスキャンIDを指定します。

出力は、次のようになります。

Comparison Owner Comparison Name      Schema Name Object Name Differences
---------------- -------------------- ----------- ----------- -----------
SYSTEM           COMPARE_DEPARTMENTS  HR          DEPARTMENTS           3

6. 比較されているデータベース・オブジェクトのどの行が異なるかを確認するには、次の問合せを実行します。

COLUMN COLUMN_NAME HEADING 'Index Column' FORMAT A15
COLUMN INDEX_VALUE HEADING 'Index Value' FORMAT A15
COLUMN LOCAL_ROWID HEADING 'Local Row Exists?' FORMAT A20
COLUMN REMOTE_ROWID HEADING 'Remote Row Exists?' FORMAT A20

SELECT c.COLUMN_NAME,
r.INDEX_VALUE,
DECODE(r.LOCAL_ROWID,
NULL, 'No',
'Yes') LOCAL_ROWID,
DECODE(r.REMOTE_ROWID,
NULL, 'No',
'Yes') REMOTE_ROWID
FROM DBA_COMPARISON_COLUMNS c,
DBA_COMPARISON_ROW_DIF r,
DBA_COMPARISON_SCAN s
WHERE c.COMPARISON_NAME = 'COMPARE_DEPARTMENTS' AND
r.SCAN_ID         = s.SCAN_ID AND
s.PARENT_SCAN_ID  = 1 AND
r.STATUS          = 'DIF' AND
c.INDEX_COLUMN    = 'Y' AND
c.COMPARISON_NAME = r.COMPARISON_NAME AND
c.OWNER           = r.OWNER
ORDER BY r.INDEX_VALUE;

WHERE句には、比較の名前と比較のスキャンIDを指定します。この例では、比較の名前はcompare_departmentsで、スキャンIDは1です。

出力は、次のようになります。

Index Column    Index Value     Local Row Exists?    Remote Row Exists?
--------------- --------------- -------------------- --------------------
DEPARTMENT_ID   10              Yes                  Yes
DEPARTMENT_ID   270             Yes                  No
DEPARTMENT_ID   280             No                   Yes

この出力は、比較される表の索引列と、共有データベース・オブジェクト内で異なっている各行の索引値を示します。この例では、索引列はhr.departments表の主キー列(department_id)です。出力は、各行の差異のタイプも示します。

- Local Row Exists?とRemote Row Exists?の両方が、ある行に対してYesの場合、その行はデータベース・オブジェクトの両方のインスタンスに存在しますが、行のデータは異なります。

- ある行についてLocal Row Exists?がYesで、Remote Row Exists?がNoの場合、その行はローカル・データベース・オブジェクトに存在しますが、リモート・データベース・オブジェクトには存在しません。

- ある行についてLocal Row Exists?がNoで、Remote Row Exists?がYesの場合、その行はリモート・データベース・オブジェクトに存在しますが、ローカル・データベース・オブジェクトには存在しません。

チュートリアル: 相違データの収束

この例は、「チュートリアル: 2つの異なるデータベース内のデータの比較」で説明したシナリオの続きです。先に進む前に、その項の手順を完了してください。

共有データベース・オブジェクトが2つの異なるデータベースで拡散した場合は、DBMS_COMPARISONパッケージのCONVERGEプロシージャを使用して、データベース・オブジェクトの2つのインスタンスを収束させることができます。CONVERGEプロシージャを正常に実行すると、共有データベース・オブジェクトが2つのデータベースで一貫します。CONVERGEプロシージャを実行するには、次の情報を指定する必要があります。

- DBMS_COMPARISONパッケージのCREATE_COMPARISONプロシージャを使用して作成した既存の比較の名前

- 収束させる比較のスキャンID

スキャンIDには、収束させる差異に関する情報が含まれます。この例では、比較の名前はcompare_departmentsで、スキャンIDは 1です。

また、CONVERGEプロシージャを実行する際には、共有データベース・オブジェクトが収束するときに「優先」されるデータベースを指定する必要があります。ローカル・データベースが優先されることを指定した場合は、データが異なるときに、ローカル・データベースのデータベース・オブジェクト内のデータでリモート・データベースのデータベース・オブジェクト内のデータが置換されます。リモート・データベースが優先されることを指定した場合は、データが異なるときに、リモート・データベースのデータベース・オブジェクト内のデータでローカル・データベースのデータベース・オブジェクト内のデータが置換されます。この例では、ローカル・データベースii1.example.comが優先されます。

ii1.example.comおよびii2.example.comデータベースのhr.departments表の相違データを収束させるには:

1. コマンドラインでSQL*Plusを開き、「チュートリアル: データの比較および収束の準備」で作成したデータベース・リンクを所有する管理ユーザーとしてii1.example.comデータベースに接続します。たとえば、SYSTEMユーザーがデータベース・リンクを所有する場合は、SYSTEMユーザーとして接続します。

sqlplus system@ii1.example.com
Enter password: password

SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

2. CONVERGEプロシージャを実行して、2つのデータベースのhr.departments表を収束させます。

SET SERVEROUTPUT ON
DECLARE
scan_info    DBMS_COMPARISON.COMPARISON_TYPE;
BEGIN
DBMS_COMPARISON.CONVERGE(
comparison_name  => 'compare_departments',
scan_id          => 1,
scan_info        => scan_info,
converge_options => DBMS_COMPARISON.CMP_CONVERGE_LOCAL_WINS);
DBMS_OUTPUT.PUT_LINE('Local Rows Merged: '||scan_info.loc_rows_merged);
DBMS_OUTPUT.PUT_LINE('Remote Rows Merged: '||scan_info.rmt_rows_merged);
DBMS_OUTPUT.PUT_LINE('Local Rows Deleted: '||scan_info.loc_rows_deleted);
DBMS_OUTPUT.PUT_LINE('Remote Rows Deleted: '||scan_info.rmt_rows_deleted);
END;
/

Local Rows Merged: 0
Remote Rows Merged: 2
Local Rows Deleted: 0
Remote Rows Deleted: 1

PL/SQL procedure successfully completed.

CONVERGEプロシージャは、指定されたスキャンで比較されるデータベース・オブジェクトの部分を同期し、行われた変更に関する情報を返します。一部のスキャンは、データベース・オブジェクトのサブセットを比較することがあります。この例では、指定されたスキャンは表全体を比較しました。このため、比較スキャンの完了後に新しい差異が追加されていないと想定すると、表全体が同期されています。

この例では、プロシージャでconverge_optionsパラメータがDBMS_COMPARISON.CMP_CONVERGE_LOCAL_WINSに設定されているためローカル表が優先されます。つまり、2つのデータベースで異なる行については、ローカル・データベースの行によって、リモート・データベースの対応する行が置換されます。一部の行がリモート・データベースに存在し、ローカル・データベースには存在しない場合は、リモート・データベースの余分な行が削除されます。リモート・データベースを優先する場合は、プロシージャでconverge_optionsパラメータをDBMS_COMPARISON.CMP_CONVERGE_REMOTE_WINSに設定します。

また、Oracle Streamsレプリケーション環境の一部である共有データベース・オブジェクトに対してCONVERGEプロシージャを実行する場合は、プロシージャによって行われた変更を他のデータベースにレプリケートしたくないことがあります。この場合は、CONVERGEプロシージャで、次のパラメータを変更がレプリケートされない値に設定できます。

- local_converge_tag

- remote_converge_tag

これらのパラメータのいずれかがNULL以外の値に設定されている場合、収束中に変更を行うセッションでタグが設定されます。local_converge_tagパラメータはセッション中にローカル・データベースにタグを設定しますが、remote_converge_tagパラメータはセッション中にリモート・データベースにタグを設定します。CONVERGEプロシージャによって行われた変更をレプリケートしない場合は、これらのパラメータを、Oracle Streams取得プロセスおよび同期取得が変更を取得しないようにする値に設定します。

関連項目:

- 「変更の循環を回避するためのタグの概要」

索引

A  B  C  D  E  F  G  H  I  L  M  N  O  P  Q  R  S  T  U  V  W

A

ADD_MESSAGE_RULEプロシージャ, 9.3.4, 9.4.2

ADD_TABLE_PROPAGATION_RULESプロシージャ, 4.3.4

ADD_TABLE_RULESプロシージャ, 4.3.4, 4.3.4

ADD_UPDATE_RESOLUTIONプロシージャ, 7.6.2

管理者

Streams

作成, 2.2

アラート

Oracle Streams, 5.3.1

ALL_APPLYビュー, 4.1.10.2 ALL_APPLY_CONFLICT_COLUMNSビュー, 4.1.10.2 ALL_APPLY_ERRORビュー, 4.1.10.2 ALL_CAPTUREビュー, 4.1.10.2 ALL_PROPAGATIONビュー, 4.1.10.2 ALL_STREAMS_COLUMNSビュー, 4.1.10.2 ALL_STREAMS_RULESビュー, 4.1.10.2 ALL_STREAMS_UNSUPPORTEDビュー, 4.1.10.2 ALL_SYNC_CAPTUREビュー, 4.1.10.2 ALTER_APPLYプロシージャ, 4.3.4 ANYDATAキュー, 2.3 適用, 4.1.3 適用エラー

データベース・オブジェクトの修正, 5.3.2.1

管理, 5.3.2

トランザクションの再試行, 5.3.2.2

適用ハンドラ

定義, 4.1.3

適用プロセス

適用エラー, 5.3.2

適用ハンドラ, 4.1.3

定義, 4.1.3

インスタンス化SCN, 4.1.3

管理, 5.1.3

監視, 5.2.7

統計, 5.2.7.2

ルール, 4.1.4 パラメータの設定, 5.1.3.2 起動, 5.1.3.1 停止, 5.1.3.1

B

ベスト・プラクティス

Oracle Streamsレプリケーション, 4.2

Oracle以外のデータベースの処理, 3.6.2

ボトルネック・コンポーネント, 5.2.2 バッファ・メッセージ機能

定義, 9.1.2

バッファ・キュー

定義, 4.1.1.1, 9.1.2

監視

統計, 5.2.8

C

取得, 4.1.1

取得プロセス, 4.1.1.1

同期取得, 4.1.1.2

取得プロセス

定義, 4.1.1.1

管理, 5.1.1

監視, 5.2.5.1

ルール, 4.1.4

パラメータの設定, 5.1.1.2

起動, 5.1.1.1

統計, 5.2.5.2

停止, 5.1.1.1

サプリメンタル・ロギング, 4.1.6

大/小文字の差異

分散データベース, 3.6.2

変更の循環

定義, 4.1.8

COMPAREファンクション, 10.3 データの比較, 10 COMPATIBLEパラメータ, 4.2 完全リフレッシュ

定義, 7.1.2

競合解消

列の追加, 4.3.5, 7.6.2

構成, 7.6.2

トリガーの作成, 4.3.5, 7.6.2

定義, 4.1.7, 7.6.1.3

最新時刻

構成, 4.3.5, 7.6.2, 7.6.2

監視, 5.2.7.4 組込み更新競合ハンドラ, 4.1.7 競合

定義, 4.1.7, 7.6.1.3

コンシューマ, 9.9.4

構成, 9.3.4, 9.4.2

定義, 9.1

表示, 9.8.3

連続レプリケーション, 4.1 CONVERGEプロシージャ, 10.4 データの収束, 10 CREATE_APPLYプロシージャ, 4.3.4 CREATE_COMPARISONプロシージャ, 10.3 カスタム・ルールベース変換

定義, 4.1.5

D

データ

比較, 10, 10.3

収束, 10, 10.4

タグ, 10.4

変更, 3.4 データ・レプリケーションと統合, 1.2

オプション, 1.3

データベース・リンク

作成, 2.4, 7.3

定義, 2.4, 9.1.4

DB_DOMAINパラメータ, 2.1 DB_NAMEパラメータ, 2.1 DBA_APPLYビュー, 4.1.10.2 DBA_APPLY_CONFLICT_COLUMNSビュー, 4.1.10.2, 5.2.7.4 DBA_APPLY_ERRORビュー, 4.1.10.2 DBA_CAPTUREビュー, 4.1.10.2 DBA_COMPARISONビュー, 10.3 DBA_COMPARISON_COLUMNSビュー, 10.3 DBA_COMPARISON_ROW_DIFビュー, 10.3 DBA_COMPARISON_SCANビュー, 10.3, 10.3 DBA_PROPAGATIONビュー, 4.1.10.2 DBA_REGISTERED_MVIEWSビュー, 8.2.8 DBA_STREAMS_COLUMNSビュー, 4.1.10.2 DBA_STREAMS_RULESビュー, 4.1.10.2 DBA_STREAMS_UNSUPPORTEDビュー, 4.1.10.2 DBA_SYNC_CAPTUREビュー, 4.1.10.2 DBMS_APPLY_ADMパッケージ, 4.1.9.3, 4.1.10.1, 4.3.4, 4.3.5, 4.3.5 DBMS_AQパッケージ, 9.4.3 DBMS_CAPTURE_ADMパッケージ, 4.1.9.3, 4.1.10.1, 4.3.4 DBMS_COMPARISONパッケージ, 10.1, 10.3, 10.4 DBMS_MVIEWパッケージ, 8.1.4 DBMS_PROPAGATION_ADMパッケージ, 4.1.10.1 DBMS_REPCATパッケージ, 7.6.2 DBMS_STREAMSパッケージ, 5.3.2.1 DBMS_STREAMS_ADMパッケージ, 4.1.9.3, 4.1.10.1, 4.3.4 DBMS_STREAMS_MESSAGINGパッケージ, 9.3.3, 9.3.4, 9.4.5 DDL LCR

定義, 4.1

宣言ルールベース変換

定義, 4.1.5

遅延トランザクション

定義, 7.6.1.2, 7.6.1.2

監視, 8.2.5

DEQUEUEプロシージャ, 9.3.4, 9.4.3 メッセージのデキュー, 9.1, 9.3.6 宛先キュー

定義, 4.1.2

分散データベース

大/小文字の差異, 3.6.2

構成, 3.6.1

データベース・リンク, 2.4

分散SQL, 3.1.1

フェデレーション, 3.1

初期化パラメータ, 3.6.2

メモリー要件, 3.6.2

データの変更, 3.4

Oracle以外のデータベース, 3.1.3, 3.6

ベスト・プラクティス, 3.6.2

事後処理

削減, 3.6.2

準備, 3.2 問合せ, 3.3 ストアド・プロシージャ, 3.1.4, 3.5 シノニム, 3.1.2 チューニング, 3.6.2 2フェーズ・コミット, 3.1.1 使用する時期, 1.3.1 分散問合せ

定義, 3.3

分散SQL

定義, 3.1.1

分散トランザクション

定義, 3.4

ダウンストリーム取得プロセス

定義, 4.1.1.1

DROP MATERIALIZED VIEW LOG文, 8.1.4

E

ENQUEUEプロシージャ, 9.3.3, 9.4.5

メッセージのエンキュー, 9.1, 9.3.5, 9.4.5

メカニズムの構成, 9.3.3

エラー・キュー

適用エラー, 5.3.2

F

高速リフレッシュ

定義, 7.1.2

フェデレーション, 3.1

定義, 1.2

強制リフレッシュ

定義, 7.1.2

ファンクション

定義, 3.1.4

G

レプリケーション・サポートの生成, 7.6.2

グローバル・コーディネータ

定義, 3.1.1

グローバル・データベース名, 2.4

定義, 2.1

GLOBAL_NAMESパラメータ, 2.1, 2.4, 4.2, 7.2, 9.2

H

HS_FDS_FETCH_ROWSパラメータ, 3.6.2

HS_LANGUAGEパラメータ, 3.6.2

HS_RPC_FETCH_SIZEパラメータ, 3.6.2

ハブアンドスポーク・レプリケーション, 4.1.9.2

データベース・オブジェクトの追加, 6.2

データベースの追加, 6.3

構成, 4.3.3

I

情報の統合, 1.2

オプション, 1.3

初期化パラメータ

マテリアライズド・ビュー, 7.2

メッセージ機能, 9.2

Oracle Streamsレプリケーション, 4.2

設定, 2.1

インスタンス化SCN

定義, 4.1.3

設定, 4.3.4

L

最新時刻競合解消

構成, 4.3.5, 7.6.2

ローカル取得プロセス

定義, 4.1.1.1

位置の透過性, 3.1.2 論理変更レコード(LCR)

定義, 4.1

M

MAINTAIN_GLOBALプロシージャ, 6.1

MAINTAIN_SCHEMASプロシージャ, 6.1

MAINTAIN_SIMPLE_TTSプロシージャ, 6.1

MAINTAIN_TABLESプロシージャ, 6.1

MAINTAIN_TTSプロシージャ, 6.1

MAKE_COLUMN_GROUPプロシージャ, 7.6.2

マスター・グループ

作成, 7.6.2

定義, 7.6.1.1

レプリケーション・サポートの生成, 7.6.2

停止中, 7.6.2

マスター・サイト

マテリアライズド・ビュー・サポートのクリーン・アップ, 8.1.4

構成, 7.3, 7.6.2

定義, 7.1.1

監視

マテリアライズド・ビュー・ログ, 8.2.7

登録済マテリアライズド・ビュー, 8.2.8

マスター表

定義, 7.1.1

マテリアライズド・ビュー・グループ

作成, 7.6.2

定義, 7.6.1.1

監視, 8.2.4

リフレッシュ・グループとの関係, 7.6.1.1

マテリアライズド・ビュー・ログ

構成, 7.4

定義, 7.1.2

監視, 8.2.7

パージ, 8.1.4

トラブルシューティング, 8.3.2

マテリアライズド・ビュー・サイト

構成, 7.3

定義, 7.1.1

マテリアライズド・ビュー, 7

管理, 8

削除, 8.1.3

初期化パラメータ, 7.2

マスター・グループ

作成, 7.6.2

定義, 7.6.1.1

レプリケーション・サポートの生成, 7.6.2

停止中, 7.6.2

マスター・サイト

構成, 7.6.2

定義, 7.1.1

マスター表

定義, 7.1.1

マテリアライズド・ビュー・グループ

作成, 7.6.2

定義, 7.6.1.1

監視, 8.2.4

リフレッシュ・グループとの関係, 7.6.1.1

マテリアライズド・ビュー・ログ

構成, 7.4

定義, 7.1.2

監視, 8.2.7

トラブルシューティング, 8.3.2

マテリアライズド・ビュー・サイト

構成, 7.3

定義, 7.1.1

監視, 8.2 準備, 7.2 読取り専用, 7.5.1

構成, 7.5.2

定義, 7.1

リフレッシュ・グループ

マテリアライズド・ビューの追加, 8.1.2, 8.1.2

構成, 7.7

定義, 7.1.3

監視, 8.2.6

リフレッシュ, 8.1.1.1

マテリアライズド・ビュー・グループとの関係, 7.6.1.1

リフレッシュ, 8.1.1

定義, 7.1.2

監視, 8.2.3

レプリケーション, 7.1, 8 トラブルシューティング, 8.3

リフレッシュ, 8.3.1

マスター・サイトでの登録解除, 8.1.4 更新可能, 7.6.1

構成, 7.6.2

競合解消, 7.6.2

競合, 7.6.1.3

定義, 7.1

MEMORY_TARGETパラメータ, 4.2, 7.2, 9.2 MERGE_STREAMS_JOBプロシージャ, 5.3.3 メッセージの順序付け

定義, 9.1.1

メッセージの統計, 9.8.2 メッセージのタイプ

作成, 9.3.1, 9.4.1

メッセージ

削除, 9.9.4

表示, 9.8.1

メッセージ機能, 9

バッファ, 9.1.2

コンシューマ, 9.1

メッセージのデキュー, 9.1, 9.3.4, 9.3.6, 9.4.3

メッセージのエンキュー, 9.1, 9.3.3, 9.3.5, 9.4.5

例, 9.3

初期化パラメータ, 9.2

OracleメッセージとOracle以外のメッセージの統合, 9.1.5

メッセージ・モード, 9.1.2

メッセージの順序付け, 9.1.1

メッセージのタイプ

作成, 9.3.1, 9.4.1

メッセージ

表示, 9.8.1

メッセージ・クライアント

構成, 9.3.4, 9.4.2

監視, 9.8 通知

構成, 9.4.4

定義, 9.1.3

例, 9.4

Oracle Messaging Gateway, 9.1.5 永続, 9.1.2 準備, 9.2 プロデューサ, 9.1 伝播

定義, 9.1.4

変更, 9.7

キュー表

変更, 9.6

キュー

定義, 9.1

変更, 9.5

統計, 9.8.2 トラブルシューティング, 9.9

デキュー, 9.9.1

エンキュー, 9.9.1, 9.9.2

伝播, 9.9.3

メッセージの表示, 9.4.5 使用する時期, 1.3.4 メッセージ・クライアント

構成, 9.3.4, 9.4.2

監視

適用プロセス, 5.2.7

統計, 5.2.7.2

取得プロセス, 5.2.5.1

統計, 5.2.5.2

マテリアライズド・ビュー・グループ, 8.2.4 マテリアライズド・ビュー・ログ, 8.2.7 マテリアライズド・ビュー・レプリケーション, 8.2.1 マテリアライズド・ビュー, 8.2, 8.2.2 メッセージ機能, 9.8 Oracle Streamsレプリケーション, 5.2

競合解消, 5.2.7.4

トポロジ, 5.2.4

伝播, 5.2.6.1, 5.2.6.2

統計, 5.2.6.2

リフレッシュ・グループ, 8.2.6

N

ネガティブ・ルール・セット

定義, 4.1.4

Oracle以外のデータベース, 3.1.3

データのアクセスと変更, 3.6

ベスト・プラクティス, 3.6.2

大/小文字の差異, 3.6.2 通知

構成, 9.4.4

定義, 9.1.3

例, 9.4

n-wayレプリケーション, 4.1.9.3

O

オブジェクト・タイプ

作成, 9.3.1, 9.4.1

ORA-01031エラー, 9.9.1 ORA-02019エラー, 9.9.3 ORA-24033エラー, 9.9.2 Oracle Database Gateway, 3.1.3, 3.6

ベスト・プラクティス, 3.6.2

構成, 3.6.1

Oracle Messaging Gateway, 9.1.5 Oracle Streams

アドバンスト・キューイング, 9

アラート, 5.3.1

データ・ディクショナリ・ビュー, 4.1.10

パッケージ, 4.1.10

レプリケーション, 4.1

Oracle Streamsアドバンスト・キューイング。「メッセージ機能」を参照 Oracle Streamsトポロジ, 5.2.4 Oracle Warehouse Builder, 1.3 順序付け

メッセージ, 9.1.1

P

永続メッセージ機能

定義, 9.1.2

永続キュー

定義, 9.1.2

統計, 9.8.2

ポジティブ・ルール・セット

定義, 4.1.4

事後処理

分散データベース

削減, 3.6.2

組込み更新競合ハンドラ

定義, 4.1.7

権限

付与, 9.3.3, 9.4.3, 9.9.1

プロシージャ

定義, 3.1.4

PROCESSESパラメータ, 4.2 プロデューサ

定義, 9.1

伝播

構成, 9.3.2

定義, 4.1.2, 9.1.4

無効化, 5.1.2

有効化, 5.1.2

変更, 9.7

監視, 5.2.6.1, 5.2.6.2

統計, 5.2.6.2

ルール, 4.1.4 トラブルシューティング, 9.9.3 伝播ジョブ

定義, 9.1.4

パージ・スケジュール

定義, 7.6.1.2

PURGE_MVIEW_FROM_LOGプロシージャ, 8.1.4

Q

問合せ

複数のデータベース, 3.3

キュー表

作成, 2.3

変更, 9.6

キュー

ANYDATAタイプ

作成, 2.3

バッファ, 4.1.1.1

監視, 5.2.8

コンシューマ, 9.9.4

表示, 9.8.3

定義, 9.1 メッセージ

削除, 9.9.4

統計, 9.8.2

表示, 9.8.1

変更, 9.5 永続, 9.1.2 権限

付与, 9.9.1

サブスクライバ

表示, 9.8.3

キュー・ツーdblink伝播

定義, 9.1.4

キュー・ツー・キュー伝播

定義, 9.1.4

R

読取り専用マテリアライズド・ビュー, 7.5.1

構成, 7.5.2

定義, 7.1

リフレッシュ・グループ

マテリアライズド・ビューの追加, 8.1.2, 8.1.2

構成, 7.7

定義, 7.1.3

監視, 8.2.6

リフレッシュ, 8.1.1.1

マテリアライズド・ビュー・グループとの関係, 7.6.1.1

リフレッシュ

定義, 7.1.2

マテリアライズド・ビュー, 8.1.1

メソッド, 7.1.2

監視, 8.2.3

トラブルシューティング, 8.3.1

リモート・プロシージャ・コール(RPC)

定義, 3.5

レプリケーション

連続, 4.1

定義, 4.1, 7.1

マテリアライズド・ビュー, 7, 7.1

管理, 8.1

監視, 8.2, 8.2.1

準備, 7.2

読取り専用データ, 7.5

データの読取り/書込み, 7.6

トラブルシューティング, 8.3

使用する時期, 1.3.3

Oracle Streams, 4.1

管理, 5

適用プロセス, 4.1.3, 5.1.3

ベスト・プラクティス, 4.2

ボトルネック・コンポーネント, 5.2.2

取得プロセス, 4.1.1.1, 5.1.1

変更の取得, 4.1.1

構成, 4.3.1, 4.3.2, 4.3.3, 4.3.4

競合解消, 4.1.7, 4.3.5, 5.2.7.4

拡張, 6

ハブアンドスポーク, 4.1.9.2, 4.3.3, 6.2, 6.3

管理, 5.1

監視, 5.2

N方向, 4.1.9.3

準備, 4.2

伝播, 4.1.2

ルールベースの変換, 4.1.5

ルール, 4.1.4

Streamsクライアント, 4.1.4

サプリメンタル・ロギング, 4.1.6

タグ, 4.1.8

トポロジ, 5.2.4

トラブルシューティング, 5.3

2データベース, 4.1.9.1, 4.3.1, 4.3.2, 4.3.4

使用する時期, 1.3.2

レプリケーション・グループ

定義, 7.6.1.1

行LCR

定義, 4.1

RPC。「リモート・プロシージャ・コール」を参照 ルール・セット

定義, 4.1.4

ルールベースの変換

定義, 4.1.5

ルール

適用プロセス, 4.1.4

取得プロセス, 4.1.4

定義, 4.1.4

伝播, 4.1.4

同期取得, 4.1.4

S

スケジュール済リンク

定義, 7.6.1.2

SESSIONSパラメータ, 4.2 SET_MESSAGE_NOTIFICATIONプロシージャ, 9.4.4 SET_TABLE_INSTANTIATION_SCNプロシージャ, 4.3.4 SET_TAGプロシージャ, 5.3.2.1 SET_UPDATE_CONFLICT_HANDLERプロシージャ, 4.3.5 SGA_TARGETパラメータ, 4.2, 7.2, 9.2 共有データベース・オブジェクト

定義, 10.1

SHARED_POOL_SIZEパラメータ, 7.2, 9.2 ソース・キュー

定義, 4.1.2

SPLIT_STREAMSプロシージャ, 5.3.3 ストリームの分離とマージ, 5.3.3 START_APPLYプロシージャ, 4.3.4 ステートフル・アラート

定義, 5.3.1

ステートレス・アラート

定義, 5.3.1

統計

適用プロセス, 5.2.7.2

バッファ・キュー, 5.2.8

取得プロセス, 5.2.5.2

永続キュー, 9.8.2

伝播, 5.2.6.2

ストアド・ファンクション

定義, 3.1.4

ストアド・プロシージャ

定義, 3.1.4

実行, 3.5

Streams管理者

作成, 2.2

表領域の作成, 2.2.1

Streamsクライアント

定義, 4.1.4

STREAMS_POOLパラメータ, 4.2 サブスクライバ

表示, 9.8.3

サプリメンタル・ロギング

定義, 4.1.6

同期取得

構成, 4.3.4

定義, 4.1.1.2

ルール, 4.1.4

シノニム

作成, 3.3

定義, 3.1.2

分散データベース, 3.1.2

T

表

列の追加, 4.3.5, 7.6.2

表領域

Streams管理者用に作成, 2.2.1

タグ

変更の循環の回避, 4.3.1, 4.3.3, 4.3.4

データの収束, 10.4

定義, 4.1.8

トポロジ, 5.2.4 変換

ルールベース, 4.1.5

トリガー

作成, 4.3.5, 7.6.2, 9.3.3

トラブルシューティング

アラート, 5.3.1

マテリアライズド・ビュー, 8.3

マテリアライズド・ビュー・ログ, 8.3.2

リフレッシュ, 8.3.1

メッセージ機能, 9.9

メッセージのデキュー, 9.9.1

メッセージのエンキュー, 9.9.1, 9.9.2

Oracle Streamsレプリケーション, 5.3

適用エラー, 5.3.2

使用できないレプリケーション先, 5.3.3

伝播, 9.9.3 チューニング

分散データベース, 3.6.2

2データベース・レプリケーション, 4.1.9.1

構成

ダウンストリーム取得プロセス, 4.3.2

ローカル取得プロセス, 4.3.1

同期取得, 4.3.4

2フェーズ・コミット

定義, 3.1.1

U

UNREGISTER_MVIEWプロシージャ, 8.1.4

更新可能なマテリアライズド・ビュー, 7.6.1

構成, 7.6.2

遅延トランザクション, 7.6.1.2

監視, 8.2.5

定義, 7.1 パージ・スケジュール, 7.6.1.2 スケジュール済リンク, 7.6.1.2 ユーザー

作成, 2.2.2

V

V$BUFFERED_QUEUESビュー, 4.1.10.2

V$MVREFRESHビュー, 8.2.3

V$PROPAGATION_RECEIVERビュー, 4.1.10.2

V$PROPAGATION_SENDERビュー, 4.1.10.2

V$STREAMS_APPLY_COORDINATORビュー, 4.1.10.2

V$STREAMS_APPLY_READERビュー, 4.1.10.2

V$STREAMS_APPLY_SERVERビュー, 4.1.10.2

V$STREAMS_CAPTUREビュー, 4.1.10.2

V$STREAMS_TRANSACTIONビュー, 4.1.10.2

W

Warehouse Builder, 1.3

Copyright © 2007, 2011, Oracle and/or its affiliates. All rights reserved.