以十进制格式转换HEX LSN值
在上面的fn_dblog的输出中,我们有LSN用于delete和truncate语句。
- 删除LSN:00000026:00000230:0001
- 截断LSN: 00000026:00000268:0001
fn_dblog中的LSN值采用十六进制格式。Restore log命令要求LSN为十进制格式。我们可以使用以下查询将其转换为十进制格式。在这里,在@LSN参数中指定LSN。
DECLARE @LSN VARCHAR(22), @LSN1 VARCHAR(11), @LSN2 VARCHAR(10), @LSN3 VARCHAR(5); SET @LSN = '00000026:00000230:0001'; SET @LSN1 = LEFT(@LSN, 8); SET @LSN2 = SUBSTRING(@LSN, 10, 8); SET @LSN3 = RIGHT(@LSN, 4); SET @LSN1 = CAST(CONVERT(VARBINARY, '0x' + RIGHT(REPLICATE('0', 8) + @LSN1, 8), 1) AS INT); SET @LSN2 = CAST(CONVERT(VARBINARY, '0x' + RIGHT(REPLICATE('0', 8) + @LSN2, 8), 1) AS INT); SET @LSN3 = CAST(CONVERT(VARBINARY, '0x' + RIGHT(REPLICATE('0', 8) + @LSN3, 8), 1) AS INT); SELECT CAST(@LSN1 AS VARCHAR(8)) + CAST(RIGHT(REPLICATE('0', 10) + @LSN2, 10) AS VARCHAR(10)) + CAST(RIGHT(REPLICATE('0', 5) + @LSN3, 5) AS VARCHAR(5));
使用上面的查询,我们为delete和truncate语句获得以下LSN值。
- 删除LSN:38000000056000001
- 截断LSN: 38000000061600001