一个操作执行了10多个小时还没有完?不知为什么。

javanow 2004-09-23 11:58:09
一个存储过程,需要在100万条数据里删除1%的数据,同时还需要在其它表里删除1%的数据。
使用了游标(必须使用)。且有索引。不知如何解决。

btw:
游标提取的记录是用来被删除的。
cursor is select x from tablea.
...
delete from tablea where ....

多谢了。
...全文
166 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wupangzi 2004-09-25
  • 打赏
  • 举报
回复
kill掉进程是可以的!
我的想法和你的有点不一样,如果你在执行你的过程的时候,有一条记录是在操作的,那么就可能造成不能整个过程顺利的执行!但是,对其它的记录是不会有任何反应,也不会不能操作的!
所以,你可以找个没有对数据库进行任何操作的时候去执行一下(包括程序的运行),你的过程!
当然如果死循环,我觉得是不太可能的!简单的就是,你取游标的时候,先取10条来看看,很快,就可以知道,是不是存在这可能了!
ITpassport 2004-09-25
  • 打赏
  • 举报
回复
如果机器的性能没有下降,可能这个进程已被系统停掉了,也不会是死循环。
是不是你的数据相关性太多了
javanow 2004-09-24
  • 打赏
  • 举报
回复
肯定没有锁,因为没有影响其它的操作。

我刚才想到一个问题,是不是这个进程停止响应了,就是ORACLE挂起了它,可能他实际并没有做任何操作。我觉得如果是个死循环的话,肯定会影响其它的操作,或者性能下降对吧。

是不是我可以将这个进程KILL掉,然后重新执行。

引用
那么你可以在提取游标的时候每次取100条语句看看,或者1000条,看看这样执行是不是可以!

游标大约是从100万条记录中提取1000条左右的,不会太多。
wupangzi 2004-09-24
  • 打赏
  • 举报
回复
以前我碰到过,不过我是修改的!我的数据有几百万!
首先我要知道,你在执行这过程的时候,是不是还在进行其他任何对数据库数据进行操作?
如果进行了其他操作,查看一下:select * from v$locked_object,是不是有锁!
如果看了没有锁,那么你可以在提取游标的时候每次取100条语句看看,或者1000条,看看这样执行是不是可以!
如果不可以我们继续讨论!
zwj0712 2004-09-24
  • 打赏
  • 举报
回复
你可能是你update的东西太多,要么是你有一些子查询也要处理。不过1000000也不要这么长时间,除非你的机子性能差,要么你贴出来看看好吗??

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧