Für einen Administrator und einen Entwickler ist es sinnvoll, wenn sie sich per Script Datenbankinformationen oder auch Datenbankserver-Informationen besorgen kann.

Microsoft hat zum auslesen von Datenbankinformationen und von Serverinformationen System-Views.

Datenbankserver-Informationen

Welche Version des Microsoft SQL-Servers ist denn aktuell bei Ihnen installiert?

-- Ermittlung der SQL-Server Version

SELECT @@version
GO

Mit diesem kleinen aber feinen CODE können Sie sich die aktuelle Version Ihres SQL-Server ausgeben lassen. Hier könnt Ihr ein Beispielergebnis der Abfrage sehen.

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr  2 2010 15:53:02 Copyright (c) Microsoft Corporation	Express Edition with Advanced Services on Windows NT 5.2 <X86> (Build 3790: Service Pack 2) (Hypervisor)

Von die Edition über die Buildnummer und die Service Pack Version werden alle relevanten Daten ausgegeben.

Welche Jobs werden auf dem Server ausgeführt?

Um einen Überblick über die eingerichteten Jobs zu erhalten hat uns Microsoft sp_help_jobs in der MSDB Datenbank zur Verfügung gestellt.

--Eine Übersicht zu allen Jobs

EXEC msdb.dbo.sp_help_job
GO

Das Ergebnis dieser Prozedur ist recht umfangreich. Wir erhalten alle alle Jobs mit nächster Ausführungszeitpunkt, letzte Ausführung, den Besitzer, Erstellungsdatum, Änderungsdatum und noch viele mehr. Am besten einfach mal auf einem SQL-Server ausprobieren und das Ergebnis studieren. 😉

Datenbankinformationen

Welche Datenbanken sind denn auf meinem SQL-Server registriert? Dieser ein-zeiler gibt die Antwort:

-- Ermittlung aller registrierter Datenbanken

EXEC sp_helpdb
GO

Als Ergebnis werden folgende Spalten ausgegeben:

  • Name
  • db_size
  • owner
  • dbid
  • created
  • status
  • compatibility_level

Wie groß sind die jeweiligen Datenbanken auf dem SQL-Server?

-- MDF und LDF getrennt aufgeführt
SELECT 
	DB_NAME(database_id) AS Datenbankname,
	Name AS Logical_Name,
	Physical_Name, (size * 8)/1024 [Größe in MB]
FROM 
	sys.master_files
ORDER BY 
	DB_NAME(database_id)

-- Summe aus MDF und LDF
SELECT 
	DB_NAME(database_id) AS Datenbankname,
	SUM((size * 8)/1024) [Größe in MB]
FROM 
	sys.master_files
GROUP BY  
	DB_NAME(database_id)
ORDER BY 
	DB_NAME(database_id)

Wiederherstellungsmodus auslesen

Eine weitere Datenbankinformation die einfach auszulesen ist, ist der Wiederherstellungsmodus.

-- Wiederherstellungsmodus auslesen

USE	[<<Datenbankname>>]
	SELECT DATABASEPROPERTYEX('<<Datenbankname>>', 'recovery')
GO

Bei dieser Abfrage müssen zwei Parameter angegeben werden.

Nämlich den Datenbankname und die Property. Diese Abfrage eignet sich gut um sie mit anderern Abfragen dynamisch mit den Parametern in einer Schleife auszuführen.

Über das gleiche Statement nur mit anderen Properties können eine Vielzahl von Datenbankinformationen ermittelt werden. Hier noch ein paar wichtige Properties:

CollationStandard collation der Datenbank
EditionDatenbankedition
IsAutoCloseDatenbankressourcen werden nach beenden der Applikation (LOGoff letzter Benutzer) freigegeben
IsAutoCreateStatisticsStatistiken für den Abfrageoptimierer werden erstellt
IsAutoShrinkDatenbank wird automatisch regelmäßig verkleinert
IsAutoUpdateStatisticsDer Abfrageoptimierer aktualisiert die Statistik nachdem sie verwendet wurde.
IsInStandByDatenbank ist in Schreibschutzmodus und es können Protokolle wiederhergestellt werden.
MaxSizeInBytesmaximale Größe der Datenbank in Bytes.
StatusStatus der Datenbank
UpdateabilityErmittelt ob die Daten der Datenbank geändert werden können.
UserAccessWelche Benutzer haben auf die Datenbank Zugriff.
Versioninterne Versionsnummer des SQL Server-Codes, mit dem die Datenbank erstellt wurde

Alle Tabellen einer Datenbank

Im folgenden Beispiel kann sich z.B. ein Entwickler einen Überblick über sämtliche Tabellen einer bestimmten Datenbank machen. Als Ergebnis dieser Abfrage erhält er den Tabellennamen, die Felder der Tabelle und den Datentyp inklusive der Länge des Datentyps.

SELECT 
        table_name=sysobjects.name,
        column_name=syscolumns.name,
        datatype=systypes.name,
        length=syscolumns.length
FROM 
        sysobjects 
                JOIN syscolumns ON sysobjects.[id] = syscolumns.[id]
                JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE 
        -- U liefert die User-Tabellen zurück
        sysobjects.[xtype]='U'
ORDER BY 
        sysobjects.[name], 
        syscolumns.colid

In der WHERE-Bedingung wird auf den Parameter xtype = U gefiltert. Das U steht in diesem Fall für User-Tabellen.  Eine Erweiterung um z.B. eine bestimmte Tabelle oder ein spezielles Feld kann natürlich implementiert werden.

Wie viele Zeilen hat eine Tabelle und wie groß ist der Index?

--Auslesen der Zeilenanzahl sowie der Data-Größe und Index-Größe einer Tabelle 

EXEC sp_spaceused <<TABELLEN-NAME>> 
GO

Als Parameter wird hier der Name der gewünschten Tabelle angegeben. Als Ergebnis erhält man folgende Spalten:

  • name
  • rows
  • reserved
  • data
  • index_size
  • unused

Es gibt noch einige Prozeduren und Abfragen, die uns gewünschte Datenbankinformationen zur Verfügung stellen. Dieser Artikel wird nach und nach mit weitern Abfragen und Prozeduren bezüglich Server-Informationen und Datenbankinformationen erweitert.

Von Michael