2010-04-05 94 views
3

我們有一個要求,數以百萬計來自多個表作爲批處理作業(注意,我們不刪除所有的行以刪除行,我們是基於存儲的時間戳刪去在索引列中)。很顯然,正常的DELETE需要永久(因爲日誌記錄,參照約束檢查等)。我知道在LUW世界中,我們有ALTER TABLE NOT LOGGED INITIALLY,但我似乎無法找到DB2 v8 z/OS的等效SQL語句。任何人有什麼想法如何做到這一點非常快?另外,有關如何在刪除行時避免參考檢查的想法?請告訴我。從表中刪除了大量的行

回答

0

我們修改了表空間,因此鎖會出現在表空間級,而不是在頁面級別。一旦我們改變了DB2,只需要一個鎖就可以執行DELETE,而且我們沒有任何鎖定問題。至於日誌記錄,我們只是要求客戶瞭解所需的日誌量(因爲似乎沒有解決日誌記錄問題的解決方案)。至於約束,我們在刪除之後刪除並重新創建它們。

謝謝大家的幫助。

0
  1. 外鍵是否也有索引?

  2. 你怎麼會有你的刪除動作集? CASCADE, NULL, NO ACTION

  3. 使用SET INTEGRITY暫時禁用對批處理過程的約束。 http://www.ibm.com/developerworks/data/library/techarticle/dm-0401melnyk/index.html

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r

+0

是的,外鍵已經有索引。刪除操作不是行動。我會研究SET INTEGRITY。這裏更大的問題是能夠暫時不LOG登錄DELETE操作。在DB2 z/OS v8上可以這麼做嗎?謝謝你的幫助! – Azeem 2010-04-06 13:38:11

+0

您確定它是LOG部分的細節而不是參照完整性檢查嗎? 您可以發佈用於可能的性能改進的SQL嗎? – jasonk 2010-04-06 15:32:03

+0

您確定初始日誌跳轉的語法是否正確? 'ALTER TABLE [tablename] ACTIVATE NOT LOGGED INITIALLY' – jasonk 2010-04-06 15:38:13

1

在我已經解決了這樣的問題,過去通過導出數據並用替換樣式的命令重新加載它。例如:

EXPORT to myfile.ixf OF ixf 
SELECT * 
FROM my_table 
WHERE last_modified < CURRENT TIMESTAMP - 30 DAYS; 

然後你可以裝回它,取代舊的東西。

LOAD FROM myfile.ixf OF ixf 
REPLACE INTO my_table 
NONRECOVERABLE INDEXING MODE INCREMENTAL; 

我不確定這是否會更快或不適合您(可能取決於您是否刪除了比您保留的更多)。

+0

Scott,謝謝你的回答。是的,我們研究了這種變體(使用REORG DISCARD),但DB2 v8 for z/OS對您可以在表上發佈的SELECT(即使在執行LOAD/UNLOAD時)有限制。無論如何,結果很容易解決。我會盡快將它作爲答案發布。 – Azeem 2010-04-15 15:50:00