SQLServer2005中5個不能查詢的系統表

itscrambler發表於2012-05-24

SQLServer2005中5個不能查詢的系統表

在SQLServer2005裡,有這麼幾個特殊的系統表,我們無法直接查詢它,但它確實又是存在,這幾個系統表是:

sysallocunits

syshobts

syshobtcolumns

sysrowsets

sysrowsetcolumns

這裡所說的查詢,是指直接透過SELECT語句查詢,我們試著查詢:

SELECT * FROM sysallocunits
GO
SELECT * FROM
syshobts
GO
SELECT * FROM
syshobtcolumns
GO
SELECT * FROM
sysrowsets
GO
SELECT * FROM
sysrowsetcolumns
GO

執行上面的語句後,你會收到以下錯誤報告:

Msg 208, Level 16, State 1, Line 1
Invalid object name 'sysallocunits'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'syshobts'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'syshobtcolumns'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'sysrowsets'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'sysrowsetcolumns'.

但當我們透過以下語句檢查它的存在時,你會發現其實這5個系統表是存在的:

SELECT
name FROM sys.objects WHERE name IN (
'sysallocunits'
,
'syshobts'
,
'syshobtcolumns'
,
'sysrowsets'
,
'sysrowsetcolumns' ) GO

為什麼會這麼神奇?這是因為,這5個系統表是用於存放所有表以及索引的後設資料表,只能用於CHECKDB操作檢查後設資料一致

性的時候用到,當我們使用DBCC CHECKDB命令時,首先的內部操作就是要對這幾個表進行一致性檢查,找出裡面的後設資料是否有損壞,同時注意,如果出現在該步操作時發生的任何錯誤,都是無法修復的,只能透過備份檔案還原來修復.

關於這個,更多的內容可參考SQL Server 資料庫引擎團隊的BLOG:

http://blogs.msdn.com/sqlserverstorageengine/

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26273052/viewspace-1058334/,如需轉載,請註明出處,否則將追究法律責任。

相關文章