Gibt es eine Beziehung zwischen dem SQL Server-Dienstnamen und dem Instanznamen?

7

Der Instanzname meines SQL Servers lautet SQLEXPRESS, und der Name des SQL Server-Dienstes sieht aus wie MSSQL $ SQLEXPRESS . Gibt es eine Beziehung zwischen Instanzname und Dienstname? Ich versuche, den SQL Server-Dienststatus anhand des Namens zu überprüfen, und frage mich, ob der Name des SQL Server-Dienstes auf einem anderen Computer unterschiedlich sein kann.

Furkan Ekinci
quelle

Antworten:

13

Ja, der Dienstname gilt immer MSSQL$<Instance Name>für eine benannte Instanz und MSSQLSERVERfür eine Standardinstanz. Ich glaube nicht, dass sie geändert oder überschrieben werden können, und ich kann mir auch keinen Grund vorstellen, warum Sie dies möchten.

Sie können die auf einem Server installierten Instanzen über die Registrierung auflisten, indem Sie beispielsweise Powershell verwenden:

Get-ItemProperty 'HKLM:\Software\Microsoft\Microsoft SQL Server\Instance Names\SQL'
Mark Storey-Smith
quelle
+1 für die Antwort bezüglich der Instanznamen. Abgesehen davon bevorzuge ich es, die Registrierung nicht direkt in Powershell zu verwenden, es sei denn, es gibt keinen anderen Weg. Für diesen Teil bevorzuge ich den Ansatz von @ThomasStringer. Die Verwendung von WMI ist definitiv ein zuverlässigerer Ansatz.
Schütze McGavin
6

Mark hat Ihnen eine Möglichkeit gezeigt, diese Informationen direkt aus der Registrierung abzurufen. Eine andere Möglichkeit, dies zu tun, ist WMI, das von PowerShell verwendet wird:

Get-WmiObject -ComputerName "YourDestinationServer" -Namespace "root\microsoft\sqlserver\computermanagement11" -Class "SqlService" |
    Where-Object {$_.SQLServiceType -eq 1} |
    Select-Object ServiceName, DisplayName, 
        @{Name = "StateDesc"; Expression = {
            switch ($_.State) {
                1 { "Stopped" }
                2 { "Start Pending" }
                3 { "Stop Pending" }
                4 { "Running" }
                5 { "Continue Pending" }
                6 { "Pause Pending" }
                7 { "Paused" }
            }
        }}

Mit dem obigen Befehl erhalten Sie den Status der SQL Server-Engine-Dienste auf einem bestimmten Computer.

Thomas Stringer
quelle
Ich kann dann davon ausgehen, dass die folgende Logik dann für benannte und unbenannte Instanzen als Dienstname korrekt ist? svcname = instancename! = string.Empty? string.Format ("MSSQL $ {0}", Instanzname): "MSSQLSERVER";
Vas Gr