use*_*285 3 sql-server transaction-log
我们都知道 SQL Server 的事务日志记录了有关事务的信息。但是,在完整恢复模型中,事务日志中实际记录的是什么?你会说:交易!
啊,但是 SQL Server 可以有多种方法来记录事务。那么问题来了,它是如何记录交易的呢?
以下是我设想的工作方式:
它只是记录运行了哪个语句。在这种情况下,事务日志包含 DML 语句的实际文本,如下所示:
"插入 test_database.dbo.Test_People (FirstName, LastName) VALUES ('James' ,'Smith')"
在这种情况下,事务日志包含上面引用的全部内容。
然后,在事务日志还原中(在完整备份还原之后),SQL Server 将针对数据库实际执行事务日志中包含的语句以更新它。
然后,在事务日志还原中(在完全备份还原之后),SQL Server 将事务日志中包含的行数据复制到数据库中,插入它或用事务日志中的数据覆盖表中的同一行。
然后,在事务日志还原中(在完全备份还原之后),SQL Server 将事务日志中包含的行数据复制到数据库中,插入页面或覆盖具有相同 pageID 的页面。
或者,也许以上都不是。有人知道吗?
我不能把它作为评论,所以这里是给你的。这不是您问题的竞争答案,因为您的问题可以由在 Microsoft 或 Paul Randal 工作的人正确回答(我猜)。我只能说出于所有实际目的,每个信息都被记录下来。
您可以使用未记录的命令读取日志文件的内容
select * from fn_dblog(Null,Null)
Run Code Online (Sandbox Code Playgroud)
如果你运行它,你可以看到很多与数据库、页面、范围、锁等相关的信息。但是您很难从中提取信息,因为它需要一定程度的专业知识来破译输出。
如果您阅读联机丛书文档SQL Server 事务日志架构和管理,它会说
许多类型的操作都记录在事务日志中。这些操作包括:
• 每笔交易的开始和结束。
• 每次数据修改(插入、更新或删除)。这包括系统存储过程或数据定义语言 (DDL) 语句对任何表(包括系统表)所做的更改。
• 每个范围和页面分配或解除分配。
• 创建或删除表或索引。
数据修改的日志记录要么记录执行的逻辑操作,要么记录修改数据的前后图像。之前的图像是执行操作之前的数据的副本;后映像是执行操作后的数据副本。
AFAIK 没有关于被触发的查询的信息,但查询所做的更改写在事务日志中。对页面、范围、所采取的锁、被锁定的资源所做的更改。
归档时间: |
|
查看次数: |
1683 次 |
最近记录: |