什么是事务日志?

事务日志是每个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。