SQL Express Edition Backup Alert
SQL Express Edition kısıtlı bir sürüm olduğu için Job, mail gibi yan araçları kullanamıyoruz fakat powershell ve Task Scheduler(Görev Zamanlayıcısı) gibi Windows ile gelen araçlar ile bunları yapmamız mümkün.SQL Express Edition sürümünde backup jobımızı oluşturmuştuk. SQL Express Edition Backup Job isminde ki makalemde bulabilirsiniz.
Bu makale de alınan backupları belli aralıklarla kontrol ederek en son ne zaman backup alındığını bize mail ile bildirmesi için gerekli ayarlamaları yapacağız.
İlk olarak backupları kontrol etmek için aşağıda ki procedure oluşturmamız gerekiyor.
USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[Backup_kontrol] AS BEGIN SELECT sd.Name as DatabaseName, COALESCE(Convert(varchar(12), MAX(bs.backup_finish_date), 101),'Daha Backup Alinmamis') as LastBackUpDate, COALESCE(Convert(varchar(12), MAX(bs.user_name), 101),'NA') as UserName FROM sys.sysdatabases sd LEFT OUTER JOIN msdb.dbo.backupset bs ON bs.database_name = sd.name GROUP BY sd.Name ORDER BY sd.Name END GO
Yukarıda ki scripti çalıştırdıktan sonra dbo.Backup_kontrol procedure’ü oluşmuş mu kontrol edelim.
Görüldüğü gibi Master veritabanının altında ki Programmability’nin altında Stored Procedures sekmesinin altında Dbo.Backup_kontrol procedure’nü gördükten sonra kullanıcı oluşturmamız gerekiyor.
Backup_kontrolUser Adında kullanıcı oluşturduk ve bu kullanıcıya User Mapping den sadece master veritabanın da public yetkisi veriyoruz sonradan oluşturduğumuz procedure üstünde execute yetkisi vereceğiz.Bu pencere de tamam dedikten sonra oluşturduğumuz procedure’e gelip sağ tuş yapıp Properties’i açıyor ve Permissions sekmesinden kullanıcıya execute yetkisi veriyoruz.
Kullanıcıya execute yetkisi verdikten sonra aşağıda ki powershell scriptinde belirtilen yerleri kendinize uyarlamanız gerekiyor.
Bu işlem bittikten sonra procedure den çıkan sonucu yazdırmak için aşağıda ki gibi içi boş notepad oluşturuyoruz.
Backup.txt oluşturulduktan sonra aşağıda ki powershell scriptin de bulunan kırmızı ile işaretlenmiş yerleri kendimize göre düzenledikten sonra .ps1 uzantısında aynı yere kaydediyoruz.
$user = “Oluşturulan SQL Kullanıcı Adı” $pwd = “oluşturduğumuz kullanıcının şifresi” $database = “master” $connectionString = “Server= bağlanılacak instance ip ve port ;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;” $connection = New-Object System.Data.SqlClient.SqlConnection $connection.ConnectionString = $connectionString $connection.Open() $query = “ execute dbo.BACkup_kontrol ” $command = $connection.CreateCommand() $command.CommandText = $query $result = $command.ExecuteReader() $table = new-object “System.Data.DataTable” $table.Load($result) $table | Out-File C:\Backup\Backup.txt - #notepadi oluşturduğumuz path Send-MailMessage -From "smtp hesabı" -To "Gönderilmesini istediğimiz mail hesabı"-Subject "Başlık" -Body "Konu. " -BodyAsHtml -Attachments "c'nin altında oluşturduğumuz dizin eğer başka bir yere oluşturduysanız orayı yazmalısınız c:\Backup\Backup.txt" -Priority High -dno onSuccess, onFailure -SmtpServer "smtp sunucusu" $connection.Close()
Powershell uzantılı dosyamızı belli aralıklarla çalıştırabilmemiz için .bat uzantılı dosya hazırlamamız gerekiyor.Bunun için notepad’i açıyoruz ve aşağıda ki scripti yapıştırıp .bat uzantısında kaydediyoruz.
powershell.exe -file "D:\Backup\ExpresBackupKontrol.ps1"
Windows ile beraber gelen Görev Zamanlayıcısını açıyoruz ve Görev oluştur diyoruz .
Ad bölümüne Görevimizin ismini yazıyoruz ve Kullanıcı oturum açmışsa da açmamışsa da çalıştır seçeneğini seçerek devam ediyoruz.
Tetikleyiciler kısmına geliyoruz ve ben Günlük 08:50 de gönderecek şekilde ayarlamaları yaptım siz farklı tarih ve saat yapabilirsiniz.
Eylemler kısmında sol alt köşe de bulunan Yeni butonuna tıklıyoruz ve .bat uzantısında oluşturduğumuz dosyayı seçip tamam diyerek görev yöneticisinde ki işlemlerimizi bitirmiş oluyoruz.
Yaptığımız çalışmayı doğru yaptığımızı kontrol etmek için oluşturduğumuz görevin üstünde sağ tıklayarak,çalıştır diyoruz ve mail hesabımızı kontrol ediyoruz.
En son ne zaman backup alındığı artık mail olarak gelecektir.