如果我有一个非常长的运行UPDATE查询需要几个小时,而我恰好在它正在运行的中间取消。
我收到以下消息: “用户请求取消当前操作”
感谢。
答案 0 :(得分:2)
取决于。
假设您正在使用的任何客户端应用程序正确实现了查询超时,并且错误指示超出了超时,那么Oracle将在抛出错误时开始回滚事务。一旦事务完成回滚,锁将被释放。但请注意,它可以轻松地回滚查询运行所需的时间。所以在释放锁之前可能需要一段时间。
另一方面,如果客户端应用程序没有正确实现取消,客户端可能没有通知Oracle取消该交易,因此它将继续。根据Oracle配置以及客户端的确切操作,数据库可能会在一段时间后检测到应用程序没有响应并终止连接(通过上面讨论的相同回滚过程)。或者Oracle可能最终继续处理查询。
您可以通过查询dba_waiters
和dba_blockers
来查看哪些会话持有锁定以及哪些会话等待锁定。