Restore işlemlerini otomatize etmek için hem File System hemde SQL Server’ın kullanabildiği bir dil olan PowerShell’i kullanmak beraberinde yapılacak diğer işlemler içinde fazlasıyla yarar sağlamaktadır.
Örneğin bir çok database ile belirli aralıklarda restore yapılması gereken bir sistemde hem backup dosya isimleri ve sayıları hem de database file isim ve sayıları değişkenlik gösterebilir.
Bu durumda kolay manipüle edilebilen ,içerisinde değişken yapısı kurulabilen bir dil kullanım ihtiyacı doğmaktadır.
Bir Backup Dosyası , Bir Mdf ve Bir Ldf Dosyasına Sahip Bir Database İçin Restore Kodu ;
$File = Get-ChildItem Microsoft.PowerShell.Core\FileSystem::\\dbbackup\w$\Backup\DBADB\FULL |Select Name
$FilePath = "\\dbbackup\w$\Backup\DBADB\FULL\"
$RestorePath = $FilePath + $File.Name
$RelocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBDATA", "F:\DATA\DBADBDATA.mdf")
$RelocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBLOG", "T:\LOG\DBADBLOG.ldf")
Restore-SqlDatabase -ServerInstance "SQLRSTR" -Database "DBADB" -BackupFile $RestorePath -RelocateFile @($RelocateData,$RelocateLog)
Birden Fazla (Bölünmüş) Backup Dosyası , Birden Fazla Mdf ve Ldf Dosyasına Sahip Bir Database İçin Restore Kodu ;
$File1 = Get-ChildItem Microsoft.PowerShell.Core\FileSystem::\\dbbackup\w$\Backup\DBADB\FULL |Select Name
$FilePath1 = "\\dbbackup\w$\Backup\DBADB\FULL\"
$RestorePath1 = $FilePath1 + $File1.Name
$File2 = Get-ChildItem Microsoft.PowerShell.Core\FileSystem::\\dbbackup\y$\Backup\DBADB\FULL |Select Name
$FilePath2 = "\\dbbackup\y$\Backup\DBADB\FULL\"
$RestorePath2 = $FilePath2 + $File2.Name
$RelocateData1 = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBDATA1", "F:\DATA\DBADBDATA1.mdf")
$RelocateData2 = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBDATA2", "F:\DATA\DBADBDATA2.ndf")
$RelocateData3 = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBDATA3", "F:\DATA\DBADBDATA3.ndf")
$RelocateData4 = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBDATA4", "F:\DATA\DBADBDATA4.ndf")
$RelocateLog1 = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBLOG1", "T:\LOG\DBADBLOG1.ldf")
$RelocateLog2 = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile("DBADBLOG2", "T:\LOG\DBADBLOG2.ldf")
Restore-SqlDatabase -ServerInstance "SQLRSTR" -Database "DBADB" -BackupFile @($RestorePath1,$RestorePath2) -RelocateFile @($RelocateData1,$RelocateData2,$RelocateData3,$RelocateData4,$RelocateLog1,$RelocateLog2)