2010-03-01 30 views

Trả lời

78

nếu bạn chưa thực hiện một bản sao lưu, bạn được khá nhiều fudged.

+3

Vì vậy, không có cách nào để lùi lại mà .... Rất tiếc tôi đã làm nó sai .. Tôi nên sử dụng truy vấn chọn để liệt kê những gì tôi cần xóa trước khi thực hiện truy vấn .. Bài học hay nên thận trọng hơn – Vijay

+3

thật đáng buồn. và có, bạn nên xác minh bằng cách chọn trước khi sử dụng xóa hoặc cập nhật. –

+5

Đây là một trong những sai sót của cơ sở dữ liệu tiêu chuẩn: Họ không có lịch sử, chỉ là một bộ nhớ lớn của "bây giờ". –

22

Nếu bạn chưa thực hiện giao dịch, hãy thử rollback. Nếu bạn đã cam kết giao dịch (bằng cách commit hoặc bằng cách thoát khỏi ứng dụng dòng lệnh), bạn phải khôi phục dữ liệu từ bản sao lưu cuối cùng của mình.

+0

cách gọi rollback tôi chưa thoát khỏi ứng dụng dòng lệnh .. – Vijay

+0

theo mặc định, trình khách dòng lệnh sử dụng tự động cam kết sau mỗi lệnh. – stmax

+0

@Vijay: Chỉ cần nhập "rollback"; + ENTER –

8

Một "rollback" chỉ hoạt động nếu bạn sử dụng transactions. Bằng cách đó bạn có thể nhóm các truy vấn lại với nhau và hoàn tác tất cả các truy vấn nếu chỉ một trong số chúng không thành công.

Nhưng nếu bạn đã cam kết giao dịch (hoặc sử dụng truy vấn DELETE thông thường), cách duy nhất để lấy lại dữ liệu của bạn là khôi phục dữ liệu từ bản sao lưu được tạo trước đó.

0

Rollback bình thường sẽ không hoạt động trên chức năng xóa này và chắc chắn bản sao lưu chỉ có thể giúp bạn tiết kiệm. Nếu không có sao lưu sau đó không có cách nào để khôi phục lại nó như là xóa truy vấn chạy trên putty, derby bằng cách sử dụng tập tin .sql được tự động cam kết một khi bạn cháy truy vấn xóa.

3

Câu trả lời được chấp nhận không phải lúc nào cũng chính xác. Nếu bạn cấu hình đăng nhập nhị phân trên mysql, bạn có thể khôi phục cơ sở dữ liệu đến bất kỳ điểm nào trước đó mà bạn vẫn có ảnh chụp nhanh và binlog. http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html là điểm khởi đầu tốt cho việc học về cơ sở này.

+0

Tôi nghi ngờ. nếu đăng nhập nhị phân được kích hoạt, tôi nghĩ rằng nó sẽ có cơ sở dữ liệu bao gồm dưới một máy chủ mysql. Vì vậy, những điều chúng ta phải xem xét, 1. nếu chúng tôi sử dụng tùy chọn này để khôi phục cho một db, chúng tôi sẽ khôi phục cho tất cả 2. Và tôi đã đúng, mặc dù chúng tôi sử dụng nhật ký nhị phân để khôi phục điểm trong thời gian , nó giúp khi chúng ta có một bản sao lưu của máy chủ/db để bắt đầu quá trình khôi phục .. – Vijay

0

Nếu bạn muốn dữ liệu rollback trước hết, bạn cần thực thi autocommit = 0 và sau đó thực hiện truy vấn xóa, chèn hoặc cập nhật. Sau khi thực hiện truy vấn, hãy thực hiện khôi phục ....

2

sử dụng BEGIN TRANSACTION lệnh trước khi bắt đầu truy vấn. Để bạn có thể ROLLBACK mọi thứ tại bất kỳ thời điểm nào.

VÍ DỤ:

  1. bắt đầu giao dịch
  2. select * from Student
  3. xóa từ Student nơi Id = 2
  4. select * from Student
  5. rollback
  6. select * from Student
0

tôi cũng đã xóa một số giá trị từ cơ sở dữ liệu phát triển của mình, nhưng tôi có cùng một bản sao trong cơ sở dữ liệu QA, vì vậy tôi đã tạo một tập lệnh tạo và tùy chọn được chọn "kiểu dữ liệu thành tập lệnh" thành "chỉ dữ liệu" và chọn bảng của tôi tôi đã nhận được các câu lệnh chèn với cùng một dữ liệu và sau đó tôi chạy tập lệnh trên cơ sở dữ liệu phát triển của mình.

0

Trong oracle đây sẽ là một vấn đề không

SQL> delete from Employee where id = '01'; 

1 row deleted. 

SQL> select id, last_name from Employee where id = '01'; 

no rows selected 

SQL> rollback; 

Rollback complete. 

SQL> select * from Employee where id = '01'; 

ID FIRST_NAME LAST_NAME START_DAT END_DATE  SALARY CITY  DESCRIPTION 
---- ---------- ---------- --------- --------- ---------- ---------- --------------- 
01 Jason  Martin  25-JUL-96 25-JUL-06 1234.56 Toronto Programmer 
+0

Bạn có thể làm tương tự trong bất kỳ cơ sở dữ liệu SQL nào hỗ trợ các giao dịch. Nó không rõ ràng từ câu hỏi của OP, nhưng tôi cho rằng họ đã cam kết giao dịch, và đã quá muộn để quay trở lại. –

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