怎樣檢視表的資料頁的結構

2021-09-08 02:42:04 字數 2547 閱讀 2424

sqlserver2000提供了乙個讀取資料頁結構的命令dbcc page。該命令為非文件化的命令,具體如下:

dbcc page (,filenum,pagenum[,printopt])

具體引數描述如下:

dbid          包含頁面的資料庫id

dbname    包含頁面的資料庫的名稱

filenum      包含頁面的檔案編號

pagenum  檔案內的頁面

printopt    可選的輸出選項;選用其中乙個值:

0:預設值,輸出緩衝區的標題和頁面標題

1:輸出緩衝區的標題、頁面標題(分別輸出每一行),以及行偏移量表

2:輸出緩衝區的標題、頁面標題(整體輸出頁面),以及行偏移量表

3:輸出緩衝區的標題、頁面標題(分別輸出每一行),以及行偏移量表;每一行

後跟分別列出的它的列值

要想看到這些輸出的結果,還需要設定dbcc traceon(3604)。

對於表來說,它所在的dbid或者dbname很容易知道,那麼它的filenum和pagenum怎麼知道呢?其實這個值存在系統表sysindexes的列first中(當indid為0或者1時,indid為0表示該表是乙個堆表,沒有任何聚集索引,indid為1表示該索引為聚集索引),列first的資料型別為binary(6),它是以16進製制的形式儲的,需要進行轉換。在16進製制中,每兩個16進製制數字表示乙個位元組,並且是逆序排列的。比如假設乙個表的first的值為0xc70000000100,怎麼轉換呢?因為它是逆序排列的,並且每兩個表示乙個位元組,所以每次都將剩下first值的最後兩位移到轉換後資料的最後,具體轉換步驟如下:

步驟      此時的first值                轉換後的資料

第0步    0xc70000000100

第1步    0xc700000001            00

第2步    0xc7000000                0001

第3步    0xc70000                  000100

第4步    0xc700                      00010000

第5步    0xc7                          0001000000

第6步    0x                              0001000000c7

此時轉換完成。資料0001000000c7即是我們需要的資料,其中它的前2組數(即0001)表示該錶所在的檔案編號;後4組(000000c7)表示該錶所在的頁碼(注意該資料還要轉換為10進製的數才能具體知道是多少)。

完整的**如下(將設我們要檢視的是表test的資料頁的結構):

--從sysindexes中取出first的值

declare @first binary(6)

select @first = first from sysindexes where id = object_id('test') and indid in(0,1)

declare @pagenum int

select @pagenum = convert(int, substring(@first,4,1) + substring(@first,3,1) +

substring(@first,2,1) + substring(@first,1,1) )

declare @filenum int

select @filenum = convert(int, substring(@first,6,1) + substring(@first,5,1))

select @filenum, @pagenum

--執行dbcc page

declare @sql varchar(1000)

select @sql = 'dbcc page (''' + db_name() + ''', ' + convert(varchar(10),@filenum) + ', ' +

convert(varchar(10),@pagenum) + ', 1)'

select @sql

dbcc traceon(3604)

exec (@sql)

執行完上面的語句,就可以檢視表test的資料頁了。怎麼讀懂這些輸出結果呢?

dbcc page的輸出主要分為5個部分: page、buffer、page hearder、data、offset table(行的偏移量陣列)。

page指出該錶的檔案編號及頁碼。

buffer指出關於給定頁面的緩衝區的資訊。

page header指出頁面中所有標題欄位的資料。

data指出每一行的資訊。對於每一行,dbcc page指出行在槽中的位置,以及該行在頁面中的偏移量。頁面資料被分成3部分,左列指出的是所顯示的資料在行中的位元組位置。接著4列包含頁面儲存的實際資料,以16進製制的形式顯示。右列包含資料的字元表示(只有字元資料是可讀的)。

offset table指出頁面末尾的行偏移量陣列的內容。注意這裡並不是行物理儲存的順序,而是以槽的編號的順序來顯示的,不過這裡可以通過槽的編號看出它的物理儲存順序,比如槽的編號最小的為物理儲存的第一行,依此類推。

mysql檢視表結構的幾種方式

在我第n次忘記如何檢視表結構後,在網上查了一下後,看到有好幾種檢視表結構的方式,總結一下。以student sid,sname,birthday,的檢視為例。方式一 desc student 語法 desc 表名 用於檢視表整體結構 方式二 describe student 語法 describe ...

方法結構Oracle檢視表結構的幾種方法

新手發帖,很多方面都是剛入門,有錯誤的地方請大家見諒,歡迎批評指正 1,describe 命令 使用方法如下 sql describe nchar tst nchar tst為表名 顯示的結果如下 名稱 是否為空?型別 name nchar 6 addr nvarchar2 16 sal numbe...

mysql 檢視表的型別

mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innodb myisam 預設的mysql外掛程式式儲存引擎,它是基於isam型別,但它增加了許多有用的擴充套件,它是在web 資料倉儲和其他應用環境下最常使用的儲存引擎之一。注意,通過更改stora...