2013-06-04 85 views
1

將事務日誌部署到測試環境時,我遇到了問題。我試圖增加日誌大小,但我認爲如果可以禁用所有日誌記錄,那麼這將會更好。至少在重置期間。關閉IBM DB2 9.7中的日誌記錄LUW

顯然有一個命令:

alter table table-name not logged initially; 

但這裏有一個單獨指定的所有表。我試圖找到一種方式來做到這一點:

1. turn off logging 
2. delete all tables in schema 
3. create/populate tables in schema 
4. turn logging back on 

我有2分和3所覆蓋,而不是1和4,最後一點4.甚至沒有必要在我們的測試環境。

任何想法?謝謝!

+1

你想要什麼是不可能的。考慮使用DB2 LOAD來填充表 - 這將最大限度地減少日誌記錄。 – mustaccio

回答

1

那裏的桌子太多了嗎?自動腳本將有助於做重複的任務:

db2 list tables for schema triuser | grep " T " |awk '{print "ALTER TABLE "$1" NOT LOGGED INITIALLY"}' 
+0

對不起,但我不明白這是如何禁用日誌記錄?是的,我們有很多表 – user1340582

0

cnZach寫道,你必須從你得到的信息生成一個查詢。您可以通過查詢目錄來實現,然後創建一組語句。

按照你說的話,禁用特定表中的記錄的語句是

alter table table-name not logged initially; 

但是你要取回所有的表,或一組從數據庫表。這可以通過查詢目錄

db2 "select substr(tabschame) || '.' || substr(tabname) \ 
from syscat.table where type = 'T' and tabschema not like 'SYS%'" 

一旦你已經修改了之前的查詢您的要求(獲取你所需要的表),那麼你修改查詢生成ALTER語句爲所有表進行

db2 "select 'alter table ' || substr(tabschame) || '.' \ 
|| substr(tabname) || ' not logger initially' \ 
from syscat.table where type = 'T' and tabschema not like 'SYS%'" 

如果您願意,您可以直接執行db2輸出,或者只是將它發送到一個文件並稍後通過「db2 -tvf filename.sql」執行它。另一個選項有一個回調,因爲存在問題輸出大小;如果大於某個限制,則不能執行(| db2 + p -tv)

db2 "select 'alter table ' || substr(tabschame) || '.' \ 
|| substr(tabname) || ' not logger initially' \ 
from syscat.table where type = 'T' and tabschema not like 'SYS%'" | db2 +p -tv 
+1

只要記住,NOT LOGGED INITIALLY狀態具有工作範圍的單位 - 只要提交提交,它就會關閉。由於DB2命令行處理器默認情況下自動提交,因此您需要使用'+ c'命令行選項將其關閉:'db2 + c -tvf filename.sql'並執行所有後續語句(步驟2和步驟2) 3在你的計劃中)以相同的方式。 – mustaccio

+0

我會提醒注意不要使用「NOT LOGGED INITIALLY」 - 如果你有任何失敗,這會使表格處於不可操作狀態,你將不得不放棄/重新創建表格。 –