首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在异步镜像( Server 2005)上找到上次接收事务的确切时间?

如何在异步镜像( Server 2005)上找到上次接收事务的确切时间?
EN

Stack Overflow用户
提问于 2014-10-28 11:15:48
回答 1查看 1.4K关注 0票数 0

我需要为用户提供准确的数据完整性时间,以防止强制服务可能导致数据丢失。

我想我能找到最后的LSN使用:

代码语言:javascript
复制
SELECT [mirroring_failover_lsn] 
FROM [master].[sys].[database_mirroring]

但这不能给我准确的时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 11:35:01

如何读取和解释Server日志。您将看到LOP_BEGIN_XACT包含一个时间戳。给定LSN,您可以对日志进行分析并查找所有挂起的事务(即在给定LSN之前没有提交或回滚记录的所有xact_ids )。在发生故障转移时,所有挂起的传输都将回滚。如果发生强制故障转移,这将是数据丢失。将会有许多待处理的事务将被撤消,并且这些不同的事务已经在不同的时间开始。如果您想附加一个“数据完整性的确切时间”,那么您可以说,任何比最早挂起的lop_begin_xact更早的数据丢失都不会发生。例如:给定以下日志流:

代码语言:javascript
复制
+-----+-----------+---------+------------+
| 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完成的,所以它不会丢失,即使它有稍后的时间戳。所以你的时间戳不是绝对的,这就是为什么我说‘没有数据丢失会比.早.’。而不是‘数据之后.会丢失’。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26606927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档