Manchmal ist es erforderlich, auf möglichst einfache und schnelle Weise die Versionsnummer eines MS SQL Server herauszufinden. Nun bringt der SQL Server hierfür auch eine Funktion mit: Die Systemvariable "@@version" enthält die Information. Nachteilig dabei ist aber, dass man schon einen geeigneten Client braucht, um die Daten auch abzufragen.
Variante 1
Schneller geht es mit dem folgenden VB-Script. Es öffnet eine Verbindung zum Server, fragt die ab und gibt das Ergebnis als Meldung zurück.
Das gezeigt Script kann man z. B. auch verwenden, um die Versionsinformation in das sehr nützliche Tool "BGInfo" von Sysinternals einzubinden.
Das Skript: vbsSQLSRVversion.vbs
strSQLServer = "servername" ' hier Servernamen angeben
strConn = "Driver={SQL Server};SERVER=" & strSQLServer
set objDB = CreateObject("ADODB.Connection")
objDB.Open(strConn)
strSQL = "select v=@@version"
set objRS = objDB.Execute(strSQL)
wscript.echo objRS.Fields("v").value
Variante 2
Als Reaktion auf den "Slammer"-Wurm Ende Januar 2003 habe ich folgende Variation des Skripts entwickelt. Es funktioniert mit SQL Server Version 7.0, 2000 und 2005. Es kann auf jedem Server bzw. Client gestartet werden, der den Windows Script Host installiert hat (ab W2000; bei NT nicht Standard).
Das Skript gibt eine Versionsinfo zu dem Server aus, dessen Namen man angibt (falls er existiert). Sollte das Skript nicht laufen, kann man direkt auf dem SQL-Server in einem CMD-Fenster folgendes Kommando eingeben:
osql -E -Q "select @@version"
Auch hier sollte eine Versionsinfo zurückkommen. Der "Slammer"-Patch ist dann vorhanden, wenn auf dem SQL-Server 2000 die Versionsnummer >= 8.00.760 ist (entspricht SP3). Auf dem SQL-Server 7.0 muss sie >= 7.00.1077 sein. Ist das nicht der Fall, dann muss gepatcht werden. Achtung: Für SQL Server 7.0 muss erst SP4, dann der Patch eingespielt werden. Die Update-Prozedur dauert ziemlich lange und erfordert mindestens einen Neustart des SQL-Dienstes, evtl. sogar des Servers.
Das Skript: vbsSQLSRVversion2.vbs
strSQLServer = "." ' hier Servernamen angeben; "." ist lokal strConn = "Driver={SQL Server};SERVER=" & strSQLServer on error resume next set objDB = CreateObject("ADODB.Connection") objDB.Open(strConn) if err.number <> 0 then quitcode else sqlvers end if sub sqlVers() strSQL = "select v=@@version" set objRS = objDB.Execute(strSQL) if err.number <> 0 then quitcode exit sub end if strVer = objRS.Fields("v").value if err.number <> 0 then quitcode exit sub end if if instr(strVer, "2005 - 9") > 0 then strSQL = "SELECT v= 'SQL Server 2005 ' + cast(SERVERPROPERTY ('productlevel')" _ & " as varchar) + ', Version ' + cast(SERVERPROPERTY('productversion')" _ & " as varchar) + ', ' + cast(SERVERPROPERTY ('edition') as varchar)" set objRS = objDB.Execute(strSQL) strVer = objRS.Fields("v").value elseif instr(strVer, "2000 - 8") > 0 then strSQL = "SELECT v= 'SQL Server 2000 ' + cast(SERVERPROPERTY ('productlevel')" _ & " as varchar) + ', Version ' + cast(SERVERPROPERTY('productversion')" _ & " as varchar) + ', ' + cast(SERVERPROPERTY ('edition') as varchar)" set objRS = objDB.Execute(strSQL) strVer = objRS.Fields("v").value elseif instr(strVer, "7.00.1063") then strVer = "SQL Server 7.0 SP4" elseif instr(strVer, "7.00.961") then strVer = "SQL Server 7.0 SP3" elseif instr(strVer, "7.00.842") then strVer = "SQL Server 7.0 SP2" elseif instr(strVer, "7.00.699") then strVer = "SQL Server 7.0 SP1" elseif instr(strVer, "7.00.623") then strVer = "SQL Server 7.0 ohne SP" end if WScript.echo strVer end sub sub quitcode() WScript.echo "(kein Wert ermittelt)" end sub
Verwandte Beiträge:
- BGInfo um eigene Datenfelder erweitern
BGInfo von Sysinternals ist für viele Windows-Admins ein unverzichtbares Werkzeug. Es blendet Konfigurationsinformationen über den lokalen Rechner in das Hintergrundbild... - Tipps und Tricks zum Backup eines SQL Server
Tägliches Backup: Backup-Datei Tägliches Backup: Backup-Medium Tägliches Backup: Automatisierung Tägliches Backup Backupdatei Oft will man sämtliche Backups eines Tages übersichtlich... - Tägliche SQL-Backup-Dateien
Oft will man sämtliche Backups eines Tages übersichtlich zusammenfassen. Das ist insbesondere dann interessant, wenn man die eingebaute Backup-Funktion des... - Dienst- und Task-Konten identifizieren
Es ist keine schlechte Idee, die Kennwörter von Dienst- und Taskausführungskonten zu ändern. Vielfach sind diese nämlich mit einem, naja,... - Systeme mit Windows Server 2003 R2 identifizieren
Es ist nicht ganz leicht, im Rahmen einer Dokumentation im Netzwerk die Server zu identifizieren, die mit Windows Server 2003...


17. Oktober 2003, 14:47 Uhr
http://faq-o-matic.net/?p=636


