其中包含一个将近1.5 TB数据的oracle表。需要从中清除至少0.5 TB的数据。这是一个生产表,并且有大量的写命令在其上运行。清除这些数据的最佳方法和最快方法是什么。
答案 0 :(得分:2)
我想,“清除” =“删除” =“删除”。
您有几种选择;这里是其中一些:
表是否已分区?我猜不是;否则,您只需要truncate
(或drop
)个分区,就不再需要了,这将快速
另一个选择是从字面上delete
那些行。它将创建一个大型的 undo 。
或者,使用CTAS(选择创建表)并使用要保留的行创建一个新表;然后截断(或者,如果可以承受,则删除)原始表,然后将行移回(或者,如果将其删除,则将新创建的表重命名为旧的原始名称)。取决于外键约束,可能不是那么简单。
或者,使用PL / SQL过程中的循环,删除块中的行。为了节省一些撤消空间,请在循环中进行提交(不过不要太频繁)。 ORA-01555(快照太旧了)可能会出现
哪个是最好的?这是一个百万美元的问题,我没有答案。如果可能的话,将该表导入到您的测试环境中,然后 test 这些选项。不建议在生产中进行测试,对吗?
答案 1 :(得分:0)
我们在工作中遇到同样的问题。我们的攻击计划是在线重新定义表的分区。完成后,可以删除相关分区。
我们当前正在测试机上设置数据库副本以测试该方法。