Oracle的DDL语句不能回滚(直接提交)

https://www.2cto.com/database/201209/155881.html

在Oracle中,Oracle执行DDL前会发出一个COMMIT语句,然后执行DDL操作,最后再发出一个COMMIT操作。 附: DDL(data definition language):create,drop,alter,rename to

对于Oracle而言,DDL实际上是数据字典表的一系列的修改,也就是数据字典表的DML操作,那么理论上讲Oracle是完全有能力实现DDL语句的回滚的,那么Oracle为什么设计成现在的工作方式。要知道Oracle以灵活和强大的可定制性著称,但是Oracle没有给用户任何回滚DDL的可能性,显示是存在着十分充分的理由。

也许有人奇怪SQLSERVER或一些其他的数据库为什么可以实现DDL语句的回滚。事实上,前面提到了Oracle也是有能力实现DDL回滚的,只是这会极大的影响Oracle的并发性。要知道,Oracle的锁机制和多版本读一致性使得Oracle的并发性在所有数据库产品中首屈一指。显然为了实现DDL的回滚而损失最值得称道的并发性,Oracle认为得不偿失。

` SQL> show autocommit; autocommit OFF SQL> create table test (id int);

表已创建。

SQL> rollback;

回退已完成。

SQL> select * from test;--表创建未回滚

未选定行

SQL> select sequence_name, increment_by from user_sequences;

SEQUENCE_NAME INCREMENT_BY


DBOBJECTID_SEQUENCE -50 TESTSEQ 2

SQL> alter sequence testseq increment by -2;

序列已更改。

SQL> select sequence_name, increment_by from user_sequences;

SEQUENCE_NAME INCREMENT_BY


DBOBJECTID_SEQUENCE -50 TESTSEQ -2

SQL> rollback;

回退已完成。

SQL> select sequence_name, increment_by from user_sequences; --alter sequence 也未回滚

SEQUENCE_NAME INCREMENT_BY


DBOBJECTID_SEQUENCE -50 TESTSEQ -2 `

转载于:https://my.oschina.net/liuyuanyuangogo/blog/1920365

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值