LSN的10进制和16进制之间的转换
来源:互联网 发布:dt大数据梦工厂 spark 编辑:程序博客网 时间:2024/06/06 00:40
LSN的10进制和16进制之间的转换
一、16进制
LSN即日志顺序号(Log Sequence Number),用16进制表示分成3段,格式为:
FSeqNo:SectorNo:SlotNo
其含义分别为:
1) 第1段:FSeqNo是虚拟日志文件(VLF)的序列号,长度为4个字节。
2) SectorNo是VLF中扇区的序号,长度也为4个字节。
3) SlotNo是日志所在扇区的序号,长度为2个字节。
二、10进制
10进制下的LSN类型为NUMERIC(25,0),它也是分三段,分别是:
1) 从0-4位(共5位)为SlotNo
2) 从5-14位(共10位)为SectorNo
3) 从15-24位(共10位)为FSeqNo
各部分位数不足时,左边用0补齐(FSeqNo不需要补齐,补齐也没用)。
三、举例
有关10进制和16进制之间的互相转换,请参考博文:《MS SQL Server10进制和16进制之间的互相转换》
DECLARE @LSN16 VARCHAR(50)
DECLARE @LSN10 NUMERIC(25, 0)
DECLARE @LSN VARCHAR(25)
Set @LSN16= '00000021:00000120:0001'
SELECT @LSN10= CONVERT(INT,CONVERT(VARBINARY,'0X' + SUBSTRING(@LSN16, 1, 8), 1))* 1000000000000000
+ CONVERT(INT,CONVERT(VARBINARY,'0X' + SUBSTRING(@LSN16, 10, 8), 1))* 100000
+ CONVERT(INT,CONVERT(VARBINARY,'0X' + SUBSTRING(@LSN16, 19, 4), 1))
SELECT @LSN10
SELECT @LSN= RIGHT('0000000000'+ CONVERT(VARCHAR,@LSN10), 25)
SELECT CONVERT(VARCHAR(50),CONVERT(VARBINARY,CONVERT(INT,SUBSTRING(@LSN, 1, 10))), 2)+ ':'
+ CONVERT(VARCHAR(50),CONVERT(VARBINARY,CONVERT(INT,SUBSTRING(@LSN, 11, 10))), 2)+ ':'
+ CONVERT(VARCHAR(50),CONVERT(VARBINARY,CONVERT(INT,SUBSTRING(@LSN, 21, 5))), 2)
--返回
--33000000028800001
--00000021:00000120:00000001
- LSN的10进制和16进制之间的转换
- 进制之间的转换 16---10
- 转换fn_dblog的十六进制Current LSN格式
- java字节数组和16进制之间的转换
- iOS字符串和16进制之间的相互转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- 进制之间的转换
- DISTINCT和GROUP BY的区别
- mybatis generator生成带有分页的Mybatis代码
- Activity的生命周期
- dubbo 获取application和ip 打印日志,以便排查问题.
- eclipse: android rename package name
- LSN的10进制和16进制之间的转换
- android 获取相册列表的实现及源码下载(四)
- 一天一段scala代码(十)
- android 3.0 升级的部分内容
- matlab
- IOS开发—应用屏幕横竖屏切换设置
- 创业公司PHP实习面试
- 输入输出挂
- Android中LCD背光驱动