資訊查詢類
| 需求 | T-SQL |
| 版本資訊 | `SELECT @@VERSION;` |
| 作業系統參數 | `EXEC master..xp_msver;` |
| 啟動參數 | `EXEC sp_configure;` |
| 啟動時間 | `SELECT CONVERT(VARCHAR(30), login_time, 120) FROM master..sysprocesses WHERE spid = 1;` |
| 伺服器/實例名 | `SELECT @@SERVERNAME, @@SERVICENAME;` |
| 所有資料庫名稱與大小 | `EXEC sp_helpdb;` |
| 重命名資料庫 | `EXEC sp_renamedb 'old_name', 'new_name';` |
| 登入/角色資訊 | `EXEC sp_helplogins; EXEC sp_helpsrvrolemember;` |
| 修復孤立使用者 | `EXEC sp_change_users_login 'Auto_Fix', 'username';` |
| 連結伺服器/遠端登入 | `EXEC sp_helplinkedsrvlogin; EXEC sp_helpremotelogin;` |
物件空間與結構類
| 需求 | T-SQL |
| 物件空間大小 | `EXEC sp_spaceused 'TableName';` |
| Top N 大表 | `EXEC sp_toptables @numresults = 20;` |
| 索引資訊 | `EXEC sp_helpindex 'TableName';` / `EXEC sp_NChelpindex 'TableName';` (詳細) |
| 約束資訊 | `EXEC sp_helpconstraint 'TableName';` |
| 所有 SP/Function | `USE DB; EXEC sp_stored_procedures;` |
| SP/Function 原始碼 | `EXEC sp_helptext 'ProcName';` |
| 搜尋包含字串的物件 | `SELECT DISTINCT OBJECT_NAME(id) FROM syscomments WHERE TEXT LIKE '%keyword%';` |
| 加密建立 SP | `CREATE PROC ... WITH ENCRYPTION AS ...` |
| 解密加密 SP | 第三方工具 / DAC 連線查詢 `sys.sql_modules` |
執行監控與鎖死結類
| 需求 | T-SQL |
| 所有連線/進程 | `EXEC sp_who;` / `EXEC sp_who 'active';` |
| 鎖資訊 | `EXEC sp_lock;` |
| 進程執行 SQL (spid) | `DBCC INPUTBUFFER(spid);` |
| 增強版 sp_who (含 SQL 文本) | `EXEC sp_who3;` (需自行部署) |
| 死結檢測 | `EXEC sp_who_lock;` (需自行部署) |
注意:`spid 1-50` 為系統進程,`>50` 為使用者連線。
記錄檔維護類
-- 簡單模式壓縮記錄檔
BACKUP LOG DBName WITH NO_LOG; -- 2005+ 已移除,改用:
ALTER DATABASE DBName SET RECOVERY SIMPLE;
DBCC SHRINKFILE (DBName_log, 512); -- 目標 MB
ALTER DATABASE DBName SET RECOVERY FULL; -- 還原模式
效能分析類
| 需求 | 命令 |
| 統計 IO/時間 | `SET STATISTICS IO ON; SET STATISTICS TIME ON;` |
| 圖形化執行計畫 | SSMS: Ctrl+L / 工具列「顯示預估執行計畫」 |
| 文字版執行計畫 | `SET SHOWPLAN_ALL ON;` / `SET SHOWPLAN_TEXT ON;` / `SET STATISTICS PROFILE ON;` |
資料庫修復類 (嚴重不一致錯誤 3624)
-- 單一資料表修復 (允許資料遺失)
ALTER DATABASE [ErrDB] SET SINGLE_USER;
DBCC CHECKTABLE ('ErrTable', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [ErrDB] SET MULTI_USER;
-- 整庫修復 (允許資料遺失)
ALTER DATABASE [ErrDB] SET SINGLE_USER;
DBCC CHECKDB ('ErrDB', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [ErrDB] SET MULTI_USER;
⚠️ **三個修復等級**:
`REPAIR_FAST`:輕微修復 (非叢集索引)、無資料遺失。
`REPAIR_REBUILD`:含重建索引、無資料遺失。
`REPAIR_ALLOW_DATA_LOSS`:分配/取消分配頁、刪除損壞 LOB、**可能遺失資料**,最後手段。
修復後必做
- 立即完整備份。
- `DBCC CHECKDB` 驗證無錯誤。
- 根因分析:硬體 (磁碟/記憶體 ECC)、驅動程式、SQL Bug、人為操作。
結語
熟練掌握這 13 類腳本,涵蓋 **資訊蒐集、空間管理、結構檢視、監控診斷、記錄維護、效能分析、災難修復** 全生命週期。建議整理為個人 Snippet 库 / 專案 Wiki,關鍵時刻秒級調用。工欲善其事,必先利其器。