查看SQLSERVER事务日志记录

SQL Server事物日志 文章目录一、事物日志作用二、事务日志原理三、事物日志管理3.1 事物日志监控3.2 事物日志收缩 一、事物日志作用 每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改。事物日志的作用主要如下: WAL事务预提交,减少了脏页刷盘的IO消耗,极大的提高了数据库性能 崩溃恢复,当数据库发生意外宕机,数据库启动时会进行崩溃恢复的流程,会先读取事务日志进行前滚,将数据恢复到崩溃前的状态;然后进行回滚操作,对事务日志中未提交的事务进行rollback,以此保证数据库中数据 阅读详情
AI摘要

本文详细介绍了SQL Server中事务日志的工作原理及其记录的内容,包括如何查看事务日志记录,事务日志中关键字段的意义,以及不同操作类型和上下文的含义。此外,还探讨了大容量日志恢复模式下的日志记录特点。

大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取

操作记录恢复数据,例如:log explorer

那么事务日志记录怎麽查看,里面都记录了些什么?

打开可以利用下面SQL语句来查看所在数据库的事务日志记录

1 USE [GPOSDB] --要查看事务日志记录的数据库
2 GO
3 SELECT * FROM [sys].[fn_dblog](NULL,NULL)

 

事务日志记录里很多东西可以看的,里面记录了非常详细的数据库活动信息

我这里只介绍一些重要的需要知道的字段,其他字段由于本人能力有限而且觉得其他字段不是很重要就不介绍了

CurrentLSN:当前LSN号,事务日志中的每个记录都由一个唯一的日志序列号 (LSN) 标识。LSN 是这样排序的:如果 LSN2 大于 LSN1,

则 LSN2 所标识的日志记录描述的更改发生在日志记录 LSN1 描述的更改之后

MSDN解释:http://msdn.microsoft.com/zh-cn/library/ms190411(v=SQL.90).aspx

Operation:当前LSN所做的操作

Context:操作的上下文

TransactoinID:事务ID号

Log Record Fixed Length:LSN记录的所占虚拟日志文件的固定长度

Previous LSN:前一个LSN号

--------------------------------------------------------------------------------------------------------------

AllocUnitID:修改的那条数据所属分配单元ID

AllocUnitName:修改了数据的表名

Page ID:0001:00000121 转换成十进制:289    所以查看pageid为289页  DBCC PAGE([pratice],1,289,3)

Slot ID:数据所在数据页面的第几条记录

PartitionID:数据所在数据页面的所在分区ID

如上图,修改数据的表名是Insert_Test,Page ID是0001:00000121 转换为十进制为289  Slot ID是6(即数据页的第6条记录)

通过下面SQL语句就可以查看页面所在数据

1 USE [pratice]
2 GO
3 DBCC TRACEON(3604,-1)
4 GO
5 
6 DBCC PAGE([pratice],1,289,3)  
7 GO
 1 Slot 6 Offset 0x552 Length 211
 2 
 3 Record Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP     
 4 Memory Dump @0x0A2AC552
 5 
 6 00000000:   1000d000 3f080000 61616120 20202020 †....?...aaa              
 7 00000010:   20202020 20202020 20202020 20202020 †                         
 8 00000020:   20202020 20202020 20202020 20202020 †                         
 9 00000030:   20202020 20202020 20202020 20202020 †                         
10 00000040:   20202020 20202020 20202020 20202020 †                         
11 00000050:   20202020 20202020 20202020 20202020 †                         
12 00000060:   20202020 20202020 20202020 20202020 †                         
13 00000070:   20202020 20202020 20202020 20202020 †                         
14 00000080:   20202020 20202020 20202020 20202020 †                         
15 00000090:   20202020 20202020 20202020 20202020 †                         
16 000000A0:   20202020 20202020 20202020 20202020 †                         
17 000000B0:   20202020 20202020 20202020 20202020 †                         
18 000000C0:   20202020 20202020 20202020 20202020 †                         
19 000000D0:   0200fc†††††††††††††††††††††††††††††††...                      
20 
21 Slot 6 Column 0 Offset 0x4 Length 4
22 
23 id = 2111                            
24 
25 Slot 6 Column 1 Offset 0x8 Length 200
26 
27 name = aaa                                            


这个表只有两个字段,我们看一下表数据

--------------------------------------------------------------------------------------------------------

Checkpoint Begin:Checkpoint开始时间

Checkpoint Begin DB Version:当前数据库版本 SQL2005是611  SQL2012是706

Checkpoint End:checkpoint的结束时间,这个时间肯定在Checkpoint Begin的下一条事务日志记录的位置

Minimum LSN: 这个第一个日志记录的日志序列号 (LSN),称为最小恢复 LSN (MinLSN)

Dirty Pages:脏的数据页

Oldest Replicated Begin LSN:如果数据库配置复制的话,那么最老的复制起始LSN

Next Replicated End LSN:下一个复制结尾LSN

Last Distributed End LSN:最新的分发结尾LSN

SPID:执行当前操作的进程ID

Beginlog Status:开始记录事务日志的状态,这个状态表示现时能够正常记录事务日志

Begin Time:事务开始时间

Transaction Name:事务名称

End Time:事务结束时间

Transaction Begin:记录这个事务的begin transaction的时候的cureent LSN

Master DBID:显示当前master数据库的DBID

Preplog Begin LSN:启动数据库前的前一个事务日志LSN

Prepare Time:准备启动数据库的时间

New Split Page:哪个数据页产生了页拆分

Rows Deleted:数据页有多少行被删除了

Description:描述这个事务是干什么的,有时候事务名称不一定就是他所做的操作名称,

比如这里碰巧事务名和描述都是CREATE TABLE 如果你为这个事务命名的话,那么只能看Description列看这个事务是做什么的

-------------------------------------------------华丽的分割线-------------------------------------------------------------------

 现在解释一下 一些常见operation和context,一些不常见的我也不知道 ,呵呵o(∩_∩)o

Operation:当前LSN所做的操作

Context:操作的上下文

DCM页的资料:http://www.cnblogs.com/lyhabc/archive/2013/01/21/2870392.html

Operation

Context

解释

LOP_SET_BITS

LCX_DIFF_MAP

设置位图,资料: 差异(Differential)备份:只备份上次完整备份后,做修改的部分。备份单位是区(Extent)。意味着某个区内即使只有一页做了变动,则在差异备份里会被体现.差异备份依靠一个BitMap进行维护,一个Bit对应一个区,自上次完整备份后,被修改的区会被置为1,而BitMap中被置为1对应的区会被差异备份所备份。而到下一次完整备份后,BitMap中所有的Bit都会被重置为0

而这个BitMap在数据库第7页:

DCM页 差异变更(Differential Changed Map,DCM)页面他跟踪一个文件中的哪一个区在最新一次完整数据库备份之后被修改过。SQLSERVER用在增量备份时只对已发生数据变更的分区进行增量备份即可

LOP_BEGIN_XACT

 

事务开始

LOP_MODIFY_ROW

LCX_HEAP

修改堆表中的某一行记录

LOP_PREP_XACT

 

准备启动数据库

LOP_COMMIT_XACT

 

提交事务

LOP_MODIFY_ROW

LCX_BOOT_PAGE

修改数据库启动页

LOP_MODIFY_HEADER

LCX_PFS

修改PFS页的页头部信息

LOP_INSERT_ROWS

LCX_CLUSTERED

插入数据到聚集索引的索引页

LOP_INSERT_ROWS

LCX_INDEX_LEAF

插入数据到索引的叶子节点即数据页

LOP_FORMAT_PAGE

LCX_CLUSTERED

重新组织聚集索引

LOP_DELETE_SPLIT

LCX_CLUSTERED

删除聚集索引表的一行记录引起页拆分

LOP_MODIFY_HEADER

LCX_HEAP

修改堆表的某页的页头信息

LOP_BEGIN_CKPT

LCX_NULL

检查点开始

LOP_END_CKPT

LCX_NULL

检查点结束

LOP_SET_FREE_SPACE

LCX_PFS

修改PFS页设置那个数据页是空闲的

LOP_ROOT_CHANGE

LCX_CLUSTERED

聚集索引的根节点改变

LOP_INSERT_ROWS

LCX_HEAP

插入数据到堆表

 

 

LOP_FORMAT_PAGE

LCX_HEAP

格式化堆里的数据页

Operation

Lock Information

解释

LOP_LOCK_XACT

HoBt 0:ACQUIRE_LOCK_SCH_M METADATA: database_id = 14   STATS(object_id = 7, stats_id = 11)

在事务里获取锁

                     

-------------------------------------------------------华丽的分割线---------------------------------------------------

在大容量日志恢复模式下,在事务日志记录里你会看不到对数据页的操作,当你使用bcp ,bulk inert, select into大容量操作语句的时候

像下图的那样修改数据和插入数据的记录你在事务日志记录里找不到的

所以大容量日志恢复模式时,ldf文件才这麽小,插入速度才这麽快

下面引用MSDN:

http://msdn.microsoft.com/zh-cn/library/ms190925.aspx
可以尽量减少日志量的操作
“最小日志记录”是指只记录在不支持时间点恢复的情况下恢复事务所需的信息。 本主题介绍在大容量日志恢复模式下(以及简单恢复模式下)按最小方式记录、但在运行备份时例外的操作。
 注意
在完整恢复模式下,所有大容量操作都将被完整地记录下来。 但是,可以通过将数据库暂时切换到用于大容量操作的大容量日志恢复模式,最小化一组大容量操作的日志记录。 最小日志记录比完整日志记录更为有效,并在大容量事务期间,降低了大规模大容量操作填满可用的事务日志空间的可能性。 不过,如果在最小日志记录生效时数据库损坏或丢失,则无法将数据库恢复到故障点。
下列操作在完整恢复模式下执行完整日志记录,而在简单和大容量日志恢复模式下按最小方式记录:
大容量导入操作(bcp、BULK INSERT 和 INSERT...SELECT)。 有关在何时对大容量导入表按最小方式进行记录的详细信息,请参阅在大容量导入中按最小方式记录日志的前提条件。
 注意
启用事务复制时,将完全记录 BULK INSERT 操作,即使处于大容量日志恢复模式下。
SELECT INTO 操作。
 注意
启用事务复制时,将完全记录 SELECT INTO 操作,即使处于大容量日志恢复模式下。
插入或追加新数据时,使用 UPDATE 语句中的 .WRITE 子句部分更新到大型值数据类型。 注意,在更新现有值时没有使用最小日志记录。 有关大型值数据类型的详细信息,请参阅数据类型 (Transact-SQL)。
在 text、ntext 和 image 数据类型列中插入或追加新数据时的 WRITETEXT 和 UPDATETEXT 语句。 注意,在更新现有值时没有使用最小日志记录。
 注意
不推荐使用 WRITETEXT 语句和 UPDATETEXT 语句,因此应该避免在新的应用程序中使用这些语句。
如果数据库设置为简单或大容量日志恢复模式,则无论是脱机还是联机执行操作,都会按最小方式记录一些索引 DDL 操作。 按最小方式记录的索引操作如下:
CREATE INDEX 操作(包括索引视图)。
ALTER INDEX REBUILD 或 DBCC DBREINDEX 操作。
 注意
不推荐使用 DBCC DBREINDEX 语句,因此应该避免在新的应用程序中使用该语句。
DROP INDEX 新堆重新生成(如果适用)。
 注意
DROP INDEX 操作期间将始终完整记录索引页的释放操作。

还可以看一下这篇帖子,关于大容量日志恢复模式

http://social.msdn.microsoft.com/Forums/zh-CN/958febc2-5eaf-46e4-b658-4bea087c0b0f

 

 1 0
 2 投票
 3 另外,做了下测试。
 4 
 5 在Bulk logged模式下,日志中仅记录对Page(比如IAM,PFS和GAM)的操作,没有记录数据。。
 6 
 7 Operation                          Context                   AllocUnitName
 8 LOP_MODIFY_ROW        LCX_PFS        dbo.SomeTable
 9 LOP_SET_BITS               LCX_IAM        dbo.SomeTable
10 LOP_SET_BITS               LCX_GAM        dbo.SomeTable
11 LOP_MODIFY_ROW        LCX_PFS        dbo.SomeTable
12 LOP_SET_BITS                LCX_IAM        dbo.SomeTable
13 LOP_SET_BITS                LCX_GAM        dbo.SomeTable
14 LOP_MODIFY_ROW        LCX_PFS        dbo.SomeTable
15 LOP_SET_BITS                LCX_IAM        dbo.SomeTable
16 但是对于处于Full模式下的DB,除了包含这部分数据,还有记录Data的部分。
17 
18 那处于Bulk Logged模式下,所做的事务日志备份,是怎么抓取到数据变化的呢?
19 
20 我做了实验,处于Bulk logged模式下,执行了事务备份,之后还是可以通过该备份文件来恢复到select * into 操作之后。
21 
22 select * into ../....from ......这个应该是可以最小化日志的操作吧。
SQL Server-查询事务日志 摘要:这段SQL代码用于查询SQL Server中所有数据库的关键恢复和事务日志状态信息,通过分析sys.databases视图中的recovery_model_desc(恢复模式)和log_reuse_wait_desc(日志重用等待状态)字段,可诊断日志文件增长问题。完整恢复模式下的数据库需定期日志备份,否则日志会无限增长;若出现ACTIVE_TRANSACTION状态则表明存在未提交事务。该查询是排查日志管理和性能问题的关键工具,可帮助DBA快速定位日志异常原因并采取相应措施。 阅读详情

相关推荐

python制作图形化小游戏_创意编程|Python的GUI简易界面设计测测你的反应力

Python的GUI简易界面设计案例测测你的反应力作为初次接触代码编程的你,是不是觉得Python程序除了“码”就是“字”即使是有趣的程序除了烧烧自己的脑,也吸引不到更多人的兴趣,用户体验值接近于0?那你可冤枉了Python,他可是人工智能界的编程语言大咖。今天这个游戏设计就先带领大家,简单体验一下,如何让Python程序图形化。一起来吧!设计我们的小游戏游戏设计思路:电脑随机出...

weixin_34214135的博客 1871

Sql Server事务日志

本文导读:SQL Server中的数据库都是由一或多个数据文件以及一或多个事务日志文件组成的。SQL Server事务日志主要是用来记录所有事务对数据库所做的修改,SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点。 一、SQ

liujiayu2的专栏 4472

手把手教你在VirtualBox里复活Win98,并搞定驱动和文件传输(含资源寻找攻略)

本文详细指导如何在VirtualBox中安装和配置Windows 98,包括驱动安装、文件传输等实用技巧。通过逐步教程和资源寻找攻略,帮助技术爱好者完美复刻这一经典操作系统,满足怀旧或兼容性测试需求。

weixin_29596051的博客 324

解释一下SQLSERVER事务日志记录

解释一下SQLSERVER事务日志记录 大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取 操作记录恢复数据,例如:log explorer 那么事务日志记录怎麽查看,里面都记录了些什么? 打开可以利用下面SQL语句来查看所在数据库的事务日志记录 1 USE [GPOSDB] --要查看事务日志记录...

dingshen2767的博客 1750

【Out-of-Distribution Detection】Evidential Deep Learning in NeurIPS 2018 个人理解

核心思想是将分类器的概率输出视为一个狄利克雷分布(Dirichlet Distribution)并替换,之后引入两个损失分别负责保证预测结果准确性和提升被错误分类的样本的不确定性。

研究兴趣:开放集识别、开放世界识别、新类发现、增量学习、少样本学习 2436

激光雷达的64线,32线,16线,你弄懂了吗?

激光雷达的 64 线、32 线、16 线是指激光雷达系统中能够同时发射和接收激光脉冲的激光线的数量5。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 2637

SQL Server的事务日志

每个 SQL Server 数据库都有一个事务日志,用于记录所有事务以及每个事务所做的数据库修改。 事务日志是数据库的关键组件。如果出现系统故障,您将需要该日志才能使数据库恢复到一致状态。

Lion_Long的博客 5074

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 266

(转)解释一下SQLSERVER事务日志记录

本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/07/16/3194220.html 解释一下SQLSERVER事务日志记录 大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取 操作记录恢复数据,例如:log explorer 那么事务日志记录怎麽查看,里面...

weixin_33841503的博客 122

MIKE水动力笔记7_实测数据与模型输出结果的拟合对比

上一博文【MIKE水动力笔记6】主要讲解如何自己制作实测数据的时间序列文件dfs0,而本博文讲解如何进行实测数据与模型输出结果的拟合对比。

晏长街的博客 1万+

【运动规划算法项目实战】Artificial Potential Field算法(附ROS C++代码)

在机器人行业中,路径规划是一个关键的任务,它涉及到如何让机器人在复杂的环境中安全而高效地移动。人工势场算法(Artificial Potential Field Algorithm)是一种常用的路径规划方法,它借鉴了物理学中的势能概念,通过模拟力的作用来引导机器人的移动。本文将详细介绍人工势场算法的原理、在路径规划中的应用、算法优缺点以及代码实现。人工势场算法基于两种势场:斥力场和引力场。斥力场使机器人远离障碍物,而引力场将机器人吸引到目标位置。

xiewf的博客 1万+

mysql 事务sqlserver_解释一下SQLSERVER事务日志记录

解释一下SQLSERVER事务日志记录大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取操作记录恢复数据,例如:log explorer那么事务日志记录怎麽查看,里面都记录了些什么?打开可以利用下面SQL语句来查看所在数据库的事务日志记录1 USE [GPOSDB] --要查看事务日志记录的数据库2 GO3 SELECT ...

weixin_42429893的博客 423

基于STM32、HAL库的W25Q01JVZEIQ TR FLASH存储器驱动应用程序设计

1Gb (128MB),分为512个可擦除块(block),每个块256KB。:块擦除约30-50ms,芯片擦除约30s。:标准SPI (支持1/2/4线模式)// 初始化CS引脚为高电平。// 擦除扇区(4KB)// 初始化Flash。/* 状态寄存器位 *//* 指令定义 *//* 超时定义 *//* 函数声明 */

corlin6688的博客 266

事务日志中的具体内容

大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取 操作记录恢复数据,例如:log explorer 那么事务日志记录怎麽查看,里面都记录了些什么? 打开可以利用下面SQL语句来查看所在数据库的事务日志记录 1 USE [GPOSDB] --要查看事务日志记录的数据库 2 GO 3 SELECT * FRO...

weixin_30361641的博客 264

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

mssql 查询 fn_dblog

来查看事务日志的记录。该函数返回一个结果集,其中包含了事务日志中的详细信息,例如操作类型、事务 ID、LSN 等。,分别表示起始时间和结束时间。然后,在查询中使用这些变量来筛选出指定时间段内的记录。此外,还可以根据需要添加其他条件来进一步筛选结果集,例如根据事务 ID、操作类型等。在 SQL Server 中,可以使用系统函数。替换为你要查询的实际表名。在上述查询中,使用了。

zengliguang的专栏 695

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SQL Server 2008事务日志的[RowLog Contents 0] 字段没人能解析出来?

Reading SQL Server's Transaction Log http://www.sqlservercentral.com/articles/Transaction+Log/71415/ http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=152870 如何查看SQL Server的事务日志 .分类: sql serve...

weixin_34293902的博客 347

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

人人都是 DBA(VI)SQL Server 事务日志

SQL Server 的数据库引擎通过事务服务(Transaction Services)提供事务的 ACID 属性支持。ACID 属性包括: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 事务日志(Transaction Log) 事务日志(Transaction Lo...

weixin_34240657的博客 131

1.3.1 日志文件里到底有什么

1.3.1  日志文件里到底有什么 当日志文件大小超过预期的时候,数据库管理员自然会想去看看日志文件中到底存放了些什么信息。SQL Server有一条"DBCC LOG"命令可以帮助我们解释日志文件中的信息。它的语法是: DBCC LOG(, )  :目标数据库编号。可以用sp_helpdb得到。 :DBCC LOG命令翻译和解释日志记录的方式。 一般来讲,使用"3"这个格式参数输出比较

tianlianchao1982的专栏 881

SQL server日志优化方法

管理SQL Server数据库中的日志增长问题

技术分享 1632

sql server 日志文件结构及误操作数据找回

原文:sql server 日志文件结构及误操作数据找回一. 概述   在sql server 里有数据文件.mdf和日志文件.ldf,日志文件是sqlserver数据库的另一个重要组成部分,日志文件记录了所有事务以及每个事务对数据库所做的修改。为了提高数据库的性能, sqlserver 数据是缓存在内存里,并没有实时写入到磁盘,直到数据库出现检查点(checkpoint)或者内存不足必须(La...

weixin_34253539的博客 145
上一篇: 通过Oracle sql developer工具从sqlserver迁移数据到oracle
下一篇: SQL查询和删除重复记录
黑暗中的光芒
博客等级 码龄12年 12粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值