it-swarm.asia

Bagaimana saya mendapatkan kembali beberapa catatan yang dihapus?

Saya keliru menghapus sekitar 2.000.000 catatan dari tabel SQL Server 2008 jauh. Server tidak memberi saya akses ke file cadangan di sisi server.

Apakah ada cara untuk mendapatkan kembali catatan-catatan ini?

49
user755

Apakah basis data Anda dalam mode pemulihan penuh?

  • Jika ya, apakah Anda melakukan pencadangan log transaksi?

    • Jika ya, apakah Anda memiliki utilitas cadangan seperti Quest LiteSpeed, Red Gate SQL Backup, atau Idera SQLSafe?
      • Jika ya, utilitas tersebut dapat membatalkan penghapusan objek dari file cadangan (termasuk log lengkap dan transaksi) - tetapi menjelaskan cara menggunakan itu di luar ruang lingkup yang dapat saya lakukan di sini. Hubungi vendor untuk instruksi.
      • Jika tidak, kembalikan log cadangan dan transaksi penuh sebagai database dengan nama yang berbeda. (Jangan menimpa database yang ada.) Anda akan bisa mendapatkan salinan objek yang up-to-the-second sebelum penghapusan terjadi, tetapi Anda harus menggunakan bagian stopat dari perintah restore untuk menentukan kapan harus berhenti mengembalikan perintah. Anda harus berhenti sebelum penghapusan terjadi.
    • Jika tidak, ambil salinan utilitas pembaca log seperti Quest LiteSpeed ​​atau Apex SQL Log. Utilitas ini dapat terhubung ke server database, memeriksa file log, dan membantu Anda membatalkan transaksi. Saya tidak yakin apakah versi demo akan berfungsi, tetapi yang berbayar pasti akan berhasil.
  • Jika tidak (tidak dalam mode pemulihan penuh), pulihkan cadangan lengkap terakhir sebagai database dengan nama yang berbeda. (Jangan menimpa basis data yang sudah Anda miliki.) Dari sana, Anda dapat memulihkan catatan apa pun yang daring pada saat cadangan, tetapi sejak saat itu Anda akan kehilangan semua perubahan.

118
Brent Ozar

SQL Server menyimpan log untuk setiap catatan yang dihapus. Anda dapat meminta log ini melalui fn_dblog Fungsi SQL Server.

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' )   
;

Tetapi log ini dalam format Hex dan Anda perlu mengubah format Hex ini menjadi data aktual Anda.

Artikel di bawah ini akan membantu Anda memulihkan catatan yang dihapus dengan cara yang ditentukan di atas:

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

30
user1059637

Sayangnya, kami tidak akan dapat membantu Anda tanpa banyak informasi. Tetapi dari pertanyaan Anda, saya melihat bahwa Anda telah menghapus apa yang tampaknya 2 juta catatan dari basis data Anda. Kemungkinan besar Anda tidak dapat memulihkan informasi ini, kecuali jika Anda memiliki pendataan penuh pada database Anda dan Anda membeli beberapa alat yang sangat spesifik.

Jika Anda dapat menjelaskan secara lebih terperinci apa saja yang Anda pikir telah Anda lakukan, dan mengapa Anda merasa tidak bisa mendapatkan catatan kembali, dan dapat menggambarkan organisasi basis data Anda, maka kami mungkin dapat sedikit membantu Anda.

Beberapa saran umum: jika Anda pikir Anda telah menghapus 2 juta catatan, Anda mungkin sedikit ketakutan sekarang. Jadi, Anda harus istirahat lima menit, tenang, dan tinjau kembali masalahnya. Selain itu, Anda harus segera memberi tahu atasan Anda jika itu masuk akal (jangan bangunkan seseorang pada jam 2 pagi untuk memberi tahu mereka) dan bahwa Anda sedang mencari solusi. Lebih baik mengakui apa yang terjadi daripada dengan panik mencoba untuk pulih dan berpotensi memperburuk keadaan dan menyembunyikan detailnya. Mengetahui bahwa atasan Anda dapat membantu dalam beberapa hal, membantu Anda memperbaiki masalahnya. Seperti yang saya katakan, hanya beberapa saran umum.

22
jcolebrand