我有一个250Gb的数据表,有35列。我需要删除大约215Gb的数据 显然是要从表中删除大量行。此表包含否主键。
从此表中删除数据的最快方法是什么? Oracle中是否有任何用于此类大型删除过程的工具?
请使用Oracle建议我采用最快的方法。
答案 0 :(得分:3)
正如在上面的答案中所说,最好将要保留的行移动到单独的表中并截断表,因为有一个名为HIGH WATERMARK
的东西。更多细节可以在http://sysdba.wordpress.com/2006/04/28/how-to-adjust-the-high-watermark-in-oracle-10g-alter-table-shrink/找到。删除操作将压倒您调用它的UNDO TABLESPACE
。
recovery model
一词更适用于mssql我相信:)。
希望它能澄清此事。
感谢。
答案 1 :(得分:1)
解决方案可能是将要保留的记录移动到临时数据库,然后截断大表。然后,移回保留的记录。
请注意,事务日志文件可能因此而变得非常大(但取决于您的恢复模型)。
答案 2 :(得分:0)
很久以前我们遇到过类似的问题。有一个包含10亿行的表,但必须根据某些规则删除很大一部分数据。我们通过编写Pro * C作业来解析它,以提取我们想要保留的数据并应用规则,并将要保存的数据sprintf到csv文件。
然后创建了一个sqlldr控制文件,使用直接路径上传数据(不会创建撤消/重做(但是如果你需要恢复表,你有CSV文件,直到你进行下一次备份)。
序列是
Parellelism的数量取决于数据库服务器的CPU和内存 - 我们有16个CPU和几个RAM可供使用,所以没有问题。
正确数据的摘录是其中最长的部分。 经过几次试运行后,SQL Loader能够在一小时内加载完整的10亿行(即数十亿或10亿行)。