人人都是 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)。

 

《人人都是 DBA》系列文章索引:

 序號 

 名稱 

1

 人人都是 DBA(I)SQL Server 體系結構

2

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

3

 人人都是 DBA(III)SQL Server 調度器

4

 人人都是 DBA(IV)SQL Server 內存管理

5

 人人都是 DBA(V)SQL Server 數據庫文件

6

 人人都是 DBA(VI)SQL Server 事務日志

7

 人人都是 DBA(VII)B 樹和 B+ 樹

8

 人人都是 DBA(VIII)SQL Server 頁存儲結構

9

 人人都是 DBA(IX)服務器信息收集腳本匯編

10

 人人都是 DBA(X)資源信息收集腳本匯編

11

 人人都是 DBA(XI)I/O 信息收集腳本匯編

12

 人人都是 DBA(XII)查詢信息收集腳本匯編

13

 人人都是 DBA(XIII)索引信息收集腳本匯編

14

 人人都是 DBA(XIV)存儲過程信息收集腳本匯編 

15

 人人都是 DBA(XV)鎖信息收集腳本匯編

本系列文章《人人都是 DBA》由 Dennis Gao 發表自博客園個人技術博客,未經作者本人同意禁止任何形式的轉載,任何自動或人為的爬蟲轉載或抄襲行為均為耍流氓。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM