(O zamandan beri giderildi I / O hatası nedeniyle) yolsuzluktan zarar görmüş bir veritabanını kurtarmak için görevlendirildi. Ben veritabanı veya ne içeriğine aşina değilim.
Eski bir (~ 3 hafta) tam yedekleme ve bir dizi işlem günlüğü verildi ... ancak eksik işlem günlükleri var, bu yüzden sadece belirli bir tarihe kadar kurtarabilirim. 2,5 haftalık veri kaybı var (ve bu veritabanına sürekli olarak çok fazla veri ekleniyor).
Ayrıca bozuk veritabanı (erişilebilir, ancak bir sürü sayfa bozuk / eksik ile) verildi.
Tipik DBCC CHECKDB
komutları denedim ( repair_allow_data_loss
başka bir şey işe yaramazsa yine de son çare olacağım).
Birçok gelir ve veritabanına gider sonra (db 1.5 terabayt küçük bir canavar ve yaptığım her şey yavaş ve biraz zaman alır), bozuk sayfalar için bilinen son iyi yedek bir çevrimiçi sayfa geri yükleme yapmaya çalıştım.
Bunu yapmak için, çıktıdan birçok RESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'
komut oluşturan bir senaryo yaptım DBCC CHECKDB
(normalde regex ve farklı) ... şimdiye kadar iyi, bu 1000 sayfa sınırına ulaştığım bir noktaya kadar çalıştı geri yükleme komutu başına dosya başına (bu db'de 8 dosya vardır).
Bu yüzden "çevrimiçi geri yüklemeyi tamamlamamı" istiyor, ancak bunu nasıl yapacağım konusunda bir kaybım var ... Bir kuyruk günlüğüm veya başladığım tam yedeklemeden daha eksiksiz bir şeyim yok, bu yüzden Temelde sayfaların geri kalanında denemeye devam etmek için geri yüklemeyi nasıl tamamlayacağımı bilmiyorum.
Bir denedim RESTORE DATABASE <foo> WITH RECOVERY
ama bu da işe yaramadı, bana sahip olmayan bir günlük istiyor.
Buradan nasıl bir şey kurtarmaya çalışabileceğime dair herhangi bir ipucu var mı? Ya da daha fazla sayfayı kurtarmaya çalışabilmek için çevrimiçi geri yüklemeyi nasıl "tamamlayabilirim"? Çevrimdışı geri yüklemeyi denersem aynı sorunu yaşar mıyım (temelde WITH NORECOVERY
her şeye ekler ve sonunda geri getirmeyi dener miyim?)
Veritabanını elle çalışmak temel olarak geri alınamaz ... milyonlarca satır içeren yüzlerce tablo var ve bunların ne olduğunun açık bir anlamı yok. Bozuk DB SELECT
birkaç milyon satır sonra sorgularda başarısız olacak ama nerede çalışabilir emin değilim. Tüm kümelenmemiş dizinleri yeniden oluşturmayı denedim, ancak satır verileri ile bozuk sayfalar var, bu yüzden de işe yaramadı.
Bazı veri kaybı kabul edilebilir, ancak DB'de tutarlılık en azından sağlanmaya çalışılmalıdır.
Bozuk veritabanı -still- çevrimiçi ve istemciler üzerinde çalışıyor (bu yüzden yeni veri almaya devam ediyor), bu yüzden laboratuvar tezgahında yaptığım herhangi bir işlem daha sonra üretim veritabanında yeniden üretilebilir olmalıdır (kesinti bunun için zor olacak).
Bu SQL Server 2014 Enterprise
PS: Ben DBA değilim ... Ben bir programcıyım, ancak müşteri bazı "uzman" sql felaket kurtarma hizmetleri denedi ve pes ettiler, bu yüzden ona bakmak ve ben yapabilir miyim görmek istendi birşeyler yap.
Güncelleme : birçok testten sonra sayfa sayfa geri yükleme işleminin sorunsuz olduğunu düşündük, bu yüzden bu fikirden vazgeçtik. Bunun için bazı otomatik araçlar yaparak (yine yüzlerce ve yüzlerce tablo var) manuel bir kurtarma (bozuk tablolardan eksik kayıtları elle seçme ve bilinen son iyi yedeklemeye ekleme) için gidiyoruz.