Oracleのバックアップにexpdpを使用している。expdpを実行したところ「ORA-31634: ジョブはすでに存在します」と「ORA-31664: デフォルト設定時に一意のジョブ名を構成できません」と見慣れないエラーが表示される。
以下のSQLでDATAPUMP_JOBSにあるジョブ名を確認する。
> select * from DBA_DATAPUMP_JOBS ORDER BY JOB_NAME > > OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS > SYSTEM SYS_EXPORT_SCHEMA_01 EXPORT SCHEMA NOT RUNNING 0 0 0 > SYSTEM SYS_EXPORT_SCHEMA_02 EXPORT SCHEMA NOT RUNNING 0 0 0 >...
なんと・・・SYS_EXPORT_SCHEMA_01~99まで、全部で99個のジョブが溜まっている。実はexp先の容量不足から一部スキーマのバックアップに失敗していた時期があって、どうやらその時に失敗したexpdpのジョブが消えること無く溜まっていたらしい。
こういう時にはexpdpにattachオプションを指定して起動し、コマンプロンプトからkill_jobを実行すれば良い。でも残念ながら下記のようなエラーになってしまい、既存ジョブにアタッチする事が出来ない。
C:\>expdp SYSTEM/****@ORA attach=SYS_EXPORT_SCHEMA_01 Export: Release 11.2.0.1.0 - Production on 金 6月 21 09:43:34 2019 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 接続先: Oracle Database 11g Release 11.2.0.2.0 - 64bit Production ORA-39002: 操作が無効です ORA-39000: ダンプ・ファイル指定が無効です ORA-31640: ダンプ・ファイル"C:\dmp\XXX.dmp"を読取りのためにオープンできません ORA-27041: ファイルをオープンできません。 OSD-04002: ファイルをオープンできません O/S-Error: (OS 2) 指定されたファイルが見つかりません。
既存ジョブにアタッチできないので、仕方なく以下のSQLでジョブを廃棄することにする。
> DROP TABLE SYS_EXPORT_SCHEMA_01; > ... > DROP TABLE SYS_EXPORT_SCHEMA_99;
これで溜まっていたジョブが削除されたので、expdpは正常に戻った。