これをMSにエスカレーションしようとしていますが、まずここで試して、この偽のエラーメッセージを回避する方法について誰かが何かアイデアがあるかどうかを確認したいと思いました...
PowerShellを介して専用管理者接続(DAC)でSQL Server(2016および2017最新ビルド)に接続すると、次のエラーメッセージが表示されます。
日付4/2/2019 1:59:13 PM Log SQL Server(Current-4/2/2019 1:59:00 PM)
ソースログオン
メッセージ '1'の専用管理者接続の最大数が既に存在するため、接続できませんでした。新しい接続を行う前に、ログオフするかプロセスを終了することにより、既存の専用管理者接続をドロップする必要があります。 [クライアント:127.0.0.1]
クエリdoesが正常に実行されました。多数の接続文字列管理の反復が試みられましたが、これはこれまでで最も堅牢です。
Stack Exchangeには、接続を閉じる前にspidを強制終了するソリューションが存在しますが、SQL Serverエラーログに迷惑メッセージがスローされるため、そこに喜びはありません。
調査sys.dm_exec_sessions
は何の関心も明らかにしません。この手法を使用して開いたままの接続はありません。以下のPowerShellにはダミークエリが含まれています。独自仕様であるため、この方法で接続する理由については説明できませんが、100%必要であり、非常に高速な接続であり、10回に1回実行する必要があります分。
このエラーは、全体的な迷惑/ノイズです。 DACクエリが実行され、期待どおりに機能します。静止したシステムで新たに再起動しても、エラーが発生する毎回。他にDACはありません-存在する場合、コマンドプロンプトで非常に厄介なエラーメッセージがスローされます。
興味深いことに、このためにsqlcmdを使用しても、エラーメッセージはスローされません。
#begin powershell script
$SqlServerName = "server\instance"
$DbQuery = "
INSERT INTO master.dbo.sometable(value1,value2) values ('test14','testtest14');"
function Get-SqlConnection
{
param (
[String] $SqlServerName
)
$sqlConnection = $null
try
{
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlConnection.ConnectionString = "data source=admin:$SqlServerName;Integrated Security=True; pooling=false"
$sqlConnection.Open()
}
catch
{
if ($sqlConnection)
{
[void] $sqlConnection.Dispose()
}
throw
}
$sqlConnection
}
try
{
$sqlCommand = New-Object System.Data.SqlClient.SqlCommand
$sqlConnection = Get-SqlConnection -SqlServerName $SqlServerName
$sqlCommand.Connection = $SqlConnection
$sqlCommand.CommandText = $dbQuery
[void] $sqlCommand.ExecuteNonQuery()
}
finally
{
if ($sqlCommand)
{
[void] $sqlCommand.Dispose()
}
if ($sqlConnection)
{
[void] $sqlConnection.Dispose()
}
}
マイクロソフトサポートのいくつかの層を調べた後、この問題の解決策は「pooling = false」を「Pooling = False」に変更することであることがわかりました。大文字と小文字は区別されます。