【後で調べる】Tag: ORA-39077: unable to subscribe agent KUPC$A_1_083325450472000

【PR】
※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。

Tag: ORA-39077: unable to subscribe agent KUPC$A_1_083325450472000

https://geodatamaster.com/tag/ora-39077-unable-to-subscribe-agent-kupca_1_083325450472000/

data pump(expdp)が以下のようなエラーで異常終了した場合、一度この状態になると何度やっても失敗する

ORA-31626: job does not exist
ジョブが存在しません
ORA-31638: cannot attach to job XXX for user XXX
ジョブXXXに連結できません
ORA-06512: at “SYS.KUPV$FT”, line 1142
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 95
ORA-06512: at “SYS.KUPV$FT_INT”, line 498
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 95
ORA-06512: at “SYS.KUPC$QUE_INT”, line 294
ORA-06512: at “SYS.DBMS_AQADM_SYS”, line 9306
ORA-06512: at “SYS.DBMS_PRVTAQIS”, line 1873
ORA-06512: at “SYS.DBMS_PRVTAQIS”, line 3802
ORA-06512: at “SYS.DBMS_RULE_ADM”, line 296
ORA-06512: at “SYS.DBMS_RULEADM_INTERNAL”, line 106
等ORA-06512エラーが複数行出力される
ORA-39077: unable to subscribe agent KUPC$A_1_xxxxxxxx to queue “KUPC$C_1_XXXXXXXX”
エージェントagent KUPC$A_1_xxxxxxxxをキューagent KUPC$A_1_xxxxxxxxにサブスクライブできませn
ORA-00972: identifier is too long
数値または値のエラー

以下の数値が100万を超えている

SQL> SELECT "SYS"."AQ$_KUPC$DATAPUMP_QUETAB_1_N".NEXTVAL val# FROM DUAL;

      VAL#
----------
   1000251
以下の記述実行でも可
SQL> SELECT "SYS"."AQ$_KUPC$DATAPUMP_QUETAB_1_N".NEXTVAL FROM DUAL;

      NEXTVAL
----------
   1000251

2つの解決策があり、

1つはパッチをあてることである(※使用しているOracleのVerに対応したパッチがある場合)

Data Pump Recommended Proactive Patches For 19.10 and Above (Doc ID 2819284.1)

https://support.oracle.com/knowledge/Oracle%20Database%20Products/2819284_1.html

パッチはオンラインで適用し、データベースサービスをシャットダウンする必要はない

download the bundle patch and apply it “online” with NO database service shutdown required…

もう1つはdatapumpカタログを再作成することである

SQL> @$ORACLE_HOME/rdbms/admin/catdph.sql
SQL> @$ORACLE_HOME/rdbms/admin/prvtdtde.plb
SQL> @$ORACLE_HOME/rdbms/admin/catdpb.sql
SQL> @$ORACLE_HOME/rdbms/admin/dbmspump.sql
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
を順に実行していく。

↓実行例

SQLPlusに接続
sqlplus / as sysdba

SELECT "SYS"."AQ$_KUPC$DATAPUMP_QUETAB_1_N".NEXTVAL val# FROM DUAL;
作業前の値を確認。100万件以上であれば同症状が発現する可能性。

SQL> @$ORACLE_HOME/rdbms/admin/catdph.sql

権限付与が成功しました。
PL/SQLがプロシージャが正常に完了しました。
パッケージが作成されました。
パッケージ本体が作成されました。
等のメッセージ
 
SQL> @$ORACLE_HOME/rdbms/admin/prvtdtde.plb

ライブラリが作成されました。
シノニムが作成されました。
パッケージが作成されました。
等のメッセージ
 
SQL> @$ORACLE_HOME/rdbms/admin/catdpb.sql

権限付与が成功しました。
ビューが作成されました。
シノニムが作成されました。
コメントが作成されました。
表が作成されました。
表が削除されました。
1行が作成されました。
コミットが完了しました。
等のメッセージ
 
SQL> @$ORACLE_HOME/rdbms/admin/dbmspump.sql


型が作成されました。
型本体が作成されました。
ライブラリが作成されました。
等のメッセージ

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

PL/SQLプロシージャが正常に完了しました。
ファンクションが作成されました。
ファンクションが削除されました。
等のメッセージ


SELECT "SYS"."AQ$_KUPC$DATAPUMP_QUETAB_1_N".NEXTVAL val# FROM DUAL;
⇒結果、数が減少したことを確認する。順序が存在しないなどのエラーになる場合は、一回expdpで適当なテーブルをエクスポートしてから、もう一度実行してみる

※参考

https://www.orafaq.com/forum/t/203195/

You hit a known bug, if AQ$_KUPC$DATAPUMP_QUETAB_1_N reaches 1000000 you have this error.
No patch in your version, the workaround is to recreate the Data Pump environment:

 

Tips

Posted by admin