LoginSignup
16
9

More than 5 years have passed since last update.

失敗したData Pumpジョブの後始末を試す(Oracle Database 12c Release 2)

Posted at

Data Pumpジョブの失敗

Data Pumpは、実行時に接続ユーザー(useridパラメーター)のスキーマにジョブの状況を管理するテーブルを作成します。一般的に知られているテーブル名は、DBA_DATAPUMP_JOBSビューのJOB_NAME列と同じ名前のテーブルです。自動作成されるテーブル名はData Pump実行時のパラメーターによって変化しますが、SYS_EXPORT_SCHEMA_01やSYS_IMPORT_FULL_01等になります。

Data Pumpジョブの後始末

 Data Pumpジョブを強制的に止めた場合、ジョブ名がDBA_DATAPUMP_JOBSビューに残ることがあります。ジョブを削除するために、同一名称のテーブルを削除することでData Pumpジョブのクリーンアップを行います。

SQL> SELECT OWNER_NAME, JOB_NAME FROM DBA_DATAPUMP_JOBS;
OWNER_NAME   JOB_NAME
------------ -----------------------
APLUSER      SYS_IMPORT_SCHEMA_01

SQL> DROP TABLE APLUSER.SYS_IMPORT_SCHEMA_01;
表が削除されました。

次にジョブ名以外のテーブルも作成される現象を説明しています。

ある日から統計情報を取得する DBMS_STATS.GATHER_SCHEMA_STATS プロシージャがが失敗するようになりました。

SQL> BEGIN
  DBMS_STATS.GATHER_SCHEMA_STATS (
    ownname => 'APLUSER',
        options => 'GATHER',
        estimate_percent => 15,
        cascade => TRUE
  );
  END;
  /
BEGIN
*
行1でエラーが発生しました。
ORA-20000: Statistics collection failed for 2 objects in the schema
ORA-06512: "SYS.DBMS_STATS", 行38928
ORA-06512: "SYS.DBMS_STATS", 行38257
ORA-06512: "SYS.DBMS_STATS", 行38225
ORA-06512: "SYS.DBMS_STATS", 行38285
ORA-06512: 行2

失敗するオブジェクトを探していると、ET$で始まる見慣れないテーブルを見つけました。

SQL> SELECT TABLE_NAME, LAST_ANALYZED FROM USER_TABLES ORDER BY 2;
TABLE_NAME             LAST_ANA
------------------------------ ---------
TABLE_A             18-02-20
...
ET$001910FB0001
ET$0019836D0001

200行が選択されました。

このテーブルに対して統計情報を取得すると、Data Pumpが自動作成するテーブルらしいということがわかりました。

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('APLUSER', 'ET$001910FB0001');
BEGIN DBMS_STATS.GATHER_TABLE_STATS('APLUSER', 'ET$001910FB0001'); END;

*
行1でエラーが発生しました。
ORA-20011: Approximate NDV failed: ORA-29913:
OCIEXTTABLEOPENコールアウトの実行中にエラーが発生しました。KUP-11024:
この外部表は、データ・ポンプ・ジョブ内からのみアクセスできます。ORA-06512: "SYS.DBMS_STATS",
行36873
ORA-06512: "SYS.DBMS_STATS", 行36507
ORA-06512: "SYS.DBMS_STATS", 行35428
ORA-06512: "SYS.DBMS_STATS", 行33883
ORA-06512: "SYS.DBMS_STATS", 行32254
ORA-06512: "SYS.DBMS_STATS", 行32234
ORA-06512: "SYS.DBMS_STATS", 行33472
ORA-06512: "SYS.DBMS_STATS", 行35304
ORA-06512: "SYS.DBMS_STATS", 行36230
ORA-06512: "SYS.DBMS_STATS", 行36716
ORA-06512: 行1

このため該当テーブルを削除するとDBMS_STATSジョブが正常に稼働するようになりました。

16
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9