SQL Server事务日志的初学者指南

什么是事务日志?

事务日志是每个SQL Server数据库的文件组成部分。它包含在SQL Server数据库中日志记录过程中生成的日志记录。当涉及到灾难恢复时,事务日志是SQL服务器数据库中最重要的组件——但是,它必须是未损坏的。在每次数据库修改-事务发生之后,一个日志记录被写到事务日志中。所有更改都是按顺序编写的

SQL Server事务日志存储什么?

事务日志存储对SQL服务器数据库所做的每一个事务,但有些事务的日志记录最少,比如批量导入或SELECT INTO。在内部,它被分割成称为虚拟日志文件(VLFs)的较小部分。当一个VLF变为完整日志时,继续写入事务日志中的下一个可用日志。事务日志文件可以表示为循环文件。当日志记录到达文件的末尾时,它将从一开始重新开始,但前提是所有的需求都已满足,并且非活动部分已被截断。截断过程是必要的,以标记所有不活跃的部分,以便它们可以再次使用和覆盖

如果所有以下内容都是正确的,则事务日志中不再需要日志记录。

它所包含的事务已经提交

它更改的数据库页面都是由检查点写入磁盘的

备份不需要日志记录(完整、差异或日志)

对于读取日志(例如数据库镜像或复制)[1]的任何特性,都不需要日志记录

逻辑日志是事务日志的活动部分。日志序列号(LSN)标识事务日志中的每个事务。MinLSN是在线事务日志中最老的活动事务的起始点。

SQL Server数据库可以在没有事务日志的情况下工作吗?

不,这是不可能的,因为SQL服务器设计和ACID遵从性。ACID代表原子性、一致性、隔离性和持久性。所有交易必须具备以下特征:

一个原子事务要么完全完成,要么根本没有开始

事务通过确保在任何事务结束时系统处于有效状态,从而强制系统状态的一致性。

当事务单独运行时,它似乎是系统一次执行的惟一操作

事务是持久的,意味着一旦成功完成,它对系统所做的所有更改都是永久性的。

一个SQL Server数据库可以有多个事务日志吗?

是的,这是可能的,但只在特定情况下推荐。添加多个事务日志文件不会以任何方式提高SQL Server数据库的性能。一次只能写入一个文件,因此不可能进行并行I/O操作

只有当第一个事务日志文件已满或磁盘驱动器空间不足时,才推荐使用多个事务日志文件。无论哪种方式,这些问题都应该在前面处理,并通过创建事务日志备份和监视磁盘驱动器上的可用空间来处理

为什么SQL Server事务日志在增长?

每个事务之后都要登录到在线事务日志中。在SQL Server工作期间,如果对数据库进行更改,事务日志就会增长,因此维护事务日志对于正确的SQL Server操作是至关重要的。

SQL Server中有三种恢复模型,根据使用哪一种,

事务日志的增长表现不同:

简单恢复模型——不支持事务日志备份。截断过程是自动的,空间被回收再利用。存在数据丢失风险,因为自最近的数据库备份以来发生了更改。在简单的恢复中,事务日志增长的可能性很小——只是在长时间运行的事务或事务创建许多更改的特定情况下

大容量日志恢复模型-定期支持和需要事务日志备份。没有自动的事务日志截断过程,必须定期进行事务日志备份,以标记可用于覆盖的未使用空间。大容量日志恢复模型通过对大多数批量操作使用最小日志记录来减少事务日志空间的使用。

完全恢复模型——支持事务日志备份,并且经常需要它。正常情况下不存在数据丢失风险。没有事务日志截断的自动过程,必须定期进行事务日志备份,以标记可用来覆盖的未使用空间。在完全恢复中,事务日志增长的可能性最大,因为所有事务都被记录

如何在SQL Server中维护事务日志?

事务日志维护是SQL Server管理中的重要任务。每天都建议进行监控,更常见的情况是SQL Server数据库拥有大量的流量。可以使用DBCC SQLPREF命令监视事务日志空间:

DBCC SQLPERF(LOGSPACE);

GO

数据库名称——显示的日志统计信息的数据库名称

日志大小(MB) -分配给日志的当前大小。这个值总是小于最初为日志空间分配的值,因为数据库引擎为内部头信息保留少量磁盘空间

日志空间使用(%)-当前使用事务日志信息占用的日志文件的百分比。

状态-日志文件的状态。

事务日志应该定期备份,以避免自动增长操作和填充事务日志文件。通过选择事务日志作为备份类型或通过CLI执行以下命令,可以通过SQL Server Management Studio截断(清除)事务日志中的空间:

BACKUP LOG ACMEDB

TO DISK = 'C:\ACMEDB.TRN'

GO

备份的空间可以再次重用,它将被新事务覆盖。有些操作不能合并,必须分开执行:

我需要SQL Server事务日志备份吗?

是的,当涉及到灾难恢复时,这是最重要的资源之一。只有在使用简单的恢复模型时,才需要(并且可用)它们——但是存在数据丢失风险。大多数数据库管理员对高通信量的SQL服务器数据库使用15分钟的间隔,甚至更少。事务日志备份是很重要的,因为在使用它们时,它们标记了可用于记录新事务的非活动的VLFs。

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-06-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏文渊之博

SQLServer复制(二)--事务代理作业

之前的一篇已经介绍了如何配置复制,介绍了发布者、分发者和订阅者以及事务日志运行的简单关系。其中提到了复制代理,我们这篇将详细介绍复制代理,它是什么?在事务复制的...

2279
来自专栏虚拟化云计算

在openstck中配置使用cloud-init

cloud-init是在创建虚拟机时能够对虚拟机进行一些初始化操作的工程。在虚拟机启动的时候,对虚拟机进行一些列的操作,例如常用的:自动设置 虚拟机h...

56311
来自专栏Java进阶

再谈session 和 cookie的差异

2788
来自专栏学海无涯

Java Web之Cookie和Session的理解

Cookie和Session.jpg 日常现象 登录了某个网站,过一会儿再登录,诶,不用输入密码了,直接是登录状态了,好神奇~~~ 在某网站看了一部手机,接下来...

2973
来自专栏博客园迁移

分布式事务 小结

分布式事务    如果系统规模较小,数据表都在一个数据库实例上,上述本地事务方式可以很好地运行,   但是如果系统规模较大,比如用户A账户表和用户B账户表显然不...

921
来自专栏王小雷

解决The Network Adapter could not establish the connection

解决1 主机与虚拟机ping不通 解决2 状态: 失败 -测试失败: IO 错误: The Network Adapter could not establis...

3425
来自专栏linux驱动个人学习

高通GPIO驱动(DTS方式)

gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态; ...

5504
来自专栏破晓之歌

redis深入理解 原

1.单机有多个数据库,互相隔离不共享,不支持为每个数据库设置不同的访问密码,集群没有数据库概念

2582
来自专栏Linux运维学习之路

zabbix使用(自定义监控、自动报警)

自定义监控(制作模板) zabbix自带模板Template OS Linux (Template App Zabbix Agent)提供CPU、内存、磁盘、网...

5606
来自专栏大数据和云计算技术

MongoDB系列11:Munin监控MongoDB

Munin是一个网络资源监控工具,可以帮助分析资源趋势。默认提供了大量的分析图形。以下讲述如何设置MongoDB的Munin监控插件。

1883

扫码关注云+社区

领取腾讯云代金券