资源描述:
《利用dbccpage查看sqlserver中的表和索引数据》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、利用DBCCPAGE查看SQLServer中的表和索引数据>>教育资源库 问题 我读了很多关于数据库页和如何利用它们来存储表数据和索引数据的文章。有没有一种方法可以让我真正看到这方面的信息呢? 专家解答 在SQLServer中最糟的一个秘密是没有正式文件说明的DBCCPAGE命令,而这个命令可以让你查看数据和索引页的内容。其中,某些信息仍然是神秘的,而你喜爱的搜索引擎是一个让你开始着手查找输出结果背后展示的很多意思的好去处。尽管如此,我发现,当我遍历数据库来解决数据库问题而我只有通过页信息来继续摸索这个问题时,或者当我只是想看看当遇到某些数据库操作发生时数据库引擎
2、如何处理数据和索引页时,我发现DBCC命令是很有用的。DBCCPAGE参数DBCCPAGE(['databasename'
3、databaseid],--canbetheactualnameoridofthedatabasefilenumber,--thefilenumberber,--thepagenumberation) 首先,让我们来创建一个示例数据库和表,这将有利于我们描述通过DBCCPAGE你看到了什么。 USEMASTER GO CREATEDATABASEMSSQLTIPS GO USEMSSQLTIPS GO CREATETA
4、BLEDBO.EMPLOYEE ( EMPLOYEEIDINTIDENTITY(1,1), FIRSTNAMEVARCHAR(50)NOTNULL, LASTNAMEVARCHAR(50)NOTNULL, DATE_HIREDDATETIMENOTNULL, IS_ACTIVEBITNOTNULLDEFAULT1, CONSTRAINTPK_EMPLOYEEPRIMARYKEY(EMPLOYEEID), CONSTRAINTUQ_EMPLOYEE_LASTNAMEUNIQUE(LASTNAME,FIRSTNAME) ) GO INSERTINTODB
5、O.EMPLOYEE(FIRSTNAME,LASTNAME,DATE_HIRED) SELECT'George','PLOYEE(FIRSTNAME,LASTNAME,DATE_HIRED) SELECT'Benjamin','Franklin','2001-07-05' GO INSERTINTODBO.EMPLOYEE(FIRSTNAME,LASTNAME,DATE_HIRED) SELECT'Thomas','Jefferson','2002-1
6、1-10' GO 现在,我们可以去看看SQLServer如何存储数据和索引页。但是我们该从哪里开始?我们能从哪里找到这张表的页和它的数据的所在?其实,这里还有另外的DBCC命令–DBCCIND–你可以用它来列出一张表的所有数据和索引页。DBCCIND参数DBCCIND(['databasename'
7、databaseid],--thedatabasetousetablename,--thetablenametolistresultsindexid,--anindex_idfromsys.indexes;-1shos,-2
8、justshos) 让我们通过运行下面的命令行来列出EMPLOYEE表的页结构。 ListdataandindexpagesallocatedtotheEMPLOYEEtable DBCCIND('MSSQLTIPS',EMPLOYEE,-1) GO 以下是我的数据库所输出的结果: 请注意,为了更简洁,上述的图像只列出了执行DBCC命令后输出的前面11列的结果。还有另外的列没有列出来,这些列包括可以让你看到这些页如何彼此关联的链接列表信息。 这一次的数据意味着什么呢?为了达到这篇文章讲述的方法的目的,我们专注于一些关键列。列PageFID和P
9、agePID分别代表页所在的文件数目和数据在文件内的页数目。IndexID是在sys.indexes之中找到的索引的index_id。PageType表示页的类型,Type=1是数据页,Type=2是索引页,Type=10是保存页本身的IAM页。IndexLevel是按页数时IAM结构的级别。如果level=0,那么这是索引的叶级别页。要想了解更多这些列的详细信息(毕竟这是一个没有在正式文件中说明的命令),可以看看由微软前存储引擎专家PaulRandal写的MSDNblog,这个博客很详细地解释了这些。 有了这些信息,现在我