1. DB2大數(shù)據(jù)處理不記錄事務(wù)日志步驟:
? 建表需要添加屬性“NOT LOGGED INITIALLY”
? 在大批量更改操作的同一個事務(wù)開始時執(zhí)行:“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”
? 執(zhí)行更新sql
? 提交,一個事務(wù)完成,后續(xù)sql為下一個事務(wù),默認(rèn)記錄事務(wù)日志
? 但是根據(jù)IBM的官方文檔及測試,建表的時候不加參數(shù)“NOT LOGGED INITIALLY”,直接進(jìn)行“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”也是可以的。
2. IBM官方文檔:
使用 NOT LOGGED INITIALLY 參數(shù)減少日志記錄
如果應(yīng)用程序根據(jù)主表創(chuàng)建并填充工作表,并且您不擔(dān)心這些工作表的可恢復(fù)性(因為可以根據(jù)主表方便地重新創(chuàng)建它們),
那么創(chuàng)建工作表時可以在 CREATE TABLE 語句上指定 NOT LOGGED INITIALLY 參數(shù)。這樣可以減少日志記錄并提高性能。
使用 NOT LOGGED INITIALLY 參數(shù)的優(yōu)點是,不記錄在創(chuàng)建表的同一個工作單元中對該表所作的任何更改(包括插入、刪除、更新或創(chuàng)建索引操作)。
這不僅降低了日志記錄工作量,還能提高應(yīng)用程序性能。還可以對現(xiàn)有表使用帶 NOT LOGGED INITIALLY 參數(shù)的 ALTER TABLE 語句,來獲得同樣的結(jié)果。
3. 理解
?? 上述描述說了兩個意思:
??? 1.創(chuàng)建并填充工作表create table A as select * from B 時加NOT LOGGED INITIALLY不記錄日志。
??? 2.在表創(chuàng)建后(無論在建表時有無NOT LOGGED INITIALLY),對于一個事務(wù)不記錄日志時,用“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”。
? 可以看出不記錄日志只是對事務(wù)而言,當(dāng)事務(wù)提交后not logged intially選項同時被關(guān)閉。
? 因為該事務(wù)沒有記錄日志,導(dǎo)致對應(yīng)的表出現(xiàn)異常后不能被恢復(fù)(發(fā)生SQL1477N異常,只能將表刪除重建),最好在not logged intially后對表執(zhí)行備份。
? not logged intially方法不被推薦使用,如果要導(dǎo)入大量數(shù)據(jù),還是使用Load,Import好一些; 想要在程序中寫也是可以的,DB2提供了API,你可以參考API Reference。
4. sql舉例
DB2 CREATE TABLE A ...... NOT LOGGED INITIALLY;
db2 ALTER TABLE A ACTIVATE NOT LOGGED INITIALLY;
db2 Insert into a select * from b;
db2 commit;
commit之前由于打開了not logged intially選項,后面的Sql語句不計日志;
commit之后not logged intially選項同時被關(guān)閉; 這個時候最好執(zhí)行備份,因為你這一段數(shù)據(jù)操作是沒有日志的,不利于以后恢復(fù)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

