有些操作會大批量地修改數據, 如大量數據的修改(Update) 、刪除一個表的所有數據(Delete)、大量數據的插入(Insert),這樣會使Log增長速度很快,有溢滿的危險。下面給大家介紹一下如何拆分大事務,以避免日志的溢滿。
例如執行“update tab_a set col_b = 0”命令時,若表tab_a很大,則此Update動作在未完成之前就可能使Log溢滿,引起1105錯誤(Log Full),而且執行這種大的事務所產生的獨占鎖(Exclusive Table Lock),會阻止其他用戶在執行Update操作期間修改這個表,這就有可能引起死鎖。為避免這些情況發生,我們可以把這個大的事務分成幾個小的事務,并執行“dump transaction”動作。
上例中的情況就可以分成兩個或多個小的事務:
update tab_a set col_b = 0 where col_a > x
go
dump transaction database_name with truncate_only
go
update tab_a set col_b = 0 where col_a <= x
go
dump transaction database_name with truncate_only
go
這樣,一個大的事務就被分成兩個較小的事務。
按照上述方法可以根據需要任意拆分大的事務。若這個事務需要備份到介質上,則不用“with truncate_only”選項。若執行“dump transaction with truncate_only”命令,應該先執行“dump database”。依此類推,我們可以對表刪除、表插入等大事務做相應的拆分。
新聞熱點
疑難解答