SQL Server: Windows Batch Script ile Otomatik Backup Restore

Arkadaşlar merhaba,

Bugün sizlere bir senaryo üzerinden Windows Batch Script ile SQL Server’da nasıl otomatik backup restore işlemleri yapabileceğimizi anlatacağım.

Konuyu SQL Server 2012 üzerinde anlatacağım. Ancak muhtemelen anlattıklarımız SQL Server 2014 2016 sürümleri için de geçerli olacaktır.

Senaryomuz şöyle:

Bir canlı SQL Server sunucumuz var, bir de raporlamaların yapıldığı bir sunucumuz var. İkisi de SQL Server 2012 kullanıyor. İki sunucu da farklı ip adresleri üzerinde ancak aynı network içerisinde yer alıyor. Biz burada her gece canlı sunucuda backup alıp, bu backup’ı raporlama sunucumuza restore etmek istiyoruz. Bunun için de bir windows batch script yazıp ardından schedula job olarak günlük çalışmasını sağlayacağız. Peki bunu nasıl yapacağız?

Canlı Sunucu IP Adresi: 10.1.1.10

Rapor Sunucu IP Adresi: 10.1.1.50

Kullandıkları Veritabanı: WORDPRESS

Veritabanı Kullanıcı Adı: sa

Veritabanı Parola: 123456

Rapor Sunucu Windows Server Kullanıcı Adı: administrator

Rapor Sunucu Windows Server Parola: qwertyu

Raporlama Sunucusunda Backup’ı Göndereceğimiz Klasör Dizini: C:\Backup

Öncelikle yapmanız gereken bir notepad açıp aşağıdaki satırları kendinize göre uyarlamak. Gelin dilerseniz bu satırları birlikte inceleyelim.

SQLCMD -S 10.1.1.10 -U sa -P 123456 -Q” BACKUP DATABASE WORDPRESS TO DISK = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WORDPRESS.bak‘ WITH NOFORMAT, NOINIT, NAME = N’WORDPRESS‘, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10″

Bu kodumuzda canlı sunucumuzda SQL Server 2012’nin varsayılan dizininde backup alıyoruz.

net use \\10.1.1.50\C$\Backup qwertyu /USER:administrator

Burada net use komutunu kullanarak rapor sunucusundaki windows server’a erişim sağlıyoruz. Artık dosya kopyalama ve silme işlemlerini yapabiliriz.

copy “C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WORDPRESS.bak” \\10.1.1.50\C$\Backup

net use komutu ile erişim sağladıktan sonra canlı sunucuda oluşturduğumuz backup’ı rapor sunucundaki C:\Backup klasörüne kopyalıyoruz.

del “C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WORDPRESS.bak”

Kopyalama bittikten sonra del komutu ile canlı sunucudaki backup’ımızı siliyoruz.

SQLCMD -S 10.1.1.50 -U sa -P 123456 -Q" DROP DATABASE WORDPRESS"

Kopyalama tamamlandıktan sonra artık restore işlemine başlayabiliriz. Bunun için de aşağıdaki kodları kullanacağız. Biz burada rapor sunucumuzda varolan veritabanını drop ederek restore edeceğiz. Eğer hedefte bir veritabanı yoksa batch script hata vermesine rağmen diğer adıma geçecek ve restore işlemini başarıyla tamamlayacaktır.

SQLCMD -S 10.1.1.50 -U sa -P 123456 -Q" RESTORE DATABASE WORDPRESS FROM DISK = N'C:\Backup\WORDPRESS.bak' WITH RECOVERY, MOVE 'WORDPRESS' TO 'M:\SQL\WORDPRESS.mdf', MOVE 'WORDPRESS_log' TO 'L:\SQL\WORDPRESS_log.LDF' "

Son olarak da restore işlemi bittikten sonra rapor sunucumuza kopyaladığımız dosyayı diskte yer kaplamaması için siliyoruz.

del \\10.1.1.50\C$\Backup\WORDPRESS.bak

Şimdi isterseniz tüm kodları bir arada gösterelim.

SQLCMD -S 10.1.1.10 -U sa -P 123456 -Q" BACKUP DATABASE WORDPRESS TO DISK = 'C:\Program Files\Microsoft SQL 
Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WORDPRESS.bak' WITH NOFORMAT, NOINIT, NAME = N'WORDPRESS', SKIP, REWIND, NOUNLOAD, COMPRESSION,  STATS = 10"

net use \\10.1.1.50\C$\Backup qwertyu /USER:administrator

copy "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WORDPRESS.bak" \\10.1.1.50\C$\Backup

del "C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WORDPRESS.bak"

SQLCMD -S 10.1.1.50 -U sa -P 123456 -Q" DROP DATABASE WORDPRESS"

SQLCMD -S 10.1.1.50 -U sa -P 123456 -Q" RESTORE DATABASE WORDPRESS FROM DISK = N'C:\Backup\WORDPRESS.bak' WITH RECOVERY, MOVE 'WORDPRESS' TO 'M:\SQL\WORDPRESS.mdf', MOVE 'WORDPRESS_log' TO 'L:\SQL\WORDPRESS_log.LDF' "

del \\10.1.1.50\C$\Backup\WORDPRESS.bak

Restore yaparken primary data file’ı M diskine, log dosyasını ise L diskine restore ediyoruz.

Yukarıdaki satırları notepad içinde kendinize göre uyarladıktan sonra dosya uzantısı bat olacak şekilde kaydedin. Dilerseniz daha sonra exe uzantılı dosyaya da çevirebilirsiniz.

Ben örnek olması açısından ismini job.bat olarak kaydettim.

Tüm bu işlemleri tamamladıktan sonra görev zamanlayıcısı kullanarak scriptimizi her gün belli bir saatte bir kez çalışacak şekilde kuralım.

Kolay gelsin 🙂

Bir Cevap Yazın