我想知道如何停止oracle的撤消进程?我试图删除数百万行的大表,并且在进程中我杀了会话但是它开始撤消删除,并且对于一个两小时的数据库,数据库变得非常慢。我不想让撤消过程继续下去。有没有办法阻止它?
答案 0 :(得分:10)
您无法停止回滚事务的过程,因为这样做会使数据库处于不一致状态。
当您执行长时间运行的删除过程时,Oracle可能会在您决定是提交还是回滚事务之前将更改的块写入数据文件。如果在执行事务的过程中中断了该过程,则磁盘上会有一些更改的块,内存中会有一些更改的块,以及一些未更改的块。回滚事务是将数据库返回到开始执行DELETE
语句之前所处状态的唯一方法。
答案 1 :(得分:2)
正如您所发现的,逐行删除过程可能非常慢。如果删除都是在单个事务中完成的,就像这里的情况一样,它们可能变得更慢。您可能需要考虑以下选项:
如果您要删除表格中的所有行,可能需要考虑使用TRUNCATE TABLE语句。
如果您没有删除表中的所有行,则应该在删除一定数量的行后将您的过程更改为COMMIT。
与此同时,您将不得不等到该回滚过程完成。
分享并享受。
答案 2 :(得分:0)
当你尝试截断表时,它还在删除你会看到一个ORA-00054"资源很忙,并且在指定的NOWAIT或超时时间内获得"