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

SQL Server DBA 常用管理腳本大全:版本、配置、空間、索引、統計、對象搜索

     編輯:關於SqlServer

整理 20+ 高頻 DBA 管理 T-SQL 腳本,覆蓋實例信息、配置、空間分析、索引維護、統計更新、對象搜索、加密解密,可直接構建日常巡檢與自動化運維腳本庫。

1. 實例與版本信息

-- 版本詳情
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;

2. 數據庫級管理

-- 所有數據庫名稱與大小
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

3. 安全與用戶管理

-- 所有登錄信息
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 (社區標準腳本)

4. 鏈接/遠程服務器

-- 鏈接服務器登錄映射
EXEC sp_helplinkedsrvlogin;

-- 遠程登錄信息
EXEC sp_helpremotelogin;

5. 索引與約束分析

-- 對象索引信息
EXEC sp_helpindex 'Schema.TableName';

-- 詳細索引信息 (含填充因子、統計日期、碎片等)
-- 社區增強版 SP_NChelpindex 或查詢 sys.dm_db_index_physical_stats

-- 對象約束信息
EXEC sp_helpconstraint 'Schema.TableName';

-- 索引類型提示:
-- 聚簇索引 = 數據物理順序,空間較小,適合範圍查詢
-- 非聚簇索引適合高頻 DML 鍵值查詢,fillfactor 通常默認

6. 存儲過程/函數管理

-- 當前庫所有存儲過程/函數
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 / 第三方工具

7. 進階巡檢查詢 (DMV 現代寫法)

-- 缺失索引建議
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。
  • Agent 作業定時執行巡檢腳本,結果寫入歷史表 / 發送 HTML 郵報 / 推送至監控平台。
  • 敏感操作 (sp_configure、DBCC、ALTER INDEX) 僅授權 DBA 專用賬號,審計全程記錄。
  • 版本升級後驗證 DMV 列變化,適配腳本 (如 sys.dm_db_partition_stats 替代 sysindexes)。

工欲善其事,必先利其器。建立標準化、可複用、可審計的 DBA 腳本庫,是從「手工運維」邁向「自動化運維」的關鍵一步。

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