整理 20+ 高頻 DBA 管理 T-SQL 腳本,覆蓋實例信息、配置、空間分析、索引維護、統計更新、對象搜索、加密解密,可直接構建日常巡檢與自動化運維腳本庫。
-- 版本詳情
SELECT @@VERSION AS VersionInfo;
-- 作業系統參數
EXEC master..xp_msver;
-- 啟動參數
EXEC sp_configure;
-- 啟動時間
SELECT CONVERT(VARCHAR(30), login_time, 120) AS StartTime
FROM master..sysprocesses WHERE spid = 1;
-- 服務器/實例名
SELECT @@SERVERNAME AS ServerName, @@SERVICENAME AS InstanceName;
-- 所有數據庫名稱與大小
EXEC sp_helpdb;
-- 重命名數據庫
EXEC sp_renamedb 'old_name', 'new_name';
-- 單數據庫對象大小
EXEC sp_spaceused 'Schema.TableName'; -- 或不帶參數查庫總大小
-- 最大 N 個表 (預設 50)
EXEC sp_toptables; -- 或自定義查詢 sys.dm_db_partition_stats
-- 所有登錄信息
EXEC sp_helplogins;
-- 服務器角色成員
EXEC sp_helpsrvrolemember;
-- 修復孤立用戶 (遷移後)
EXEC sp_change_users_login 'Auto_Fix', 'username', NULL, 'new_password';
-- 更改對象擁有者
EXEC sp_changeobjectowner 'Schema.OldTable', 'NewOwner';
-- 備份登錄腳本 (遷移用)
-- 參考 sp_help_revlogin (社區標準腳本)
-- 鏈接服務器登錄映射
EXEC sp_helplinkedsrvlogin;
-- 遠程登錄信息
EXEC sp_helpremotelogin;
-- 對象索引信息
EXEC sp_helpindex 'Schema.TableName';
-- 詳細索引信息 (含填充因子、統計日期、碎片等)
-- 社區增強版 SP_NChelpindex 或查詢 sys.dm_db_index_physical_stats
-- 對象約束信息
EXEC sp_helpconstraint 'Schema.TableName';
-- 索引類型提示:
-- 聚簇索引 = 數據物理順序,空間較小,適合範圍查詢
-- 非聚簇索引適合高頻 DML 鍵值查詢,fillfactor 通常默認
-- 當前庫所有存儲過程/函數
USE TargetDB;
EXEC sp_stored_procedures;
-- 查看源碼
EXEC sp_helptext 'Schema.ProcName';
-- 搜索包含特定字符串的對象
DECLARE @SearchStr NVARCHAR(100) = 'Keyword';
SELECT DISTINCT OBJECT_NAME(id) AS ObjectName
FROM syscomments
WHERE TEXT LIKE '%' + @SearchStr + '%';
-- 創建加密存儲過程
CREATE PROC Schema.ProcName
WITH ENCRYPTION
AS SELECT 1;
-- 解密加密對象 (需專用工具/DAC/系統表查詢)
-- 社區腳本 sp_decrypt / 第三方工具
-- 缺失索引建議
SELECT * FROM sys.dm_db_missing_index_group_stats gs
JOIN sys.dm_db_missing_index_groups g ON gs.group_handle = g.index_group_handle
JOIN sys.dm_db_missing_index_details d ON g.index_handle = d.index_handle
WHERE d.database_id = DB_ID();
-- 索引碎片
SELECT
OBJECT_NAME(ips.object_id) AS TableName,
i.name AS IndexName,
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.avg_fragmentation_in_percent > 30 AND ips.page_count > 1000
ORDER BY ips.avg_fragmentation_in_percent DESC;
-- 昂貴查詢 (按總 CPU/邏輯讀/耗時)
SELECT TOP 20
qs.total_worker_time / qs.execution_count AS AvgCPU,
qs.total_logical_reads / qs.execution_count AS AvgReads,
qs.total_elapsed_time / qs.execution_count AS AvgDuration,
SUBSTRING(qt.text, qs.statement_start_offset/2 + 1,
(CASE WHEN qs.statement_end_offset = -1 THEN LEN(qt.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgCPU DESC;
master 或專用管理庫 DBA_Tools。sp_configure、DBCC、ALTER INDEX) 僅授權 DBA 專用賬號,審計全程記錄。sys.dm_db_partition_stats 替代 sysindexes)。工欲善其事,必先利其器。建立標準化、可複用、可審計的 DBA 腳本庫,是從「手工運維」邁向「自動化運維」的關鍵一步。