oracle中job长时间执行无法结束
来源:互联网 发布:淘宝批量注册账号 编辑:程序博客网 时间:2024/05/17 01:11
iamlaosong文
我用job每天定时执行一些存储过程,以便对数据进行处理。正常情况下,这些存储过程执行完毕需要几十秒时间,但有时不知道什么原因一天都执行不完,导致第二天的job也无法顺利执行。如果不进行人工干预,这个job也许就再也不会执行下去了。通过查询和测试我知道卡死的原因是其中的一些SQL语句执行时间太长,就像服务器有时快有时慢一样,这些SQL语句执行也是时快时慢,猜想原因是不是oracle在做一些内部处理或冲突导致服务器变慢。
人工干预也就是杀死这个job,实验发现杀死job后再次执行这些存储过程有时依然很慢,目前的处理办法是杀死后暂时不再处理当天的数据,这样可以保证第二天的job正常执行。在job正常完成的日子里再次处理卡死那天的数据,发现存储过程很快完成。也就是说,同样的数据同样的程序有时卡死,有时顺利完成,能想到的原因也就是数据库本身了。
杀死job的方法如下:
1、判断job是否卡死
用PL/SQL Developer可以很轻松的看到job是否完成,只有查看job属性中next date是否变成第二天的执行时间,如果没变,说明job没有执行结束。也可以用下面的语句查询:
select * from dba_jobs_running where job='job号';
用这个语句可以查询执行job的sid列(会话编号)的值,这个值是杀死job的参数之一。
2、用下面语句查询杀死job的第二个参数serial#(会话序列号)
select * from v$session where sid='刚才查到的sid';
返回记录中就有 serial#列(会话序列号),paddr列(线程地址)
也可以将1、2两步合在一起执行:
select b.sid,b.serial# from dba_jobs_running a, v$session b where a.sid=b.sid and a.job='job号';
3、杀死job命令如下:
alter system kill session '会话编号sid,会话序列号serial#';
4、查看是否成功杀掉该会话(方法与步骤一相同,多执行几次select * from dba_jobs_running where job='job号'观察结果,如果杀掉了将不再有返回结果)。
5、job杀死后,被延误的job任然会启动
====================================
12月26日补充的实战记录:
24日启动的job到26日依然没有完成,处理如下:
1、select b.sid,b.serial# from dba_jobs_running a, v$session b where a.sid=b.sid and a.job='1';
2、alter system kill session '129,43354'; -- 根据第1步的结果杀死job
3、select * from dba_jobs_running where job='1'; -- 无记录,job已经杀死
4、很快job再次启动(job的next time没有变,this time是本次执行时间),依然很慢
5、select b.sid,b.serial# from dba_jobs_running a, v$session b where a.sid=b.sid and a.job='1';
6、alter system kill session '148,23846'; -- 根据第5步的结果杀死job
7、select * from dba_jobs_running where job='1'; -- 无记录,job已经杀死
8、很快job再次启动(job的next time没有变,this time是本次执行时间),很慢
9、修改job下次启动时间为第二天(next time),保证job不再启动
10、再次杀死已经启动的job,这次job不再启动,要等明天再看。
12月27日检查情况:
今天job正常完成,执行时间是1分19秒。
将卡死的两天数据重新处理一遍,一共2分23秒,一切正常。
可是昨天的job为什么会卡死,重新启动的job也是如此,原因再慢慢探知吧。
2017年4月7日
job再次卡死(4月6日的job),杀死(129,64082)后job再次启动(129,64085),这是今天的job
- oracle中job长时间执行无法结束
- oracle中job长时间执行没有结束
- Oracle中执行Job定时执行
- Oracle Job 不执行
- oracle job执行说明
- oracle执行job
- oracle job延迟执行
- oracle job定时执行
- Region.IsVisible长时间执行,无法取得结果
- Oracle数据库中,有Job不能自动执行。
- Oracle数据库中,有Job不能自动执行。
- oracle中job的执行间隔的设置
- oracle中使用job来周期性的定时执行sql
- oracle 中DB job的建立 定时执行任务
- oracle中创建job的用法(定时执行数据库)
- 解决关于oracle中job只执行一次的…
- 长时间DDL中执行FLUSH TABLE WITH READ LOCK导致数据库无法服务
- 执行oracle中的job报错:ORA-12011:无法执行作业1
- url参数返回乱码问题
- 关于Java的反射机制
- 【转载】java中重载与重写的区别
- springAOP面向切面编程之日志记录功能
- 组合模式
- oracle中job长时间执行无法结束
- XSS攻击及防御
- Android 阅读 Office 文档,所有你能想到的解决方案都在这啦
- php预定义变量
- MFC 打开弹出对话框
- Error parsing reference: "Pxxxxxx" is not a valid repository/tag
- Android基于Facebook Rebound的动画效果框架Backboard demo (非常炫酷)
- 手把手教你 搭建安卓自动化框架之 UIAutomator
- 基于dragonboard410c的sqlite3数据库编程