ฉันจะเรียกคืนระเบียนที่ถูกลบได้อย่างไร


49

ฉันลบประมาณ 2,000,000 ระเบียนจากตาราง SQL Server 2008 ระยะไกลโดยไม่ตั้งใจ เซิร์ฟเวอร์ไม่อนุญาตให้ฉันเข้าถึงไฟล์สำรองข้อมูลทางฝั่งเซิร์ฟเวอร์

มีวิธีใดที่จะเรียกคืนบันทึกเหล่านี้หรือไม่


18
เมื่อครั้งสุดท้ายที่คุณทดสอบการสำรองข้อมูลของคุณ?
Joe

20
เมื่อใดเป็นครั้งสุดท้ายที่คุณทดสอบการสำรองข้อมูลสำรองของคุณ
datagod

คำตอบ:


116

ฐานข้อมูลของคุณอยู่ในโหมดการกู้คืนเต็มหรือไม่?

  • ถ้าใช่คุณกำลังสำรองข้อมูลบันทึกธุรกรรมอยู่หรือไม่?

    • ถ้าใช่คุณมีโปรแกรมสำรองข้อมูลเช่น Quest LiteSpeed, Red Gate SQL Backup หรือ Idera SQLSafe หรือไม่?
      • ถ้าใช่ยูทิลิตี้เหล่านี้สามารถยกเลิกการลบวัตถุออกจากไฟล์สำรอง (รวมถึงบันทึกเต็มและบันทึกธุรกรรม) - แต่การอธิบายวิธีใช้สิ่งเหล่านั้นอยู่นอกเหนือขอบเขตของสิ่งที่ฉันสามารถทำได้ที่นี่ ติดต่อผู้จำหน่ายเพื่อขอคำแนะนำ
      • หากไม่มีให้กู้คืนการสำรองข้อมูลทั้งหมดและบันทึกธุรกรรมเป็นฐานข้อมูลที่มีชื่อแตกต่างกัน (อย่าเขียนทับฐานข้อมูลที่มีอยู่) คุณจะสามารถรับสำเนาของวัตถุได้ก่อนที่การลบจะเกิดขึ้น แต่คุณจะต้องใช้ส่วน stopat ของคำสั่งกู้คืนเพื่อระบุ เมื่อใดที่จะหยุดการกู้คืนคำสั่ง คุณต้องหยุดก่อนที่การลบจะเกิดขึ้น
    • ถ้าไม่ให้ไปคว้าสำเนายูทิลิตี้ตัวอ่านบันทึกข้อมูลเช่น Quest LiteSpeed ​​หรือ Apex SQL Log โปรแกรมอรรถประโยชน์เหล่านี้สามารถเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลตรวจสอบล็อกไฟล์และช่วยคุณเลิกทำธุรกรรม ฉันไม่แน่ใจว่ารุ่นสาธิตจะใช้งานได้หรือไม่
  • หากไม่มี (ไม่ใช่ในโหมดการกู้คืนเต็ม) ให้คืนค่าการสำรองข้อมูลเต็มรูปแบบล่าสุดเป็นฐานข้อมูลที่มีชื่อแตกต่างกัน (อย่าเขียนทับฐานข้อมูลที่คุณมีอยู่แล้ว) จากจุดนี้คุณจะสามารถกู้คืนระเบียนใดก็ได้ที่ออนไลน์ขณะทำการสำรองข้อมูล แต่คุณจะสูญเสียการเปลี่ยนแปลงทั้งหมดตั้งแต่นั้นมา


4
คำตอบที่ดีฉันจะเพิ่มว่าถ้าคุณมีการตรวจสอบหรือเปลี่ยนการติดตามมันมักจะง่ายที่สุดในการรับข้อมูลกลับมาจากตารางเหล่านั้นเมื่อมีเพียงตารางเดียวที่ได้รับผลกระทบ และแน่นอนถ้าคำตอบของคุณไม่ตรงกับข้อใดข้อหนึ่งหรือทั้งหมดข้างต้นหลังจากที่คุณคืนค่าระเบียนให้มากที่สุดเท่าที่จะเป็นไปได้ให้แก้ไขกระบวนการสำรองข้อมูลของคุณและอาจเป็นผู้ที่สามารถเข้าถึงข้อมูลการผลิต
HLGEM

หากคุณอยู่ในโหมดง่ายแถวอาจยังปรากฏอยู่ในบางหน้า บางทีบางคนสามารถกู้คืนได้ (ในเวลาที่สูงมากและ / หรือค่าใช้จ่ายเงิน)
usr

FYI ApexSQL Recover นอกเหนือจากการ จำกัด เวลาแล้วรุ่นการประเมินจะกู้คืนได้เพียง 1 ใน 10 แถวของแถวทั้งหมดที่มีอยู่สำหรับการกู้คืน ( apexsql.com/faqs/faqs_recover.aspx )
Sameer

30

SQL Server เก็บบันทึกสำหรับแต่ละระเบียนที่ถูกลบ คุณสามารถค้นหาบันทึกเหล่านี้ผ่านfn_dblogฟังก์ชั่น 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' )   
;

แต่บันทึกนี้อยู่ในรูปแบบ Hex และคุณต้องแปลงรูปแบบ Hex นี้เป็นข้อมูลจริงของคุณ

บทความด้านล่างจะช่วยคุณกู้คืนระเบียนที่ถูกลบตามวิธีที่กำหนดไว้ข้างต้น:

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


3
นี่มันเท่ห์ดี วิธีการนี้ใช้งานได้ภายใต้เงื่อนไขใด (หรือไม่ทำงาน)
Nick Chammas

3
@NickChammas - มันสามารถกู้คืนสิ่งที่อยู่ในบันทึกที่ใช้งานอยู่เท่านั้นสำหรับแบบจำลองการกู้คืนอย่างง่ายจุดตรวจต้องไม่เกิดขึ้น นอกจากนี้ในปัจจุบันดูเหมือนว่าจะไม่ทำงานอย่างถูกต้องในฐานข้อมูลที่มีการแยกสแน๊ปช็อต แต่ควรแก้ไขได้ง่าย @user1059637- คุณมีทัศนคติอย่างไรกับคนที่เพิ่มฟังก์ชั่นในรหัส
Martin Smith

@MartinSmith ตอนนี้มันทำงานได้อย่างสมบูรณ์แบบด้วยการแยกสแน๊ปช็อตเช่นกัน
user1059637

22

น่าเสียดายที่เราไม่สามารถช่วยเหลือคุณได้หากไม่มีข้อมูลเพิ่มเติม แต่จากคำถามของคุณฉันเห็นว่าคุณได้ลบสิ่งที่ดูเหมือนจะเป็น 2 ล้านบันทึกจากฐานข้อมูลของคุณ เป็นไปได้ว่าคุณจะไม่สามารถกู้คืนข้อมูลนี้ได้เว้นแต่ว่าคุณจะเข้าสู่ระบบฐานข้อมูลของคุณอย่างเต็มรูปแบบและซื้อเครื่องมือเฉพาะบางอย่าง

หากคุณสามารถอธิบายรายละเอียดเพิ่มเติมได้ว่าอะไรคือสิ่งที่คุณคิดว่าทำไปแล้วและทำไมคุณถึงรู้สึกว่าคุณไม่สามารถรับข้อมูลกลับมาและสามารถอธิบายการจัดระเบียบฐานข้อมูลของคุณได้เราอาจช่วยคุณได้มากกว่านี้

คำแนะนำทั่วไป: ถ้าคุณคิดว่าคุณได้ลบ 2 ล้านระเบียนคุณอาจจะรู้สึกประหลาดใจเล็กน้อยในตอนนี้ ดังนั้นคุณควรหยุดพักห้านาทีสงบสติอารมณ์และทบทวนปัญหา นอกจากนี้คุณควรบอกหัวหน้าของคุณทันทีหากมีเหตุผล (อย่าปลุกใครสักคนตอนตีสองเพื่อบอกพวกเขา) และคุณกำลังหาทางแก้ปัญหา ดีกว่าที่จะยอมรับสิ่งที่เกิดขึ้นกว่าที่จะพยายามกู้คืนอย่างเมามันและอาจทำให้เรื่องแย่ลงและซ่อนรายละเอียด การรู้ว่าเจ้านายของคุณสามารถช่วยได้บ้างช่วยให้คุณแก้ไขปัญหาได้ อย่างที่ฉันพูดเพียงคำแนะนำทั่วไป


10
ความคิดที่ดีกับการหยุดพัก 5 นาที ใช้ได้ผลเสมอ ช่วยในการโฟกัส :-) เคยทำมาแล้ว
John aka hot2use
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.