当前位置:Gxlcms > 数据库问题 > SQL SERVER的事务日志

SQL SERVER的事务日志

时间:2021-07-01 10:21:17 帮助过:4人阅读

基本介绍

    每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作。

    日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种:

  • 完整模式,完全记录事物日志,需要定期进行日志备份。
  • 大容量日志模式,适用于批量操作的数据库,可以以更压缩的方式处理日志,需要定期进行日志备份。
  • 简单模式,也有日志文件,只是该模式下可以通过checkpoint自动重用virtual log file,所以日志文件会处于一直重复使用的过程,保持一定大小,但是,如果有一个事务启动,很久没有commit,那么从这个事务开始到最后commit的时间段内的事务日志存储空间都无法checpoint自动重用,这时,你很可能看到一个很大的日志文件;注意,简单模式下是无法进行日志备份

    数据库里边,任何对数据库的读写都是在内存页中找到对应的数据也,再做修改,如果内存页中不存在数据页,则从磁盘加载如内存中。当一个修改操作发生时,修改的将是内存页中对应的数据页面,同时也会实时记录到日后文件ldf中。那么,什么时候数据会被同步到mdf文件呢,只有以下三种情况:

  • 做checkpoint时,后续会专门整理checkpoint的相应文章;
  • Lazy write运行时,即内存出现压力,需要把内存中的数据页写入到磁盘,腾出内存空间;
  • eager write时,即发生bulk insert和select into操作时。

    DB中的事务日志记录,可以给我们带来很多好处,它可以支持以下操作:

  • 恢复个别的事务。
  • 在 SQL Server 启动时恢复所有未完成的事务。
  • 将还原的数据库、文件、文件组或页前滚至故障点。
  • 支持事务复制。
  • 支持高可用性和灾难恢复解决方案:AlwaysOn 可用性组、数据库镜像和日志传送。

2 对数据库启动的影响

    当数据库重启或者还原到最后的时候,数据库都会进入 recovery状态,正常情况下,这个状态持续时间在几十秒间,但是特殊情况下,它会花费非常长的时间,甚至几个小时,如果这个步骤失败,数据库则进入到挂起 suspect状态,无法正常提供使用。       那么,当数据库进入 recovery 的时候,它在操作些什么呢?       SQL SERVER日志会记录所有修改记录(数据的修改情况,不包含SQL语句),包括Begin Transaction和Commit / Rollback Transaction 操作。由于对事务日志的修改,要比数据文件的修改要快,所有会出现,数据修改更新到了日志文件,但是还没有落盘到数据文件,那么这个时候数据库就处于recovery状态,同时对事务日志最近的一个checkpoint点以后的所有数据修改记录做以下检查:   技术分享     所有检查结束后,则会对数据库做一个checkpoint的表示,并写入事务日志中,表明日志文件跟数据文件已经同步结束,完成了recovery过程,数据库可正常提供使用。这里需要注意一点,如果你数据库最近一次checkpoint到现在的修改操作足够多,那么将会耗费相对较长时间来检查,同时也能够在 error log中看到百分比标识的recovery完成进展,避免漫无目的的等待。 Error Log的检查,可以通过图形界面(见下图)查看当前日志,也可以运行xp_readerrorlog 查询。
 1 /*
 2 xp_readerrorlog
 3 1. 存档编号
 4 2. 日志类型(1为SQL Server日志,2为SQL Agent日志)
 5 3. 查询包含的字符串
 6 4. 查询包含的字符串
 7 5. LogDate开始时间
 8 6. LogDate结束时间
 9 7. 结果排序,按LogDate排序(可以为降序"Desc" Or 升序"Asc"),默认升序
10 */
11  
12 Exec xp_readerrorlog 0,1,Null,Null,2017-02-16 10:53:32.300,2017-02-16 12:53:32.300

技术分享

人气教程排行