
Bu makalede SQL Express Edition ile backup konusunu ele almış olacağız. SQL Express Edition da sql agent olmadığı için job, alert,operator, mail gibi yapıları kullanamayız. Express sürümünde aşağıdaki resimdeki yapı bulunmamaktadır.
Bunun yanından sql agent ile konfigüre bir şekilde çalışan Maintenance Plans, Resource Governor ve Data Collection’ıda kullanamayız. Management sekmesi altında olmadığınıda aşağıdaki resimde görmüş oluyoruz.
SQL Express Edition düzenli bir şekilde backup almak için .bat veya powershell Windows araçlarını kullanarak job,alert,mail gibi konfigürasyonları yapmamız gerekmektedir. Bat uzantılı dosya yardımıyla Sql Express sürümünde Task Scheduler aracılığıyla belirli aralıklarda backup alma konusunu ele almış olacağız. Bundan sonraki makale konusu ise alınan backupların Task Schedular yardımı ile silme işlemini ele alacağız.
Önceki backup job komutları makalesinde ola.hallengren sayfasından indirmiş olduğum MaintenanceSolution.sql kodlarını indirip çalıştırıyorum. Daha sonra bat uzantılı dosya oluşturarak task scheduler aracılığıyla backup işlemimize başlayacağız. Temel mantık bir procedure oluşturmak ve bunu tetiklemek backup mail vs işlemlerimizi bu mantıkla yapabiliriz.
Bat uzantılı dosya oluşturmadan önce sql server seviyesinde konfigürasyonun yapılması gerekmektedir. Windows üzerinden stored procedure çalıştıracağımız için bu gereklidir.
sp_configure 'Show advanced options',1
reconfigure;
sp_configure 'xp_cmdshell',1
reconfigure;
Bu ayarlamayı yaptıktan sonra Windows üzerinde bir not defteri açarak sqlcmd kodumuzu yapıştırıyoruz. Yukarıdaki system stored procedure yaptıktan sonra servisin restart isteyip istemediği ile ilgili bir bilgi göremedim. Çünkü sp_configure ayarlamalarından bazıları restart isterken bazıları istemiz. Backup komutları makalesinde aşağıdaki kod bloklarını bulabilirsiniz. Sqlcmd aracılığıyla [dbo].[DatabaseBackup] stored procedure’ü çağırmaktadır.
sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE [dbo].[DatabaseBackup] @Databases = 'USER_DATABASES’, @Directory = N'C:\BACKUP',@BackupType = 'FULL', @CleanupTime = 144, @CleanupMode = 'AFTER_BACKUP', @Verify = 'Y', @CheckSum = 'Y', @LogToTable = 'Y', @Compress= 'Y', @BlockSize= 4096, @NumberOfFiles = 8,@BufferCount=50, @MaxTransferSize = 4194304" –b
SQLCmd -S S2\SQLEXPRESS -Q
“EXECUTE [dbo].[DatabaseBackup]
@Databases = 'USER_DATABASES',
@Directory = 'C:\BACKUP\',
@BackupType = 'FULL',
@Compress = 'Y',
@Verify = 'Y',
@CleanupTime = 240,
@CheckSum = 'Y',
@BufferCount = 50,
@MaxTransferSize = 4194304,
@NumberOfFiles = 8,
@LogToTable = 'Y'”
Q ifadesinden sonra çift tırnak içerisinde çalıştırmak istediğimiz sorgumuzu göstermektedir. –S ifadesinden sonra ise sunucu adımız ve instance adı belirtilmektedir.
SQLCmd -S S2\SQLEXPRESS -Q
“EXECUTE [dbo].[DatabaseBackup]
@Databases = 'USER_DATABASES',
@Directory = 'C:\BACKUP\',
@BackupType = 'LOG',
@Verify = 'N',
@CleanupTime = 240,
@CheckSum = 'N',
@LogToTable = 'Y'”
Gerekli kod bloklarını hazırladıktan sonra masaüstünde bir not defteri açarak yukarıdaki bir kod bloğunu yapıştırıyoruz.
Not defterine kodumuz aldıktan sonra File kısmından Save As… diyerek not defterimizi Express_backup.bat olarak kaydediyoruz.
Not: bat dosyası aracılığıyla sqlcmd komutu çalıştıracağımız zaman Username password ifadelerinin girilmesi gerekmektedir. sqlcmd windows bazında çalıştırıldığı için dosya bazında yetki sorununa takılmaz. bu yüzden sqlcmd tercih edilen bir yöntemdir. Örnek olarak aşağıdaki komutu verebiliriz.
sqlcmd -S localhost -U MyUser -P MyPass -d MyDb -q "SELECT 1"
Task Scheduler kullanarak oluşturmuş olduğumuz bat uzantılı dosyayı çalıştırarak backup işlemimizi gerçekleştireceğiz. Windows arama yerine Task Scheduler yazıyoruz.
Gelen ekranda Task Scheduler’a sağ tıklayıp Create Task diyiyoruz.
Gelen ekranda General sekmesinde Name kısmında scheduler’a bir isim veriyoruz. Alt kısımda bulunan security options kısmında Kullanıcı oturum açmışsa da açmamışsa da çalıştır seçeneğini işaretliyoruz.
İlk seçenek yalnızca kullanıcı oturum açtığında çalışır. 3. seçenek ise en yüksek ayrıcalıklarla çalıştırır.
Bu bölümde gerekli ayarlamaları yaptıktan sonra Triggers sekmesine geliyoruz. Gelen ekranda New deyip bir tetikleme zamanı belirtiyoruz.
Başlangıçtaki settings bölümünde sadece bir kez veya günlük haftalık aylık çalışmasını isteyebiliriz.
Aşağıdaki ekranda Gelişmiş ayarlar seçeneğinde ;
Repeat task every: 5 dakikada bir bat dosyasının tetiklenmesini istiyorum.
Stop all running task at end of repetition duration: Tüm çalışan görevleri yineleme süresinin sonunda durdur.
Delay task for up to: Geciktirme süresi olarak karşımıza çıkmaktadır.
Stop task if it runs longer than: kısmında ise şu süreden uzun çalışırsa görevi durdurabiliriz.
Expire: Belirli bir süre sonra belirtilen tarih zaman diliminde biteceğini belirleyebiliriz.
Gerekli ayarlamaları yaptıktan sonra Ok tuşuna basıyoruz.
Actions kısmına gelerek oluşturduğumuz “.bat” uzantılı dosyayı Browse.. sekmesinden seçiyoruz. Seçim yaptıktan sonra OK tuşuna basıyoruz.
Bu ayarlamaları yaptıktan sonra Task Scheduler ekranından çıkıyoruz. Task scheduler ekranında oluşturduğumuz bat uzantılı dosyayı görebiliriz.
Daha sonra ilgili dosyanın üzerine sağ tıklayıp çalıştırıyoruz.
Çalıştırdıktan sonra ilgili klasör altına backuplarımızın geldiğini görmüş oluyoruz.
Not https://sqlbackupfree.com/sql-backup-free/download/ Bu program sayesinde task oluşturma, mail gönderme, ftp alanına, nas sürücüsüne ve map edilen diske sağlıklı bir şekilde yedekleme yapabilirsiniz.
Bildiğiniz üzere Microsoft Sql Server Express versiyonlarında otomatik yedekleme özelliği bulunmamaktadır. Bununla ilgili olarak bir çok script ve farklı metotlar mevcut (Management Studio Üzerinden Yedekleme, Servisi Stop ederek veri tabanı ve log dosyasını yedekleme) ancak script bilgisi olmayan arkadaşlar için kullanımı çok basit ve kullanışlı olan
Not: Express sürümünden veritabanının Bacpac uzantılı dosya yapısını alıp başka bir sql server sürümüne restore edersem Express ortamından alınan veritanı yeni ortamdaki veritabanı özelliklerini almaktadır. Artık sql sürümündeki gibi max veritabanı boyutu 10 gb’lık gibi bir kısıt kalkmış olur.
SQL BACKUP FREE veya Sql Express sürümünde servis stop edilerek de yedekleme işlemi yapılmaktadır.
SQL Express instance üzerinde elle manuel’de çalıştırılabilir. Ama bir zamanlayıcı tanımlamak istiyorsanız .bat uzantısıyla yapılmaktadır. Başka bir makalede görüşmek dileğiyle.
“O Allah ki, yeryüzünü enine boyuna yayıp genişletti, oraya yerinden oynatılamaz dağlar yerleştirdi, nehirler akıttı ve orada her bir ürünü çifter çifter yetiştirdi. O, sürekli olarak geceyi de gündüze bürüyüp duruyor. Doğrusu bütün bunlarda, sistemli düşünebilen kimseler için nice deliller, alınacak nice dersler vardır.” Rad-3