İÇİNDEKİLER
- •Veritabanınız Açılmıyor mu?
- •Buradan Başlayın: İlk On Dakika İçin Teşhis Tablosu
- •1. Adım: Veritabanının Durumunu Kesin Olarak Tespit Edin
- •Hızlı Karar Tablosu: Her Durum Ne Anlama Geliyor?
- •RECOVERY PENDING: Veri Sağlam, Etrafındaki Bir Şey Eksik
- •Sahada karşılaştığımız gerçek sebepler
- •Nasıl teşhis edip çözersiniz?
- •SUSPECT: Recovery Çalıştı ve Başarısız Oldu
- •Yedek yetmediğinde
- •RESTORING ve RECOVERING: Çoğu Zaman Sabır Meselesi
- •Asla Yapmayın: Sahada Topladığımız Gerçek Hatalar
- •Resmi Davranış, Aryasoft Saha Notları ve Bizim Önerimiz
- •Bir Daha Yaşamamak İçin
- •Aryasoft Ne Kadar Hızlı Müdahale Eder?
- •Kaynaklar (Microsoft Learn)
- •Veritabanı Şu An Kapalı mı? Kıdemli Bir DBA Devreye Girsin
Uygulamanız bağlantı hatası vermeye başlıyor, biri SQL Server Management Studio’yu açıyor ve veritabanının yanında kimsenin görmek istemediği o ifade beliriyor: RECOVERY PENDING ya da SUSPECT. Bu noktadan sonraki on dakika, asıl arızadan daha belirleyicidir. Sahada, olayın kendisinden çok panikle yapılan müdahaleler yüzünden kaybedilen veriye defalarca tanık olduk: yanlış anda yapılan restart’lar, “yer açmak için” silinen dosyalar, hatta tamamen silinip yeniden kurulan sanal makineler.
Bu rehber, doğru sırayla ne yapmanız gerektiğini anlatıyor: durumu kesin olarak tespit edin, gerçek sebebi bulun, en az zarar veren çözümü seçin. Ve ne kadar acil hissettirirse hissettirsin, asla yapmamanız gerekenleri de.
Kısa cevap
RECOVERY PENDING durumundaki bir SQL Server veritabanı genellikle hasarlı değildir: SQL Server recovery’yi başlatırken eksik dosya, yanlış yol, izin ya da dolu disk gibi bir kaynak sorunuyla karşılaşmıştır. Önce o kaynağı düzeltin, sonra OFFLINE ve ONLINE ile yeniden deneyin. SUSPECT ise recovery’nin başarısız olduğu anlamına gelir. Önce tüm veritabanı dosyalarını kopyalayın, son sağlam backup’ı restore edin; REPAIR_ALLOW_DATA_LOSS son çare olsun.
Veritabanınız Açılmıyor mu?
Kıdemli DBA ekibimiz RECOVERY PENDING ve SUSPECT vakalarında kök nedeni bulur ve veritabanınızı en az veri kaybıyla yeniden açar.
Son doğrulama: 19 Ekim 2026. Microsoft Learn’deki veritabanı durumları, ALTER DATABASE, DBCC CHECKDB, KILL ve Accelerated Database Recovery sayfalarına karşı kontrol edildi. Microsoft’un veritabanı durumları sayfası SQL Server 2017 ve sonrasını ve Azure SQL’i kapsar; Accelerated Database Recovery SQL Server 2019 ile başlar. T-SQL örnekleri SQL Server 2025 (build 17.0.4055.5) üzerinde test edilmiştir.
Buradan Başlayın: İlk On Dakika İçin Teşhis Tablosu
Bir şeyi değiştirmeden önce sys.databases ve SQL Server error log’unda gördüğünüzü aşağıdaki satırlarla eşleştirin.
| Gördüğünüz | Büyük olasılıkla anlamı | Önce şunu yapın | Şunu yapmayın |
|---|---|---|---|
| RECOVERY PENDING, error log bir dosya adı ve “access denied” gösteriyor | SQL Server servis hesabı veri ya da log dosyalarına erişimini kaybetmiş (servis hesabı veya klasör izinleri değişmiş). | İzni geri verin, sonra ALTER DATABASE ... SET OFFLINE ve SET ONLINE çalıştırın. |
Servisi tekrar tekrar restart etmeyin. |
| RECOVERY PENDING, error log sistemin yolu bulamadığını söylüyor | Sürücü harfi, mount point ya da yol değişmiş; ya da reboot sonrası depolama farklı sırayla gelmiş. | sys.master_files.physical_name değerlerini diskle karşılaştırın ve birimi SQL Server’ın beklediği yere geri koyun. |
Veritabanını silmeyin ya da yeniden oluşturmayın. |
RECOVERY PENDING, disk dolu, log_reuse_wait_desc NOTHING değil |
Log yeniden kullanılamadı (örneğin replication durdu) ve sürücüyü doldurdu. | Diski boşaltın ya da büyütün, ardından log reuse’u tutan sebebi giderin. | Yer açmak için .ldf dosyasını silmeyin. |
| RECOVERING, error log yüzde gösteriyor | Crash recovery çalışıyor. Tasarımı gereği geçicidir. | Bekleyin ve error log’daki yüzdeyi izleyin. Burada sonlandırılacak ya da izlenecek bir session yoktur; recovery’nin kendi kendine bitmesi gerekir. | “Hızlansın” diye SQL Server’ı restart etmeyin. |
| RESTORING | Bir restore dizisi recovery ile bitirilmemiş ya da bu bir log shipping veya standby hedefi. | Önce log shipping secondary’si olup olmadığını kontrol edin. Değilse ve tüm backup’lar uygulandıysa RESTORE DATABASE ... WITH RECOVERY çalıştırın. |
Log shipping secondary’sinde WITH RECOVERY çalıştırmayın. |
| SUSPECT | Recovery başarısız oldu. En azından primary filegroup suspect durumda ve hasarlı olabilir. | Tüm veritabanı dosyalarını kopyalayın, sonra son sağlam backup’ı bulup restore edin. | Restore etmeden repair çalıştırmayın, veritabanını detach etmeyin. |
| EMERGENCY | Biri elle ayarlamış. Read-only, logging kapalı, yalnızca sysadmin erişimi. | Son backup’tan sonra değişen kritik veriyi dışarı alın. | Normal çalışan bir veritabanı gibi görmeyin. |
1. Adım: Veritabanının Durumunu Kesin Olarak Tespit Edin
Object Explorer’daki simgeye güvenmeyin; doğrudan SQL Server’a sorun. Aşağıdaki sorgu, veritabanının kendisi açılamıyorken bile çalışır:
SELECT name,
state_desc,
user_access_desc,
is_read_only,
recovery_model_desc,
log_reuse_wait_desc
FROM sys.databases
WHERE state_desc <> 'ONLINE'
OR name = N'VeritabaniAdi';
state_desc hangi durumda olduğunuzu söyler. log_reuse_wait_desc ise çoğu kişinin atladığı sütundur. Aşağıda göreceğiniz gibi, veritabanının bu duruma neden düştüğünü çoğu zaman bu sütun açıklar.
Hızlı Karar Tablosu: Her Durum Ne Anlama Geliyor?
| Durum | Anlamı | Risk | İlk hamle |
|---|---|---|---|
| ONLINE | Erişilebilir. Recovery’nin undo aşaması hâlâ bitiyor olabilir. | Yok | Sorun veritabanının durumunda değil, başka yere bakın. |
| OFFLINE | Biri veritabanını bilerek çevrimdışı almış. | Düşük | Açmadan önce kimin ve neden aldığını öğrenin. |
| RESTORING | Restore sürüyor ya da recovery ile tamamlanmamış. | Düşük – orta | Önce log shipping ya da standby hedefi olup olmadığını kontrol edin. |
| RECOVERING | Crash recovery çalışıyor. Doğası gereği geçicidir. | Orta (yarıda keserseniz) | İlerlemeyi error log’dan izleyin. Restart etmeyin. |
| RECOVERY PENDING | Bir kaynak sorunu yüzünden recovery başlayamadı. Verinin kendisi hasarlı değil. | Orta | Eksik kaynağı bulun: disk, dosya yolu, izin. |
| SUSPECT | Recovery başarısız oldu; en azından primary filegroup hasarlı olabilir. | Yüksek | Dosyaların kopyasını alın, ardından son sağlam yedeği bulun. |
| EMERGENCY | Bir sysadmin tarafından elle ayarlanır. Salt okunur, loglama kapalı, yalnızca sysadmin erişebilir. | Yüksek | Sadece veri kurtarmak için ya da son çare onarım yolu olarak kullanın. |
Tablodaki tanımlar Microsoft’un veritabanı durumları dokümanına dayanıyor. Bu sayfaya gelenlerin çoğunu RECOVERY PENDING ve SUSPECT getiriyor; şimdi ikisini sırayla ele alalım.
RECOVERY PENDING: Veri Sağlam, Etrafındaki Bir Şey Eksik
En çok yanlış anlaşılan ve en kolay kurtarılan durum budur. Microsoft’un tanımı açıktır: veritabanı hasarlı değildir; SQL Server recovery’yi başlatmaya çalışırken kaynakla ilgili bir hatayla karşılaşmıştır. Dosyalar eksik ya da erişilemez olabilir veya sistemin onları açmak için ihtiyaç duyduğu bir kaynak yoktur. Yapmanız gereken veritabanını “onarmak” değil, o eksik kaynağı bulmaktır.
Sahada karşılaştığımız gerçek sebepler
- Servis restart’ından sonra eksik kalan dosya izinleri. Instance çalışırken SQL Server servis hesabı değiştirilmiş ya da klasör izinleri daraltılmıştı. Hiçbir şey bozulmadı; ta ki bir sonraki restart’a kadar. O anda servis kendi data ve log dosyalarını açamaz hâle geldi.
- Replikasyonun doldurduğu disk. Replikasyon değişiklikleri iletemez olmuştu; bu yüzden transaction log yeniden kullanılamadı ve disk dolana kadar büyüdü. Sonraki açılışta recovery’yi tamamlayacak yer kalmamıştı. İpucu, yukarıdaki sorgudaki
log_reuse_wait_desc = REPLICATIONdeğeriydi. - Değiştirilen sürücü harfleri. Bir müşterimiz sunucudaki sürücü harflerini yeniden atamıştı. Veritabanı dosyalarının hepsi yerli yerindeydi; sadece SQL Server’ın kayıtlı tuttuğu yollarda değillerdi.
- Sanallaştırma katmanında değişen disk düzeni. VMware yöneticileri SQL Server sanal makinesinin sanal disk / host bus ayarlarını değiştirmiş, açılışta diskler yer değiştirmiş sürücü harfleriyle gelmişti. Data diski log diskinin yerinde, log diski de data diskinin yerindeydi.
Ortak noktaya dikkat edin: hepsinde veritabanı sağlamdı. Çözüm tek bir onarım komutu çalıştırmak değil, ortamı SQL Server’ın beklediği hâle geri getirmekti.
Nasıl teşhis edip çözersiniz?
Önce SQL Server’ın dosyaları nerede beklediğini, diskte gerçekte ne olduğuyla karşılaştırın:
SELECT type_desc,
name AS logical_name,
physical_name,
state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'VeritabaniAdi');
Sonra SQL Server’ın açılışta ne söylediğini okuyun. Error log neredeyse her zaman sorunlu dosyanın adını ve işletim sistemi hatasını (“access denied”, “the system cannot find the path specified” gibi) içerir. Error log okumaya yeniyseniz SQL Server error logları yazımız temel bilgileri veriyor.
-- Güncel error log, sadece veritabanı adını içeren mesajlar
EXEC sys.xp_readerrorlog 0, 1, N'VeritabaniAdi';
Asıl sebebi giderin: diski boşaltın ya da büyütün, sürücü harfini veya mount point’i geri getirin, servis hesabına klasör erişimi verin. Ardından SQL Server’ın recovery’yi yeniden denemesine izin verin:
ALTER DATABASE [VeritabaniAdi] SET OFFLINE;
ALTER DATABASE [VeritabaniAdi] SET ONLINE;
Uyarı
Sebep tüm instance’ı etkilediyse (örneğin açılışta geç bağlanan bir disk), depolama sağlıklı hâle geldikten sonra SQL Server servisini bir kez yeniden başlatmak da uygundur. Uygun olmayan şey, sebebi bulmadan önce tekrar tekrar restart etmektir; bu sadece error log’u kirletir.
SUSPECT: Recovery Çalıştı ve Başarısız Oldu
SUSPECT, SQL Server’ın veritabanını kurtarmayı denediği ama başaramadığı anlamına gelir; en azından primary filegroup hasarlı olabilir. Verinizi koruyan şey burada işlemleri doğru sırayla yapmaktır.
- Durun ve dosyaları kopyalayın. Herhangi bir onarım denemesinden önce veritabanına ait tüm dosyaların fiziksel kopyasını alın:
.mdf,.ndf,.ldf, full-text kataloglar ve FILESTREAM klasörleri. Microsoft bunu onarımın ön koşulu olarak sayar; sonraki bütün seçenekleri açık tutan da budur. - Son sağlam yedeği bulun. Vakaların büyük çoğunluğunda doğru cevap yedekten dönmektir ve en hızlısı da odur. Adım adım SQL Server restore işlemi yazımız full, differential ve log restore’u anlatıyor.
- EMERGENCY modunu “düzeltmek” için değil, veri kurtarmak için kullanın. Bir sysadmin veritabanını
EMERGENCYmoduna alabilir; veritabanı yalnızca sysadmin’ler için salt okunur hâle gelir. Son yedekten sonra değişen kritik tabloları dışarı almak için işe yarar. REPAIR_ALLOW_DATA_LOSSseçeneğini en son çare olarak görün. Microsoft’un DBCC CHECKDB dokümanına göre bu seçenek, sağlam bir yedekten dönmekten daha fazla veri kaybettirebilir. Transaction log’u yeniden oluşturduğunda tam ACID garantisi kalmaz ve sonrasında kısıtlarıDBCC CHECKCONSTRAINTSile doğrulamanız gerekir.
Yedek yetmediğinde
Bazen yedek vardır ama ihtiyacınız olan her şeyi içermez. Bir müşterimizin yedeklerinde full-text index’ler yoktu ve bunları sıfırdan oluşturmak kesinti süresine sığmıyordu. Ekibimiz hasarlı veritabanını onarmak yerine aynı dosya düzenine sahip geçici bir veritabanı oluşturdu, dosyalarını orijinal data dosyalarıyla değiştirdi ve veritabanını kontrollü bir şekilde ayağa kaldırdı. Böylece düz bir restore’un kaybettireceği full-text yapıları da kurtarıldı.
Bu yöntem, ekip her aşamada hangi adımın güvenli olduğunu bildiği için işe yaradı. Aynı teknik deneyimsiz ellerde denendiğinde, kurtarılabilir bir veritabanını kurtarılamaz hâle getirebilir. Bu vakanın tamamını ayrı bir başarı hikâyesi olarak yayınlayacağız.
RESTORING ve RECOVERING: Çoğu Zaman Sabır Meselesi
RESTORING çoğunlukla bir restore sırasının başlatıldığını ama WITH RECOVERY ile bitirilmediğini gösterir. Tek seferlik bir restore yapıyorsanız ve gereken tüm yedekler uygulandıysa işlemi tamamlayın:
RESTORE DATABASE [VeritabaniAdi] WITH RECOVERY;
Not
Önemli bir istisna var: log shipping’in ikincil sunucusunda RESTORING normal durumdur. Orada WITH RECOVERY çalıştırmak kopyayı açar ama yeni log yedeklerini kabul etme yeteneğini sonlandırır; log shipping’i baştan kurmanız gerekir.
RECOVERING, SQL Server’ın bir restart ya da failover sonrasında işlemleri yeniden uyguladığı ve geri aldığı anlamına gelir. Error log ilerlemeyi aşama ve yüzde olarak bildirir (“Recovery of database … is 42% complete”). Büyük ya da uzun süre açık kalmış transaction’lar bu aşamayı yavaşlatır. SQL Server 2019 ve sonrasında Accelerated Database Recovery bu süreyi ciddi ölçüde kısaltabilir; ihtiyaç duymadan önce açmaya değer.
Asla Yapmayın: Sahada Topladığımız Gerçek Hatalar
Bu listedeki her madde, bir olayı bizzat daha da kötüleştirdiğini gördüğümüz bir şey:
- Uzun süren bir transaction’ı kill ettikten sonra restart etmek. Büyük bir transaction’ı kill etmek rollback’i başlatır. Servisi yeniden başlatmak bu işi atlatmaz: veritabanı açılmadan önce recovery’nin rollback’i bitirmesi gerekir ve artık her şey onu bekler. İlerlemeyi
KILL <session_id> WITH STATUSONLYile izleyin ve bitmesine izin verin. - Senkronize olmaya çalışan bir replikayı restart etmek. Bir sistem yöneticisi, replikasyon ortamında senkronizasyonu süren bir node’u yeniden başlattı ve saatlerce süren ilerleme sıfıra döndü.
- SQL Server sanal makinesini silmek. Evet, gerçekten; hem de birden fazla kez. “Yeniden kurarız” demek, kurtarma için gereken dosyaların ta kendisini yok eder.
- Yer açmak için
.ldfdosyasını silmek. Log dosyası geçici bir dosya değildir. O olmadan, rahatlıkla kurtarılabilecek bir veritabanı doğrudan SUSPECT’e düşebilir. - Hasarlı veritabanını “temiz attach etmek” için detach etmek. Attach için başarılı bir recovery gerekir; zaten başarısız olan da tam olarak budur. Attach edemediğiniz bir veritabanıyla çalışmak, SQL Server’ın hâlâ tanıdığı bir veritabanıyla çalışmaktan çok daha zordur.
- Tam anlamadığınız ayarları değiştirmek. Bir müşterimiz
FILLFACTORdeğerini “tamamen doldur” anlamına geldiğini düşünerek 1 yapmıştı. Oysa bu, her sayfanın yaklaşık %1 dolu bırakılması demek. Index’ler kat kat büyüdü; kontrolsüz dosya büyümesi de dolu bir diskin ve RECOVERY PENDING’e düşen bir veritabanının tam olarak başladığı yerdir. - Restore yerine önce onarım yapmak. Sağlam bir yedeğiniz varsa ondan dönün. Onarım, hiçbir yedeğin işe yaramadığı durumlar içindir.
- Bir forumdan ya da yapay zekâ sohbetinden komut yapıştırmak. Öneri başka birinin ortamı için doğru olabilir. Ama sizin yedeklerinizi, topolojinizi ve neyin risk altında olduğunu bilmez.
Resmi Davranış, Aryasoft Saha Notları ve Bizim Önerimiz
Üç şeyi bilerek ayırıyoruz: Microsoft’un belgelediği, gerçek vakalarda gördüğümüz ve tavsiye ettiğimiz. Bunlara farklı ağırlıkla bakın.
| Konu | Resmi davranış (Microsoft) | Aryasoft saha notu | Bizim önerimiz |
|---|---|---|---|
| RECOVERY PENDING | Recovery sırasında kaynakla ilgili bir hata oluştu. Veritabanı hasarlı değildir, ancak dosyalar eksik olabilir ya da sistem kaynak sınırları başlatmayı engelliyor olabilir. Kullanıcının müdahalesi gerekir. | Yukarıda anlattığımız her vakada (izinler, dolu disk, sürücü harfleri, yer değiştiren sanal diskler) veritabanı sağlamdı. | Eksik kaynağı bulup düzeltin. Repair komutu çalıştırmayın. |
| SUSPECT | En azından primary filegroup suspect durumda ve hasarlı olabilir. Veritabanı başlangıçta recover edilemez. | Backup bazen ihtiyacınız olan bir şeyi içermez (örneğin full-text index’ler); dosya seviyesinde dikkatli çalışma işte o zaman önem kazanır. | Önce tüm dosyaları kopyalayın, sonra son sağlam backup’ı restore edin. |
| REPAIR_ALLOW_DATA_LOSS | Acil durum için son çare seçeneğidir. Sağlam bir backup’tan restore etmekten daha fazla veri kaybettirebilir, log yeniden oluşturulduktan sonra tam ACID garantisi yoktur ve repair’den önce veritabanı dosyalarının fiziksel kopyalarını almanız gerekir. | Restore etmeden repair çalıştırmak, vakaları kötüleştiren hatalar listemizde yer alır. | Önce restore edin. Repair şartsa kopyalar üzerinde yapın, sonra DBCC CHECKCONSTRAINTS çalıştırıp backup alın. |
| EMERGENCY | READ_ONLY, logging kapalı, yalnızca sysadmin, öncelikle sorun giderme içindir. Microsoft, repair’den önce kritik veriyi çıkarmak için düşünülmesini önerir. | Ayrı bir saha notu yok. | Veritabanını “düzeltmek” için değil, veriyi kurtarmak için kullanın. |
| Rollback sırasında restart | KILL ... WITH STATUSONLY yalnızca rollback ilerlemesini raporlar; session’ı sonlandırmaz ya da geri almaz. |
Uzun bir transaction öldürüldükten sonra ya da replica yetişirken yapılan restart’lar vakaları uzattı. | İlerlemeyi kontrol edin ve rollback’in bitmesine izin verin. |
Bir Daha Yaşamamak İçin
- DBCC CHECKDB‘yi düzenli çalıştırın; bozulmayı kullanıcılarınız değil, zamanlanmış bir job bulsun.
- Yedeklerinizi gerçekten restore ederek test edin. “Başarılı” biten bir backup job’ı yalnızca bir dosyanın yazıldığını kanıtlar.
- Boş disk alanını ve
log_reuse_wait_descdeğerini izleyin, özellikle replike edilen veritabanlarında. - Altyapı ekibinizle anlaşın: SQL Server sunucularında depolama, sürücü harfi ve servis hesabı değişiklikleri önce DBA’den geçsin.
- Hasarlı sayfaların nereden geldiğini anlamak için SQL Server bozulması yazımıza göz atın.
Disiplinli bir kurtarmanın gerçek örneği için, hatalı bir restore sonrasında 1 dakikalık RPO ile nasıl kurtarma yaptığımızı okuyabilirsiniz.
Aryasoft Ne Kadar Hızlı Müdahale Eder?
Canlı ortamdaki bir veritabanı kapalıyken müdahale süresi çözümün bir parçasıdır. SLA hizmeti alan müşterilerimizin olayına mesai saatleri içinde 30 dakika, mesai saatleri dışında 2 saat içinde bir DBA müdahale eder. Bakım destek müşterilerimize ise mesai saatleri içinde 2 saat, mesai saatleri dışında 4 saat içinde müdahale ediyoruz.
sys.databases içindeki state_desc sütununu sorgulayın ya da DATABASEPROPERTYEX ile Status özelliğini okuyun. Veritabanının kendisini açamasanız bile bu çalışır.İlgili Yazılar
- SQL Server Restore Rehberi: SSMS ve T-SQL ile Veritabanı Geri Yükleme
- SQL Server Veritabanı Bozulması (Corruption): Nedenleri, Belirtileri ve Veri Kaybetmeden Kurtarma
- SQL Server’da DBCC CHECKDB: Neyi Kontrol Eder, Ne Sıklıkla Çalıştırılmalı, Hata Bulursa Ne Yapmalı?
- SQL Server Health Check: Neleri Kapsamalı? 12 Başlıklık Kontrol Listesi
- Yönetilen Veritabanı Hizmetleri
Kaynaklar (Microsoft Learn)
Bu rehberdeki teknik iddialar 19 Ekim 2026 tarihinde aşağıdaki birincil kaynaklara karşı kontrol edildi. Microsoft dokümantasyonu her an değişebilir; üretimde değişiklik yapmadan önce sürüme özel ayrıntıları yeniden doğrulayın.
- Database states (İngilizce)
- ALTER DATABASE SET options: OFFLINE, ONLINE, EMERGENCY (İngilizce)
- DBCC CHECKDB: REPAIR_ALLOW_DATA_LOSS, emergency mode, CHECKCONSTRAINTS (İngilizce)
- KILL: WITH STATUSONLY (İngilizce)
- sys.databases: log_reuse_wait_desc (İngilizce)
- Accelerated database recovery (İngilizce)
SQL Server Acil Destek
Veritabanı Şu An Kapalı mı? Kıdemli Bir DBA Devreye Girsin
Üretimdeki bir veritabanı RECOVERY PENDING ya da SUSPECT’te takıldıysa, geri dönüşü olmayan bir şey olmadan önce yeni değişiklikler yapmayı bırakın ve kıdemli bir DBA’yi devreye alın. Aryasoft’un acil müdahale ve yönetilen DBA hizmeti; kök neden analizini, güvenli kurtarmayı ve aynı sorunun ikinci kez yaşanmasını önleyen izlemeyi kapsar.