当前位置:K88软件开发文章中心编程全书编程全书01 → 文章内容

Sybase中拆分大事务的方法

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 2:00:13

:2011-11-05 22:48:18

有些操作会大批量地修改数据, 如大量数据的修改(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”。依此类推,我们可以对表删除、表插入等大事务做相应的拆分。


Sybase中拆分大事务的方法