Manchmal gibt es ja die Nutzung von Test-Datenbanken. Man glaubt es nicht, aber ab und zu wird nicht alles im produktiven System getestet. Hierzu legt man sich eine neue Datenbank an und sichert das Original. Diese Sicherung wird nun in der Test Datenbank widerhergestellt. Als Datenbankadministrator steht man häufig vor der Aufgabe die neu erstellte Test Datenbank zu aktualisieren. Dies macht man nur ungerne händisch. Deswegen habe ich mir ein Musterskript erstellt, welches bei Bedarf ausgeführt wird oder sogar zeitgesteuert.
BACKUP DATABASE [ORIGINAL_DATENBANK] TO DISK = N'D:\Pfad\zum\Backupverzeichnis\ORIGINAL.bak' WITH COPY_ONLY, RETAINDAYS = 1, NOFORMAT, INIT, NAME = N'ORIGINAL_DATENBANK-Vollständig Datenbank Sichern', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
ALTER DATABASE [MEINE_TEST_DATENBANK]
SET SINGLE_USER
--This rolls back all uncommitted transactions in the db.
WITH ROLLBACK IMMEDIATE
GO
USE [master]
RESTORE DATABASE [MEINE_TEST_DATENBANK] FROM DISK = N'D:\Pfad\zum\Backupverzeichnis\ORIGINAL.bak' WITH FILE = 1, MOVE N'ORIGINAL_DATENBANK' TO N'D:\Pfad\zur\Test\Datenbank\TEST_DATENBANK.mdf', MOVE N'TEST_DATENBANK_log' TO N'D:\Pfad\zum\Test\Transaktionslog\TEST_DATENBANK_log.ldf', NOUNLOAD, REPLACE, STATS = 5
GO
ALTER DATABASE [MEINE_TEST_DATENBANK] SET MULTI_USER
GO
Bevor ich es vergesse, das ganze kann auch mit SQLCMD (Command Line Anwendung) automatisiert werden:
SQLCMD -i C:\Pfad\zum\SQL-Skript\TEST_DATENBANK_AKTUALISIEREN.sql -e C:\Pfad\zum\SQL-Skript\LOG\TEST_DATENBANK_AKTUALISIEREN_ERG.txt -s NAME_MEINES_SQL_SERVERS
Alternativ kann noch ein spezieller User mit Password angegeben werden. Einfach als Batch-Datei speichern und starten.