欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

SQL Server事件记载信息研究探讨

来源:本站整理 作者:佚名 时间:2017-09-08 TAG: 我要投稿

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);
再来看看下图多个事件操纵写入到事件日记文件的表现:

紧张数据输入列值
咱们再来阐发下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';

依据[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);

依据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

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载