SQL Server Express'te otomatik yedek nasıl alınır?
SQL Server Express ücretsizdir ama zamanlanmış görevleri çalıştıran SQL Server Agent'ı içermez. Bu yüzden yedek kendiliğinden alınmaz. Bu rehberde Express'te otomatik yedeği iki yolla kuruyoruz: Windows Görev Zamanlayıcı ile ücretsiz yöntem ve yedeği düzenli olarak test eden Yedek+.
Express'te yedek neden kendiliğinden alınmaz?
SQL Server'ın Standard ve Enterprise sürümlerinde yedekler genellikle SQL Server Agent ile zamanlanır: bakım planı kurulur, Agent her gece yedeği alır. Express sürümünde Agent yoktur. Management Studio'daki Back Up (Yedekle) penceresi çalışır, ama yalnızca siz düğmeye bastığınızda.
Express'in iki özelliği daha yedek planını etkiler:
- Veritabanı başına 10 GB sınırı. Veri dosyası bu sınıra yaklaştığında yedeğin düzenli alınıyor olması daha da önemli hâle gelir.
- Yedek sıkıştırma yoktur.
WITH COMPRESSIONseçeneği Express'te hata verir; yedek dosyası veritabanı kadar yer kaplar.
Yöntem 1: Görev Zamanlayıcı ile ücretsiz otomatik yedek
Bu yöntemde yedeği bir SQL betiği alır, betiği bir toplu iş dosyası çalıştırır, toplu iş dosyasını da Windows Görev Zamanlayıcı her gece başlatır.
1. Yedek betiğini yazın
Aşağıdaki betik, dosya adına tarih ve saat ekleyerek tam yedek alır. CHECKSUM seçeneği, yedek yazılırken sayfa bozulmalarını denetler.
C:\Yedek\yedekle.sql
DECLARE @dosya nvarchar(400) =
N'D:\Yedek\Muhasebe_' + FORMAT(SYSDATETIME(), 'yyyyMMdd_HHmm') + N'.bak';
BACKUP DATABASE [Muhasebe]
TO DISK = @dosya
WITH CHECKSUM, INIT, STATS = 10;
2. Toplu iş dosyasını hazırlayın
Toplu iş dosyası betiği sqlcmd ile çalıştırır, sonucu bir günlük dosyasına yazar ve 14 günden eski yedekleri siler. -b seçeneği, hata olduğunda işin başarısız sayılmasını sağlar.
C:\Yedek\yedekle.bat
@echo off
sqlcmd -S .\SQLEXPRESS -E -b -i "C:\Yedek\yedekle.sql" >> "C:\Yedek\yedek.log" 2>&1
forfiles /p "D:\Yedek" /m *.bak /d -14 /c "cmd /c del @path"
3. Görev Zamanlayıcı'da görevi oluşturun
- Başlat menüsünden Görev Zamanlayıcı'yı açın ve Temel Görev Oluştur'u seçin.
- Tetikleyiciyi Günlük, saati mesai dışı bir saat (örneğin 02:00) yapın.
- Eylem olarak Program başlat'ı seçin ve
C:\Yedek\yedekle.batdosyasını gösterin. - Görevin özelliklerinde Kullanıcı oturum açmış olsun ya da olmasın çalıştır seçeneğini işaretleyin.
En sık hata: 3201 "Cannot open backup device". Yedek dosyasını SQL Server kendi hizmet hesabıyla yazar, sizin hesabınızla değil. D:\Yedek klasörüne SQL Server hizmet hesabının (örneğin NT SERVICE\MSSQL$SQLEXPRESS) yazma izni yoksa yedek alınamaz. Ağ sürücüsü harfleri (Z: gibi) hizmet hesabına görünmez; ağ klasörü için \\sunucu\paylasim biçimini kullanın.
Bu yöntemin sınırları
Görev Zamanlayıcı yöntemi ücretsizdir ve çalışır. Ama yedeklemenin asıl riskli kısımlarını size bırakır:
- Hata olursa kimse bilmez. Görev başarısız olduğunda bir uyarı gelmez; günlük dosyasına bakan olmadıkça sorun aylarca fark edilmeyebilir.
- Yedek aynı sunucuda durur. Disk bozulur ya da fidye yazılımı bulaşırsa yedek de onunla birlikte gider. Başka bir yere kopyalamak için ek betik gerekir.
- Yedek test edilmez. Dosyanın var olması geri yüklenebileceğini göstermez.
RESTORE VERIFYONLYyalnızca dosyanın okunabildiğini denetler. - En fazla son yedeğe dönersiniz. Yalnız tam yedek alıyorsanız, öğleden sonra yaşanan bir sorunda gece 02:00'deki duruma dönersiniz; aradaki veri kaybolur.
Veritabanınız FULL kurtarma modelindeyse ve işlem günlüğü yedeği almıyorsanız günlük dosyası (.ldf) sürekli büyür. Ya işlem günlüğü yedeği alın (BACKUP LOG) ya da veritabanını bilinçli olarak SIMPLE modele alın.
Yöntem 2: Yedek+ ile otomatik ve test edilen yedek
Yedek+ kendi Windows hizmetiyle çalışır; SQL Server Agent'a ihtiyaç duymaz. Bu yüzden Express'te de Standard'da da aynı şekilde çalışır. Kurulum üç adımdır.
1. Sunucuyu tanıtın ve veritabanlarını seçin
Sunucu adını yazıp Windows kimliğiyle bağlanırsınız. Yedek+ veritabanlarını, boyutlarını ve kurtarma modellerini listeler; korumak istediklerinizi seçersiniz.
2. Planı kurun
Tam yedeğin, fark yedeğinin ve işlem günlüğü yedeğinin ne zaman alınacağını seçersiniz. Örnekte tam yedek her gece 02:00'de, fark yedeği öğlen 12:00'de, işlem günlüğü yedeği 15 dakikada bir alınıyor. Panel bu planla en fazla 15 dakikalık veri kaybedilebileceğini hesaplar.
3. Yedeğin gerçekten geri yüklendiğini görün
Yedek+ yedeği ayrı bir adla gerçekten geri yükler, veritabanının sorunsuz açıldığını kontrol eder ve sonucu kaydeder. Kaynak veritabanınıza dokunmaz. Express yedek sıkıştırmayı desteklemese de Yedek+ yedeği kendisi sıkıştırır.
Sık sorulan sorular
SQL Server Express'te bakım planı kurulabilir mi?
Hayır. Bakım planları SQL Server Agent ile çalışır ve Agent, Express sürümünde yoktur. Express'te yedeği zamanlamak için Windows Görev Zamanlayıcı ya da kendi zamanlayıcısı olan bir yedekleme programı gerekir.
Express'te işlem günlüğü yedeği alınabilir mi?
Evet. Veritabanı FULL kurtarma modelindeyse BACKUP LOG komutu Express'te de çalışır. İşlem günlüğü yedekleriyle tam yedekten sonraki belirli bir ana dönebilirsiniz.
Yedeği nereye almalıyım?
En az iki yere: hızlı geri dönüş için ağdaki başka bir diske ve sunucuyla aynı felaketi yaşamayacak bir yere (başka bina, kendi FTP sunucunuz ya da bulut depolama). Yalnız aynı sunucudaki bir klasör, disk arızasında ya da fidye yazılımında işe yaramaz.