Oracle数据库ROLLBACK操作失效,删除数据无法回滚求助
Oracle中ROLLBACK操作失效问题
执行的SQL操作
SELECT * FROM BOOKS; -- 100 ROWS returned. DELETE FROM BOOKS; -- 100 rows deleted SELECT * FROM BOOKS; -- no rows returned. ROLLBACK; --Rollback complete. SELECT * FROM BOOKS; -- no rows returned.
问题描述
原本预期执行ROLLBACK后能恢复所有数据,最后一次查询应返回100行,但实际无数据返回。正在学习Oracle数据库SQL,遇到该ROLLBACK失效问题。
常见原因及解决方案
- 自动提交已开启:若会话开启了
AUTOCOMMIT,DELETE执行后会自动提交事务,ROLLBACK自然无法回滚。执行SET AUTOCOMMIT OFF;关闭自动提交,再重新执行DELETE和ROLLBACK即可正常回滚。 - 存在隐式提交的DDL操作:Oracle中执行任何DDL语句(如
CREATE、ALTER、DROP)都会隐式提交之前的事务。检查DELETE到ROLLBACK之间是否执行过这类语句,若有则事务已被提交,无法回滚。 - 事务已被手动提交:确认
ROLLBACK前是否执行过COMMIT语句,手动提交后事务结束,ROLLBACK不再生效。 - 表类型特殊:如果
BOOKS是临时表,会话级临时表的数据在会话结束后清除,但DELETE操作本身可以回滚;若为事务级临时表,提交事务后数据会消失,此时ROLLBACK也无法恢复。另外若表设置为只读模式,DELETE操作本身可能不会生效,但不符合你这里的情况,可排查。
内容的提问来源于stack exchange,提问作者Muthuvel
相关产品推荐
相关产品推荐

