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