Oracle delete truncate drop 的区别

1.delete/truncate只删除数据不删除表,索引的结构。drop将删除表的结构依赖的index/constrain/trigger,依赖于该表的procedure/function将保留,但是变为invalid状态;

2.deletedml,写rollbacksegement,可回滚,速度慢,事务提交之后才生效。在9i满足undo_retention条件下可使用flashback。一次性大批量数据的delete可能导致回滚段急剧扩展从而影响到数据库,慎用,触发triggertruncate/dropddl,隐式提交,不写rollbacksegment,不能回滚,速度快。9i不能使用flashback,不触发trigger

3.delete不影响表所占用的extentHWM保持原位置不动,即使删除的是最靠近HWM的数据。delete其实也可以释放空间,但是不降低HWMdeleteblock的空闲空间达到pct_used,就可以重用。truncate缺省情况下将空间(表和索引)释放到minextentsextent,除非使用reusestoragetruncate会将高水线复位(回到最开始)drop将表所占用的空间全部释放,segment不存在,无所谓HWM的概念;

Oracle高水位(HWM)

http://blog.csdn.net/tianlesoftware/archive/2009/10/22/4707900.aspx

4.truncate/drop的对象必须是本模式下的,或者被授予dropanytable的权限,但dropanytable权限不能truncate/dropsys的表。delete的对象必须是本模式下的,或者被授予deleteonSCHEMA.tabledeleteanytable的权限,但deleteanytable权限不能deletesys的表;

5.不能truncate一个带有enable外键的表,不管表里有没有数据,如果要truncate,首先要disable外键或者删除外键(drop外键的表肯定是删除了外键)。不能drop一个带有enable外键的表,不管表里有没有数据,如果要drop,首先要删除外键,或者直接用droptableTABLE_NAMEcascadeconstraints;级联删除外键。delete可以。

转载自网络

------------------------------------------------------------------------------

Bloghttp://blog.csdn.net/tianlesoftware

网上资源:http://tianlesoftware.download.csdn.net

相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1群:62697716();DBA2群:62697977

<!--EndFragment-->

你可能感兴趣的:(truncate)