SQL Server 中維護了一組表用于存儲 SQL Server 中所有的對象、資料類型、限制條件、配置選項、可用資源等資訊,這些資訊稱為中繼資料資訊(Metadata),而這些表稱為系統基礎表(System Base Tables)。在這些基礎表中,存在于 master 資料庫中的一部分基礎表包含系統級範圍的資訊。存在于特定資料庫(也包含 master db)中的基礎表包含屬于該特定資料庫的對象和資源資訊。
使用系統管理者身份登入,可以從 sys.objects 中查詢所有的系統基礎表。
系統基礎表僅在資料庫引擎内部使用,并不是提供的通用功能,是以當變化時可能無法保證相容性。這些以 "sys" 為字首的表對象,例如 sysobjects, sysindexes, sysusers, sysdatabases 等,實際上是相容視圖(Compatibility Views)。SQL Server 通過提供相容視圖的集合來保持向後相容(Backward Compatibility),使得基于這些相容視圖建構的應用程式不會被破壞。而新增的特性,例如表分區、資源調控等将不會被添加到這些視圖中。
目前,SQL Server 推薦的通路中繼資料資訊的正常接口是目錄視圖(Catalog Views)。所有的目錄視圖,包括動态管理視圖 DMV(Dynamic Management Views)和相容視圖(Compatibility Views),均存在于 "sys" Schema 中。
<a></a>
名稱為 "sys.dm_" 開頭的對象即為動态管理視圖 DMV(Dynamic Management Views)。這些動态管理對象中既有視圖也有函數,但大部分是視圖,是以通常稱為動态管理視圖 DMV(Dynamic Management Views)。DMV 不是基于資料庫檔案的真實的表,而是基于内部資料庫結構的展現。根據 DMV 對象展示的資訊的職責範圍,它們被分成若幹個目錄。
dm_exec_* 包含與使用者代碼執行和 Session 相關的資訊。
dm_os_* 包含低層系統資訊,如 Memory、Locking、Scheduler 等。
dm_tran_* 包含事務的細節資訊。
dm_io_* 包含網絡和磁盤 I/O 活動相關的資訊。
dm_db_* 包含資料庫和資料庫對象的細節資訊,如 Index 等。
目錄視圖(Catalog Views)是建構在繼承模型(Inheritance Model)上的,使得對象的通用屬性不必在内部進行重複定義。例如 sys.objects 包含了各種對象類型的通用屬性,而 sys.tables 繼承自 sys.objects,是以首先包含有與 sys.objects 完全相同的列,然後再添加特定對象類型的附加列。
如果要查詢某個目錄視圖的定義,可以使用 object_definition 函數或 sp_helptext 進行查詢。
通路 SQL Server 中繼資料資訊還有一些其他方式:
資訊架構視圖(Information Schema Views)
系統函數(System Functions)
系統存儲過程(System Stored Procedures)
例如,通過系統函數查詢指定資料庫的恢複模型。
目錄視圖(Catalog Views)是通路 SQL Server 中繼資料資訊的首選接口,其次是系統函數(System Functions)。
《人人都是 DBA》系列文章索引:
序号
名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
本文轉自匠心十年部落格園部落格,原文連結:http://www.cnblogs.com/gaochundong/p/everyone_is_a_dba_sqlserver_metadata.html,如需轉載請自行聯系原作者