Master 資料庫 (伺服器層級中繼資料)
| 系統表/檢視 | 用途說明 |
sysaltfiles | 所有資料庫檔案資訊 (名稱、路徑、大小、成長設定) |
syscharsets | 字元集與排序規則定義 |
sysconfigures | 伺服器設定選項 (sp_configure 對應) |
syscurconfigs | 目前生效的設定值 |
sysdatabases | 伺服器上所有資料庫基本資訊 |
syslanguages | 支援的語言清單 |
syslogins | 伺服器登入帳戶資訊 (SID、密碼雜湊、預設資料庫等) |
sysoledbusers | 連結伺服器遠端登入對應 |
sysprocesses | 目前所有執行緒/連線狀態 (SPID、SQL 文字、等待型別、阻塞鏈) |
sysremotelogins | 遠端伺服器登入對應 |
各使用者資料庫 (資料庫層級中繼資料)
| 系統表/檢視 | 用途說明 |
syscolumns | 所有資料表/檢視的欄位定義 (名稱、型別、長度、精度、預設值、身分識別屬性) |
sysconstraints | 約束定義 (PK、FK、CHECK、DEFAULT、UNIQUE) |
sysfilegroups | 檔案群組資訊 |
sysfiles | 資料庫檔案資訊 (邏輯名、實體路徑、大小、最大值、成長) |
sysforeignkeys | 外鍵關係詳細定義 |
sysindexes | 索引/統計資料/資料分割資訊 (頁數、資料列數、填滿因子) |
sysmembers | 資料庫角色成員對應 |
sysobjects | 所有資料庫物件 (資料表、檢視、預存程序、觸發器、規則、預設值等) |
syspermissions | 物件權限 (GRANT/DENY/REVOKE) 記錄 |
systypes | 系統與使用者定義資料型別 |
sysusers | 資料庫使用者與角色 (SID、名稱、群組隸屬) |
現代化查詢建議 (SQL Server 2005+)
系統表為相容性保留,**強烈建議改用目錄檢視** 以獲得穩定介面、更豐富資訊與效能:
| 舊系統表 | 建議替代目錄檢視 |
sysobjects | sys.objects, sys.tables, sys.views, sys.procedures |
syscolumns | sys.columns |
sysindexes | sys.indexes, sys.partitions, sys.allocation_units |
sysusers / syslogins | sys.database_principals, sys.server_principals |
sysprocesses | sys.dm_exec_requests, sys.dm_exec_sessions, sys.dm_exec_connections |
sysdatabases | sys.databases |
常用管理查詢範例
1. 找出最大的 10 張資料表
SELECT TOP 10
OBJECT_NAME(i.object_id) AS TableName,
SUM(a.total_pages) * 8 / 1024.0 AS SizeMB
FROM sys.indexes i
JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.partition_id = a.container_id
WHERE i.index_id IN (0,1)
GROUP BY i.object_id
ORDER BY SizeMB DESC;
2. 檢視長時間執行的查詢
SELECT
r.session_id, r.status, r.command, r.cpu_time, r.total_elapsed_time,
t.text AS SQLText, DB_NAME(r.database_id) AS DatabaseName
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.total_elapsed_time > 30000; -- > 30 秒
3. 稽核權限異常 (Public 角色擁有過多權限)
SELECT
USER_NAME(grantee_principal_id) AS Grantee,
OBJECT_NAME(major_id) AS ObjectName,
permission_name, state_desc
FROM sys.database_permissions
WHERE grantee_principal_id = DATABASE_PRINCIPAL_ID('public')
AND state_desc = 'GRANT';
善用目錄檢視與 DMV,能以標準、高效、版本相容的方式掌握 SQL Server 內部狀態,是 DBA 進階管理的必備技能。