转换fn_dblog的十六进制Current LSN格式

简介:

今天想查看一个LSN是否包含在日志备份,但是发现restore headeronly里面的LSN格式跟fn_dblog的不同,不过可以通过下面的方法转化。

CreateDatabaseTestLSN;

Go

-- Make sure it is simple recovery

AlterDatabaseTestLSNSetRecoveryfull;

Go

UseTestLSN;

Go

createtabletest(testvarchar(10))

-- Create a marked transaction

BEGINTRANTran1WithMARK'Tran 1';

 

insertintotestvalues ('10')

--Commit

Go

 

-- Find the LSN in the log

Select[Current LSN],[Previous LSN],Operation,Context,[Transaction Name]

Fromfn_dblog(null,null)

Where[Transaction Name]='Tran1';

这里我查到当前的LSN值为:00000021:00000120:0001

backupdatabasetestlsntodisk='d:\testlsn.bak'

backuplogtestlsntodisk='d:\teslsn.trn'

restoreheaderonlyfromdisk='d:\teslsn.trn'

获得的最小LSN为:33000000028800001

转换16进制的Current LSN:、

-- Convert LSN from hexadecimal string to decimal string

Declare@LSNvarchar(22),

@LSN1varchar(11),

@LSN2varchar(10),

@LSN3varchar(5),

@NewLSNvarchar(26)

 

-- LSN to be converted to decimal

Set@LSN='00000021:00000120:0001';

 

-- Split LSN into segments at colon

Set@LSN1=LEFT(@LSN, 8);

Set@LSN2=SUBSTRING(@LSN, 10, 8);

Set@LSN3=RIGHT(@LSN, 4);

 

-- Convert to binary style 1 -> int

Set@LSN1=CAST(CONVERT(VARBINARY,'0x'+

RIGHT(REPLICATE('0', 8)+@LSN1, 8), 1)Asint);

 

Set@LSN2=CAST(CONVERT(VARBINARY,'0x'+

RIGHT(REPLICATE('0', 8)+@LSN2, 8), 1)Asint);

 

Set@LSN3=CAST(CONVERT(VARBINARY,'0x'+

RIGHT(REPLICATE('0', 8)+@LSN3, 8), 1)Asint);

 

-- Add padded 0's to 2nd and 3rd string

SelectCAST(@LSN1asvarchar(8))+

CAST(RIGHT(REPLICATE('0', 10)+@LSN2, 10)asvarchar(10))+

CAST(RIGHT(REPLICATE('0', 5)+@LSN3, 5)asvarchar(5));

得到值为:33000000028800001

可以看到这两个LSN是一样的,所以可以确定LSN包含在当前日志备份文件。 

 

本文转自 lzf328 51CTO博客,原文链接:

http://blog.51cto.com/lzf328/1224146

相关文章
|
18天前
crash —— 将flags转换成可读的字符
crash —— 将flags转换成可读的字符
|
4月前
|
Python
Python字符串和字节不要混淆str.format()和bytes.format()
【5月更文挑战第6天】Python字符串和字节不要混淆str.format()和bytes.format()
25 1
|
4月前
|
数据处理 数据库
SOH (Start of Header) - ASCII值1 (0x01)
SOH (Start of Header) - ASCII值1 (0x01)
540 2
|
4月前
|
网络协议
STX (Start of Text) - ASCII值2 (0x02)
STX (Start of Text) - ASCII值2 (0x02)
337 2
|
4月前
|
存储
TS 自定义结构Long与number类型相互转换
TS 自定义结构Long与number类型相互转换
231 0
|
物联网
CF1506C Double-ended Strings(差不多就是找最长串问题)
CF1506C Double-ended Strings(差不多就是找最长串问题)
38 0
|
PHP
php保留小数点3种方法,number_format,round和sprintf区分
php保留小数点3种方法,number_format,round和sprintf区分
217 0
|
开发者 Python
字符串的 format 方法|学习笔记
快速学习字符串的 format 方法
PHP: number_format()格式化数字保留指定小数
PHP: number_format()格式化数字保留指定小数
107 0
base -2 Number——进制转换
题目描述 Given an integer N, find the base −2 representation of N. Here, S is the base −2 representation of N when the following are all satisfied: S is a string consisting of 0 and 1. Unless S= 0, the initial character of S is 1. Let S=SkSk−1…S0, then S0×(−2)0+S1×(−2)1+…+Sk×(−2)k=N.
108 0