小智 6
来自Dan Morgan 的Oracle Truncate:
注意:删除执行正常的 DML。也就是说,它们锁定行,生成重做(大量),并且需要 UNDO 表空间中的段。小心地从块中删除清除记录。如果发生错误,可以发出回滚以在提交之前恢复记录。删除不会放弃段空间,因此已删除所有记录的表保留其所有原始块。
截断是 DDL,从某种意义上说,是作弊。截断将表的高水位标记移回零。不获取行级锁,不生成重做或回滚。从表中取消分配初始范围的所有范围(如果您将 MINEXTENTS 设置为 1 以外的任何值,则保留该范围数而不仅仅是初始值)。通过重新定位高水位线,它们可以防止读取任何表数据,因此它们具有与删除相同的效果,但没有所有开销。只是一个小问题:truncate 是一个 DDL 命令,因此如果您认为自己犯了错误,则无法回滚它。(当然,与删除不同的是,您不能选择性地截断 - 不允许使用“WHERE”子句也是如此)。
通过重置高水位线,截断可以防止读取任何表的数据,因此它们具有与删除相同的效果,但没有开销。但是,必须牢记截断的一个方面。因为 Truncate 是 DDL,所以它在执行之前发出一个 COMMIT,然后发出另一个 COMMIT,因此不可能回滚事务。
请注意,默认情况下,即使未指定 DROP STORAGE,TRUNCATE 也会删除存储。
归档时间: |
|
查看次数: |
4811 次 |
最近记录: |