1. DB2大數據處理不記錄事務日志步驟:
? 建表需要添加屬性“NOT LOGGED INITIALLY”
? 在大批量更改操作的同一個事務開始時執行:“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”
? 執行更新sql
? 提交,一個事務完成,后續sql為下一個事務,默認記錄事務日志
? 但是根據IBM的官方文檔及測試,建表的時候不加參數“NOT LOGGED INITIALLY”,直接進行“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”也是可以的。
2. IBM官方文檔:
使用 NOT LOGGED INITIALLY 參數減少日志記錄
如果應用程序根據主表創建并填充工作表,并且您不擔心這些工作表的可恢復性(因為可以根據主表方便地重新創建它們),
那么創建工作表時可以在 CREATE TABLE 語句上指定 NOT LOGGED INITIALLY 參數。這樣可以減少日志記錄并提高性能。
使用 NOT LOGGED INITIALLY 參數的優點是,不記錄在創建表的同一個工作單元中對該表所作的任何更改(包括插入、刪除、更新或創建索引操作)。
這不僅降低了日志記錄工作量,還能提高應用程序性能。還可以對現有表使用帶 NOT LOGGED INITIALLY 參數的 ALTER TABLE 語句,來獲得同樣的結果。
3. 理解
?? 上述描述說了兩個意思:
??? 1.創建并填充工作表create table A as select * from B 時加NOT LOGGED INITIALLY不記錄日志。
??? 2.在表創建后(無論在建表時有無NOT LOGGED INITIALLY),對于一個事務不記錄日志時,用“ALTER TABLE tabname ACTIVATE NOT LOGGED INITIALLY”。
? 可以看出不記錄日志只是對事務而言,當事務提交后not logged intially選項同時被關閉。
? 因為該事務沒有記錄日志,導致對應的表出現異常后不能被恢復(發生SQL1477N異常,只能將表刪除重建),最好在not logged intially后對表執行備份。
? not logged intially方法不被推薦使用,如果要導入大量數據,還是使用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選項同時被關閉; 這個時候最好執行備份,因為你這一段數據操作是沒有日志的,不利于以后恢復。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
