人人都是 DBA(II)SQL Server 元數據

SQL Server 中維護了一組表用於存儲 SQL Server 中所有的對象、數據類型、約束條件、配置選項、可用資源等信息,這些信息稱爲元數據信息(Metadata),而這些表稱爲系統基礎表(System Base Tables)。在這些基礎表中,存在於 master 數據庫中的一部分基礎表包含系統級範圍的信息。存在於特定數據庫(也包含 master db)中的基礎表包含屬於該特定數據庫的對象和資源信息。

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

USE master;
SELECT [name] ,type_desc
FROM sys.objects
WHERE type_desc = 'SYSTEM_TABLE'
ORDER BY [name];

系統基礎表僅在數據庫引擎內部使用,並不是提供的通用功能,所以當變化時可能無法保證兼容性。這些以 "sys" 爲前綴的表對象,例如 sysobjects, sysindexes, sysusers, sysdatabases 等,實際上是兼容視圖(Compatibility Views)。SQL Server 通過提供兼容視圖的集合來保持向後兼容(Backward Compatibility),使得基於這些兼容視圖構建的應用程序不會被破壞。而新增的特性,例如表分區、資源調控等將不會被添加到這些視圖中。

目前,SQL Server 推薦的訪問元數據信息的常規接口是目錄視圖(Catalog Views)。所有的目錄視圖,包括動態管理視圖 DMV(Dynamic Management Views)和兼容視圖(Compatibility Views),均存在於 "sys" Schema 中。

複製代碼
SELECT SCHEMA_NAME(schema_id) AS schema_name
    ,[name] AS object_name
    ,type_desc
FROM sys.all_objects
WHERE SCHEMA_NAME(schema_id) = 'sys'
    AND type_desc = 'VIEW'
ORDER BY object_name;
複製代碼

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

可以在 SQL Server 2008 R2 System Views Map 位置下載目錄視圖的映射關係圖。

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

SELECT object_definition (object_id('sys.tables'));
EXEC sp_help 'sys.tables';
EXEC sp_helptext 'sys.tables';

訪問 SQL Server 元數據信息還有一些其他方式:

  • 信息架構視圖(Information Schema Views)
  • 系統函數(System Functions)
  • 系統存儲過程(System Stored Procedures)

例如,通過系統函數查詢指定數據庫的恢復模型。

SELECT SERVERPROPERTY('Edition') AS Edition
    ,SERVERPROPERTY('EngineEdition') AS EngineEdition
    ,DATABASEPROPERTYEX('msdb', 'Recovery') AS RecoveryModel;

目錄視圖(Catalog Views)是訪問 SQL Server 元數據信息的首選接口,其次是系統函數(System Functions)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章