質問: 以下の事象にあってしまい、困っております。 どうかよろしくお願いいたします。 Oracle のレプリケーション構築中に以下のようなエラーが発生しました。 ``` SQL> create user Auser identified by Auser; ユーザーが作成されました。 SQL> begin 2 dbms_defer_sys.register_propagator ( 3 username => 'Auser'); 4 end; 5 / begin * 行1でエラーが発生しました。: ORA-23394: プロパゲータが重複しています。 ORA-06512: "SYS.DBMS_DEFER_INTERNAL_SYS", 行1589 ORA-06512: "SYS.DBMS_DEFER_SYS", 行2466 ORA-06512: 行2 ``` そこで削除をしようと思い、実行してみましたがこちらでも以下のエラーが発生します。 ``` SQL> begin 2 DBMS_DEFER_SYS.UNREGISTER_PROPAGATOR ( 3 username => 'Auser'); 4 end; 5 / begin * 行1でエラーが発生しました。: ORA-23357: プロパゲータが存在しません。 ORA-06512: "SYS.DBMS_SYS_ERROR", 行79 ORA-06512: "SYS.DBMS_DEFER_SYS", 行2514 ORA-06512: 行2 ``` また、こちらのサイトを参考に 以下SELECT文を実行してみました。 ``` SQL > SELECT * FROM DEFPROPAGATOR; USERNAME USERID STATUS CREATED ------------- ------ ------ -------- Buser 87 VALID 16-02-17 ``` Auserは存在しないので登録には問題無いと思っているのですが。。。。 このエラー(ORA-23394: プロパゲータが重複しています。)を解消するには どのようにしたらよろしいのでしょうか。 アドバイスのほどよろしくお願いします。 --- 環境 Oracleのバージョン:Oracle 12c Standard Edition バージョン番号詳細: 12.1.0.1.0
回答: Oracle Databaseアドバンスト・レプリケーション [マスター・サイトのロールおよびユーザー]の[プロパゲータ]の説明では、 > > プロパゲータは、遅延トランザクション・キューに含まれる各トランザクションを接続先に伝播する作業を実行します。 > > プロパゲータは、各データベースに1つ存在します。 > > つまり、異なるスキーマを管理するために複数のレプリケーション管理者を置くことはできますが、 > > それぞれの**データベースには1つのプロパゲータしか配置できません**。 > > > とあります。 dbms_defer_sys.register_propagatorしようとしたのが'Auser'ですが、 SELECT * FROM DEFPROPAGATOR;の結果が'Buser'であることから上記に反します。 dbms_defer_sys.unregister_propagatorを'Buser'として実行するか、 'Buser'をプロパゲータとして使うかのどちらかではないでしょうか。