Sql-Server

伺服器重新啟動後自動啟用跟踪標誌

  • February 23, 2022

我們想在伺服器上永久啟用跟踪標誌。我知道在 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])。或者在使用QUERYTRACEONand的查詢中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數據庫中,不能包含INPUTOUTPUT參數。恢復所有數據庫並在啟動時記錄“恢復完成”消息時,儲存過程的執行開始。

例如:

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

引用自:https://dba.stackexchange.com/questions/307817