我需要为用户提供准确的数据完整性时间,以防止强制服务可能导致数据丢失。
我想我能找到最后的LSN使用:
SELECT [mirroring_failover_lsn]
FROM [master].[sys].[database_mirroring]但这不能给我准确的时间。
发布于 2014-10-28 11:35:01
读如何读取和解释Server日志。您将看到LOP_BEGIN_XACT包含一个时间戳。给定LSN,您可以对日志进行分析并查找所有挂起的事务(即在给定LSN之前没有提交或回滚记录的所有xact_ids )。在发生故障转移时,所有挂起的传输都将回滚。如果发生强制故障转移,这将是数据丢失。将会有许多待处理的事务将被撤消,并且这些不同的事务已经在不同的时间开始。如果您想附加一个“数据完整性的确切时间”,那么您可以说,任何比最早挂起的lop_begin_xact更早的数据丢失都不会发生。例如:给定以下日志流:
+-----+-----------+---------+------------+
| LSN | Operation | xact_id | timestampt |
+-----+-----------+---------+------------+
| 1 |INSERT | 1 | |
| 2 |BEGIN_XACT | 2 | 12:00 |
| 3 |INSERT | 1 | |
| 4 |BEGIN_XACT | 3 | 12:02 |
| 5 |COMMIT_XACT| 1 | |
| 6 |INSERT | 2 | |
| 7 |INSERT | 3 | |
| 8 |COMMIT_XACT| 3 | |
| 9 |COMMIT_XACT| 2 | |假设镜像故障转移LSN为8。在这种情况下,您可以说不会在12:00之前发生数据丢失,因为xact_id 2没有在LSN 8上提交,因此它将被回滚。请注意,xact_id 3是由LSN 8完成的,所以它不会丢失,即使它有稍后的时间戳。所以你的时间戳不是绝对的,这就是为什么我说‘没有数据丢失会比.早.’。而不是‘数据之后.会丢失’。
https://stackoverflow.com/questions/26606927
复制相似问题