删除后,Oracle中的TRUNCATE命令如何能够检索表的结构?

Bha*_*esh 1 oracle

Oracle中的SQL命令TRUNCATE比DELETE FROM table;TRUNATE命令首先完全删除其中的指定表然后创建具有相同结构的新表(在我可能错误的情况下可能需要澄清)更快.由于TRUNCATE是DDL的一部分,因此它在执行之前和执行完成之后隐式发出COMMIT.如果是这种情况,那么由TRUNCATE命令删除的表将永久丢失,并且它在数据字典中的整个结构.在这种情况下,TRUNCATE命令如何能够首先删除表并使用相同的结构重新创建相同的表?

Gra*_*row 7

(请注意,我在SQL Anywhere工程中为Sybase工作,我的答案来自于我对如何truncate在那里实现的知识,但我想它在Oracle中也是类似的.)

我不相信桌子实际上是被丢弃并重新创建的; 内容被简单地扔掉了.这比delete from <table>不需要执行触发器要快得多,而不是一次删除一行(来自表和索引),服务器可以简单地丢弃包含该表和任何索引的行的所有页面.


Kev*_*ton 5

我认为截断(amoungst其他的东西)只是重置高水印.

请参阅:http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_10007.htm#SQLRF01707

但是在 http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2816964500346433991

很明显,截断后数据段会发生变化.