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選項同時被關閉; 這個時候最好執行備份,因為你這一段數據操作是沒有日志的,不利於以后恢復。