刪除重復資料
背景:
某定時應用程式(每天02:00啟動)會讀取指定目錄下的所有txt扁平資料檔案,並將資料儲存到ORACLE資料庫。本來應用程式將txt檔案中資料入庫後,會將目錄中的txt資料檔案備份到另外的目錄中,但是應用程式有BUG導致備份失敗。應用程式初始執行時需要對1億全量的資料入庫,接連執行8天,因應有程式有BUG導致資料重複入庫8次,結果資料庫表中有7億重複資料。之所以把應用程式做成定時,是因為每天有100萬增量資料需要入庫。
表T_TEST結構:
col_id1 NUMBER(11)
col_id2 NUMBER(5)
col_3 VARCHAR2(32)
col_4 NUMBER(10)
col_5 VARCHAR2(256)
updatetime timestamp
注:通過col_id1,col_id2欄位可以判斷記錄是否重複,updatetime為記錄更新時間
問題:
最後更新的記錄保留,將其它重複的記錄刪除
解決方案:
1.通過create table ... as select將不重複的記錄重建成表T_TEST_1
create table T_TEST_1 nologging tablespace &tablespace_name as
select col_id1, col_id2, col_3, col_4, col_5
from (select col_id1,
col_id2,
col_3,
col_4,
col_5,
updatetime,
row_number() over(partition by col_id1, col_id2 order by updatetime desc) rn
from T_TEST)
where rn = 1;
2.對新表重建索引,原表有多少索引,在新表上也重建多少索引
create index IND_T_TEST_1 on T_TEST_1(col_id1, col_id2)
nologging tablespace &ind_tablespace_name;
3.收集新表統計資訊,確保SELECT查詢採用正確高效率的執行計劃
declare
BEGIN
dbms_stats.gather_table_stats(ownname => '&user',
tabname => 'T_TEST_1',
estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
cascade => true,
method_opt => 'FOR ALL COLUMNS SIZE 1',
granularity => 'all');
END;
/
4.將新表和新索引更改為日誌方式
alter table T_TEST_1 logging;
alter index IND_T_TEST_1 logging;
5.備份舊錶,將新表切換上線
alter table T_TEST rename to T_TEST_BAK0902;
alter table T_TEST_1 rename to T_TEST;
不建議方案:
不建議直接在原表T_TEST上做DELETE操作
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24867586/viewspace-713711/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 刪除重複資料
- mongodb刪除重複資料MongoDB
- oracle刪除重資料方法Oracle
- MySQL刪除重複資料MySql
- 刪除表裡重複資料
- sqlserver中刪除重複資料SQLServer
- oracle恢復誤刪除資料Oracle
- Oracle閃回刪除恢復誤刪資料Oracle
- PostgreSQL刪除表中重複資料SQL
- 解析postgresql 刪除重複資料案例SQL
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- MS SQL Server 刪除重複行資料SQLServer
- T-SQL 刪除重複資料SQLSQL
- 海量資料處理_刪除重複行
- 根據rowid刪除重複資料
- 通過ROWID刪除重複資料
- Oracle中刪除重複資料的SqlOracleSQL
- mysql 刪除表中重複的資料MySql
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄) 轉Oracle
- 【轉】oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- 誤刪除資料了怎麼辦?小編交易誤刪除資料的恢復方法
- PostgreSQL中刪除的資料能否恢復SQL
- Flashback Query恢復誤刪除資料(轉)
- RM 刪除資料檔案恢復操作
- excel刪除重複資料保留一條 如何刪掉重複資料只留一條Excel
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- ORACLE批量刪除無主鍵重複資料Oracle
- Python 字串,list排序,刪除重複資料Python字串排序
- Mongodb 刪除重複資料的幾個方法MongoDB
- oracle重複資料的查詢及刪除Oracle
- oracle 刪除重複資料的幾種方法Oracle
- Oracle 刪除重複資料只留一條Oracle
- 刪除重複資料的幾個方法(轉)
- Oracle中刪除表中的重複資料Oracle
- Oracle查詢重複資料與刪除重複記錄Oracle
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- mysql查詢表裡的重複資料方法和刪除重複資料MySql