ADODB.Connection与SSMS给出的DBCC TRACESTATUS答案不同

问题描述 投票:0回答:1

[我正在尝试编写一组可以使用ADODB连接对象来确定是否在SQLSERVER中启用TRACEFLAG(1118)的命令,如果未启用,则将其打开。

当我在SSMS中运行标准DBCC TRACESTATUS | TRACEON | TRACEOFF命令时,得到了预期的结果。

问题是,当我通过PowerShell通过ADODB运行这些相同的命令时,我得到的答案似乎完全与通过SSMS获得的结果无关。

我可以打开和关闭traceflag,我可以通过ADODB对象或SSMS完全查询它的状态,只是它们的结果是完全独立的,而且似乎不会互相影响。

[我尝试过通过ADODB设置跟踪,然后重新启动SQL Service,然后通过SSMS进行查询,或者在SSMS中设置标志,然后创建一个全新的ADODB连接以重新运行查询的操作。我似乎没有采取任何措施来使一种方法影响另一种方法的结果。

这是我的PowerShell代码,用于获取和设置标志的状态,在SSMS中,该方法正是您认为的DBCC命令。

btw,我知道1118已过时,我正在为其他有约束的人执行此操作,这些约束使我无法说服他们退出使用它。对于其他标记(例如139),我也得到相同的结果。

# Get the flag status
$conn = New-Object -ComObject ADODB.Connection
$conn.Open("Provider=SQLNCLI11;Initial Catalog=master;Application Name=Application;Data Source=.;DataTypeComptibility=80;Integrated Security=SSPI")
$conn.Execute('DBCC TRACESTATUS(1118) WITH NO_INFOMSGS') | %{ $_.Fields | ft name, value}

Name      Value
----      -----
TraceFlag  1118
Status        0
Global        0
Session       0

# Set the flag
$conn.Execute('EXEC(''DBCC TRACEON(1118, -1) WITH NO_INFOMSGS'')') | Out-Null ; $conn.Execute('EXEC(''DBCC TRACESTATUS(1118)
WITH NO_INFOMSGS'')')  | %{$_.Fields | ft name, value}

Name      Value
----      -----
TraceFlag  1118
Status        1
Global        1
Session       0

如果现在在SSMS中执行DBCC TRACESTATUS(1118) WITH NO_INFOMSGS,您将得到未启用traceflag的回复

TraceFlag Status Global Session
--------- ------ ------ -------
1118      0      0      0

(1 row affected)

更新

[使用SSMS时,我可以验证将一个SPID中的标志设置为on并从另一个SPID中进行查询将产生一致的结果。这两个SPID同意。但是,这两个SPIDS都将不同意ADODB的查询结果。

sql-server ado.net ado
1个回答
0
投票

SQL Server 2016及更高版本,可以使用alter database实现:

ALTER DATABASE CURRENT SET MIXED_PAGE_ALLOCATION ON|OFF;

跟踪标志范围可以是查询/连接和全局。

DBCC TRACEON - Trace Flags

在SQL Server中,跟踪标志可以在三个作用域下工作:查询,会话和全局。查询跟踪标志在特定查询的上下文中处于活动状态。 会话跟踪标志对于连接是活动的,并且仅对该连接可见。全局跟踪标志在服务器级别设置,并且对服务器上的每个连接均可见。某些标志只能启用为全局标志,而某些标志可以在全局或会话范围内启用。

以下规则适用:

必须全局启用全局跟踪标志。否则,跟踪标志无效。我们建议您使用-T命令行选项在启动时启用全局跟踪标志。这样可确保在服务器重新启动后,跟踪标志保持活动状态。重新启动SQL Server,以使跟踪标志生效。

如果您想对其进行全面设置,则需要将其添加到启动参数中。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.