问题现象
Expdp导出sys_yz schema时报错如下,并且无法导出
ORA-31634: job already exists
ORA-31664: unable to construct unique jobname when defaulted
问题原因
使用sys用户检查视图DBA_DATAPUMP_JOBS,这个视图中保存的是expdp的一些出错信息,
是基于 gv$datapump_job, obj$, com$, and user$ 的一个视图。 这个视图显示仍在运行的数据泵作业,或者作业的 master 表仍然保留在数据库中,或者不正常结束的作业(异常作业)。如果一个新的数据泵作业启动, 会创建一条新的记录,与旧的数据泵作业无关
正常情况下,这个视图中not running状态的内容应该为空,但本次检查出现了127条数据
当用系统自动生成的作业名启动一个新的数据泵作业时,我们会检查 dba_datapump_job 中现有的名称以保持惟一性。当然,启动这个作业的用户下需要有足够的空间来创建一个新的 master 表
数据泵作业与用 DBMS_JOBS 包定义的作业不同, DBMS_JOBS 创建的作业使用它自己的进程。 数据泵作业使用一个 master 进程和一些 worker 进程。如果一个数据泵作业被暂停,数据泵作业会一直存在在数据库中(status: NOT RUNNING),这时,master 和 worker 进程会被停止,或者不再存在。客户端之后可以再次挂载到这个作业,并且继续作业的执行(START_JOB)
如果活动的数据泵作业相关联的 master 表被删除,可能会导致不一致删除 master 表本身