我们都知道Server的事务日志记录了有关事务的信息。但是,在完全恢复模型中,事务日志中实际上记录了什么呢?你会说:交易!
啊,但是SQL Server可能有几种方法来记录事务。所以问题是,它是如何记录交易的?
以下是我所设想的工作方式:
在这种情况下,事务日志包含上面引用的全部内容。
然后,在事务日志恢复(完全备份恢复之后),Server将实际对数据库执行事务日志中包含的语句来更新它。
然后,在事务日志恢复(完全备份恢复之后),Server将将事务日志中包含的行数据复制到数据库,或者插入它,或者用事务日志中的数据覆盖表中的同一行。
然后,在事务日志恢复(完全备份恢复之后),Server将将事务日志中包含的行数据复制到数据库,或者插入页面,或者用相同的pageID覆盖页面。
或者,也许不是上述任何一个原因。有人知道吗?
发布于 2015-03-11 12:00:56
我不能把这个作为评论,所以这里是给你的。这不是竞争回答你的问题,因为你的问题既可以由微软的工作人员正确回答,也可以是保罗兰德尔(我猜)。我所能说的一切都是出于政治目的,所有的信息都被记录下来了。
可以使用无文档的命令读取日志文件的内容。
select * from fn_dblog(Null,Null)
如果您运行它,您可以看到许多有关数据库,页面,区段,锁等信息。但是你很难从它中提取信息,因为它需要一定水平的专家来破译输出。
如果您阅读联机丛书文档Server事务日志体系结构与管理,上面写着
事务日志中记录了许多类型的操作。这些行动包括:
每笔交易的开始和结束。每次数据修改(插入、更新或删除)。这包括按系统存储过程或数据定义语言(DDL)语句对任何表(包括系统表)进行的更改。·每个范围和页面分配或取消分配。创建或删除表或索引。
用于数据修改的日志记录要么记录所执行的逻辑操作,要么记录修改数据的前后图像。前图像是执行操作之前的数据的副本;后图像是操作执行后的数据的副本。
AFAIK没有被触发的查询的信息,但是查询所做的更改是写在事务日志中的。对页面、区段、已采取的锁、锁定的资源所做的更改。
https://dba.stackexchange.com/questions/94954
复制相似问题