Als Entwickler möchte man immer wiederkehrende Aufgaben möglichst automatisieren um den Aufwand zu minimieren und Fehler zu vermeiden – sind solche Aufgaben dann doch meist auch recht nervig.
Nachfolgendes Script zeigt, wie per PowerShell eine Datenbank eines SQL Servers gelöscht und neu erstellt werden kann. Dabei wird zuvor überprüft, ob die gewünschte Datenbank verfügbar ist und nur in diesem Fall der Löschvorgang angestoßen.
# Recreate database
param (
[string] $server = $(throw Write-Host "You did not define a database server" -ForegroundColor Red),
[string] $database = $(throw Write-Host "You did not define a database" -ForegroundColor Red)
)
Write-Host "Trying to remove database [$database] ..." -ForegroundColor White
trap [Exception]
{
write-host
write-error $("TRAPPED: " + $_.Exception.GetType().FullName);
write-error $("TRAPPED: " + $_.Exception.Message);
break;
}
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$serverObj = new-object Microsoft.SqlServer.Management.Smo.Server ($server)
$databaseObj = new-object Microsoft.SqlServer.Management.Smo.Database
[Boolean] $databaseExists = 0
foreach ($_ in $serverObj.Databases)
{
if ($_.Name -eq $database)
{
$databaseObj = $_
$databaseExists = 1
}
}
if ($databaseExists)
{
Write-Host "Found database [$database] ... removing ..." -ForegroundColor White
$serverObj.KillAllProcesses($databaseObj.Name)
$serverObj.KillDatabase($databaseObj.Name)
Write-Host "Database [$database] removed successfully." -ForegroundColor Green
}
Write-Host "Trying to create database [$database] ..." -ForegroundColor White
$databaseObj = new-object Microsoft.SqlServer.Management.Smo.Database ($serverObj, $database)
$databaseObj.Create()
Write-Host "Database [$database] created successfully." -ForegroundColor Green
Dem Script selbst müssen zwei benannte Parameter übergeben werden:
.\RecreateDatabase.ps1 -server localhost -database myDatabase
Hierbei definiert -server die SQL Server Instanz und -database den Namen der Datenbank, die neu erstellt werden soll.
Der obige Aufruf würde beim ersten Mal folgenden Output generieren:
Der zweite Aufruf ist dann schon spannender:
Natürlich gibt es noch weitere Möglichkeiten. Einen Überblick der SQL Server Management Objects finden sich im MSDN.
THX!!! works perfectly!!!