首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

经过dbcc page来查看表中的数据

2013-10-12 
通过dbcc page来查看表中的数据 --1.先建表CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10) NULL)IN

通过dbcc page来查看表中的数据

 

--1.先建表CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10) NULL)INSERT INTO TESTSELECT 1,'abcdefg'UNION ALLSELECT 2,'hijklmn'--SELECT * FROM TESTSELECT *FROM sys.tables WHERE name = 'test'--2.查询元数据--hobt_id : 72057594043236352SELECT hobt_idFROM sys.partitionsWHERE object_id = object_id('test')/*first_page :0x790500000100拆分成2部分:0100和79050000这2部分要翻转,也就是0001 和 00000579前面表示fileId,后面是pageId,都是16机制的表示方法,通过calc计算器的转换,就是10进制就是1和1401*/SELECT first_page    --转换值的顺序FROM sys.system_internals_allocation_unitsWHERE container_id = 72057594043236352--3.这里创建一个表,用来存放dbcc page的结果if exists(select * from sys.tables where name = 'dbcc_page')   drop table dbcc_pagegocreate table dbcc_page(ParentObject varchar(500),Object       varchar(2000),Field        varchar(1000),Value        nvarchar(max))go--4.参数分别是数据库名,fileid,pageid,显示格式--注意:这里是在自己的电脑上实验,用的master数据库,大家不要在正是服务器上尝试/*--这样会报错,只能采用下面的,建一个存储过程insert into dbcc_page(ParentObject,Object,Field,Value)DBCC page(master,1,1401,3) with tableresults*/if exists(select * from sys.procedures where name = 'proc_dbcc_page')   drop procedure proc_dbcc_pagegocreate procedure proc_dbcc_pageasDBCC page(master,1,1401,3) with tableresultsgo--5.把dbcc page的结果插入到表中insert into dbcc_page(ParentObject,Object,Field,Value)exec proc_dbcc_page--6.查看数据select *from dbcc_page--过滤大部分其他元数据,选出表test中的数据,与最上面的数据相一致select OBJECT,       Field,       valuefrom dbcc_pagewhere Object like 'Slot%Column%'/*OBJECT                                               FieldvalueSlot 0 Column 1 Offset 0x4 Length 4 Length (physical) 4idd    1Slot 0 Column 2 Offset 0xf Length 7 Length (physical) 7nameabcdefgSlot 1 Column 1 Offset 0x4 Length 4 Length (physical) 4idd    2Slot 1 Column 2 Offset 0xf Length 7 Length (physical) 7namehijklmn*/


 

经过dbcc page来查看表中的数据

 

 除了上面所解析的1401页外,我们还可以查看其他的页:

/*DBCC ind:DBCC IND(['database name'|database id], tablename,indexid, -1 shows all indexes and IAMs, -2 just show IAMs)PageFID: 页所在的文件号PagePID: 数据所在文件内的页号IndexID: 在sys.indexes中的index_id,  -1表示所有索引页和IAM页,-2只显示IAM页PageType:表示页的类型,1是数据页,2是索引页,10是保存页本身的IAM页。IndexLevel: 是IAM结构的级别。如果0,那么这是索引的叶级别页*/select name,       index_id  -- 0from sys.indexeswhere object_id = object_id('test')--1.创建表if exists(select * from sys.tables where name = 'dbcc_ind')   drop table dbcc_indgocreate table dbcc_ind(PageFID numeric(20),PagePID numeric(20),IAMFID numeric(20),IAMPID numeric(20),ObjectID numeric(20),IndexID numeric(20),PartitionNumber numeric(20),PartitionID numeric(20),iam_chain_type nvarchar(100),PageType numeric(20),IndexLevel numeric(20),NextPageFID numeric(20),NextPagePID numeric(20),PrevPageFID numeric(20),PrevPagePID numeric(20))go--2.建存储过程if exists(select * from sys.procedures)   drop procedure proc_dbcc_indgocreate procedure proc_dbcc_indasdbcc ind(master,test,0) goinsert into dbcc_indexec proc_dbcc_ind--3.一共2页,分别是IAM页1402,数据页1401select PageFID,       PagePID,       OBJECTID,       IndexID,       PartitionNumber,       PartitionID,       iam_chain_type,       PageType,       IndexLevel,              NextPageFID,  --下一页的文件id       NextPagePID,  --下一页的页id       PrevPageFID,         PrevPagePIDfrom dbcc_ind


经过dbcc page来查看表中的数据

 

 

 

 

热点排行