200G大表刪除資料方案
表總量200G,6億條記錄,每天增量400M,100萬行,需要刪除15天前的資料。
可選方案如下,權衡後選擇方案2
1.不停業務,按時間欄位來進行刪除,每天刪除20G資料(每次刪除大概5G,分四次完成),預計10天完成
優點:該表對應的業務不受影響
缺點:
時間長
時間欄位沒有索引,直接按時間欄位刪除太慢,時間欄位建立索引的話,索引段就20G,索引建立時間超過1小時,期間還可能因為臨時空間不足導致建立失敗
時間欄位建立索引後,刪除20G資料需要4小時,且回滾段大大佔用,容易引發其他程式報錯回滾段不足
2.停業務,透過expdp 按條件匯出最近15天資料,再對原表原索引原約束等物件改名,再impdp
優點:時間短,1小時即可完成,且可以對原表備份便於以後回滾
缺點:該表對應的業務必須停止1小時
操作步驟
步驟1:EXPDP匯出,耗時40分鐘
expdp system/manager directory=DUMP_DIR dumpfile=cuxmsc20170307.dmp tables=cux.cuxmsc query=cux.cuxmsc:\" where CREATION_DATE\>sysdate-15\"
步驟2:修改原索引、原約束、原觸發器等的名稱(system使用者下操作)
alter index CUX.cuxmsc_N1 rename to cuxmsc_N1170307;
alter table cux.cuxmsc rename constraint cuxmsc_PK to cuxmsc_PK170307;
alter table cux.cuxmsc rename constraint SYS_C00938162 to SYS_C00938162170307;
步驟3:修改原表表名,即備份原表(system使用者下操作)
ALTER TABLE cux.cuxmsc RENAME TO cuxmsc20170307
步驟4:IMPDP匯入,耗時3分鐘
impdp system/manager directory=DUMP_DIR dumpfile=cuxmsc20170307.dmp
步驟5:一週之內沒有問題的話刪除備份的原表
drop table cux.cuxmsc20170307 purge
expdp query也會匯出索引、約束、觸發器、comment、許可權等資訊
需要修改原索引、原約束、原觸發器名稱的原因是因為impdp會提示存在這些物件,導致這些物件無法匯入
當然導完後新表的dba_segments.bytes變成了6G,原表是200G,但是新表的dba_tables.num_rows和dba_tables.blocks和原表一樣,不代表高水位沒有降下來,只要重新收集一下統計資訊的話,新表的dba_tables.num_rows和dba_tables.blocks就變成實際的了
可選方案如下,權衡後選擇方案2
1.不停業務,按時間欄位來進行刪除,每天刪除20G資料(每次刪除大概5G,分四次完成),預計10天完成
優點:該表對應的業務不受影響
缺點:
時間長
時間欄位沒有索引,直接按時間欄位刪除太慢,時間欄位建立索引的話,索引段就20G,索引建立時間超過1小時,期間還可能因為臨時空間不足導致建立失敗
時間欄位建立索引後,刪除20G資料需要4小時,且回滾段大大佔用,容易引發其他程式報錯回滾段不足
2.停業務,透過expdp 按條件匯出最近15天資料,再對原表原索引原約束等物件改名,再impdp
優點:時間短,1小時即可完成,且可以對原表備份便於以後回滾
缺點:該表對應的業務必須停止1小時
操作步驟
步驟1:EXPDP匯出,耗時40分鐘
expdp system/manager directory=DUMP_DIR dumpfile=cuxmsc20170307.dmp tables=cux.cuxmsc query=cux.cuxmsc:\" where CREATION_DATE\>sysdate-15\"
步驟2:修改原索引、原約束、原觸發器等的名稱(system使用者下操作)
alter index CUX.cuxmsc_N1 rename to cuxmsc_N1170307;
alter table cux.cuxmsc rename constraint cuxmsc_PK to cuxmsc_PK170307;
alter table cux.cuxmsc rename constraint SYS_C00938162 to SYS_C00938162170307;
步驟3:修改原表表名,即備份原表(system使用者下操作)
ALTER TABLE cux.cuxmsc RENAME TO cuxmsc20170307
步驟4:IMPDP匯入,耗時3分鐘
impdp system/manager directory=DUMP_DIR dumpfile=cuxmsc20170307.dmp
步驟5:一週之內沒有問題的話刪除備份的原表
drop table cux.cuxmsc20170307 purge
expdp query也會匯出索引、約束、觸發器、comment、許可權等資訊
需要修改原索引、原約束、原觸發器名稱的原因是因為impdp會提示存在這些物件,導致這些物件無法匯入
當然導完後新表的dba_segments.bytes變成了6G,原表是200G,但是新表的dba_tables.num_rows和dba_tables.blocks和原表一樣,不代表高水位沒有降下來,只要重新收集一下統計資訊的話,新表的dba_tables.num_rows和dba_tables.blocks就變成實際的了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2134899/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle大表刪除部分資料的最佳方案Oracle
- 刪除大表資料
- 海量資料表刪除方案
- python 刪除大表資料Python
- MySQL大表刪除解決方案MySql
- 如何刪除大表中的資料
- 【C/C++】資料庫刪除大表C++資料庫
- MySQL刪除資料表MySql
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 如何高效率刪除大表歷史資料
- MongoDB 資料庫建立刪除、表(集合)建立刪除、資料增刪改查MongoDB資料庫
- sqlserver 億級資料刪除方案SQLServer
- 大資料表的truncate,列刪除,shrink回收高水位大資料
- 刪除表裡重複資料
- 刪除資料庫表空間資料庫
- .NET 資料庫大資料 方案(插入、更新、刪除、查詢 、插入或更新)資料庫大資料
- 簡單介紹mysql如何刪除資料表和關聯的資料表刪除詳情MySql
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- ORACLE刪除-表分割槽和資料Oracle
- PostgreSQL刪除表中重複資料SQL
- sql 多表關聯刪除表資料SQL
- Oracle批量建立、刪除資料庫表Oracle資料庫
- MySQL超大表刪除資料過程MySql
- MySQL(四) 資料表的插入、更新、刪除資料MySql
- 刪除a表中和b表相同的資料
- 資料庫 - 索引、基本表建立與刪除資料庫索引
- mysql 刪除表中重複的資料MySql
- 資料表分割槽分割與刪除歷史資料
- 刪除資料
- 【Oracle】刪除大表操作一則Oracle
- whk我【資料刪除】你個【資料刪除】的
- 表管理之二:表資料的插入修改與刪除
- MySQL資料庫表誤刪除恢復(一)MySql資料庫
- Excel表格增加和刪除Excel圖表資料Excel
- 刪除資料泵備份失敗的表
- SQL優化--刪除表的資料來加速SQL優化
- 臨時表空間資料刪除問題
- Oracle中刪除表中的重複資料Oracle