MS SQL Server 事务日志介绍

转载 2006年06月05日 22:22:00

        交易日志,或称事务日志(Transaction logs)是数据库结构中非常重要但又经常被忽略的部分。由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志。

  交易日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。对于任何每一个交易过程,交易日志都有非常全面的记录,根据这些记录可以将数据文件恢复成交易前的状态。从交易动作开始,交易日志就处于记录状态,交易过程中对数据库的任何操作都在记录范围,直到用户点击提交或后退后才结束记录。每个数据库都拥有至少一个交易日志以及一个数据文件。 

        出于性能上的考虑,SQL Server将用户的改动存入缓存中,这些改变会立即写入交易日志,但不会立即写入数据文件。交易日志会通过一个标记点来确定某个交易是否已将缓存中的数据写入数据文件。当SQL Server重启后,它会查看日志中最新的标记点,并将这个标记点后面的交易记录抹去,因为这些交易记录并没有真正的将缓存中的数据写入数据文件。这可以防止那些中断的交易修改数据文件。
  

  维护交易日志

  因为很多人经常遗忘交易日志,因此它也会给系统带来一些问题。随着系统的不断运行,日志记录的内容会越来越多,日志文件的体积也会越来越大,最终导致可用磁盘空间不足。除非日常工作中经常对日志进行清理,否则日志文件最终会侵占分区内的全部可用空间。日志的默认配置为不限容量,如果以这种配置工作,它就会不断膨胀,最终也会占据全部可用空间。这两种情况都会导致数据库停止工作。 

  对交易日志的日常备份工作可以有效的防止日志文件过分消耗磁盘空间。备份过程会将日志中不再需要的部分截除。截除的方法是首先把旧记录标记为非活动状态,然后将新日志覆盖到旧日志的位置上,这样就可以防止交易日志的体积不断膨胀。如果无法对日志进行经常性的备份工作,最好将数据库设置为"简单恢复模式"。在这种模式下,系统会强制交易日志在每次记录标记点时,自动进行截除操作,以新日志覆盖旧日志。 

  截除过程发生在备份或将旧标记点标为非活动状态时,它使得旧的交易记录可以被覆盖,但这并不会减少交易日志实际占用的磁盘空间。就算不再使用日志,它依然会占据一定的空间。因此在维护时,还需要对交易日志进行压缩。压缩交易日志的方法是删除非活动记录,从而减少日志文件所占用的物理硬盘空间。 

  通过使用DBCC SHRINKDATABASE语句可以压缩当前数据库的交易日志文件,DBCC SHRINKFILE语句用来压缩指定的交易日志文件,另外也可以在数据库中激活自动压缩操作。当压缩日志时,首先会将旧记录标记为非活动状态,然后将带有非活动标记的记录彻底删除。根据所使用的压缩方式的不同,你可能不会立即看到结果。在理想情况下,压缩工作应该选在系统不是非常繁忙的时段进行,否则有可能影响数据库性能。 

  恢复数据库

  交易记录备份可以用来将数据库恢复到某一指定状态,但交易记录备份本身不足以完成恢复数据库的任务,还需要备份的数据文件参与恢复工作。恢复数据库时,首先进行的是数据文件的恢复工作。在整个数据文件恢复完成前,不要将其设为完成状态,否则交易日志就不会被恢复。当数据文件恢复完成,系统会通过交易日志的备份将数据库恢复成用户希望的状态。如果在数据库最后一次备份后,存在多个日志文件的备份,备份程序会按照它们建立的时间依次将其恢复。 

  另一种被称为log shipping的过程可以提供更强的数据库备份能力。当log shipping配置好后,它可以将数据库整个复制到另一台服务器上。在这种情况下,交易日志也会定期发送到备份服务器上供恢复数据使用。这使得服务器一直处于热备份状态,当数据发生改变时它也随之更新。另一个服务器被称作监视(monitor)服务器,可以用来监视按规定时间间隔发送的shipping信号。如果在规定时间内没有收到信号,监视服务器会将这一事件记录到事件日志。这种机制使得log shipping经常成为灾难恢复计划中使用的方案。 

  性能优化

  交易日志对数据库有重要作用,同时它对系统的整体性能也有一定影响。通过几个选项,我们可以对交易日志的性能进行优化。由于交易日志是一个连续的磁盘写入过程,在这当中不会发生读取动作。因此将日志文件放在一个独立的磁盘,对优化性能有一定作用。 

  另一项优化措施与日志文件的体积有关。我们可以设置日志文件的体积不超过硬盘空间的百分之几,或者确定它的大小。如果将其设置的过大会浪费磁盘空间,而如果设置的过小则会强制记录文件不断尝试扩展,导致数据库性能下降。
  
  事务日志文件Transaction Log File是用来记录数据库更新情况的文件,扩展名为ldf。
  在 SQL Server 7.0 和 SQL Server 2000 中,如果设置了自动增长功能,事务日志文件将会自动扩展。
  一般情况下,在能够容纳两次事务日志截断之间发生的最大数量的事务时,事务日志的大小是稳定的,事务日志截断由检查点或者事务日志备份触发。
  然而,在某些情况下,事务日志可能会变得非常大,以致用尽空间或变满。通常,在事务日志文件占尽可用磁盘空间且不能再扩展时,您将收到如下错误消息:
  Error:9002, Severity:17, State:2
  The log file for database ’%.*ls’ is full.
  除了出现此错误消息之外,SQL Server 还可能因为缺少事务日志扩展空间而将数据库标记为 SUSPECT。有关如何从此情形中恢复的其他信息,请参见 SQL Server 联机帮助中的“磁盘空间不足”主题。
  
  另外,事务日志扩展可能导致下列情形: 
  · 非常大的事务日志文件。 
  · 事务可能会失败并可能开始回滚。 
  · 事务可能会用很长时间才能完成。 
  · 可能发生性能问题。 
  · 可能发生阻塞现象。
  
  原因
  事务日志扩展可能由于以下原因或情形而发生: 
  · 未提交的事务 
  · 非常大的事务 
  · 操作:DBCC DBREINDEX 和 CREATE INDEX 
  · 在从事务日志备份还原时 
  · 客户端应用程序不处理所有结果 
  · 查询在事务日志完成扩展之前超时,您收到假的“Log Full”错误消息 
  · 未复制的事务

查看SQLSERVER事务日志记录

大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取 操作记录恢复数据,例如:log explorer 那么事务日...
  • MSSQL_DBA
  • MSSQL_DBA
  • 2014年08月29日 10:01
  • 10308

SQLServer中事务日志已满的原因以及解决办法

SQLServer中事务日志已满的原因以及解决办法 错误描述:数据库的事务日志已满。若要查明无法重用日志中的空间的原因 ,请参阅sys.databases 中的 log_reuse_wait_des...
  • sxty0220
  • sxty0220
  • 2015年07月27日 18:26
  • 5943

SQL Server事务日志介绍

SQL Server中的数据库都是由一或多个数据文件以及一或多个事务日志文件组成的。顾名思意,数据文件主要存储数据库的数据,包括数据库内容结构,数据页,索引页等等。那么事务日志到底是干什么的呢?它主要...
  • tjvictor
  • tjvictor
  • 2010年01月23日 10:24
  • 14836

SQLServer事务日志清理

1:截断事务日志:BACKUP LOG 数据库名 WITH NO_LOG2:清空日志DUMP  TRANSACTION  库名  WITH  NO_LOG    再:企业管理器--右键你要压缩的数据库...
  • cui55
  • cui55
  • 2006年08月09日 09:52
  • 2036

c# + mysql + 事务处理(转载于 《C#数据库事务原理及实践》)

什么是数据库事务   数据库事务是指作为单个逻辑工作单元执行的一系列操作。 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作:   · 更新客户所购商品的库存信息  ...
  • AAA123524457
  • AAA123524457
  • 2015年06月05日 15:01
  • 2012

MS SQL Server事务日志压缩与删除

    方法一:    第一步:    backup log database_name with no_log    或者 backup log database_name with truncat...
  • feng19821209
  • feng19821209
  • 2006年06月05日 23:34
  • 1853

SQL2005中查看事务日志方法-MS-SQLServer

DBCC log ( {dbid |dbname}, [, type={0 |1 |2 |3 |4}] )    参数: Dbid or dbname - 任一数据库的ID或名字    typ...
  • kalman2008
  • kalman2008
  • 2015年01月29日 08:20
  • 719

MS SQL Server 事务日志介绍

交易日志,或称事务日志(Transaction logs)是数据库结构中非常重要但又经常被忽略的部分。由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志。交易日志是针对数据库改变所做...
  • icoolno1
  • icoolno1
  • 2006年08月13日 15:11
  • 761

MS SQL日志文件长度过大的处理方法

MS SQL日志文件长度过大的处理方法loadDocInfo(19);先提供一种复杂的方法压缩日志及数据库文件如下:1.清空日志  DUMP TRANSACTION 库名 WITH NO_LOG 2....
  • long2006sky
  • long2006sky
  • 2007年05月09日 09:04
  • 545

sqlserver2008根据事务日志还原数据库

在维护数据库时,难免会因为脚本编写错误而误更新了数据,此时可能备份数据库是前一天的,根据数据库备份文件还原就只能还原到前一天,会丢失当天的数据,因此需要能够按照指定时间还原数据库。 sqlserve...
  • w8998036
  • w8998036
  • 2017年09月09日 20:20
  • 335
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MS SQL Server 事务日志介绍
举报原因:
原因补充:

(最多只允许输入30个字)