Sonntag, 5. Juni 2011

Versionsnummer einer Datenbank

Bevor man First-Level-Support anruft, sollte man zumindest die Versionsnummer des Beschwerdeobjekts kennen, um die Hilfe schnell und gezielt zu bekommen.
Bei Assemblies z.B. ist es üblich, Versionsnummer in Assembliesinfo zu verpacken, Oberflächen besitzen eigene Dialogboxen oder Seiten About, um die Versionsinfo dem Anwender zur Verfügung zu stellen.
Was ist mit Datenbanken, muss man eine Datenbank mit einer Versionsnummer versehen? Wird eine Datenbank nur von einer Anwendung verwendet, kann man in einigen Fällen die Datenbank und die Anwendung unter einer Versionsnummer zusammen ausliefern, dann wird das About-Anwendungsfenster ausreichend sein. Bei Enterprise-Lösungen wird eine Datenbank von „zich“ Web- und Windows-Services, Enterprise Service Bus, Web- und Desktop- Anwendungen verwendet, dazu kommen noch ETL-Prozesse, BI-Lösungen, die die Datenbank als Ziel oder Datenquelle anbinden. Mit anderen Wörtern wird eine Datenbank in einer Enterprise Lösung als einzelne Komponente betrachtet, deren Aktualisierung nicht zwingend eine Aktualisierung von anderen Komponenten der Gesamtlösung erfordert. Es ist auch umgekehrt gültig, beim Bugfixing einer Middleware-Anwendung wird die Datenbank nicht neu bereitgestellt, daher bleibt sie unter einer anderen Version bestehen.
Also ja, man sollte eine Datenbank mit einer Versionsnummer versehen. Die Frage ist „Wie?“.
Man könnte eine Tabelle Version erstellen, in der die ganze Versionsinfo abgespeichert wird. Es gibt aber für SQL Server Datenbanken (ab SQL Server 2005) auch eine andere Möglichkeit, die ich persönlich viel eleganter finde als eine Version-Tabelle. Die Möglichkeit ist, erweiterte Eigenschaften einer Datenbank und Datenbankobjekten einzusetzen. Im Beispiel 1 zeige ich, wie Datenbankeigenschaften um die Version und Bereitstellungsinfo erweitert werden können. Die erweiterten Eigenschaften einer Datenbank sind in SQL Server Management Studio über das Fenster Database Properties und die Seite Extended Properties zu erreichen (s. Abbildung 1).
Möchte man die erweiterten Eigenschaften von einer Anwendung aus abfragen, steht die Funktion fn_listextendedproperty zu Verfügung, ein Einsatz der Funktion ist auch in dem Beispiel 1 zu finden.
Beispiel 1: Erstellen von erweiterten Eigenschaften Version, Last deployment, Deployed by der aktuellen Datenbank
-- Stored Procedure
-- dbo.merge_extended_db_property
-- erstellt oder aktualisiert erweiterte Eigenschaften
-- der aktuellen Datenbank
-- @name - Name der Eigenschaft
-- @value - Wert der Eigenschaft
create proc dbo.merge_extended_db_property
 @name sysname,
 @value sql_variant
as
begin
 if not exists
 (
  select name
  from
   fn_listextendedproperty(@name,
     default, default, default,
     default, default, default)
 )
 begin
  exec sys.sp_addextendedproperty @name, @value
 end
 
 exec sys.sp_updateextendedproperty @name, @value
end
go
 
-- Erweiterte Eigenschaft 'Version'
-- Version der bereitgestellten Datenbank 
declare @name sysname = N'Version'
declare @value varchar(16) = '1.3.25'
exec dbo.merge_extended_db_property @name,@value
go

-- Erweiterte Eigenschaft 'Last deployment'
-- Das Datum der Bereitstellung der Datenbank
declare @name sysname = N'Last deployment'
declare @value varchar(128) = convert(varchar(128),getdate(),121)
exec dbo.merge_extended_db_property @name,@value
go

-- Erweiterte Eigenschaft 'Deployed by'
-- Anmeldename des Benutzers,
-- der die Datenbank bereitgestellt hat
declare @name sysname = N'Deployed by'
declare @value varchar(128) = system_user
exec dbo.merge_extended_db_property @name,@value
go
-- Löscht die Prozedur dbo.merge_extended_db_property
drop proc dbo.merge_extended_db_property
go
Abbildung 1: Anzeigen erweiterter Eigenschaften in SSMS


Verwandte Links

Keine Kommentare:

Kommentar veröffentlichen