Sybase SQL Server日志问题普及(三)

2009-1-7    | |
打印本文章
RSS

导读:管理好数据库log是用户操作数据库必须考虑的一面。本文详细解释了如何管理大的transactions的一些方法、技巧。

关键词:Sybase SQL Server Sybase日志问题 log管理

正在加载数据...

七、管理大的transactions

有些操作是大批量地修改数据,log增长速度十分快,如:

◆大量数据修改

◆删除一个表的所有记录

◆基于子查询的数据插入

◆批量数据拷贝

下面讲述怎样使用这些transaction 使log 不至溢满:

大量数据修改

例:


1>;update large_tab set col_1=0 
2>;go 

若这个表很大,则此update动作在未完成之前就可能使log满,引起1105错误(log full)而且执行这种大的transaction所产生的exclusive table loc,阻止其他用户在update期间修改这个表,这可能引起死锁。为避免这些情况,我们可以把这个大的transaction分成几个小 的transactions,并执行dump transaction 动作。

上述例子可以分成两个或多个小transactions.

例如:


1>;update large_tab set col1=0 
2>;where col2 3>;go 
1>;dump transaction database_name with truncate_only 
2>;go 
1>;update large_tab set col1=0 
2>;where col2>;=x 
3>;go 
1>;dump transaction database_name with truncate_only 
2>;go 
 

若这个transaction 需要备份到介质上,则不用with truncate_only 选项。若执行dump transaction with truncate_only,应该先做dump database 命令。

删除一个表的所有记录

例:

1>;delete table large_tab 
2>;go  

同样,把整个table的记录都删除,要记很多log,我们可以用truncate table命令代替上 述语句完成相同功能。

1>;truncate table large_tab 
2>;go  

这样,表中记录都删除了,而使用truncate table 命令,log只记录空间回收情况,而不 是记录删除表中每一行的操作。

基于子查询的数据插入

例:


1>;insert new_tab select col1,col2 from 
large_tab 
2>;go
 

同样的方法,对这个大的transaction,我们应该处理为几个小的transactions。


1>;Insert new_tab 
2>;select col1,col2 from large_tab where col1<=y 
3>;go 
1>;dump transaction database_name with truncate_only 
2>;go 
1>;insert new_tab 
2>;select col1,col2 from large_tab where col1>;y 
3>;go 
1>;dump database database_name with truncate_only 
2>;go 
 

同样,若想保存log到介质上,则dump transaction 后不加with truncate_only 选项。若 执行dump transaction with truncate_only,应该先做dump database 动作。

批量数据拷贝

在使用bcp把数据拷入数据库时,我们可以把这个大的transaction变成几个小的 transactions处理,避免log剧增。

开放trunc log on chkpt 选项


1>;use master 
2>;go 
1>;sp_dboption database_name,trunc,true 
2>;go 
1>;use database_name 
2>;go 
1>;checkpoint 
2>;go  
bcp... -b 100 (on unix) 
bcp... /batch_size=100(on vms) 

关闭trunc log on chkpt选项,并dump database。

在这个例子中,一个批执行100行拷贝。也可以将bcp输入文件分成两或多个分开的文件, 在每个文件执行后做dump transaction 来避免log 满。

若bcp使用快速方式(无索引,无triggers),这样操作不记log,换句话说,log 只记载空间分配情况。在这种情况下,要先做dump database(为恢复数据库用)。若log太小,可置 trunc log on chkpt 选项,这样在每次checkpoint后清除log。


Sybase SQL Server日志问题普及
 Sybase SQL Server日志问题普及(一)
 Sybase SQL Server日志问题普及(二)
 Sybase SQL Server日志问题普及(三)
 Sybase SQL Server日志问题普及(四)
 Sybase SQL Server日志问题普及(五)

原文出处:http://www.sybase.com.cn/gvswse/site/china/index.jsp
来源:Sybase中国    
  评论
 
Replication Server(数据复制服务器)最初是如何定位的?它的应用价值体现主要在那些方面?相对以前的版本来说,目前的新版本Sybase Replication Server 15.2有哪些……
 
SQL Server的阈值管理允许用户为数据库的某个段上的自由空间设置阈值和定义相应的存储过程。当该段上的自由空间低于所置阈值时,SQL Server自动运行相应存储过程……
 
如何进行Threshold和transaction log管理?SQL Server提供阈值管理功能,它能帮助用户自动监视数据库log设备段的自由空间。在使用Sybase数据库管理系统(SQL Server)……
 
如何管理大的管理大的transactions?有些操作是大批量地修改数据,log增长速度十分快,如大量数据修改、删除一个表的所有记录、基于子查询的数据插入等等。
 
Sybase SQL Server的每一个数据库,无论是系统数据库还是用户数据库,都有自己的transaction log,每个库都有syslogs表。Log记录用户对数据库修改的操作……
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录