2011-01-14 32 views
15

Trong SQL Server Management Studio, tôi đã thực hiện truy vấn dưới đây.
Thật không may, tôi quên bỏ ghi chú khoản WHERE.
1647 hàng đã được cập nhật thay vì 4.Làm cách nào để hoàn tác truy vấn UPDATE của SQL Server?

Làm cách nào để hoàn tác tuyên bố cuối cùng?

Thật không may, tôi vừa mới dịch xong 1647 hàng đó và đang thực hiện chỉnh sửa cuối cùng và do đó không có bản sao lưu.

UPDATE [dbo].[T_Language] 
    SET 
     [LANG_DE] = 'Mietvertrag' --<LANG_DE, varchar(255),> 
     ,[LANG_FR] = 'Contrat de bail' -- <LANG_FR, varchar(255),> 
     ,[LANG_IT] = 'Contratto di locazione' -- <LANG_IT, varchar(255),>  
     ,[LANG_EN] = 'Tenancy agreement' -- <LANG_EN, varchar(255),> 
     --WHERE [LANG_DE] like 'Mietvertrag' 

Có giao thức giao dịch, ít nhất tôi cũng hy vọng như vậy.

+0

Bạn đã bao giờ sao lưu chưa? Mô hình khôi phục của bạn được đặt là gì? –

+0

Mô hình khôi phục? ;-) –

+1

Oh cảm ơn trời, tôi có một bản sao lưu tự động từ chiều nay. –

Trả lời

9

Một giao dịch không cam kết có thể được chuyển bằng cách phát lệnh ROLLBACK

Nhưng nếu bạn đang chạy trong chế độ không có gì bạn có thể làm là ....

+3

Không đúng - Có thể khôi phục điểm trong thời gian qua nhật ký giao dịch phụ thuộc vào mô hình phục hồi của OP và liệu họ đã từng sao lưu. –

+0

OK, nhưng không phải với SQL "đơn giản", phải không? –

+0

Đồng ý, nhìn nhận xét có vẻ như OP vẫn may mắn! –

0

cam kết tự động Vì bạn có một ĐẦY ĐỦ sao lưu, bạn có thể khôi phục bản sao lưu sang máy chủ khác dưới dạng cơ sở dữ liệu có cùng tên hoặc với cùng một máy chủ với tên khác.

Sau đó, bạn chỉ có thể xem lại nội dung trước khi cập nhật và viết tập lệnh SQL để thực hiện cập nhật.

+0

Nó sẽ không cần thiết, tôi nhận ra, tôi đã thực hiện một bản cập nhật-script khoảng 2 giờ trước đây (đã không lưu nó tuy nhiên, và muốn loại bỏ nó - may mắn đã không làm như vậy.). Tôi đã cập nhật tất cả các giá trị và chỉ thực hiện 4 thay đổi kể từ (tôi nhớ), vì vậy tôi đã không mất hơn 5 phút làm việc. Chà, tôi là một gã may mắn ... –

4

Xem xét rằng bạn đã có bản sao lưu đầy đủ, tôi chỉ cần khôi phục bản sao lưu đó vào cơ sở dữ liệu riêng biệt và di chuyển dữ liệu từ đó.

Nếu dữ liệu của bạn đã thay đổi sau bản sao lưu mới nhất thì bạn khôi phục tất cả dữ liệu theo cách đó nhưng bạn có thể cố khôi phục dữ liệu đó bằng cách đọc nhật ký giao dịch.

Nếu cơ sở dữ liệu của bạn ở chế độ khôi phục đầy đủ, nhật ký giao dịch có đủ chi tiết để khôi phục các cập nhật cho dữ liệu của bạn sau bản sao lưu mới nhất.

Bạn có thể muốn thử với DBCC LOG, chức năng fn_log hoặc với người đọc log của bên thứ ba như ApexSQL Log

Đáng tiếc là không có cách nào dễ dàng để đọc nhật ký giao dịch vì MS không cung cấp tài liệu cho việc này và lưu trữ dữ liệu ở định dạng độc quyền của nó.

4

Nếu bạn đã có bản sao lưu đầy đủ từ cơ sở dữ liệu của mình, may mắn thay, bạn có tùy chọn trong SQL Management Studio. Trong trường hợp này, bạn có thể sử dụng các bước sau:

  1. Nhấp chuột phải vào cơ sở dữ liệu -> Công việc -> Khôi phục -> Cơ sở dữ liệu.

  2. Trong tab Chung, nhấp vào Dòng thời gian -> chọn Tùy chọn ngày và giờ cụ thể.

  3. Di chuyển thanh trượt thời gian sang trước thời gian lệnh cập nhật -> nhấp OK.

  4. Trong tên cơ sở dữ liệu đích, hãy nhập tên mới.

  5. Trong tab Tệp, kiểm tra Phân bổ lại tất cả các tệp vào thư mục và sau đó chọn một đường dẫn mới để lưu cơ sở dữ liệu đã phục hồi của bạn.

  6. Trong tab tùy chọn, chọn Ghi đè ... và xóa tùy chọn Kiểm tra nhật ký đuôi ...

  7. Cuối cùng, nhấp vào OK và đợi cho đến khi quá trình khôi phục kết thúc.

Tôi đã tự sử dụng phương pháp này trong cơ sở dữ liệu hoạt động và rất hữu ích.

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