我有一个生产Oracle数据库,其中包含在以前工作期间制作的表中备份的大量数据。这些表彼此独立,与数据库的其余部分相互独立。
我想删除这些备份,最好一次性删除。我知道在更新版本的Oracle中,在从回收站中清除之前,实际上不会丢弃掉表。我会接受的。
一次性将它们全部掉落是否安全?在DROP操作期间是否存在性能损失?在手术期间是否有可能耗尽资源?
最安全的方法是什么?
答案 0 :(得分:5)
一次放下它们可能是安全的。
通常,无论表的大小如何,删除表都非常快。 DROP并没有真正改变任何数据,Oracle只是更改数据字典以将空间标记为可用。我丢弃了大量数百GB或更多数据的表,从未遇到过问题。 (您的数据文件可能不再适当,但这是另一个问题。)
除了依赖关系和锁定之外,我唯一一次看到丢弃需要(相对)长时间是因为延迟块清除。基本上,如果您更新,删除或插入(不附加)大量数据,Oracle可能会将一些事务数据写入块。这样做的原因是使COMMIT立即生效,但这意味着即使从表中读取的下一个查询也可能需要清理旧的事务条目。
但是你遇到这个问题的机会很小。如果您有非常大的表,可能是使用直接路径插入创建的,或者其他人已经查询过表并清除了块。即使在最糟糕的情况下,如果你的系统足够好来编写数据,它可能足以摆脱它(尽管如果事务太旧或者没有存档,你可能会遇到ORA-01555快照太旧了从延迟块清除等额外重做中记录空间。)。
答案 1 :(得分:2)
如果表格没有家属且未使用,则可以安全地将它们全部丢弃。如果您担心新的回收站功能,可以执行“drop table table_name purge”,它将绕过recyclebin并进行清除,而无需从回收站中清除它们。