系統基底資料表

適用於:SQL ServerAzure SQL 受控執行個體

系統基表是實際儲存特定資料庫的中繼資料的基礎資料表。 master 資料庫在這方面很特別,因為它包含其他任何資料庫中找不到的一些其他資料表。 這些資料表包含具有全伺服器範圍的保存中繼資料。

重要

系統基表只會在 SQL Server 資料庫引擎內使用,不適用於一般客戶。 它們可能會變更,且不保證相容性。

系統基表中繼資料

資料庫上具有 CONTROL、ALTER 或 VIEW DEFINITION 許可權的被授與者,可以在 sys.objects 目錄檢視中看到 系統基表中繼資料。 被授與者也可以使用內建函式,例如 OBJECT_NAME和OBJECT_ID ,解析系統基表的名稱和 物件 識別碼。

若要系結至系統基表,使用者必須使用專用系統管理員連接 (DAC) 連接到 SQL Server 的實例。 嘗試從系統基表執行 SELECT 查詢,而不需使用 DAC 進行連線,就會引發錯誤。

重要

使用 DAC 存取系統基表僅供 Microsoft 人員使用,且不是支援的客戶案例。

系統基底資料表

下表列出並描述 SQL Server 中的每個系統基表。

基表 描述
sys.sysschobjs 存在於每個資料庫中。 每個資料列都代表資料庫中的物件。
sys.sysbinobjs 存在於每個資料庫中。 包含資料庫中每個 Service Broker 實體的資料列。 Service Broker 實體包括下列專案:

訊息類型

服務合約

服務

名稱和類型會使用固定的二進位定序。
sys.sysclsobjs 存在於每個資料庫中。 針對每個共用包含下列相同通用屬性的分類實體,各包含一個資料列:

組件

備份裝置

全文檢索目錄

分割區函數

分割區配置

檔案群組

模糊化索引鍵

結構描述
sys.sysnsobjs 存在於每個資料庫中。 包含每個命名空間範圍實體的資料列。 此資料表用於儲存 XML 集合實體。
sys.syscolpars 存在於每個資料庫中。 包含資料表、檢視或資料表值函式中每個資料行的資料列。 它也包含程式或函式之每個參數的資料列。
sys.systypedsubobjs 存在於每個資料庫中。 包含每個具型別子項的資料列。 只有資料分割函式的參數屬於此類別。
sys.sysidxstats 存在於每個資料庫中。 針對資料表和索引檢視表的每個索引或統計資料,各包含一個資料列

注意:每個索引 (堆積除外) 都與與索引同名的統計資料相關聯。
sys.sysiscols 存在於每個資料庫中。 針對每個保存的索引和統計資料資料行,各包含一個資料列。
sys.sysscalartypes 存在於每個資料庫中。 包含每個使用者定義或系統類型的資料列。
sys.sysdbreg 僅存在於 master 資料庫中。 針對每個已註冊的資料庫,各包含一個資料列。
sys.sysxsrvs 僅存在於 master 資料庫中。 包含每個本機、連結或遠端伺服器的資料列。
sys.sysrmtlgns 這個系統基表只存在於 master 資料庫中。 包含每個遠端登入對應的資料列。 這可用來將宣告來自對應伺服器的連入登入對應至實際的本機登入。
sys.syslnklgns 僅存在於 master 資料庫中。 針對每個連結的登入對應,各包含一個資料列。 遠端程序呼叫和分散式查詢會使用連結的登入對應,這些查詢會從本機伺服器傳出至對應的連結伺服器。
sys.sysxlgns 僅存在於 master 資料庫中。 包含每個伺服器主體的資料列。
sys.sysdbfiles 存在於每個資料庫中。 如果資料行 dbid 為零,則資料列代表屬於這個資料庫的檔案。 在 master 資料庫中,資料行 dbid 可以是非零。 在此情況下,資料列代表主檔案。
sys.sysusermsg 僅存在於 master 資料庫中。 每個資料列都代表使用者定義的錯誤訊息。
sys.sysprivs 存在於每個資料庫中。 包含每個資料庫或伺服器層級許可權的資料列。

注意:伺服器層級的許可權會儲存在 master 資料庫中。
sys.sysowners 存在於每個資料庫中。 每個資料列都代表資料庫主體。
sys.sysobjkeycrypts 存在於每個資料庫中。 針對與 物件相關聯的每個對稱金鑰、加密或密碼編譯屬性,各包含一個資料列。
sys.syscerts 存在於每個資料庫中。 包含資料庫中每個憑證的資料列。
sys.sysasymkeys 存在於每個資料庫中。 每個資料列都代表非對稱金鑰。
sys.ftinds 存在於每個資料庫中。 包含資料庫中每個全文檢索索引的資料列。
sys.sysxprops 存在於每個資料庫中。 包含每個擴充屬性的資料列。
sys.sysallocunits 存在於每個資料庫中。 包含每個儲存體配置單位的資料列。
sys.sysrowsets 存在於每個資料庫中。 針對索引或堆積,包含每個資料分割資料列集的資料列。
sys.sysrowsetrefs 存在於每個資料庫中。 針對資料列集參考的每個索引,各包含一個資料列。
sys.syslogshippers 僅存在於 master 資料庫中。 包含每個資料庫鏡像見證的資料列。
sys.sysremsvcbinds 存在於每個資料庫中。 包含每個遠端服務系結的資料列。
sys.sysconvgroup 存在於每個資料庫中。 包含 Service Broker 中每個服務實例的資料列。
sys.sysxmitqueue 存在於每個資料庫中。 包含每個 Service Broker 傳輸佇列的資料列。
sys.sysdesend 存在於每個資料庫中。 針對 Service Broker 交談的每個傳送端點,各包含一個資料列。
sys.sysdercv 存在於每個資料庫中。 針對 Service Broker 交談的每個接收端點,各包含一個資料列。
sys.sysendpts 僅存在於 master 資料庫中。 針對伺服器中建立的每個端點,各包含一個資料列。
sys.syswebmethods 僅存在於 master 資料庫中。 針對在伺服器上建立的 SOAP 啟用 HTTP 端點上定義的每個 SOAP 方法,各包含一個資料列。
sys.sysqnames 存在於每個資料庫中。 針對 4 位元組識別碼權杖的每個命名空間或限定名稱,各包含一個資料列。
sys.sysxmlcomponent 存在於每個資料庫中。 每個資料列都代表 XML 架構元件。
sys.sysxmlfacet 存在於每個資料庫中。 包含 XML 類型定義之每個 XML Facet(限制)的資料列。
sys.sysxmlplacement 存在於每個資料庫中。 針對 XML 元件的每個 XML 位置,各包含一個資料列。
sys.syssingleobjrefs 存在於每個資料庫中。 包含每個一般 N 對 1 參考的資料列。
sys.sysmultiobjrefs 存在於每個資料庫中。 包含每個一般 N 對 N 參考的資料列。
sys.sysobjvalues 存在於每個資料庫中。 針對實體的每個一般值屬性,各包含一個資料列。
sys.sysguidrefs 存在於每個資料庫中。 包含每個 GUID 分類識別碼參考的資料列。

更新系統基表

您可以透過系統目錄檢視來檢視系統資料表中的資料。 若要更新系統基表中的中繼資料,請使用適當的 Transact-SQL 介面(例如 DDL 語句)。 您無法手動更新系統資料表。 當您對系統資料表執行直接更新時,SQL Server 會報告下列訊息。

系統資料表已手動更新

訊息 17659:警告:系統資料表 <> 識別碼識別碼已直接在資料庫 <> 識別碼中更新,且快取一致性可能尚未維護。 應該重新啟動 SQL Server。

使用手動更新的系統資料表啟動資料庫

Msg 3859:警告:系統目錄已直接在資料庫識別碼 17 中更新,最近于 date_time。

手動更新系統資料表之後,執行DBCC_CHECKDB命令

Msg 3859:警告:系統目錄已直接在資料庫識別碼 17 中更新,最近于 date_time。

如果您對系統資料表執行手動更新併發生問題,系統可能會要求您從備份還原,或將資料從受影響的資料庫複製到新的資料庫。 深入瞭解 使用者動作錯誤訊息