快速清空DB2表記錄

keeking發表於2011-01-06
alter table tabname activate not logged initially with empty table

如果要清空部分表內容,下面兩句要一起執行
alter table tabname activate not logged initially 
delete from tabname where id >1000

truncate 命令在DB2裡面沒有,V9.7據說有.

===================================================

db2 import from /dev/null of del replace into tabname

======================================================

在DB2資料庫中,如果想快速清空一張大表(類似在 ORACLE 中使用 TRUNCATE TABLE 快速清空一張大表),有兩種方法:

1. 使用 “ ALTER TABLE 表名 ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE ” 命令。
2. 使用空檔案為資料檔案匯入並替換表中資料。

* 在 windows 平臺,可以先使用 EXPORT 匯出一個空檔案,再使用 IMPORT 命令從空檔案中匯入並替換該表中資料,比如:
export to test.ixf of ixf messages log.txt select * from test where 1=2
import from c:\ test.ixf of ixf messages log1.txt replace into test
* 在 UNIX 平臺,除了使用 A 方法以外,還可以使用從空(NULL)中匯入並替換該表資料,比如:
import from /home/null of del replace into test

如果使用“ DELETE TABLE ”命令刪除整個大表中的資料,由於這個命令採用逐條刪除,並把該操作記入活動的交易日誌,將會耗費大量的活動日誌空間,有可能造成資料庫交易日誌已滿錯 誤,另外,這樣刪除大表資料耗費的時間也很長。對於屬於 DMS 表空間的表來說,刪除命令逐條掃描記錄,所佔的記錄空間仍標記為該表所用,而不立即釋放空間,需要用 REORG 命令才可以釋放剩餘空間。

使用以上兩種DB2錶快速清空方法進行快速清空一張大表,將使 DB2 交易日誌只記錄該條命令,並立即釋放所佔用的空間,而不會像刪除命令一樣逐條掃描記錄,從而節省大量的資料庫交易日誌和處理時間。用 LOAD 命令加 REPLACE 引數可以達到類似 IMPORT 命令加 REPLACE 的效果,但是由於 LOAD 本身不記日誌,所以對於可恢復的資料庫,LOAD 完成後建議馬上做一下聯機備份的,相比之下,IMPORT 命令加 REPLACE 操作上比較簡單一些。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7899089/viewspace-683384/,如需轉載,請註明出處,否則將追究法律責任。

相關文章