2012-09-11 19 views
35

tôi đã cố gắng để khôi phục lại cơ sở dữ liệu bằng cách sử dụng truy vấn sau đây:Các đuôi của nhật ký cho cơ sở dữ liệu "dbname" đã không được sao lưu

ALTER DATABASE [DatabaseName] SET Single_User WITH Rollback Immediate GO 
RESTORE DATABASE DatabaseName FROM DISK = 'C:\DBName-Full Database Backup' 
ALTER DATABASE [DatabaseName] SET Multi_User GO 

nhưng thay vì khôi phục lại cơ sở dữ liệu, tôi nhận được lỗi này:

Msg 3159, Level 16, State 1, Line 2

The tail of the log for the database "DatabaseName" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log. Msg 3013, Level 16, State 1, Line 2 RESTORE DATABASE is terminating abnormally.

+0

Trong trường hợp của tôi, nó đã xảy ra khi tôi đã có một cơ sở dữ liệu có cùng tên trên cùng một Máy chủ SQL. Tôi vừa xóa db có cùng tên và chạy lệnh khôi phục. Lưu ý: Tôi đã xóa db có cùng tên vì đó là bản sao cũ của db mà tôi không cần nữa. Tuy nhiên, nếu bạn vẫn cần bản sao cũ, bạn có thể muốn sao lưu hoặc đổi tên cũ hoặc db mới. Tuy nhiên, nếu bạn không có một db có cùng tên thì hãy làm những gì thông báo lỗi được yêu cầu làm. – nam

Trả lời

76

Thông báo lỗi bạn đang nhận được cho bạn biết chính xác những gì bạn cần làm nếu bạn không quan tâm đến cơ sở dữ liệu hoặc nhật ký hiện có.

RESTORE DATABASE DAtabaseName FROM DISK = 'C:\DBName-Full Database Backup' 
WITH REPLACE 

Trong SQL Server Management Studio (Nhiệm vụ> Restore), bạn có thể thêm tùy chọn WITH REPLACE bằng cách mở trang "Options" ở phía bên trái và đánh dấu "Overwrite cơ sở dữ liệu hiện có".

+0

Đã xảy ra sự cố giao thông. Đã phải chạy USE master; ALTER DATABASE RAVEN SET RECOVERY SIMPLE; Chỉ cần nhớ chuyển nó trở lại FULL khi bạn làm xong. –

1

Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose.

Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.

Thực sự, đó là câu trả lời. Ngay tại đó, trong tin nhắn. Bạn muốn làm gì? Sao lưu đuôi như vậy là không bị mất? Thay thế nhật ký chưa được sao lưu? Cuộc gọi của bạn.

+0

kể từ khi tôi làm việc hiếm khi với SQL Server tôi sao lưu cơ sở dữ liệu bằng cách vào nhiệm vụ, sao lưu và thực hiện sao lưu, và bây giờ muốn khôi phục nó, nhưng nó không cho tôi, vì vậy tôi không biết chính xác lý do của lỗi trên, và hầu hết các diễn đàn nói rằng nó hoạt động mà không nhận được bất kỳ lỗi nào –

+2

Lỗi này cảnh báo bạn rằng nếu bạn tiếp tục với RESTRORE, bạn sẽ mất đuôi hiện tại của nhật ký. Nói cách khác, một số thao tác chưa được sao lưu.Nó cung cấp cho bạn hai tùy chọn: hoặc sao lưu đuôi hiện tại của nhật ký như vậy được lưu trữ và bạn có thể khôi phục nó ở một nơi khác hoặc sau đó * hoặc * sử dụng mệnh đề WITH REPLACE của RESTORE để hướng dẫn SQL Server mà bạn không quan tâm về các hoạt động bị mất trong đuôi hiện tại của nhật ký và chỉ cần tiếp tục và thay thế nội dung hiện tại bằng nội dung từ tệp sao lưu bạn đang khôi phục. –

2

Hoặc, bạn có thể thay đổi mô hình khôi phục cơ sở dữ liệu thành "Đơn giản" thay vì "Đầy đủ".

Nhấp chuột phải vào cơ sở dữ liệu, chọn 'thuộc tính', 'tùy chọn', thay đổi "mô hình khôi phục" thành "đơn giản".

Sau đó, nội dung bạn đã viết sẽ hoạt động mà không bị lỗi.

21

Đối với những người đang sử dụng Management Studio này nên làm việc:

enter image description here

+0

về cơ bản, nó chỉ thêm từ khóa [thay thế] vào danh sách [Với] nếu bạn thường tạo tập lệnh từ SSMS –

2

Ngoài ra, bạn có thể thay đổi các mô hình phục hồi cơ sở dữ liệu để Simple thay vì Full.

  1. Nhấp chuột phải vào cơ sở dữ liệu
  2. Chọn properties ->option
  3. Thay đổi recovery model để simple

Sau đó, những gì bạn đã viết nên làm việc mà không tạo ra lỗi.

Nó hoạt động tốt với tôi.

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