我使用这些查询从 SQL Server 数据库访问事务
Use Action
Go
Select * from fn_dblog(null,null)
Run Code Online (Sandbox Code Playgroud)
此查询有效,但当数据库中的一个表包含超过 100,000 条记录时仅加载 7 行 接下来我使用此查询来恢复历史记录
SELECT * FROM fn_dump_dblog(NULL,NULL,'DISK',1
,'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Action.bak'
,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL)
Run Code Online (Sandbox Code Playgroud)
这个查询没有错误,但只恢复了 37 行。如果我恢复备份,一张表中有超过 100,000 条记录。当我运行这些查询时,我希望看到数百或数千行。
唯一合乎逻辑的答案是文件中的事务是有限的。但事务日志的文件大小为 1.5 GB。我可以运行任何命令来检查日志文件中的事务数吗?
谁能解释我如何使这些查询工作以恢复事务日志中的每个事务?
当数据库中的一个表包含超过 100,000 条记录时,此查询有效但仅加载 7 行
sys.fn_dblog 的问题在于它只显示日志的活动部分。如果你想每该项交易曾经通过诸如发生这种情况,我可能会建议一些更有用你的时间。
这个查询没有错误,但只恢复了 37 行。如果我恢复备份,一张表中有超过 100,000 条记录。当我运行这些查询时,我希望看到数百或数千行。
单个日志备份并不能保存曾经发生的所有事情,您将需要进行过的每个日志备份。如果您的数据库曾经处于简单恢复模式,或者处于完全恢复模式并且在进行完全备份之前已在其中完成任何操作,那么您将无法恢复所有内容。时期。
仅仅因为表中有 10 万条记录并不意味着有 10 万笔交易。这可能是一笔大交易,也可能是 2 笔插入 200k 的交易,然后是第 3 笔删除 100k 的交易,等等。令人作呕。
唯一合乎逻辑的答案是文件中的事务是有限的。
是的,就您在任何给定点可以读取的内容而言,日志文件可以被认为是一个巨大的环形缓冲区,可以覆盖较旧的非活动部分。它是圆形的,将继续重新使用非活动部分,除非它填满并且必须增长,因为所有当前空间都处于活动状态。
我可以运行任何命令来检查日志文件中的事务数吗?
您已经拥有它们,您只需要对数据库存在的所有时间进行的每个日志备份执行此操作。
此外,这并未考虑实际读取未公开记录的日志结构。这甚至不包括诸如 Hekaton 之类的较新的日志结构,它们在日志结构内部具有自己的结构,或者您需要设置某些行为的任何跟踪标志。
总而言之,您最好花时间做其他事情。如果这需要作为数据库恢复的一部分,那么我会聘请一些专业人员。如果这纯粹是出于学术目的,那么我建议创建一个非常小的数据库,将其置于完整恢复模型中,进行完整备份,并且在查看完日志的那部分之前不要进行日志备份。
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |