SQL Server Express (SQLExpress) kullanıcılarının sıkça karşılaştığı en kritik görev, kısıtlı kaynaklara rağmen veritabanlarının düzenli ve otomatik olarak yedeklenmesidir. Bu rehber, SQL betiği ile görev zamanlayıcıyı (Task Scheduler) birleştirerek hatasız bir zamanlanmış yedekleme (Scheduled Backup) sistemini adım adım kurmanızı mümkün hale getirecektir.
SQL Server Express, küçük ve orta ölçekli işletmeler (KOBİ) arasında, genellikle ücretsiz lisansı ve DB boyutu kısıtlaması (genellikle 10 GB) nedeniyle yaygın olarak tercih edilmektedir fakat bu kolay erişilebilirlik, kritik verilerin düzenli yedeklenmesi ihtiyacını ortadan kaldırmaz. Manuel yedekleme süreçleri hem zaman alıcıdır hem de unutulma riski taşır. Bu nedenle, SQLCMD ve Windows Görev Zamanlayıcı kullanarak tam otomatik bir çözüm kurmak esastır.
Otomasyonun kalbi, hangi veritabanlarının ne zaman ve nereye yedekleneceğini belirten T-SQL komutlarıdır. Aşağıdaki betik, hem yedeklemeyi gerçekleştirir hem de eski yedeklerin otomatik olarak temizlenmesini sağlar.
Önemli Not: Betikteki parametreler kullanıcı tarafından ayarlanmalıdır. Bizim örneğimizde, yedeklerin D:\SQL-BACKUP klasöründe tutulacağını ve en eski 5 günlük yedeklerin otomatik olarak silineceğini varsayıyoruz.
sql
DECLARE @Path VARCHAR(100);DECLARE @RetentionDays INT;DECLARE @FormattedDate VARCHAR(30);DECLARE @Command VARCHAR(350);DECLARE @DeleteCutoffDate DATETIME; — >>> PARAMETRE AYARLARI <<<SET @Path = ‘D:\SQL-BACKUP’; — Yedeklerin kaydedileceği hedef klasörSET @RetentionDays = 5; — Kaç gün (5 gün) yedek tutulacak— >>> PARAMETRE AYARLARI <<< SET @FormattedDate = CONVERT(VARCHAR(16), GETDATE(), 112) + ‘_’ + REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108), ‘:’, ”);PRINT @FormattedDate + ‘ Backup Process Initiated’;PRINT ‘—————————————‘; — Tüm kullanıcı veritabanlarını yedekle (Sistem veritabanları hariç)— DB_ID() <> 2 kontrolü, Master veritabanını hariç tutarSET @Command = ‘IF DB_ID(”?”)<>2 BACKUP DATABASE [?] TO DISK = ”’ + @Path + ‘\?_BKP_’ + @FormattedDate + ‘.bak” WITH INIT, COMPRESSION’;EXEC sp_msforeachdb @Command; — Belirtilen gün sayısından eski dosyaları silSET @DeleteCutoffDate = DATEADD(day, -@RetentionDays, GETDATE());— 0: Dosya, @Path dizinindeki ‘.bak’ uzantılı dosyaları, @DeleteCutoffDate’ten önceki tarihlere sahip olanları siler.EXECUTE master.sys.xp_delete_file 0, @Path, N’bak’, @DeleteCutoffDate, 0;GO
İlave Bilgi: Yeni betikte, yedekleme işleminin daha hızlı olması ve disk alanından tasarruf edilmesi için WITH INIT komutuna ek olarak COMPRESSION parametresi eklenmiştir. Ayrıca tarih formatı, dosya adlandırmasında karışıklığı önlemek amacıyla YYYYMMDD_HHMMSS formatına çevrilmiştir.
SQL betiğini zamanlamak için, SQL Server Express’in komut satırı aracı olan SQLCMD‘yi kullanacak bir Batch dosyasına ihtiyacımız var. Bu dosyanın, SQL oturum açma bilgileriyle betiği çalıştırması gerekir.
batch
@ECHO OFFREM Güvenlik Notu: SQL Parolası doğrudan Batch dosyasında tehlikelidir.REM Mümkünse Windows Kimlik Doğrulamasını kullanın. SET LOG_PATH=D:\SQL-BACKUPSET SQL_INSTANCE_NAME=SERVER\SQLEXPRESSSET SQL_USER=saSET SQL_PASSWORD=Sifreniz ECHO [%DATE% %TIME%] Baslatiliyor… > “%LOG_PATH%\SQL_BKP_LOG_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.log” REM SQLCMD ile SQL betiğini çalıştır ve çıktıyı loglaSQLCMD -S %SQL_INSTANCE_NAME% -U %SQL_USER% -P %SQL_PASSWORD% -i backup.sql -o “%LOG_PATH%\SQL_BKP_LOG_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.log” -b IF %ERRORLEVEL% NEQ 0 ( ECHO [%DATE% %TIME%] HATA: SQLCMD islemi basarisiz oldu. >> “%LOG_PATH%\SQL_BKP_LOG_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.log”) ELSE ( ECHO [%DATE% %TIME%] Basariyla tamamlandi. >> “%LOG_PATH%\SQL_BKP_LOG_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.log”)
Önemli Değişiklik: Orijinal içerikte dosyaların c:\Windows klasörüne atılması önerilmişti. Güvenlik ve düzenlilik açısından, bu dosyaların sistem klasörü yerine özel bir yönetim klasörüne (Örn: C:\SQL_Automation) konulması daha profesyonel bir yaklaşımdır. Batch dosyasındaki tarih formatı da, Windows’un farklı bölgesel ayarlarında tutarlılık sağlamak için güncellenmiştir.
Son adım, bu komut dosyasını düzenli olarak çalıştırmaktır:
Bu adımlar tamamlandığında, sisteminiz belirlediğiniz sıklıkta otomatik yedekleme yapacak ve eski yedekleri temizleyerek D:\SQL-BACKUP klasörünüzün düzenli kalmasını mümkün hale getirir.
Veri politikasındaki amaçlarla sınırlı ve mevzuata uygun şekilde çerez konumlandırmaktayız. Detaylar için Gizlilik Politikası ve Kullanım Koşulları sayfalarımızı inceleyebilirsiniz.