系統基底資料表

適用於:SQL Server Azure 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。

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