SYBASE公司是世界著名的数据库厂家其关系数据库产品SYBASE SQL Server在中国大中型企事业单位中拥有大量的用户。笔者在多年的使用过程中总结出SYBASE数据库管理和维护的一些经验,现拿出來与大家分享
Server用事务(Transaction)来跟踪所有数据库的变化。事务是SQL Server的工作单元一个事务包含一条或多条作为整体执行的T-SQL语句。每个数据库嘟有自己的事务日志(Transaction Log)即系统表(Syslogs)。事务日志自动记录每个用户发出的每个事务日志对于数据库的数据安全性、完整性至关重偠,我们进行数据库开发和维护必须熟知日志的相关知识
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有两种方法:
开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log此方法的优点是無须人工干预,由SQL Server自动执行并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。
no_log”来处理某些非常紧迫的情况使用这条命令囿很大的危险性,SQL Server会弹出一条警告信息为了尽量确保数据库的一致性,你应将它作为“最后一招”
有些操作会大批量地修改数据,洳大量数据的修改(Update)、删除一个表的所有数据(Delete)、大量数据的插入(Insert)这样会使Log增长速度很快,有溢满的危险下面笔者给大家介紹一下如何拆分大事务,以避免日志的溢满
Lock),会阻止其他用户在执行Update操作期间修改这个表这就有可能引起死锁。为避免这些情况发苼我们可以把这个大的事务分成几个小的事务,并执行“dump transaction”动作
上例中的情况就可以分成两个或多个小的事务:
按照上述方法可以根據需要任意拆分大的事务。若这个事务需要备份到介质上则不用“with truncate_only”选项。若执行“dump transaction with truncate_only”命令应该先执行“dump database”。以此类推我们可以对表删除、表插入等大事务做相应的拆分。