公司招聘软件研发程序员的一道考题--MS SQL Server数据库数据文件页面头部结构
2011-08-13 23:26
639 查看
有一次在招聘C++程序员时,出的一道考题,内容其实就是MS SQL Server数据库数据文件页面头部结构,如下:
有个file.a文件,这个文件以16sec[sec是扇区,每个sec包含512个Byte(字节)]为一个页进行分组并编号。
如:
文件的0-15sec(0-8191byte) 为第0页
文件的16-31sec(8192-16383byte) 为第1页
文件的32-47sec(16384-24575byte) 为第2页 以此类推
每个页的头96个字节结构如下:(注意:这里是每个页头部96Byte,1页大小是16 sec,8192 bytes)
struct mdfPageHeader //文件页头部结构
{
UINT8 m_headerVersion; //版本
UINT8 m_type; //页类型
UINT8 m_typeFlagBits;
UINT8 m_level;
UINT8 m_flagBits;
UINT8 m_reservedB;
UINT16 m_indexId;
UINT32 m_prevPage_id;
UINT16 m_prevPage_fid;
UINT16 pminlen;
UINT32 m_nextPage_id;
UINT16 m_nextPage_fid;
UINT16 m_slotCnt;
UINT32 m_objId; //所属对象ID
UINT16 m_freeCnt;
UINT16 m_freeData;
UINT32 m_pageId_id; //每页编号
UINT16 m_pageId_fid;
UINT16 m_reservedCnt;
UINT32 m_lsn_d1;
UINT32 m_lsn_d2;
UINT16 m_lsn_w1;
UINT16 m_xactReserved;
UINT32 m_xdesId_id;
UINT16 m_xdesId_fid;
UINT16 m_ghostRecCnt;
UINT32 m_tornBits;
UINT64 temp1;
UINT64 temp2;
UINT64 temp3;
UINT64 temp4;
};
用VC++完成下面编程:
把符合m_headerVersion==1、m_type==1、m_objId==1三个条件的页面(16sec)找出来,
并把这些页面按照查询先后顺序写到另一个文件file.b文件中。
提示:
打开和创建文件可以用下面两种方法来实现
1、CFile fileo,filew;
fileo.Open("file.a",CFile::modeRead|CFile::typeBinary);
filew.Open("file.b",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
2、HANDLE hFileA,hfileB;
hFileA = CreateFile(_T("file.a"),GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
hFileB = CreateFile(_T("file.b"),GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
有个file.a文件,这个文件以16sec[sec是扇区,每个sec包含512个Byte(字节)]为一个页进行分组并编号。
如:
文件的0-15sec(0-8191byte) 为第0页
文件的16-31sec(8192-16383byte) 为第1页
文件的32-47sec(16384-24575byte) 为第2页 以此类推
每个页的头96个字节结构如下:(注意:这里是每个页头部96Byte,1页大小是16 sec,8192 bytes)
struct mdfPageHeader //文件页头部结构
{
UINT8 m_headerVersion; //版本
UINT8 m_type; //页类型
UINT8 m_typeFlagBits;
UINT8 m_level;
UINT8 m_flagBits;
UINT8 m_reservedB;
UINT16 m_indexId;
UINT32 m_prevPage_id;
UINT16 m_prevPage_fid;
UINT16 pminlen;
UINT32 m_nextPage_id;
UINT16 m_nextPage_fid;
UINT16 m_slotCnt;
UINT32 m_objId; //所属对象ID
UINT16 m_freeCnt;
UINT16 m_freeData;
UINT32 m_pageId_id; //每页编号
UINT16 m_pageId_fid;
UINT16 m_reservedCnt;
UINT32 m_lsn_d1;
UINT32 m_lsn_d2;
UINT16 m_lsn_w1;
UINT16 m_xactReserved;
UINT32 m_xdesId_id;
UINT16 m_xdesId_fid;
UINT16 m_ghostRecCnt;
UINT32 m_tornBits;
UINT64 temp1;
UINT64 temp2;
UINT64 temp3;
UINT64 temp4;
};
用VC++完成下面编程:
把符合m_headerVersion==1、m_type==1、m_objId==1三个条件的页面(16sec)找出来,
并把这些页面按照查询先后顺序写到另一个文件file.b文件中。
提示:
打开和创建文件可以用下面两种方法来实现
1、CFile fileo,filew;
fileo.Open("file.a",CFile::modeRead|CFile::typeBinary);
filew.Open("file.b",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
2、HANDLE hFileA,hfileB;
hFileA = CreateFile(_T("file.a"),GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
hFileB = CreateFile(_T("file.b"),GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
相关文章推荐
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHRINKFILE收缩当前数据库的指定数据或日志文件的大小
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHRINKDATABASE收缩指定数据库中的数据文件和日志文件的大小
- MS Sql Server查询磁盘的可用空间,数据库数据文件及日志文件的大小及利用率
- MS Sql Server查询磁盘的可用空间,数据库数据文件及日志文件的大小及利用率
- MS SQL Server数据库修复利器—D-Recovery For MS SQL Server数据恢复软件
- MS Sql Server查询磁盘的可用空间,数据库数据文件及日志文件的大小及利用率
- MS sql server 数据库日志文件清除(压缩)和恢复日志文件的方法
- MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
- 《MS SQL Server 2000管理员手册》系列——10. 建立数据库数据表
- JPA中关于MS SQL Server数据库的TimeStamp数据类型如何映射
- log view for sql server (一款通过解析MSSql2008日志文件恢复表数据删除的工具软件)
- MS SQL Server 2005 数据库损坏之数据恢复绝对经典
- mysql 执行 大数据 sql文件 与 集群结构 授权 数据库导出导入
- MS SQL Server树型结构数据显示的SQL语句(纯SQL语句,不用函数)
- 数据库(表结构和数据) 保存为 *.sql文件
- ms sql server 2005数据库日志文件过大,需要清除或者清空
- 上传备份ms sqlserver数据库文件
- MS SQLServer数据库日志文件丢失的还原方法
- 关于MS SQL Server数据库文件
- ms sqlserver数据库主文件特别大怎么办