DB2不記錄事務日志


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM