SQL Server Msg 3201 — Yedek Neden Yazamıyor?
3201 hatasında işletim sistemi hata kodlarını okuma, servis hesabının NTFS yetkisi, UNC yolu zorunluluğu ve yedek alanı planlaması.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
Msg 3201, Level 16, State 1, Line 1
Cannot open backup device 'D:Backupapp_full.bak'.
Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.Mesajın ilk cümlesi standarttır; teşhisin tamamı işletim sistemi hata kodunda (Operating system error) gizlidir:
- •Error 5 — Access is denied: SQL Server servis hesabının hedef klasör üzerinde NTFS yazma izni yoktur. En yaygın kök nedendir.
- •Error 3 — The system cannot find the path specified: Belirtilen klasör yolu mevcut değildir. SQL Server kendiliğinden yeni klasör oluşturmaz.
- •Error 112 — There is not enough space on the disk: Hedef disk biriminde yeterli boş alan kalmamıştır.
- •Error 32 — The process cannot access the file because it is being used by another process: Dosya başka bir süreç tarafından kilitlenmiştir: Antivirüs gerçek zamanlı dosya taraması, üçüncü parti yedekleme ajanı veya çakışan başka bir SQL Server yedek oturumu.
3201 dosyanın açılamadığını (izin veya yol sorunu), 3202 ise dosya açıldıktan sonra yazma işleminin başarısız olduğunu (genellikle disk doluluğu veya donanım I/O hatası) ifade eder.▸En Sık Yapılan Hata: Kendi Kullanıcı Hesabınızla Test Etmek
Bir DBA olarak uzak masaüstünden (RDP) sunucuya bağlanıp D:Backup klasörüne Windows Explorer ile dosya kopyalayabiliyorsanız, SQL Server'ın da yazabileceğini varsaymak yanıltıcıdır. BACKUP DATABASE komutu sizin Windows oturumunuzla değil, SQL Server Windows Servis Hesabıyla (Service Account) yürütülür!
Servis hesabının gerçekte kim olduğunu hemen sorgulayın:
SELECT servicename, startup_type_desc, status_desc, service_account
FROM sys.dm_server_services;Çıktıda NT ServiceMSSQLSERVER, NT AUTHORITYSYSTEM veya özel bir Active Directory etki alanı hesabı (DOMAINsqlservice) görürsünüz. Hedef klasöre NTFS Modify yetkisini bu hesaba vermeniz gerekir.
▸Adım Adım Kalıcı Çözüm
1. Dosya Yolunu ve Klasör Varlığını Doğrulayın
Eğer işletim sistemi hatası (3) ise hedef dizin mevcut değildir:
BACKUP DATABASE app TO DISK = 'D:Backupapp_full.bak'
WITH COPY_ONLY, CHECKSUM;2. Servis Hesabına NTFS İzni Tanımlayın
Hedef klasörün özelliklerinden SQL Server servis hesabına Modify (Değiştirme) yetkisi verin. Full Control vermek güvenlik prensiplerine aykırıdır; Modify yetkisi dosya oluşturma, yazma ve silme için fazlasıyla yeterlidir.
3. Ağ Paylaşımlarında Eşlenmiş Sürücü Harfi (Z:) Kullanmayın!
Windows'ta eşlenmiş ağ sürücüleri (Z:Backup) oturum bazlıdır; SQL Server arka plan servis oturumunda bu sürücü harfleri görünmez. Ağ paylaşımlarına yedek alırken her zaman UNC yolu kullanın:
BACKUP DATABASE app TO DISK = '\\depolama-nas\sql_backups\app_full.bak'
WITH COPY_ONLY, COMPRESSION, CHECKSUM;Ağ paylaşımında hem Paylaşım (Share) İzinleri hem de NTFS İzinleri katmanında servis hesabına yazma hakkı verilmelidir.
4. Kilitli Dosyaları İnceleyin (Error 32)
Çakışan bir yedekleme sürecinin aktif olup olmadığını sorgulayın:
SELECT r.session_id, r.command, r.start_time, r.percent_complete,
t.text AS calisan_sorgu
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.command LIKE '%BACKUP%' OR r.command LIKE '%RESTORE%';Ayrıca antivirüs yazılımlarının kurumsal veritabanı sunucularında .bak ve .trn uzantılarını tarama dışı (exclusion) bıraktığından emin olun.
▸Yedek Alındı ≠ Yedek Çalışıyor!
Yedek dosyasının diske başarıyla yazılması işlemin bittiği anlamına gelmez. Sayfa sağlama toplamı (checksum) doğrulamasını mutlaka çalıştırın:
RESTORE VERIFYONLY FROM DISK = 'D:Backupapp_full.bak' WITH CHECKSUM;Bu komut veriyi geri yüklemez; ancak yedeğin başlık bilgilerini ve veri sayfalarının bütünlüğünü doğrular.
▸İlgili Hata Rehberleri & Hub Bağlantıları
- •SQL Server Transaction Log Full 9002 (H-12) — Log doluluğu ve kesme sorunları
- •SQL Server Filegroup Full (H-29) — Veri dosyası disk tükenmesi
- •SQL Server Hub — Kurumsal yedekleme mimarisi ve felaket kurtarma runbook'ları
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
SQL Server Error 18456: State Kodlarına Göre Gerçek Neden
18456 hatasında State numarası gerçek nedeni söyler. State 5, 8, 11, 18, 38 ve 40 için ayrı çözümler, ERRORLOG okuma komutları.
SQL Server Error 1205 Deadlock: Grafiği Bulma ve Önleme
SQL Server 1205 hatasında deadlock grafiğini system_health oturumundan çıkarma, kurban seçimini anlama ve kalıcı önleme yöntemleri.
SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü
"Timeout expired prior to obtaining a connection from the pool" hatasının komut zaman aşımından farkı, sızıntı tespiti ve .NET tarafında kalıcı düzeltme.