iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SQL SERVER数据页checksum校验算法
  • 889
分享到

SQL SERVER数据页checksum校验算法

2024-04-02 19:04:59 889人浏览 泡泡鱼
摘要

在SQL Server2005以上版本中,数据页默认开启checksum,标识为m_flagBits & 0x200 == True,其值m_tornBits位于页头0x3C,4

SQL Server2005以上版本中,数据页默认开启checksum,标识为m_flagBits & 0x200 == True,其值m_tornBits位于页头0x3C,4字节。
算法概述如下:

读8KB 进BUF
将BUF头部 CHECKSUM的4字节值清0
uint32 checksum = 0 //初始checksum
for i in range(0,15):
         //每扇区的初始checksum
         overall = 0;
        for ii in range(0,127):
                 //对当前扇区的每个4字节做累加异或
                overall = overall ^ BUF[i][ii];
                //对每扇区的checksum进行移位,方法为向左移位15-i位,
                //左边移出的15-i位补到最低位。
                checksum = checksum ^ rol(overall, 15- i); 
return checksum; //Gets checksum

c源码如下:

//
#include <stdio.h>
#include <stdlib.h>

#define seed 15 //Initial seed(for first sector)
#define CHAR_BIT 8 

//
unsigned int page_checksum(int page_id, unsigned int *ondisk);
unsigned int rol(unsigned int value, unsigned int rotation);

int main(int arGC, char *argv[]) {

    unsigned int computed_checksum; //Var to retrieve calculated checksum
    unsigned int ondisk_checksum; //Var to retrieve checksum on disk

        computed_checksum = page_checksum(152, &ondisk_checksum); //page_checksum call to retrieve stored and calculated checksum for page 152

        //
        printf("Calculated checksum: 0x%08x\n", computed_checksum);
        printf("On disk checksum: 0x%08x\n", ondisk_checksum);

}

unsigned int page_checksum(int page_id, unsigned int *ondisk)
{

    FILE *fileptr; 
    unsigned int i; 
    unsigned int j;
    unsigned int checksum;
    unsigned int overall;
    unsigned int *pagebuf[16][128]; //A pointer to describe 2d array [sector][element]

    fileptr = fopen("C:\\Users\\andre\\Desktop\\teste.mdf", "r+b"); //Open dummy data file for binary read

    fseek(fileptr, page_id * 8192, SEEK_SET); //Calculate page address on data file and points to it

    fread(pagebuf, 4, 2048, fileptr); //Read page buffer

    fclose(fileptr);

    checksum = 0;
    overall = 0;

    *ondisk = pagebuf[0][15]; //This means that torn bits is stored on first sector in 15th element, Internals researches understand this

    pagebuf[0][15] = 0x00000000; //Fill checksum field with zeroes (this field will be discarded in alGorithm)

    for (i = 0; i < 16; i++) //Loop through sectors
    {

        overall = 0; //Reset overall sum for sectors

        for (j = 0; j < 128; j++) //Loop through elements in sector i
        {
            overall = overall ^ (unsigned int)pagebuf[i][j]; //XOR operation between sector i elements
        }

        checksum = checksum ^ rol(overall, seed - i); //Current checksum is overall for sector i circular shifted by seed (15 - i)
    }

    return checksum; //Gets checksum

}

unsigned int rol(unsigned int value, unsigned int rotation)
{
    return (value) << (rotation) | (value) >> (sizeof(int) * CHAR_BIT - rotation) & ( (1 << rotation) -1);
}
您可能感兴趣的文档:

--结束END--

本文标题: SQL SERVER数据页checksum校验算法

本文链接: https://www.lsjlt.com/news/40936.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#实现的4种常用数据校验方法小结(CRC校验,LRC校验,BCC校验,累加和校验)
    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)...
    99+
    2024-04-02
  • SQL Server数据库分页是什么
    这期内容当中小编将会给大家带来有关SQL Server数据库分页是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。需求  这里以SQLServer的示例数据库North...
    99+
    2024-04-02
  • Sql Server中怎么实现数据分页
    Sql Server中怎么实现数据分页,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 方法一:     ...
    99+
    2024-04-02
  • validate 注册页的表单数据校验实现详解
    目录1.注册页是什么2.为什么需要注册页3.注册页如何实现3.1分析业务需求3.2获取数据 v-model双向绑定3.3校验数据3.4method中的发送数据3.5处理数据4总结1....
    99+
    2024-04-02
  • 详解Java如何实现数值校验的算法
    给定一个字符串如何判断它是否为数值类型?例如:字符串+100、5e2、-123、3.1416以及-1E-16都表示数值,为数值类型,但12e、1a3.14、1.2.3、+-5以及12...
    99+
    2024-04-02
  • SQL Server中元数据函数的用法
    1、获取数据库标识符:DB_ID DB_ID函数用于获取当前数据库的唯一ID(int数据类型),数据库ID用于服务器上唯一区分书库。 语法格式: DB_ID (['database_...
    99+
    2024-04-02
  • SQL Server备份数据库的方法
    这篇文章主要介绍了SQL Server备份数据库的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL Server备份数据库的方法文章都会有所收获,下...
    99+
    2024-04-02
  • SQL Server数据库的安装方法
    这篇文章主要介绍SQL Server数据库的安装方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据库SQL Server 2008的安装步骤1、在网上下载sql server安装...
    99+
    2024-04-02
  • SQL Server创建数据库的方法
    本篇内容介绍了“SQL Server创建数据库的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&nbs...
    99+
    2024-04-02
  • sql server数据库中raiserror函数的用法
    SQL Server数据库中的RAISERROR函数用于在存储过程或触发器中引发一个错误,并将错误信息传递给客户端。它可以用于自定义...
    99+
    2023-09-01
    SQL
  • 数据库实验——通过SQL Server Management Studio创建及管理数据库
    一、实验目的 (1)熟悉SQL Server Management Studio。 (2)掌握通过SQL Server Management Studio管理数据库的方法。 (3)掌握数据库及其物理文...
    99+
    2023-10-23
    数据库 服务器 sqlserver
  • SQL Server导入大量数据的方法
    本篇内容主要讲解“SQL Server导入大量数据的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server导入大量数据的方法”吧!要实现对海量数...
    99+
    2024-04-02
  • sql server添加数据的方法是什么
    SQL Server添加数据的方法有以下几种:1. 使用INSERT INTO语句:可以通过INSERT INTO语句将一条或多条记...
    99+
    2023-09-27
    sql server
  • 还原sql server数据库的处理方法
    还原sql server数据库的处理方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如何从备份设备还原备份(企业管理器) 从...
    99+
    2024-04-02
  • SQL Server数据库default value的使用方法
    这篇文章将为大家详细讲解有关SQL Server数据库default value的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  SQLServer数据库def...
    99+
    2024-04-02
  • SQL Server聚合函数算法优化技巧是什么
    今天就跟大家聊聊有关SQL Server聚合函数算法优化技巧是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Sql server聚合函数在实际工...
    99+
    2024-04-02
  • SQL SERVER 2012数据库自动备份的方法
    为了防止数据丢失,这里给大家介绍SQL SERVER2012数据自动备份的方法: 一、打开SQL SERVER 2012,如图所示: 服务器类型:数据库引擎; 服务器名称:127.0.0.1(本地),也可...
    99+
    2024-04-02
  • SQL Server数据库的高性能优化方法
    本篇内容介绍了“SQL Server数据库的高性能优化方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • python连接sql server数据库的方法实战
    目录一、安装第三方模块二、连接数据库三、遇到的问题总结一、安装第三方模块 首先要下载名为"pymssql"的模块,然后import该模块 安装方法 :1.第一种方...
    99+
    2024-04-02
  • 将Access数据库转换为SQL Server的方法
    小编给大家分享一下将Access数据库转换为SQL Server的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!随着时间的推移,大多数数据库的规模和复杂性都在增长。如果Access 201...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作