oracle+ddl+执行很慢,Oracle的DDL语句不能回滚(直接提交)
在Oracle中,Oracle執(zhí)行DDL前會(huì)發(fā)出一個(gè)COMMIT語句,然后執(zhí)行DDL操作,最后再發(fā)出一個(gè)COMMIT操作。 附: DDL(data definition language):create,drop,alter,rename to
對(duì)于Oracle而言,DDL實(shí)際上是數(shù)據(jù)字典表的一系列的修改,也就是數(shù)據(jù)字典表的DML操作,那么理論上講Oracle是完全有能力實(shí)現(xiàn)DDL語句的回滾的,那么Oracle為什么設(shè)計(jì)成現(xiàn)在的工作方式。要知道Oracle以靈活和強(qiáng)大的可定制性著稱,但是Oracle沒有給用戶任何回滾DDL的可能性,顯示是存在著十分充分的理由。
也許有人奇怪SQLSERVER或一些其他的數(shù)據(jù)庫為什么可以實(shí)現(xiàn)DDL語句的回滾。事實(shí)上,前面提到了Oracle也是有能力實(shí)現(xiàn)DDL回滾的,只是這會(huì)極大的影響Oracle的并發(fā)性。要知道,Oracle的鎖機(jī)制和多版本讀一致性使得Oracle的并發(fā)性在所有數(shù)據(jù)庫產(chǎn)品中首屈一指。顯然為了實(shí)現(xiàn)DDL的回滾而損失最值得稱道的并發(fā)性,Oracle認(rèn)為得不償失。
` SQL> show autocommit; autocommit OFF SQL> create table test (id int);
表已創(chuàng)建。
SQL> rollback;
回退已完成。
SQL> select * from test;--表創(chuàng)建未回滾
未選定行
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 `
總結(jié)
以上是生活随笔為你收集整理的oracle+ddl+执行很慢,Oracle的DDL语句不能回滚(直接提交)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php编译自己库文件,php编译后追加库
- 下一篇: oracle 共享硬盘主从,oracle