Silinen bazı kayıtları nasıl geri alabilirim?


49

Yanlışlıkla uzak bir SQL Server 2008 tablosundan 2.000.000 kayıt sildim. Sunucu bana sunucu tarafındaki yedekleme dosyalarına erişim izni vermiyor.

Bu kayıtları geri almanın bir yolu var mı?


18
En son ne zaman yedeklerini test ettin?
Joe

20
En son ne zaman yedeklerinizi geri çağırdınız?
datagod

Yanıtlar:


116

Veritabanınız tam kurtarma modunda mı?

  • Evet ise, işlem günlüğü yedeklemesi mi yapıyorsunuz?

    • Evetse, Quest LiteSpeed, Red Gate SQL Yedekleme veya Idera SQLSafe gibi bir yedekleme hizmetiniz var mı?
      • Evetse, bu yardımcı programlar nesneleri yedekleme dosyalarından silebilir (tamlar ve işlem günlükleri dahil) - ancak bunların nasıl kullanılacağını açıklayabilirim burada yapabileceklerimin kapsamı dışındadır. Talimatlar için satıcıyla irtibata geçin.
      • Hayır ise, tam yedeklemeyi geri yükleyin ve işlem günlükleri farklı bir isimle bir veritabanı olarak. (Mevcut veritabanının üzerine yazmayın.) Silme gerçekleşmeden önce nesnenin ikinci bir kopyasını alabilirsiniz, ancak belirtmek için geri yükleme komutunun stopat bölümünü kullanmanız gerekir. komutları geri yüklemek ne zaman Silme gerçekleşmeden önce durmanız gerekir.
    • Hayır ise, Quest LiteSpeed ​​veya Apex SQL Log gibi bir günlük okuyucu yardımcı programının bir kopyasını alın. Bu yardımcı programlar veritabanı sunucusuna bağlanabilir, günlük dosyasını inceleyebilir ve işlemleri geri almanıza yardımcı olabilir. Demo sürümlerinin işe yarayacağından emin değilim, ancak ücretli olanlar kesinlikle işe yarayacak.
  • Hayır ise (tam kurtarma modunda değilse), son tam yedeklemeyi farklı bir isimle veritabanı olarak geri yükleyin. (Zaten sahip olduğunuz veritabanının üzerine yazmayın.) Oradan, yedekleme sırasında çevrimiçi olan kayıtları geri yükleyebileceksiniz, ancak o zamandan bu yana yapılan tüm değişiklikleri kaybedeceksiniz.


4
Harika bir cevap, denetleme veya izlemeyi değiştirme işleminiz varsa, yalnızca bir tablo etkilendiğinde bu tablolardan verileri geri almanın en kolay olduğunu ekleyeceğim. Ve elbette, cevabınız yukarıdakilerin bir kısmına veya tümüne cevap vermiyorsa, kayıtları olabildiğince geri yükledikten sonra, yedekleme işleminizi ve muhtemelen üretim verilerine erişimi olanları düzeltin.
HLGEM

Basit moddaysanız, bazı sayfalarda satırlar hala fiziksel olarak mevcut olabilir. Belki bazıları kurtarılabilir (çok yüksek bir zamanda ve / veya para maliyetinde).
usr

Bilginize. ApexSQL zaman sınırlaması yanında Kurtar, değerlendirme sürümü (kurtarma için kullanılabilir toplam satır her 10 satır tek çıkış 1 kurtarır apexsql.com/faqs/faqs_recover.aspx )
Sameer

30

SQL Server, silinen her kayıt için günlükleri tutar. Bu günlükleri fn_dblogSQL Server işlevi aracılığıyla sorgulayabilirsiniz .

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

Ancak bu günlük Hex formatındadır ve bu Hex formatını gerçek verilerinize dönüştürmeniz gerekir.

Aşağıdaki makale, silinen kayıtları yukarıda tanımlandığı şekilde kurtarmanıza yardımcı olacaktır:

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/


3
Bu çok havalı. Bu yaklaşım hangi koşullar altında çalışır (veya işe yaramaz)?
Nick Chammas

3
@NickChammas - Yalnızca aktif kütükte bulunanları kurtarabilir, böylece basit kurtarma modeli için bir kontrol noktası olmamalıdır. Ayrıca şu anda anlık görüntü yalıtımlı veritabanlarında düzgün çalışmıyor gibi görünüyor, ancak bu kolay bir düzeltme olmalı. @user1059637- Kodunuza işlevsellik ekleyenlere karşı tavrınız nedir?
Martin Smith

@ MartinSmith, Şimdi de anlık görüntü yalıtımı ile mükemmel çalışıyor.
user1059637

22

Maalesef, daha fazla bilgi olmadan size yardımcı olamayacağız. Ancak sorunuzdan, veritabanınızdan 2 milyon kayıt gibi görünen şeyleri silmiş olduğunuzu görüyorum. Veritabanınıza tam giriş yapmadığınız ve çok özel araçlar satın almadığınız sürece, büyük olasılıkla bu bilgileri kurtaramazsınız.

Sadece ne yaptığını düşündüğünüzü ve neden kayıtları geri alamayacağınızı düşündüğünüzü ve veritabanınızın düzenini tanımlayabildiğinizi daha ayrıntılı olarak açıklayabilirseniz, size biraz daha yardımcı olabiliriz.

Bazı genel tavsiyeler: 2 milyon kaydı sildiğinizi düşünüyorsanız, şu anda muhtemelen biraz çıldırmışsınızdır. Bu yüzden beş dakikalık bir mola vermeli, sakinleşmeli ve problemi tekrar görmelisiniz. Ayrıca, patronunuza makul olup olmadığını derhal söylemelisiniz (saat 2: 00'de birine söylemeyin) ve bir çözüm üzerinde çalışıyorsunuz. Neler olduğunu kabul etmek, çılgınca toparlanmaya çalışmak ve potansiyel olarak sorunları daha da kötüleştirip ayrıntıları gizlemeye çalışmaktan daha iyidir. Patronunuzun bir şekilde yardımcı olabileceğini bilmek, sorunu çözmenize yardımcı olur. Dediğim gibi, sadece bazı genel tavsiyeler.


10
5 dakikalık mola ile iyi bir fikir. Her zaman çalışır. Odaklanmaya yardımcı olur. :-) Orada bunu yaptım.
John aka hot2use
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.