2010-03-12 37 views
12

Câu chuyện dài ngắn là tôi đã cố gắng nhanh chóng cập nhật một hàng trong SQL Server bằng cách sử dụng studio quản lý và chỉ cần nhập UPDATE table SET column='value' và quên phần WHERE other_column='other_value'. Đã đi ăn trưa, trở lại và có 15 email chưa đọc đang đợi tôi. Đã xảy ra khoảng một giờ trước, chờ đợi cho anh chàng cơ sở dữ liệu quay trở lại để xem khi sao lưu cuối cùng là. Tuy nhiên, không có tính năng ảo thuật nào của UNDO?SQL Server có bất kỳ loại tính năng hoàn tác ma thuật nào không?

+0

câu hỏi liên quan: http://stackoverflow.com/questions/168486/whats-your-1 -way-to-be-careful-with-a-live-database/ –

Trả lời

19

Có, đó là - đó là nhật ký giao dịch. Để khôi phục từ một cái gì đó như thế này, miễn là bạn có cơ sở dữ liệu trong mô hình khôi phục FULL, bạn chỉ cần thực hiện một bản sao lưu nhật ký giao dịch khác, và sau đó thực hiện khôi phục với tùy chọn STOPAT để báo khôi phục ngừng khôi phục tại điểm thời gian ngay trước khi bạn bắt đầu giao dịch của mình. Điều này sẽ hoàn nguyên cơ sở dữ liệu về điểm sai lầm của bạn.

Xem tại đây để biết thêm thông tin về cách sử dụng tùy chọn STOPAT - http://msdn.microsoft.com/en-us/library/ms186858(SQL.90).aspx.

Kịch bản của bạn sẽ giống như thế này ...

-- backup the existing log 
BACKUP LOG [MyDatabase] 
    TO DISK = N'\\MyServer\Share\MyDatabase.trn' 
    -- options left out for brevity 
GO 

-- restore the database first 
RESTORE DATABASE [MyDatabase] 
    FROM DISK = N'\\MyServer\Share\MyDatabase.bak' 
    WITH FILE = 1, 
    NORECOVERY, 
    NOUNLOAD, 
    STATS = 10 
GO 

/* Previous transaction logs in the chain go here... */ 

/* restore your log that you backed up after the mistake 
    took place, stopping at your point where the problem happened */ 
RESTORE LOG [MyDatabase] 
    FROM DISK = N'\\MyServer\Share\MyDatabase.trn' 
    WITH FILE = 1, 
    NORECOVERY, 
    NOUNLOAD, 
    STATS = 10, 
    STOPAT = '2010-03-12 13:00' 
GO 
+1

Nhật ký giao dịch là bạn của bạn, và bao nhiêu người trong chúng ta đang nghĩ, "Tôi ghét khi tôi làm điều này ..." – dverespey

+0

Chúng ta đã hoàn tất nó - nhưng chỉ để cho nó xảy ra ONCE. Sai lầm như thế này có nghĩa là để được học hỏi từ :) –

+0

Bài viết tuyệt vời, tôi sẽ cố gắng này trong một chút –

2

Nó được gọi là nhật ký giao dịch. Bạn có thể cuộn lại. Bạn đã cuộn hoàn toàn toàn bộ đăng nhập trở lại một thời điểm cụ thể, không chỉ là một giao dịch xấu của bạn.

1

nếu bạn sao chép lại cơ sở dữ liệu và sao lưu nhật ký giao dịch sau đó bạn có thể làm một điểm trong thời gian khôi phục đến thời điểm trước khi thực hiện báo cáo cập nhật nếu không thì không , không thực sự

0

Tôi sợ không có gì. Đây là lý do tại sao tôi luôn viết chọn xem kết quả và sau đó chuyển đổi nó để cập nhật. Ngoài ra đã học được bài học một cách khó khăn lol. Ofcourse bạn có thể khôi phục từ nhật ký giao dịch.

+0

Ý của bạn là gì? có một lý do giao dịch các bản ghi và sao lưu tồn tại – SQLMenace

+0

Tôi thêm rằng thưa ông .... Tôi có nghĩa là không có cách kỳ diệu để hoàn tác thao tác này mà không cần khôi phục từ bản sao lưu. (Anh ta nói anh ta đang chờ anh chàng DB quay trở lại.) – Raja

Các vấn đề liên quan