广告
返回顶部
首页 > 资讯 > 数据库 >SQL Server事务日志分析
  • 677
分享到

SQL Server事务日志分析

2024-04-02 19:04:59 677人浏览 薄情痞子
摘要

SQL Server事务日志分析fn_dblog()和fn_dump_dblog()函数介绍SQL Server有两个未公开的函数fn_dblog()和fn_dump_dblog()非常有用并且提供的信息量

SQL Server事务日志分析


fn_dblog()和fn_dump_dblog()函数介绍


SQL Server有两个未公开的函数fn_dblog()fn_dump_dblog()非常有用并且提供的信息量很大。你可以使用这些函数来获取100多列大量的有用信息。


fn_dblog()用于分析数据库当前的事务日志文件,它需要两个参数,分别为事务开始LSN和结束LSN,默认为NULL,表示返回事务日志文件的所有日志记录。


例如:

SELECT * FROM fn_dblog(null,null);


fn_dump_dblog()用于分析数据库的事务日志备份文件,该函数需要的参数很多,但我们只需要传入备份文件的完整路径名称,其他参数使用默认值DEFAULT。


例如:

SELECT *
FROM fn_dump_dblog (
NULL, NULL, 'DISK', 1, 'D:\Pay\Pay_201707280400_LOG.trn',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT);


再来看看下图多个事务操作写入到事务日志文件的表现:

SQL Server事务日志分析


重要数据输出列值


我们再来分析下100多列输出中的几个重要列:


[Transaction Name]

该列描述该事务操作的类型,主要值有:

INSERT、UPDATE、DELETE、DROPOBJ

次要值有:

AllocPages、SplitPage、AllocHeapPageSysXactDML、UpdateQPStats、Backup:CommitLogArcHivePoint、BTree Split/Shrink等。

典型的应用是通过DROPOBJ值来查找对象删除操作。


[Operation]

该列描述日志里记录的操作的具体类型,主要值有:

LOP_BEGIN_XACT、LOP_COMMIT_XACT、LOP_INSERT_ROWS、LOP_DELETE_ROWS、LOP_MODIFY_ROW、LOP_MODIFY_COLUMNS

次要值有:

LOP_BEGIN_CKPT、LOP_END_CKPT、LOP_XACT_CKPT、LOP_LOCK_XACT、

LOP_DELETE_SPLIT、LOP_EXPUNGE_ROWS、LOP_MODIFY_HEADER、LOP_FORMAT_PAGE、LOP_COUNT_DELTA、LOP_HOBT_DELTA、LOP_INSYSXACT、LOP_INVALIDATE_CACHE、LOP_MIGRATE_LOCKS、LOP_SET_BITS、LOP_SET_FREE_SPACE、LOP_SHRINK_NOOP、LOP_TEXT_INFO_BEGIN、LOP_TEXT_INFO_END


[Begin Time]

事务操作的开始时间。


[PartitionID]

具体操作的哪个分区,可以关联查询到具体影响的哪个表或索引


[TRANSACTION SID]

该事务操作的用户SID,可以通过SUSER_SNAME()函数转换为用户名。


具体示例分析


再来看一个具体事务操作:

SELECT [Current LSN], [Transaction ID], [Transaction Name], [Operation], [Begin Time], [PartitionID], [TRANSACTION SID]
FROM fn_dump_dblog (
NULL, NULL, 'DISK', 1, 'D:\Pay\Pay_201707280400_LOG.trn',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT,
DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)
WHERE [Transaction ID]='0000:5c9b41e2';

SQL Server事务日志分析


根据[Transaction Name]为INSERT知道这是一个插入操作,具体哪条是插入的数据行,哪条是索引行,可以根据后面的PartitionID再去关联查询到。


根据[TRANSACTION SID]可以查询到操作的用户:

SELECT SUSER_SNAME(0x017017A631B52141B2338990DCFFADCC);


根据[PartitionID]查询到操作的对象:

SELECT so.name
FROM sys.objects so
INNER JOIN sys.partitions sp on so.object_id = sp.object_id
WHERE partition_id in(
72057594041204736,
72057594070630400);

SQL Server事务日志分析


根据partition_id还可以更详细的查看是数据行还是索引行:

--查看某个表的具体数据分布
SELECT DISTINCT so.name AS 'table_name', so.object_id,sp.partition_id,si.name AS 'index_name',internals.type_desc,internals.total_pages, internals.used_pages, internals.data_pages,first_iam_page, first_page, root_page
FROM sys.objects so
INNER JOIN sys.partitions sp ON so.object_id = sp.object_id
INNER JOIN sys.indexes si ON sp.object_id = si.OBJECT_ID AND sp.index_id = si.index_id
INNER JOIN sys.allocation_units sa ON sa.container_id = sp.hobt_id
INNER JOIN sys.system_internals_allocation_units internals ON internals.container_id = sa.container_id
WHERE so.object_id = object_id('NotificationRecord');

SQL Server事务日志分析


--查看某个表的索引详细信息
SELECT
TableId=O.[object_id],
TableName=O.Name,
IndexId=ISNULL(KC.[object_id],IDX.index_id),
IndexName=IDX.Name,
IndexType=ISNULL(KC.type_desc,'Index'),
Index_Column_id=IDXC.index_column_id,
ColumnID=C.Column_id,
ColumnName=C.Name,
Sort=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN N'√'ELSE N'' END,
[UQIQUE]=CASE WHEN IDX.is_unique=1 THEN N'√'ELSE N'' END,
Ignore_dup_key=CASE WHEN IDX.ignore_dup_key=1 THEN N'√'ELSE N'' END,
Disabled=CASE WHEN IDX.is_disabled=1 THEN N'√'ELSE N'' END,
Fill_factor=IDX.fill_factor,
Padded=CASE WHEN IDX.is_padded=1 THEN N'√'ELSE N'' END
FROM sys.indexes IDX
INNER JOIN sys.index_columns IDXC
ON IDX.[object_id]=IDXC.[object_id]
AND IDX.index_id=IDXC.index_id
LEFT JOIN sys.key_constraints KC
ON IDX.[object_id]=KC.[parent_object_id]
AND IDX.index_id=KC.unique_index_id
INNER JOIN sys.objects O
ON O.[object_id]=IDX.[object_id]
INNER JOIN sys.columns C
ON O.[object_id]=C.[object_id]
AND O.type='U'
AND O.is_ms_shipped=0
AND IDXC.Column_id=C.Column_id where O.name='NotificationRecord';

SQL Server事务日志分析


您可能感兴趣的文档:

--结束END--

本文标题: SQL Server事务日志分析

本文链接: https://www.lsjlt.com/news/35977.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server事务日志分析
    SQL Server事务日志分析fn_dblog()和fn_dump_dblog()函数介绍SQL Server有两个未公开的函数fn_dblog()和fn_dump_dblog()非常有用并且提供的信息量...
    99+
    2022-10-18
  • 如何使用sql server分析系统日志
    本篇内容介绍了“如何使用sql server分析系统日志”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!.分...
    99+
    2022-10-18
  • sql server中错误日志errorlog的示例分析
    这篇文章将为大家详细讲解有关sql server中错误日志errorlog的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一 .概述SQL Server 将某些系...
    99+
    2022-10-18
  • SQL Server数据库日志分离
    有时候我们经常会遇见,数据库日志因为过大,而占据着磁盘大量空间。 所以当磁盘空间不足的时候我们要定期清理一下过大的一些日志文件。1.清理之前先分离日志2.删除数据库的日志,找到你存储数据库日志的地方,...
    99+
    2022-10-18
  • SQL Server清除事务日志的两种方式
    目录前言方法一方法二前言 我们在数据库维护的时候,经常会查看数据库日志等,但是数据库读写量很大的时候,数据库日志文件也会随之增大,一般情况会设置日志文件最大大小,达到这个大小后,数据库将无法正常操作并记录日志;当然也有图...
    99+
    2023-10-18
    SQL清除事务日志 SQL 事务日志
  • SQL Server 事务日志已满,3种解决方案
    我们安装数据库后,系统会默认把数据库文件和数据库日志文件最大设为500MB,当然你中途可以更改这个限制。当日志文件接近最大值时,继续使用数据库会提示:事务日志已满。解决这个问题,有3种方案: 第一种解...
    99+
    2023-09-23
    数据库 golang mysql
  • sql server 2008以上数据库 收缩事务日志
    日志简介SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了...
    99+
    2022-10-18
  • SQL Server中怎么截断和收缩事务日志
    SQL Server中怎么截断和收缩事务日志,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  当SQL Server截断事务日...
    99+
    2022-10-18
  • SQL Server AlwaysOn日志收缩
      当前好多项目都在逐渐的采用SQL Server AlwaysOn架构来作为数据库的高可用集群技术。  并且当前微软的大多数产品、Citrix XenDesktop、XenApp、P...
    99+
    2022-10-18
  • sql server怎么清除日志
    要清除 SQL Server 中的事务日志,可以使用以下两种方法之一:1. 使用 SQL Server Management Stu...
    99+
    2023-09-26
    sql server
  • SQL SERVER进行日志截断
    如果sql server的日志过大,需要进行日志截断。登陆sql server选择数据库,打开属性,将日志级别从完整调整成简单,点击确定。这时过去很大的log文件就已经失去了作用。再次打开属性,将日志级别从...
    99+
    2022-10-18
  • SQL Server中事务与锁的示例分析
    这篇文章将为大家详细讲解有关SQL Server中事务与锁的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一  概述在数据库方面,对于非DBA的程序员来...
    99+
    2022-10-18
  • 一文分析SQL Server中事务使用的锁
    目录序SQL Server使用的锁及锁对象SQL Server执行Select时使用的锁SQL Server执行insert时使用的锁SQL Server执行update时使用的锁总结序 本文属于基础知识的回顾...
    99+
    2022-09-02
  • 一文分析SQL Server中事务使用的锁
    目录序SQL Server使用的锁及锁对象SQL Server执行Select时使用的锁SQL Server执行insert时使用的锁SQL Server执行update时...
    99+
    2022-11-13
  • SQL server中怎么清除日志
    这篇文章将为大家详细讲解有关SQL server中怎么清除日志,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。方法一:第一步:-- no_log和trunca...
    99+
    2022-10-18
  • Zookeeper事务日志预分配空间源码分析
    这篇文章主要介绍“Zookeeper事务日志预分配空间源码分析”,在日常操作中,相信很多人在Zookeeper事务日志预分配空间源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Zookeeper事务日志...
    99+
    2023-07-05
  • SQL Server 事务
    2、T-SQL查询语句 详解事务及锁                        &...
    99+
    2022-10-18
  • SQL Server日志传送如何配置
    小编给大家分享一下SQL Server日志传送如何配置,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Date:2016-04-1...
    99+
    2022-10-19
  • SQL Server [备份恢复]:完整备份,差异备份或事务日志备份,尾部日志备份
    事故背景:突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到2点40之间的数据恢复呢这就需要通过备份尾部日志进行恢复了。环境描述:   某公司装了一台SQL Server...
    99+
    2022-10-18
  • Sql Server事务语法及使用方法实例分析
    本文实例讲述了Sql Server事务语法及使用方法。分享给大家供大家参考,具体如下: 事务是关于原子性的。原子性的概念是指可以把一些事情当做一个不可分割的单元来看待。从数据库的角度看,它是指应全部执行或全...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作