如果您想知道如何临时更改 SQL Server 设置以执行任务并在完成后恢复,有一种方法可以在启用 SQL Server 设置之前保存它们,因此您可以在需要时禁用它们。
以下是代码(部分复制):
IF OBJECT_ID('tempdb.dbo.#Settings') IS NOT NULL
DROP TABLE #Settings;
CREATE TABLE #Settings
(
Setting VARCHAR(100),
Val INT
)
INSERT #Settings (Setting, Val)
SELECT 'show advanced options', cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
UNION
SELECT 'xp_cmdshell', cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'
UNION
SELECT 'Ad Hoc Distributed Queries', cast(value_in_use as int) from sys.configurations where name = 'Ad Hoc Distributed Queries'
SELECT * FROM #Settings;
如果您一次运行一个过程,那么效果会很好;但是,它会写入 SQL Server 错误日志,如下所示:
有没有办法避免将设置更改写入错误日志?
正如Remus 在您链接的答案中所说的那样,没有开箱即用的功能可以禁止将这些消息写入错误日志。
这并不意味着它在技术上不可行,只是不支持。您需要自己编辑二进制文件以删除对日志记录的调用,注入动态执行此操作的内容,或者编写过滤驱动程序以丢弃您不想保存在日志中的任何数据。
请注意,这仅与错误日志有关,这不会停止在其他区域或项目(例如 sql 跟踪或扩展事件)中的记录。
不过,对于似乎不会造成任何伤害的信息性消息来说,这似乎有点太过分了。
ERRORLOG
只是一个存储在配置位置的文本文件。您可以自行承担风险编辑这些文本文件。
如果您在生产系统中执行此操作,则您可能会绕过或违反某些合规性规则。
如果您仍然选择这样做,则需要释放正在使用的日志文件的锁 - 通过停止 SQL Server 进程或使用sp_cycle_errorlog循环文件。
这首先不会阻止消息写入日志,也不会阻止下游进程提取日志消息(也不应该这样做)。