2014-10-28 9 views
0

데이터 손실 가능성이있는 강제 서비스의 경우 사용자에게 정확한 데이터 무결성 시간을 제공해야합니다.비동기 미러 (SQL Server 2005)에서 마지막으로받은 트랜잭션의 정확한 시간을 찾는 방법은 무엇입니까?

SELECT [mirroring_failover_lsn] 
FROM [master].[sys].[database_mirroring] 

을하지만 그건 나에게 정확한 시간을 제공하지 않습니다 :

나는 내가 사용 마지막 LSN을 찾을 수 있다고 생각한다.

답변

1

How to read and interpret the SQL Server log을 읽으십시오. LOP_BEGIN_XACT에 타임 스탬프가 포함되어 있습니다. LSN이 주어지면 로그를 분석하여 보류중인 모든 트랜잭션 (지정된 LSN 이전에 커밋 또는 롤백이 기록되지 않은 모든 xact_ids)을 찾을 수 있습니다. 장애 조치 (failover)가 발생하면 보류중인 모든 전환이 롤백됩니다. 이것은 강제 장애 복구가 발생할 경우 손실되는 데이터입니다. 보류중인 여러 트랜잭션이 실행 취소되고 이러한 여러 트랜잭션이 여러 시점에 시작되었습니다. '데이터 무결성의 정확한 시간'을 첨부하려는 경우 가장 오래된 보류중인 lop_begin_xact보다 빠른 데이터 손실이 발생하지 않는다고 말할 수 있습니다. 예 : xact_id 2 LSN 8에 최선을 다하고 있지 않기 때문에,

+-----+-----------+---------+------------+ 
| 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 당신이없는 데이터 손실 12:00 이전 발생 말할 수 있습니다이 경우 8.이라고 말할 수 있습니다 : 다음 로그 스트림 제공 따라서 롤백됩니다. xact_id 3 은 LSN 8에 의해 커밋 된이므로 나중에 타임 스탬프가 있어도 손실되지 않습니다. 그래서 당신의 타임 스탬프는 결코 절대적인 것이 아닙니다. 그래서 이것은 "데이터가 손실 된 후에 ..."보다는 "손실 된 데이터가 없습니다 ..."라고 말합니다.