伺服器重新啟動後自動啟用跟踪標誌
我們想在伺服器上永久啟用跟踪標誌。我知道在 SQL Server 配置管理器中添加啟動參數是一個選項。通過過程/功能/其他解決方案重新啟動伺服器後,是否有任何選項可以自動執行?
我們希望為無法訪問 SQL Server 配置管理器且沒有
sysadmin
級別權限的團隊提供跟踪標誌(以及啟用/禁用選項)的可見性。我們正在考慮
sysadmin
在伺服器重新啟動後作為組使用者執行的作業(不確定是否可能)。作業可以有一個步驟執行帶有諸如DBCC TRACEON (7412)
etc之類的程式碼的過程。
我們想在伺服器上永久啟用跟踪標誌。
在 SQL Server 中,可以設置三個範圍的跟踪標誌。這些是在以下文件中概述的全域級別、查詢級別和會話級別:
在 SQL Server 中,跟踪標誌可以在三個範圍內起作用:查詢、會話和全域。查詢跟踪標誌對於特定查詢的上下文是活動的。會話跟踪標誌對於連接是活動的,並且僅對該連接可見。全域跟踪標誌在伺服器級別設置,並且對伺服器上的每個連接都是可見的。有些標誌只能作為全域啟用,有些可以在全域或會話範圍內啟用。
參考: DBCC TRACEON - 跟踪標誌 (Transact-SQL) (Microsoft | SQL Docs)
您必須遵守以下幾條規則:
- 必須全域啟用全域跟踪標誌。否則,跟踪標誌無效。我們建議您在啟動時使用 -T 命令行選項啟用全域跟踪標誌。這可確保在伺服器重新啟動後跟踪標誌保持活動狀態。重新啟動 SQL Server 以使跟踪標誌生效。
- 如果跟踪標誌具有全域、會話或查詢範圍,則可以使用適當的範圍啟用它。在會話級別啟用的跟踪標誌永遠不會影響另一個會話,並且當打開會話的 SPID 註銷時,跟踪標誌的效果就會失去。
跟踪標誌通過 a 設置
DBCC TRACEON(traceflag,[-1])
打開並通過 a 關閉DBCC TRACEOFF(traceflag, [-1])
。或者在使用QUERYTRACEON
and的查詢中QUERYTRACEOFF
。啟動跟踪標誌通過 SQL Server 配置管理器中的設置添加到 SQL Server 啟動-T traceflag
(推薦)。
- 使用 DBCC TRACEON 和 DBCC TRACEOFF 命令。例如,要全域啟用 2528 跟踪標誌,請將 DBCC TRACEON 與 -1 參數一起使用:
DBCC TRACEON (2528, -1)
. **使用 DBCC TRACEON 啟用全域跟踪標誌的效果會在伺服器重新啟動時失去。**要關閉全域跟踪標誌,請使用帶有 -1 參數的 DBCC TRACEOFF。- 使用 -T 啟動選項指定在啟動期間設置跟踪標誌。-T 啟動選項啟用全域跟踪標誌。**您不能使用啟動選項啟用會話級跟踪標誌。**這可確保在伺服器重新啟動後跟踪標誌保持活動狀態。有關啟動選項的詳細資訊,請參閱數據庫引擎服務啟動選項。
- 在查詢級別,通過使用 QUERYTRACEON 查詢提示。QUERYTRACEON 選項僅支持下表中記錄的查詢優化器跟踪標誌。
回答您的問題
我們希望能夠訪問無法訪問 SQL Server 配置管理器的團隊的跟踪標誌(以及啟用/禁用選項)的可見性。
- 如果不使用推薦的 SQL Server 配置管理器或通知常駐 DBA 並根據公司的流程請求更改(更改請求 –> 更改請求),則無法設置全域跟踪標誌。
- 您不能在全域級別設置跟踪標誌,如果該級別不支持,或者您沒有足夠的權限。(請參閱連結參考中的列表,了解是否要在全域、會話或查詢級別設置跟踪標誌)。
- 可能最重要的是:…與 SQL Server 中的任何配置更改一樣,最好在部署之前在非生產環境中徹底測試標誌。
需要額外的權限
DBCC TRACEON()
要使用該命令打開或關閉跟踪標誌,需要sysadmin
分配給您的帳戶的固定伺服器角色:需要 sysadmin 固定伺服器角色的成員身份。
因此,沒有常駐 DBA 的許可,SQL Server 上不會有任何配置更改,這是一件好事,因為設置跟踪標誌會對 SQL Server 實例的性能產生負面影響。
參考: DBCC TRACEON (Transact-SQL) (Microsoft | SQL Docs)
似乎不需要這樣做,因為團隊已經可以執行:
DBCC TRACESTATUS;
任何擔任公共角色的人都可以競選
DBCC TRACESTATUS
。不過,如果你真的想追求這個:
您可以使用
sp_procoption
將儲存過程設置為在實例啟動時自動執行。啟動過程必須在master數據庫中,不能包含
INPUT
或OUTPUT
參數。恢復所有數據庫並在啟動時記錄“恢復完成”消息時,儲存過程的執行開始。例如:
USE master; GO CREATE PROCEDURE dbo.SetTraceFlags AS DBCC TRACEON (7412, -1); GO EXECUTE sys.sp_procoption @ProcName = N'dbo.SetTraceFlags', @OptionName = 'startup', @OptionValue = 'on'; GO
當實例重新啟動時,您將看到如下日誌條目:
執行
sp_procoption
還會將伺服器配置設置為掃描啟動過程,但如果有人將其重置為零,您可以使用以下命令重新啟用它:EXECUTE sys.sp_configure @configname = 'show advanced options', @configvalue = 1; RECONFIGURE; EXECUTE sys.sp_configure @configname = 'scan for startup procs', @configvalue = 1; RECONFIGURE;
啟動程序由
is_auto_executed
列標識sys.procedures
。