檢視資料庫中繼資料
您可以使用各種目錄檢視、系統函數及系統預存程序,來檢視資料庫、檔案、資料分割及檔案群組屬性。
下表列出可傳回資料庫、檔案及檔案群組相關資訊的目錄檢視、系統函數及系統預存程序。
檢視 |
函數 |
預存程序及其他陳述式 |
---|---|---|
|
||
|
||
|
||
|
||
|
||
|
||
sys.dm_db_file_space_usage (Transact-SQL) (僅限 tempdb) |
|
|
sys.dm_db_session_space_usage (Transact-SQL) (僅限 tempdb) |
|
|
sys.dm_db_task_space_usage (Transact-SQL) (僅限 tempdb) |
|
|
如果無法使用指定的資料庫,則 sys.databases 目錄檢視中的某些資料行及 DATABASEPROPERTYEX 函數中的屬性可能會傳回 NULL 值。例如,若要傳回資料庫的定序名稱,必須存取資料庫。如果資料庫不在線上,或 AUTO_CLOSE 選項設為 ON,則無法傳回定序名稱。
範例
A. 使用系統目錄檢視傳回資料庫資訊
下列範例使用 sys.partitions、sys.allocation_units、sys.objects 和 sys.indexes 等目錄檢視,傳回資料庫中每個資料表和索引所使用的資料分割編號和配置單位。
USE AdventureWorks;
GO
SELECT SCHEMA_NAME(o.schema_id) AS schema_name,
o.name AS table_name,
i.name AS index_name,
au.type_desc AS allocation_type,
au.data_pages AS pages_per_allocation_unit,
partition_number
FROM sys.allocation_units AS au
JOIN sys.partitions AS p ON au.container_id = p.partition_id
JOIN sys.objects AS o ON p.object_id = o.object_id
JOIN sys.indexes AS i ON p.index_id = i.index_id
AND i.object_id = p.object_id
WHERE o.type_desc <> N'SYSTEM_TABLE'
ORDER BY table_name, p.index_id;
B. 使用系統目錄檢視傳回資料庫大小資訊
下列範例會使用目錄檢視 sys.database_files 和動態管理檢視 sys.dm_db_file_space_usage,傳回 tempdb 資料庫的大小資訊。sys.dm_db_file_space_usage 檢視只適用於 tempdb。
SELECT
name AS FileName,
size*1.0/128 AS FileSizeinMB,
'MaximumSizeinMB' =
CASE max_size
WHEN 0 THEN 'No growth is allowed.'
WHEN -1 THEN 'Autogrowth is on.'
WHEN 268435456
THEN 'Log file will grow to a maximum size of 2 TB.'
ELSE CAST (max_size*1.0/128 AS nvarchar(30))
END,
growth AS 'GrowthValue',
'GrowthIncrement' =
CASE
WHEN growth = 0 THEN 'File size is fixed and will not grow.'
WHEN growth > 0 AND is_percent_growth = 0
THEN 'Growth value is in units of 8-KB pages.'
ELSE 'Growth value is a percentage.'
END
FROM tempdb.sys.database_files;
GO
USE tempdb;
GO
SELECT (SUM(unallocated_extent_page_count)*1.0/128) AS free_space_in_MB,
(SUM(version_store_reserved_page_count +
user_object_reserved_page_count +internal_object_reserved_page_count +
mixed_extent_page_count)*1.0/128) AS used_space_in_MB
FROM sys.dm_db_file_space_usage;
C. 使用系統函數
下列範例使用 DATABASEPROPERTYEX 系統函數傳回 AdventureWorks 資料庫預設定序的名稱。
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation');