天天看點

人人都是 DBA(II)SQL Server 中繼資料

SQL Server 中維護了一組表用于存儲 SQL Server 中所有的對象、資料類型、限制條件、配置選項、可用資源等資訊,這些資訊稱為中繼資料資訊(Metadata),而這些表稱為系統基礎表(System Base Tables)。在這些基礎表中,存在于 master 資料庫中的一部分基礎表包含系統級範圍的資訊。存在于特定資料庫(也包含 master db)中的基礎表包含屬于該特定資料庫的對象和資源資訊。

使用系統管理者身份登入,可以從 sys.objects 中查詢所有的系統基礎表。

人人都是 DBA(II)SQL Server 中繼資料

系統基礎表僅在資料庫引擎内部使用,并不是提供的通用功能,是以當變化時可能無法保證相容性。這些以 "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>

人人都是 DBA(II)SQL Server 中繼資料

名稱為 "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 完全相同的列,然後再添加特定對象類型的附加列。

人人都是 DBA(II)SQL Server 中繼資料
人人都是 DBA(II)SQL Server 中繼資料

如果要查詢某個目錄視圖的定義,可以使用 object_definition 函數或 sp_helptext 進行查詢。

人人都是 DBA(II)SQL Server 中繼資料

通路 SQL Server 中繼資料資訊還有一些其他方式:

資訊架構視圖(Information Schema Views)

系統函數(System Functions)

系統存儲過程(System Stored Procedures)

人人都是 DBA(II)SQL Server 中繼資料

例如,通過系統函數查詢指定資料庫的恢複模型。

目錄視圖(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,如需轉載請自行聯系原作者