首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 快速刪除大量數據:TRUNCATE vs DELETE 與閃回恢復限制

     編輯:Oracle 教學

兩種刪除方式本質差異

特性DELETETRUNCATE
類型DMLDDL
觸發器觸發不觸發
UNDO/REDO產生大量極少(僅字典變更)
高水位線不重置重置
速度慢(逐行)極快(元數據操作)
回滾可回滾不可回滾
閃回恢復支援不支援
WHERE 條件支援不支援

實驗驗證:TRUNCATE 後閃回失敗

  1. 建立還原點:CREATE RESTORE POINT before_truncate;
  2. 執行 TRUNCATE TABLE test_table;
  3. 嘗試閃回:FLASHBACK TABLE test_table TO RESTORE POINT before_truncate;
  4. 結果報錯:ORA-38305: 无法闪回 TRUNCATE TABLE 操作

最佳實踐策略

  • 全表清空且確定不需恢復:使用 TRUNCATE,秒級完成
  • 需保留恢復能力:使用 DELETE,配合提交前驗證
  • 分區表大量刪除:使用 DROP PARTITION 或 TRUNCATE PARTITION
  • 生產環境謹慎操作:TRUNCATE 前務必備份或匯出關鍵數據
  • 大表分批 DELETE:避免 UNDO 表空間爆滿,每批 5000-10000 行並提交

補充:DELETE 大表優化技巧

-- 使用 ROWID 分批刪除,避免全表掃描鎖定
DELETE FROM big_table
WHERE rowid IN (SELECT rowid FROM big_table WHERE condition AND ROWNUM <= 10000);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved