Lỗi 3154 trong khi khôi phục bản sao lưu bằng cách sử dụng VỚI REPLACE


16

Tôi đã cài đặt SQL 2012 với SP1 trên máy tính của mình. Tôi đã tạo một bản sao lưu của cơ sở dữ liệu test.bak.

Tôi có một cơ sở dữ liệu với tên test2là cùng một cơ sở dữ liệu, nhưng dữ liệu đã thay đổi.

Tôi muốn khôi phục test.baktrên test2cơ sở dữ liệu.

Tôi luôn nhận được lỗi:

Lỗi 3154: Bộ sao lưu giữ bản sao lưu của cơ sở dữ liệu khác với cơ sở dữ liệu hiện có.

Tôi đã thử:

  1. Tôi thích test2 -> Restore database -> From device

    Tôi đã chọn test.bakvà kiểm tra With Replacenhưng tôi nhận được lỗi.

  2. Sau đó, tôi đã cố gắng nhấp chuột phải vào test2 -> Restore file and filegroups

    Tôi đã chọn test.bakvà kiểm tra With Replacenhưng tôi nhận được lỗi.

Tôi có thể xóa cơ sở dữ liệu cũ của mình và sau đó khôi phục bản sao lưu của mình với đúng tên, nhưng khi tôi đang sử dụng SQL 2008, tôi không gặp vấn đề gì khi khôi phục cơ sở dữ liệu hiện có.

Có vẻ như từ khi tôi sử dụng SQL2012, tôi đã gặp phải lỗi này rất nhiều!

Câu trả lời:


12

WITH REPLACENói chung, bạn nên sử dụng và tránh sử dụng các điểm nhấn và nhấp chuột trong Studio quản lý - chúng không linh hoạt và thường có lỗi.

Điều này làm việc cho tôi:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

BACKUP DATABASE test TO DISK = 'c:\temp\test.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

Ngoài ra, bạn nên đảm bảo khi bạn sao lưu cơ sở dữ liệu bạn sử dụng WITH INITvà / hoặc không trỏ thiết bị vào tệp đã chứa bản sao lưu (vì nó có thể không phải là cùng một cơ sở dữ liệu bạn đang sao lưu - đặc biệt là nếu bạn sử dụng lại tên như test...).


@AaronBertrand fyi, tính năng đó không tồn tại. Những gì tôi thường làm là sử dụng UI và script nó để đảm bảo mọi thứ đều ổn. Có rất nhiều lỗi, vâng.
usr

2

1) Sử dụng WITH REPLACEtrong khi sử dụng RESTORElệnh.

2) DROPcơ sở dữ liệu cũ bị xung đột và khôi phục lại bằng RESTORElệnh.

Không có vấn đề với phiên bản SQL Server. Như Aaron đã chỉ ra, tôi cũng có thể khôi phục cơ sở dữ liệu từ năm 2008 đến 2012 và các phiên bản tương tự.


2

Bạn đang khôi phục cơ sở dữ liệu sai. Đừng nghĩ đó là "khôi phục test2với bản sao lưu từ test", hãy nghĩ "khôi phục bản sao lưu của tôi testnhưng đổi tên thành test2". Bạn có thể chọn tác vụ khôi phục từ testvà đặt test2vào trường "Tới cơ sở dữ liệu:".

Như Aaron đề cập, hãy tìm hiểu kịch bản thay vì dựa vào thuật sĩ - nó rõ ràng hơn về những gì sẽ đi đến đâu.


2

Bạn vẫn có thể làm điều này nhưng nó đòi hỏi một bước bổ sung.

Mở hộp thoại khôi phục, thực hiện các lựa chọn thông thường của bạn theo thói quen 2008. Nếu cơ sở dữ liệu ban đầu là DB thì chọn thiết bị DB.bak cho Nguồn và thay đổi tên Đích thành DBTest. Sau đó bên dưới Chọn Trang (góc trên bên trái), nơi bạn thấy Chung / Tệp / Tùy chọn - chọn Tệp. Nhìn vào lưới điện. Bạn sẽ thấy các cột cho Tên tệp gốc và Khôi phục dưới dạng tên tệp. Tự mở rộng cái sau và nhập tên mới (nếu tên gốc của cơ sở dữ liệu là DB và bạn muốn tạo DBTest thì thay đổi .... \ DB.mdf thành ... \ DBTest.mdf, v.v.)

Điều này sẽ chấp nhận tệp .bak của bạn cho DB làm nguồn và DBTest là đích. Bạn cũng có thể cần truy cập trang Tùy chọn và chọn Thay thế. Tôi cần vì những lý do khác, vì vậy tôi không thể kiểm tra nó mà không có tùy chọn này.


2

Câu trả lời đúng, như đã chỉ ra, là sử dụng WITH REPLACEtùy chọn.

Tôi chỉ muốn chỉ ra rằng bạn có thể gặp lỗi trong câu hỏi ngay cả khi sử dụng WITH REPLACE, nếu bạn cố gắng khôi phục từ bản sao lưu vi sai (không có bản đầy đủ).


Có lẽ tôi không có đủ điểm để nhận xét tại thời điểm trả lời này, tôi chỉ muốn chỉ ra rằng bạn có thể gặp lỗi ngay cả khi sử dụng "VỚI REPLACE" nếu bạn cố gắng khôi phục từ bản sao lưu vi sai (không có đầy đủ)
Brimstedt

0

Hy vọng điều này sẽ làm việc.

  1. Khi bạn đặt đường dẫn để khôi phục tệp.
  2. Nhấp vào "Tùy chọn" ở phía bên trái.
  3. Chọn hộp kiểm - "Đóng các kết nối hiện có vào cơ sở dữ liệu đích".
  4. Nhấn OK. nhập mô tả hình ảnh ở đây

-4

Hãy dừng máy chủ đang chạy của bạn và sau đó khôi phục db, nó sẽ giúp bạn ra ngoài. :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.