web-dev-qa-db-fra.com

Lors de l'utilisation du CAD, recevez le "[...] Le nombre maximum de connexions d'administrateur dédié" 1 "existe déjà" message dans le journal des erreurs

Je suis sur le point d'escalader cela à la SM, mais je pensais essayer d'abord ici et voyez si quelqu'un a des idées sur la manière de prévenir ce message d'erreur Faux ...

Lors de la connexion à SQL Server (Dernières constructions 2016 et 2017) avec une connexion administratrice dédiée (DAC) via un PowerShell, je reçois le message d'erreur suivant:

Date 4/2/2019 1:59:13 =PM Log SQL Server (actuel - 4/2/2019 1:59:00)

Logon de source

Le message n'a pas pu se connecter car le nombre maximal de connexions administratrice dédiées '1' existe déjà. Avant de pouvoir effectuer une nouvelle connexion, la connexion administratrice dédiée existante doit être supprimée, soit en vous déconnectant ou en terminant le processus. [Client: 127.0.0.1]

La requête fait fonctionne avec succès. De nombreuses connexions String Management Itérations ont été tentées, celle-ci est la plus robuste jusqu'à présent.

Une solution existe sur l'échange de pile qui implique de tuer l'épidée avant de fermer la connexion, mais qui jette également un message de nuisance dans le journal des erreurs SQL Server, donc pas de joie là-bas.

Examiner sys.dm_exec_sessions ne révèle rien d'intérêt, aucune connexion ne reste ouverte à l'aide de cette technique. Le ci-dessous PowerShell a une requête mannequin, je ne peux pas parler de la raison pour laquelle nous nous connectons de cette façon, car il est exclusif, mais il est nécessaire de 100%, c'est une connexion très rapide et je dois le faire une fois tous les 10 minutes.

Cette erreur est une nuisance totale/bruit. La requête DAC fonctionne et fonctionne comme prévu. Erreur d'incendie à chaque fois Même avec un nouveau redémarrage sur un système richesse. Il n'y a pas d'autres DACS - s'il y a un message d'erreur très odieux à l'invite de commande.

Fait intéressant, lorsque vous utilisez SQLCMD pour cela, il ne jette pas le message d'erreur.

#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()
    }
}
4
RelativitySQL

Après avoir travaillé à travers plusieurs couches de Soutenir Microsoft, il a été découvert que la solution à ce problème était de changer de "mise en commun = false" à "mise en commun = false", il est sensible à la casse.

2
RelativitySQL