还是高级复制的问题,这次可能是因为job执行过程中,对方机器刚好重启导致的。反正job是卡在那里了,都10多天了。

查看 dba_jobs_running 表,可以看到卡住的job的 job_id 和 sid 。查看 dba_jobs 表,可以看到相应 job 的信息,this_date 如果有数据的话,表示的是 job 开始执行的时间,next_date 是下次执行 job 的时间,如果 job 正常执行完毕,那么 this_date 应该是空的。根据 sid 还可以查看 v$session_wait 和 v$session 里面的这个 job 的一些状态。

尝试了下面的方法来重新运行job,当时好像不好用,不过今天来看的时候,job是执行了。现在也不清楚是不是我这个操作起作用了,真晕。

SQL> exec dbms_job.broken(109,true);
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select job,sid from dba_jobs_running;
JOB SID
---------- ----------
109 656
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'REPADMIN';
SADDR SID SERIAL# PADDR USERNAME STATUS
-------- ---------- ---------- -------- ------------------------------ --------
973CF8C4 626 27 98F96BB8 REPADMIN ACTIVE
973D2E7C 629 10 98F88670 REPADMIN ACTIVE
973F11F4 656 10 98F88174 REPADMIN ACTIVE
SQL> alter system kill session '656,10';
System altered.
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'REPADMIN';
no rows selected
SQL> select job,sid from dba_jobs_running;
no rows selected
SQL> select job,log_user,last_date,next_date from dba_jobs where log_user='REPADMIN';
JOB LOG_USER LAST_DATE
---------- ------------------------------ -------------------
NEXT_DATE
-------------------
106 REPADMIN 2007-06-28 16:25:43
2007-06-28 16:35:43
109 REPADMIN 2007-06-28 16:07:38
4000-01-01 00:00:00
110 REPADMIN 2007-06-28 16:25:43
2007-06-28 16:35:43
SQL> exec dbms_job.broken(109,false,sysdate);
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select job,log_user,last_date,next_date from dba_jobs where log_user='REPADMIN';
JOB LOG_USER LAST_DATE
---------- ------------------------------ -------------------
NEXT_DATE
-------------------
106 REPADMIN 2007-06-28 16:25:43
2007-06-28 16:35:43
109 REPADMIN 2007-06-28 16:07:38
2007-06-28 16:28:40
110 REPADMIN 2007-06-28 16:25:43
2007-06-28 16:35:43

此后就我所知道的,就只能等着了。dbms_job.run(job_id) 也可以让 job 立即执行。关键是看 this_date ,他的值就是开始执行 job 的时间,job 如果执行时间太长,而下次执行又太快的话,可能也会导致问题。所以还可以尝试手动执行 job 看看。 dba_jobs 的 waht 字段就是对于的语句。