SQL Server 2005 系統表分為「僅存在 master 資料庫的伺服器層級表」與「每個資料庫都擁有的資料庫層級表」。注意:現代版本建議使用系統檢視表(sys.*)替代直接查詢系統表,相容性與安全性更佳。
| 系統表 | 用途 | 關鍵欄位範例 |
|---|---|---|
| sysaltfiles | 所有資料庫檔案資訊 | fileid, groupid, size, maxsize, growth, dbid, name, filename |
| syscharsets | 字元集與排序規則 | type, id, csid, status, name, definition |
| sysconfigures | 伺服器配置選項 | config, value, minimum, maximum, run_value |
| syscurconfigs | 目前生效配置 | config, value |
| sysdatabases | 伺服器上所有資料庫 | dbid, name, sid, mode, status, crdate, filename |
| syslanguages | 支援語言 | langid, dateformat, datefirst, name, alias |
| syslogins | 登入帳號資訊 | sid, name, password, dbname, language, isntname, isntgroup |
| sysoledbusers | 連結伺服器登入對應 | rmtsrvid, loginsid, rmtuser, rmtpassword |
| sysprocesses | 目前執行緒/連線 | spid, kpid, blocked, waittype, lastwaittype, cpu, physical_io, login_time, dbid, uid, hostname, program_name, loginame |
| sysremotelogins | 遠端登入對應 | remoteserverid, sid, remoteusername |
| 系統表 | 用途 | 關鍵欄位範例 |
|---|---|---|
| syscolumns | 資料表/檢視表欄位 | id, name, xtype, length, prec, scale, isnullable, colid, cdefault, domain |
| sysconstraints | 限制條件 | id, colid, status, constid |
| sysfilegroups | 檔案群組 | groupid, groupname, status |
| sysfiles | 資料庫檔案 | fileid, groupid, size, maxsize, growth, status, name, filename |
| sysforeignkeys | 外鍵關聯 | constid, fkeyid, rkeyid, fkey, rkey, keyno |
| sysindexes | 索引與統計資料 | id, indid, name, first, root, dpages, reserved, used, rowcnt, status |
| sysmembers | 角色成員 | memberuid, groupuid |
| sysobjects | 所有資料庫物件 | id, name, xtype, uid, info, status, crdate, deltrig, instrig, updtrig, schemaver |
| syspermissions | 權限設定 | id, grantee, grantor, type, action, protecttype, columns, grantable |
| systypes | 使用者定義資料型別 | uid, name, xtype, length, prec, scale, tdefault, domain |
| sysusers | 資料庫使用者 | uid, gid, sid, name, hasdbaccess, islogin, isntname, isntgroup |
儲存所有資料庫檔案的實體路徑與大小資訊,僅存在 master。
| 欄位 | 型別 | 說明 |
|---|---|---|
| fileid | smallint | 資料庫內唯一檔案 ID |
| groupid | smallint | 檔案群組 ID |
| size | int | 檔案大小(8 KB 頁數) |
| maxsize | int | 最大檔案大小(頁數),0=不成長,-1=成長至磁碟滿 |
| growth | int | 成長增量(頁數或百分比,視 status 而定) |
| status | int | 內部狀態旗標 |
| perf | int | 保留欄位 |
| dbid | smallint | 所屬資料庫 ID |
| name | nchar(128) | 邏輯檔案名稱 |
| filename | nchar(260) | 實體完整路徑 |
字元集(type=1001)與排序規則(type=2001)定義。
| 欄位 | 型別 | 說明 |
|---|---|---|
| type | smallint | 1001=字元集,2001=排序規則 |
| id | tinyint | 唯一 ID(1-240 保留給系統) |
| csid | tinyint | 排序規則所基於的字元集 ID |
| status | smallint | 內部狀態位 |
| name | sysname | 唯一名稱 |
| description | nvarchar(255) | 描述 |
| binarydefinition | varbinary(255) | 內部使用 |
| definition | image | 內部定義結構 |
建議使用 sys.* 目錄檢視表,例如:
sys.databases 取代 sysdatabasessys.tables, sys.columns, sys.indexes 取代 sysobjects, syscolumns, sysindexessys.server_principals, sys.database_principals 取代 syslogins, sysuserssys.master_files 取代 sysaltfiles系統檢視表提供穩定介面、權限控管、版本相容性,且支援中繼資料函數(OBJECT_ID, DB_ID 等)。
-- 查詢所有資料庫大小與檔案路徑
SELECT db_name(database_id) AS db_name,
type_desc,
name AS logical_name,
physical_name,
size * 8 / 1024.0 AS size_mb
FROM sys.master_files
ORDER BY db_name, type_desc;
-- 查詢資料表索引碎片程度
SELECT OBJECT_NAME(ips.object_id) AS table_name,
i.name AS index_name,
ips.index_type_desc,
ips.avg_fragmentation_in_percent,
ips.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') ips
JOIN sys.indexes i ON ips.object_id = i.object_id AND ips.index_id = i.index_id
WHERE ips.page_count > 1000
ORDER BY ips.avg_fragmentation_in_percent DESC;
熟悉系統表結構有助於深度診斷,但日常管理請優先使用系統檢視表與 DMV/DMF。