Làm cách nào để khôi phục truy vấn UPDATE trong SQL Server 2005?Làm cách nào để khôi phục truy vấn UPDATE trong SQL Server 2005?
Tôi cần thực hiện việc này trong SQL, không phải thông qua mã.
Làm cách nào để khôi phục truy vấn UPDATE trong SQL Server 2005?Làm cách nào để khôi phục truy vấn UPDATE trong SQL Server 2005?
Tôi cần thực hiện việc này trong SQL, không phải thông qua mã.
Bạn có thể khôi phục các câu lệnh bạn đã thực hiện trong giao dịch. Thay vì cam kết giao dịch, hãy quay lại giao dịch.
Nếu bạn đã cập nhật một cái gì đó và muốn rollback những bản cập nhật, và bạn đã không làm được điều này bên trong một giao dịch (không-chưa-cam), sau đó tôi nghĩ rằng đó là mặc dù may mắn ...
(Manually sửa chữa hoặc, khôi phục bản sao lưu)
begin transaction
// execute SQL code here
rollback transaction
Nếu bạn đã thực hiện các truy vấn và muốn cuộn nó lại, không may thực sự lựa chọn duy nhất của bạn là để khôi phục lại một bản sao lưu cơ sở dữ liệu. Nếu bạn đang sử dụng Sao lưu toàn bộ, thì bạn sẽ có thể khôi phục cơ sở dữ liệu đến một thời điểm cụ thể.
bạn có ý nghĩa gì với Sao lưu toàn bộ, tôi có nên sao lưu cơ sở dữ liệu hàng ngày không, tôi có quen với điều này không? – stom
Sau khi cập nhật được cam kết, bạn không thể khôi phục chỉ bản cập nhật duy nhất. Đặt cược tốt nhất của bạn là quay trở lại bản sao lưu trước đó của cơ sở dữ liệu.
Từ thông tin bạn đã chỉ định, cơ hội phục hồi tốt nhất của bạn là thông qua sao lưu cơ sở dữ liệu. Tôi không nghĩ rằng bạn sẽ có thể khôi phục bất kỳ thay đổi nào mà bạn đã đẩy qua vì bạn dường như không sử dụng các giao dịch vào thời điểm đó.
Bạn cần công cụ này và bạn có thể tìm giao dịch và đảo ngược giao dịch đó.
"Ooops - chúc bạn có thể khôi phục lại câu lệnh Update mà không có mệnh đề where !? ApexSQL Log có khả năng ROLLBACK giao dịch cho cơ sở dữ liệu SQL Server." Great line! –
số điện thoại đó có vẻ tuyệt vời nhưng chi phí là 2000 đô la –
Như đã nói không có gì bạn có thể làm ngoại trừ khôi phục lại từ một bản sao lưu được. Ít nhất bây giờ bạn sẽ học cách luôn luôn bọc các câu lệnh trong một giao dịch để xem điều gì xảy ra trước khi bạn quyết định cam kết. Ngoài ra, nếu bạn không có một bản sao lưu của cơ sở dữ liệu của bạn, điều này cũng sẽ dạy bạn sao lưu thường xuyên cơ sở dữ liệu của bạn.
Mặc dù chúng tôi không trợ giúp nhiều cho vấn đề bắt chước của bạn ... hy vọng những câu trả lời này sẽ đảm bảo bạn không gặp phải vấn đề này một lần nữa trong tương lai.
Hãy thử
ROLLBACK WORK;
Nó thường làm việc
đơn giản để làm:
mã tiêu đề ...
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command Set
objMyRecordset = New ADODB.Recordset
On Error GoTo ERRORHAND
đang làm việc ...
objMyConn.ConnectionString = ConnStr
objMyConn.Open
mã ....
'Sao chép dữ liệu từ Excel'
objMyConn.BeginTrans <-- define transactions to possible be rolled back
For NewRows = 2 To Rows
objMyRecordset.AddNew
For NewColumns = 0 To Columns - 1
objMyRecordset.Fields(NewColumns).Value = ActiveSheet.Cells(NewRows, NewColumns + 1)
Next NewColumns objMyRecordset.Update Next NewRows
objMyConn.CommitTrans <- if success, commit them to DB
objMyConn.Close
ERRORHAND:
Success = False
objMyConn.RollbackTrans <-- here we roll back if error encountered somewhere
LogMessage = "ERROR writing database: " & Err.Description
...
Bạn có thể sử dụng giao dịch ngầm cho điều này
SET IMPLICIT_TRANSACTIONS ON
update Staff set staff_Name='jas' where staff_id=7
ROLLBACK
Như bạn request-- bạn có thể đặt thiết lập này (SET IMPLICIT_TRANSACTIONS ON
) từ một thủ tục lưu trữ bằng cách thiết lập rằng thủ tục lưu trữ là một quá trình khởi động.
Nhưng lệnh SET IMPLICIT TRANSACTION ON
là kết nối cụ thể. Vì vậy, bất kỳ kết nối nào khác với kết nối chạy thủ tục lưu sẵn sẽ không được hưởng lợi từ cài đặt bạn đã đặt.
trong ví dụ này, chúng tôi chạy 2 dòng chèn vào truy vấn và nếu tất cả trong số họ thực sự nó chạy nhưng nếu không có bất cứ điều gì chạy và ROLLBACK
DECLARE @rowcount int set @rowcount = 0 ;
BEGIN TRANSACTION [Tran1]
BEGIN TRY
insert into [database].[dbo].[tbl1] (fld1) values('1') ;
set @rowcount = (@rowcount + @@ROWCOUNT);
insert into [database].[dbo].[tbl2] (fld1) values('2') ;
set @rowcount = (@rowcount + @@ROWCOUNT);
IF @rowcount = 2
COMMIT TRANSACTION[Tran1]
ELSE
ROLLBACK TRANSACTION[Tran1]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION[Tran1]
END CATCH
những gì bạn có ý nghĩa với bản cập nhật? bạn có thể nhận thêm một chút về câu hỏi này không? –
tôi đã cập nhật một bảng mà là sai lầm khủng khiếp của tôi..instead của updting hàng duy nhất .. với sự bất cẩn của tôi đã cập nhật tất cả các hàng ... làm thế nào để tôi quay trở lại này .... xin vui lòng giúp ..... – Guddu
bạn cần Nhật ký ApexSQL. –