خطای ORA-31634 هنگام اجرای DataPump job
در دیتابیس اوراکل ، شما ممکن است هنگام اجرای (DataPump job (expdp or impdp با خطاهای زیر مواجه شوید:
ORA-31634: job already exists
ORA-31664: unable to construct unique job name when defaulted
این خطا به دلایل زیر رخ میدهد :
- در دستور expdp/impdp از یک JOB_NAME مشخص استفاده نکرده باشید و datapump مجبور شود که از یک نام پیش فرض استفاده کند و آن نام به هر دلیلی از قبل وجود داشته باشد.
- یا اینکه چند datapump job را با هم به صورت همزمان اجرا کرده باشید و تعداد آن jobها بیشتر از 99 تا باشد ، در چنین حالتی datapump نمیتواند یک job جدید ایجاد کند.
در چنین حالتی برای رفع این مشکل یا باید از یک JOB_NAME مشخص در دستور expdp/impdp استفاده کنید:
expdp system/system SCHEMA=scott DIRECTORY=data_pump_dir DUMPFILE=exp_scott.dmp JOB_NAME=exp_jo
و یا اینکه JOBهای قبلی را که وضعبت آنها NOT RUNNING است و اصطلاحا به آنها orphaned datapump jobs گفته میشود را حذف نمایید، که برای اینکار باید مراحل زیر را طی کنید:
1) شناسایی datapump jobهای موجود در دیتابیس که وضعیت آنها NOT RUNNING است.
select owner_name, job_name, operation, job_mode, state, attached_sessions
from dba_datapump_jobs
'where owner_name = '&SCHEMA
'and state = 'NOT RUNNING
;order by 1, 2
بجای &SCHEMA باید نام اسکیمایی که expdp/impdp با آن انجام میشود نوشته شود.
2) شناسایی جداول اصلی مرتبط با آن jobها
select o.status, o.object_id, o.object_type, o.owner||'.'||object_name "OWNER.OBJECT",o.created,j.state
from dba_objects o, dba_datapump_jobs j
where o.owner=j.owner_name
and o.object_name=j.job_name
'and o.owner='&SCHEMA
'and j.state='NOT RUNNING
;order by 4,2
3) پاک کردن جداولی که در مرحله 2 تولید شده اند.
;<drop table <tablename
n منابع
1- http://oracledba-duniya.blogspot.com/2013/05/resolving-ora-31634-job-already.html
2- Running DataPump Jobs Results In ORA-31634 ORA-31664 (Doc ID 138416)