SYBASE数据库日志详解

SYBASE公司是世界著名的数据库厂家,其关系数据库产品SYBASE SQL Server在中国大中型企事业单位中拥有大量的用户。笔者在多年的使用过程中,总结出SYBASE数据库管理和维护的一些经验,现拿出来与大家分享。 我们知道,SYBASE SQL Server用事务(Transaction)来跟踪所有数据库的变化。事务是SQL Server的工作单元。一个事务包含一条或多条作为整体执行的T-SQL语句。每个数据库都有自己的事务日志(Transaction Log),即系统表(Syslogs)。事务日志自动记录每个用户发出的每个事务。日志对于数据库的数据安全性、完整性至关重要,我们进行数据库开发和维护必须熟知日志的相关知识。

一、SYBASE SQL Server如何记录和读取日志信息

SYBASE SQL Server是先记Log的机制。每当用户执行将修改数据库的语句时,SQL Server就会自动地把变化写入日志。一条语句所产生的所有变化都被记录到日志后,它们就被写到数据页在缓冲区的拷贝里。该数据页保存在缓冲区中,直到别的数据页需要该内存时,该数据页才被写到磁盘上。若事务中的某条语句没能完成,SQL Server将回滚事务产生的所有变化。这样就保证了整个数据库系统的一致性和完整性。

二、日志设备

Log和数据库的Data一样,需要存放在数据库设备上,可以将Log和Data存放在同一设备上,也可以分开存放。一般来说,应该将一个数据库的Data和Log存放在不同的数据库设备上。这样做有如下好处:一是可以单独地备份Backup事务日志;二是防止数据库溢满;三是可以看到Log的空间使用情况。

所建Log设备的大小,没有十分精确的方法来确定。一般来说,对于新建的数据库,Log的大小应为数据库大小的30%左右。Log的大小还取决于数据库修改的频繁程度。如果数据库修改频繁,则Log的增长十分迅速。所以说Log空间大小依赖于用户是如何使用数据库的。此外,还有其它因素影响Log大小,我们应该根据实际操作情况估计Log大小,并间隔一段时间就对Log进行备份和清除。

三、日志的清除

随着数据库的使用,数据库的Log是不断增长的,必须在它占满空间之前将它们清除掉。清除Log有两种方法:

1.自动清除法

开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。

2.手动清除法

执行命令“dump transaction”来清除Log。以下两条命令都可以清除日志:

dump transaction with truncate_only
dump transaction with no_log

通常删除事务日志中不活跃的部分可使用“dump transaction with trancate_only”命令,这条命令写进事务日志时,还要做必要的并发性检查。SYBASE提供“dump transaction with no_log”来处理某些非常紧迫的情况,使用这条命令有很大的危险性,SQL Server会弹出一条警告信息。为了尽量确保数据库的一致性,你应将它作为“最后一招”。

以上两种方法只是清除日志,而不做日志备份,若想备份日志,应执行“dump transaction database_name to dumpdevice”命令。

四、管理庞大的事务

有些操作会大批量地修改数据,如大量数据的修改(Update)、删除一个表的所有数据(Delete)、大量数据的插入(Insert),这样会使Log增长速度很快,有溢满的危险。下面笔者给大家介绍一下如何拆分大事务,以避免日志的溢满。

例如执行“update tab_a set col_a=0”命令时,若表tab_a很大,则此Update动作在未完成之前就可能使Log溢满,引起1105错误(Log Full),而且执行这种大的事务所产生的独占锁(Exclusive Table Lock),会阻止其他用户在执行Update操作期间修改这个表,这就有可能引起死锁。为避免这些情况发生,我们可以把这个大的事务分成几个小的事务,并执行“dump transaction”动作。

上例中的情况就可以分成两个或多个小的事务:

update tab_a set col_a=0 where col_b>x
go
dump transaction database_name with truncate_only
go
update tab_a set col_a=0 where col_b <=x
go
dump transaction database_name with truncate_only
go

这样,一个大的事务就被分成两个较小的事务。

按照上述方法可以根据需要任意拆分大的事务。若这个事务需要备份到介质上,则不用“with truncate_only”选项。若执行“dump transaction with truncate_only”命令,应该先执行“dump database”。以此类推,我们可以对表删除、表插入等大事务做相应的拆分。

时间: 2024-10-02 19:34:42

SYBASE数据库日志详解的相关文章

有关jsp在windows下的配置及连接SQLServer数据库的详解

js|server|sqlserver|window|数据|数据库|详解 最近在学习jsp,有关jsp的运行环境的配置问题着实让我费了不少功夫,环境配置好了,连接SQL Sever 2000数据库时又出了不少问题,鉴于此我把自己配置这两方面的详细步骤给大家共享一下,希望刚刚接触jsp的并立志在jsp方面有所成就的同仁少走一些弯路,让我共同进步.有希望与我交流的请加我qq:26544472(在验证信息中请注明jsp交流) (一)有关jsp在windows下的配置: Sun推出的JSP(Java S

如何远程调用Access数据库方法详解

  如何远程调用Access数据库方法详解: 使用了TCP/IP,ADO及XML(需要安装Microsoft XML 4.0.).分服务器和客户端两部分,服务器可以多用户同时连接.远程连接Access数据库有很多方法,我以前已经比较详细的回答过(见下面所列的5种方法),我现在这个例子属于其中的第3种方法(不需要使用RDS或Web服务器). 远程连接access数据库的几个方法: 1.建立VPN(Virtual Private Network),这样你的电脑和主机的连接就与局域网无异,然后把服务器

Perl中捕获警告信息、异常信息并写入日志详解

  这篇文章主要介绍了Perl中捕获警告信息.异常信息并写入日志详解,本文分别给出了捕获警告--不处理.捕获警告--并转换成异常.捕获警告--并写入日志.捕获并写日志的完整例子等实用实例,需要的朋友可以参考下 虽然建议在每个Perl脚本和模块中开启警告,可是你又不想用户看到Perl发出的警告. 一方面你想在代码前面使用use warnings作为你的安全网,另一方面,通常警告会出现在屏幕上.多数情况下,客户不知道如何处理这些警告.如果幸运的话这些警告仅仅让客户惊讶一下,当然,不幸的是他们尝试着去

Centos 5.2下安装多个mysql数据库配置详解_Mysql

一.编译安装第一个MySQL 5.1.33 cd /opt /usr/sbin/groupadd mysql /usr/sbin/useradd -g mysql mysql -s /bin/nologin -d /usr/local/mysql tar -zxvf mysql-5.1.33.tar.gz cd mysql-5.1.33/ ./configure --prefix=/usr/local/mysql/ --enable-assembler --with-extra-charsets

Java连接操作Oracle数据库代码详解_java

废话不多说了,直接给大家贴关键代码了,具体代码如下所示: package com.sp.test; import java.sql.*; import java.util.*; public class Text_lianxi extends Thread { public void run() { try { yunxing(); Thread.sleep(10000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.pr

Squid 日志详解

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.  -------------------------------------------------------- 原文地址: http://www.php-

sql 数据库事务详解

sql 数据库教程事务详解 作为大型的企业级数据库,SQL Server2000对事务提供了很好的支持.我们可以使用SQL语句来定义.提交以及回滚一个事务. ??如下所示的SQL代码定义了一个事务,并且命名为"MyTransaction"(限于篇幅,本文并不讨论如何编写SQL语言程序,请读者自行参考相关书籍): DECLARE @TranName VARCHAR(20) SELECT @TranName = 'MyTransaction' BEGIN TRANSACTION @Tran

PHP脚本数据库功能详解(2)

脚本|数据|数据库|详解 (作者:王凯波) 利用PHP将文件保存到数据库 数据库是数据组织.存储的中心.将要处理的也可能是各种数据,包括程序.文件.报表,甚至音频.视频数据.由于通过浏览器,个人用户只能填写少部分的个人简历.因此,我们这里示范用户个人简历上载的功能.其他类型的数据可以模仿此例进行操作. 首先是信息收集页面.让用户选择要上载的文件.此页面的html代码如下: 〈!-- begin of post.htm--〉 〈p〉 〈/p〉 〈form method="POST" ac

PHP脚本数据库功能详解(3)

脚本|数据|数据库|详解 (作者:王凯波) 用类加快PHP的数据库开发 数据库的访问函数较多,使用不当会降低效率,甚至导致错误.而PHP的本身就是开放的和可扩充的,很多人为它开发各种功能的源代码.每一个PHP程序员都应该善于继承他人的成果,节省时间和精力.站在巨人的肩膀上,才能看得更远.当然,你也可以把你的代码共享出来,体会自己的劳动被承认和创造价值而带来的成就感. 使用数据库类,可以使我们完全不必考虑具体的数据库类型,而专注于程序的开发上. 众多的开发工具包中,PHPLib是性能较稳定.功能较