首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server DBA 必備 T-SQL 工具箱:13 類常用管理腳本速查手冊

     編輯:關於SqlServer

資訊查詢類

需求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、**可能遺失資料**,最後手段。

修復後必做

  1. 立即完整備份。
  2. `DBCC CHECKDB` 驗證無錯誤。
  3. 根因分析:硬體 (磁碟/記憶體 ECC)、驅動程式、SQL Bug、人為操作。

結語

熟練掌握這 13 類腳本,涵蓋 **資訊蒐集、空間管理、結構檢視、監控診斷、記錄維護、效能分析、災難修復** 全生命週期。建議整理為個人 Snippet 库 / 專案 Wiki,關鍵時刻秒級調用。工欲善其事,必先利其器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved