首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >事务日志如何记录事务?

事务日志如何记录事务?
EN

Database Administration用户
提问于 2015-03-11 11:36:26
回答 1查看 1.9K关注 0票数 3

我们都知道Server的事务日志记录了有关事务的信息。但是,在完全恢复模型中,事务日志中实际上记录了什么呢?你会说:交易!

啊,但是SQL Server可能有几种方法来记录事务。所以问题是,它是如何记录交易的?

以下是我所设想的工作方式:

  1. 它只是记录了运行了哪条语句。在本例中,事务日志包含DML语句的实际文本,如下所示:“插入test_database.dbo.Test_People (FirstName,LastName)值('James‘,'Smith')”

在这种情况下,事务日志包含上面引用的全部内容。

然后,在事务日志恢复(完全备份恢复之后),Server将实际对数据库执行事务日志中包含的语句来更新它。

  1. 它存储整个数据行的记录,以及它的所有值(甚至那些未更新的值),以及该行被修改/插入的日期。

然后,在事务日志恢复(完全备份恢复之后),Server将将事务日志中包含的行数据复制到数据库,或者插入它,或者用事务日志中的数据覆盖表中的同一行。

  1. 它存储整个数据页的记录及其所有值(甚至那些未更新的值),以及数据页被修改/更新/删除的日期。

然后,在事务日志恢复(完全备份恢复之后),Server将将事务日志中包含的行数据复制到数据库,或者插入页面,或者用相同的pageID覆盖页面。

或者,也许不是上述任何一个原因。有人知道吗?

EN

回答 1

Database Administration用户

发布于 2015-03-11 12:00:56

我不能把这个作为评论,所以这里是给你的。这不是竞争回答你的问题,因为你的问题既可以由微软的工作人员正确回答,也可以是保罗兰德尔(我猜)。我所能说的一切都是出于政治目的,所有的信息都被记录下来了。

可以使用无文档的命令读取日志文件的内容。

代码语言:javascript
运行
复制
select * from fn_dblog(Null,Null)

如果您运行它,您可以看到许多有关数据库,页面,区段,锁等信息。但是你很难从它中提取信息,因为它需要一定水平的专家来破译输出。

如果您阅读联机丛书文档Server事务日志体系结构与管理,上面写着

事务日志中记录了许多类型的操作。这些行动包括:

每笔交易的开始和结束。每次数据修改(插入、更新或删除)。这包括按系统存储过程或数据定义语言(DDL)语句对任何表(包括系统表)进行的更改。·每个范围和页面分配或取消分配。创建或删除表或索引。

用于数据修改的日志记录要么记录所执行的逻辑操作,要么记录修改数据的前后图像。前图像是执行操作之前的数据的副本;后图像是操作执行后的数据的副本。

AFAIK没有被触发的查询的信息,但是查询所做的更改是写在事务日志中的。对页面、区段、已采取的锁、锁定的资源所做的更改。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/94954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档