Làm thế nào để tôi lấy lại một số hồ sơ đã xóa?


49

Tôi đã xóa nhầm khoảng 2.000.000 bản ghi khỏi bảng SQL Server 2008 từ xa. Máy chủ không cấp cho tôi quyền truy cập vào các tệp sao lưu ở phía máy chủ.

Có cách nào để lấy lại những hồ sơ này?


18
Lần cuối bạn kiểm tra bản sao lưu là khi nào?
Joe

20
Lần cuối cùng bạn kiểm tra RESTORE của bản sao lưu là khi nào?
datagod

Câu trả lời:


116

Là cơ sở dữ liệu của bạn trong chế độ phục hồi đầy đủ?

  • Nếu có, bạn đang thực hiện sao lưu nhật ký giao dịch?

    • Nếu có, bạn có tiện ích sao lưu như Quest LiteSpeed, Red Gate SQL Backup hay Idera SQLSafe không?
      • Nếu có, các tiện ích đó có thể phục hồi các đối tượng khỏi các tệp sao lưu (bao gồm nhật ký đầy đủ và nhật ký giao dịch) - nhưng việc giải thích cách sử dụng chúng vượt quá phạm vi của những gì tôi có thể làm ở đây. Liên hệ với nhà cung cấp để được hướng dẫn.
      • Nếu không, khôi phục lại bản ghi đầy đủ và sao lưu giao dịch dưới dạng cơ sở dữ liệu với một tên khác. (Không ghi đè cơ sở dữ liệu hiện có.) Bạn sẽ có thể nhận bản sao của đối tượng trước khi xóa, nhưng bạn sẽ cần sử dụng phần dừng của lệnh khôi phục để chỉ định Khi nào cần dừng khôi phục các lệnh. Bạn cần dừng lại trước khi xóa xảy ra.
    • Nếu không, hãy lấy một bản sao của tiện ích đọc nhật ký như Quest LiteSpeed ​​hoặc Apex SQL Log. Các tiện ích này có thể kết nối với máy chủ cơ sở dữ liệu, kiểm tra tệp nhật ký và giúp bạn hoàn tác các giao dịch. Tôi không chắc các phiên bản demo có hoạt động không, nhưng những phiên bản trả phí chắc chắn sẽ hoạt động.
  • Nếu không (không ở chế độ khôi phục hoàn toàn), hãy khôi phục bản sao lưu đầy đủ cuối cùng dưới dạng cơ sở dữ liệu với một tên khác. (Không ghi đè cơ sở dữ liệu bạn đã có.) Từ đó, bạn sẽ có thể khôi phục bất kỳ bản ghi nào đang trực tuyến tại thời điểm sao lưu, nhưng bạn sẽ mất tất cả các thay đổi kể từ đó.


4
Câu trả lời tuyệt vời, tôi sẽ nói thêm rằng nếu bạn đã kiểm tra hoặc thay đổi theo dõi thì thường dễ lấy lại dữ liệu từ các bảng đó khi chỉ có một bảng bị ảnh hưởng. Và tất nhiên, nếu câu trả lời của bạn là không đối với một số hoặc tất cả những điều trên, sau khi bạn khôi phục hồ sơ nhiều nhất có thể, thì hãy sửa quy trình sao lưu của bạn và có thể ai có quyền truy cập vào dữ liệu sản xuất.
HLGEM

Nếu bạn đang ở chế độ đơn giản, các hàng vẫn có thể xuất hiện trên một số trang. Có thể một số trong số chúng có thể được phục hồi (với thời gian rất cao và / hoặc chi phí tiền bạc).
usr

FYI. ApexSQL Khôi phục bên cạnh những hạn chế thời gian, thu hồi phiên bản đánh giá chỉ 1 trong mỗi 10 hàng tổng hàng có sẵn cho việc phục hồi ( apexsql.com/faqs/faqs_recover.aspx )
Sameer

30

SQL Server giữ nhật ký cho mỗi bản ghi bị xóa. Bạn có thể truy vấn các bản ghi này thông qua fn_dblogchức năng 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' )   
;

Nhưng nhật ký này ở định dạng Hex và bạn cần chuyển đổi định dạng Hex này thành dữ liệu thực tế của bạn.

Bài viết dưới đây sẽ giúp bạn khôi phục các hồ sơ đã xóa theo cách được xác định ở trên:

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


3
Cái này hay đấy. Trong những điều kiện nào phương pháp này hoạt động (hoặc không hoạt động)?
Nick Chammas

3
@NickChammas - Nó chỉ có thể khôi phục những gì trong nhật ký hoạt động, vì vậy đối với mô hình khôi phục đơn giản, một điểm kiểm tra không được xảy ra. Ngoài ra, hiện tại có vẻ như nó không hoạt động chính xác trong cơ sở dữ liệu với cách ly ảnh chụp nhanh nhưng đó là một sửa chữa dễ dàng. @user1059637- Thái độ của bạn với những người thêm chức năng vào mã của bạn là gì?
Martin Smith

@MartinSmith, Bây giờ nó cũng hoạt động hoàn hảo với tính năng chụp nhanh.
dùng1059637

22

Thật không may, chúng tôi sẽ không thể giúp bạn mà không có nhiều thông tin hơn. Nhưng từ câu hỏi của bạn, tôi thấy rằng bạn đã xóa 2 triệu bản ghi từ cơ sở dữ liệu của bạn. Nhiều khả năng bạn không thể khôi phục thông tin này, trừ khi bạn đăng nhập đầy đủ vào cơ sở dữ liệu của mình và bạn mua một số công cụ rất cụ thể.

Nếu bạn có thể mô tả chi tiết hơn những gì bạn nghĩ bạn đã làm và lý do tại sao bạn cảm thấy bạn không thể lấy lại hồ sơ và có thể mô tả tổ chức cơ sở dữ liệu của bạn, thì chúng tôi có thể giúp bạn thêm một chút.

Một số lời khuyên chung: nếu bạn nghĩ rằng bạn đã xóa 2 triệu hồ sơ, có lẽ bạn hơi bối rối ngay bây giờ. Vì vậy, bạn nên nghỉ ngơi năm phút, bình tĩnh và xem xét lại vấn đề. Ngoài ra, bạn nên nói với sếp của bạn ngay nếu điều đó hợp lý (đừng đánh thức ai đó lúc 2 giờ sáng để nói với họ) và rằng bạn đang nghiên cứu giải pháp. Tốt hơn là thừa nhận những gì đã xảy ra hơn là cố gắng phục hồi một cách điên cuồng và có khả năng làm cho vấn đề tồi tệ hơn và che giấu các chi tiết. Biết rằng sếp của bạn có thể giúp đỡ theo một cách nào đó, giúp bạn khắc phục vấn đề. Như tôi đã nói, chỉ là một số lời khuyên chung chung.


10
ý tưởng tốt với thời gian nghỉ 5 phút. Luôn luôn làm việc. Giúp tập trung. :-) Đã từng trải qua rồi.
John aka hot2use
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.