我使用这些查询访问Server数据库中的事务
Use Action
Go
Select * from fn_dblog(null,null)该查询工作正常,但当数据库中的一个表保存超过10万条记录时,只加载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)此查询工作正常,但只恢复了37行。如果还原备份,一个表中有超过10万条记录。当我运行这些查询时,我希望看到成百上千行。
唯一合乎逻辑的答案是文件中的事务是有限的。但是事务日志的文件大小是1.5GB。是否可以运行任何命令来检查日志文件中的事务数?
有人能解释我如何使这些查询恢复事务日志中的每个事务吗?
发布于 2016-12-26 01:42:51
当数据库中的一个表保存超过100,000条记录时,此查询工作,但只加载7行。
sys.fn_dblog的特点是它只显示日志的活动部分。如果您希望通过这种方式发生的每一次事务,我可能会建议使用你的时间更有用。
此查询工作正常,但只恢复了37行。如果还原备份,一个表中有超过10万条记录。当我运行这些查询时,我希望看到成百上千行。
单个日志备份并不能保存发生过的所有事情,您将需要进行所有日志备份。如果您的数据库曾经处于简单的恢复模型中,或者是在完全恢复模型中,并且在进行完全备份之前已经在其中完成了任何操作,那么您将不会得到所有的东西。句号。
仅仅因为表中有100 k记录,也不意味着有100 000个事务。它可能是一个大的交易,它可能是两个交易插入200 K,然后第三个交易删除100 K等令人作呕。
唯一合乎逻辑的答案是文件中的事务是有限的。
是的,在任何给定的点上你都能读到什么,因为日志文件可以被认为是一个巨大的环缓冲区,它写在旧的不活动部分上。它是循环的,并且将继续重复使用不活动的部分,除非它填满并且必须增长,因为所有当前空间都是活动的。
是否可以运行任何命令来检查日志文件中的事务数?
您已经拥有了它们,您只需要在数据库存在的所有时间内对所有日志备份执行此操作。
此外,这也没有考虑到实际读取日志结构,而日志结构没有公开记录。这甚至不包括新的日志结构,比如Hekaton,它在日志结构中有自己的结构,或者设置某些行为所需的任何跟踪标志。
你最好用你的时间做点别的事。如果需要作为数据库恢复的一部分,那么我将雇用一些专业人员。如果这纯粹是为了学术目的,那么我建议创建一个非常小的数据库,将其放入完整的恢复模型,进行完全备份,并且在您看完日志的那一部分之前不要进行日志备份。
https://dba.stackexchange.com/questions/159148
复制相似问题