Oracle exp/imp用户不同导致job停止工作

因为oracle数据库用户很多,统一用system用户进行导入/导出,导致普通用户的job作业停止工作

使用一下语句查看系统里所有的job

1 SQL>select * from dba_jobs;

发现所有普通用户job的LOG_USER和PRIV_USER字段都变成了system,而SCHEMA_USER还是原来的用户的schema名字。这是由于imp导入用户与job的属主用户不同造成的。

解决方法之一用job属主用户进行导入,参考”Oracle Jobs与Exp/Imp

重新导入太麻烦了,也可以这样解决:

以sysdba角色登录,执行一下语句修正两个字段LOG_USER和PRIV_USER的值为SCHEMA_USER字段的值

1 - -login sys as sysdba
2 update dba_jobs set log_user=’username’,priv_user=’username’ where schema_user=’username’;
3 commit;

如果job的broken属性是Y,以job owner用户登录执行以下语句:

1 - -login as job’s owner,
2 BEGIN
3   FOR i IN (SELECT job FROM user_jobs WHERE broken=’Y’)
4   LOOP
5        dbms_job.broken(i.job,false);
6        dbms_job.run(i.job,true);
7   END LOOP;
8 END;

或者这样执行
SQL>exec dbms_job.broken(job_id,false);
SQL>exec dbms_job.run(job_id);

这样就o了