Bộ sao lưu giữ một bản sao lưu của cơ sở dữ liệu khác với cơ sở dữ liệu hiện có


485

Tôi đang cố gắng khôi phục tệp sao lưu SQL Server cho cơ sở dữ liệu của mình, nhưng nó đang gây ra lỗi như sau:

Bộ sao lưu giữ một bản sao lưu của cơ sở dữ liệu khác với cơ sở dữ liệu hiện có

Cơ sở dữ liệu của tôi trong SQL Server 2008 và tệp sao lưu là vào năm 2005.

Những gì có thể là vấn đề?


95
Câu trả lời được bình chọn cao dưới đây là búa tạ để bẻ đai ốc. Vấn đề rất có thể là bạn chưa chọn tùy chọn " Ghi đè cơ sở dữ liệu hiện có (VỚI REPLACE) " trong cửa sổ Khôi phục> Tùy chọn . Tôi gặp vấn đề này từ dòng lệnh bằng cách sử dụng WITH MOVEvà đã được khắc phục bằng cách sử dụng WITH REPLACE, MOVE.
James McCormack

Tôi có cùng một lỗi với một trong các cơ sở dữ liệu của mình, nhưng chỉ khi SQL Server Agent bị tắt. Nếu tôi bật nó lên, không có lỗi và tôi có thể khôi phục mà không gặp sự cố. Tệp BAK của tôi chỉ chứa một cơ sở dữ liệu duy nhất và tên cơ sở dữ liệu đó (và tên tệp logic) là duy nhất trên máy chủ của tôi.
Nhà phát triển Web

Câu trả lời:


807

Tôi cũng đã gặp vấn đề này.

Giải pháp :

  • Đừng tạo một cơ sở dữ liệu trống và khôi phục .baktệp trên đó.
  • Sử dụng tùy chọn 'Khôi phục cơ sở dữ liệu' có thể truy cập bằng cách nhấp chuột phải vào nhánh "Cơ sở dữ liệu" của SQL Server Management Studio và cung cấp tên cơ sở dữ liệu trong khi cung cấp nguồn để khôi phục.
  • Đồng thời thay đổi tên tệp tại "Tệp" nếu cơ sở dữ liệu khác vẫn tồn tại. Nếu không, bạn nhận được "Tệp '...' không thể được ghi đè. Nó đang được sử dụng bởi cơ sở dữ liệu 'yourFirstDb'".

102
SSMS thật dễ dàng để nói với tôi điều này khi xảy ra lỗi
cja

16
+1 cho " Không tạo cơ sở dữ liệu trống và khôi phục tệp .bak trên đó " ... vâng, điều đó sẽ giải quyết nó. (Nhưng tại sao tôi không nhận được vấn đề này tất cả các thời điểm khác tôi đã làm điều tương tự Và không chúng ta chỉ bắt đầu làm điều đó trước khi tạo ra ở nơi đầu tiên như một cách giải quyết đối với một số? Khác thông báo lỗi không thể giải thích:?])
Reg Chỉnh sửa

Ai đó nên đánh dấu đây là một câu trả lời vì đó là lời khuyên tôi cần để khôi phục thành công bản sao lưu.
Doreen

2
Trong Khôi phục cơ sở dữ liệu, tôi đã đi đến Tệp, Khôi phục dưới dạng và đặt tên tệp duy nhất, vì nó vẫn có tên gốc cho dữ liệu và tệp nhật ký.
Dave Mateer

2
Đồng thời thay đổi tên tệp tại "Tệp" nếu cơ sở dữ liệu khác vẫn tồn tại. Nếu không, bạn nhận được "Tệp '...' không thể bị ghi đè. Nó đang được sử dụng bởi cơ sở dữ liệu 'yourFirstDb'".
Verena Haunschmid

175

Hoặc:

1) Sử dụng WITH REPLACEtrong khi sử dụng RESTORElệnh (nếu sử dụng GUI, nó được tìm thấy trong Tùy chọn -> Ghi đè cơ sở dữ liệu hiện có ( WITH REPLACE)).

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

Kiểm tra liên kết để biết thêm chi tiết.


1
sao chép từ liên kết và cũng cung cấp liên kết đó .. * thở dài * (thông minh)
Abhijeetchindhe

4
@Abhijeetchindhe haha ​​.. Tái sử dụng và lịch sự .. :)
Amarnath

:) Một phần mềm trung thực Bạn là ai! Dù sao, đó là câu trả lời tốt nhất cho câu hỏi này. Và bỏ phiếu cho thời gian bạn đã đưa ra để tìm thấy nó :)
Abhijeetchindhe

1
Có vấn đề tương tự như op và câu trả lời này hoạt động tốt. +1
Esteban

1
Tùy chọn VỚI REPLACE này cũng là giải pháp tôi cần. Cảm ơn!
Adam

90

Đầu tiên tạo một cơ sở dữ liệu trống cùng tên. Sau đó đi đến tùy chọn khôi phục

Trong Tùy chọn ở khung bên trái, đừng quên chọn

  • Ghi đè cơ sở dữ liệu hiện có
  • Giữ nguyên các cài đặt sao chép

nhập mô tả hình ảnh ở đây

Đó là nó


51

Đã đối mặt với cùng một vấn đề và tìm ra giải pháp bằng cách làm điều này, sử dụng SSMS 2014

- Chỉ cần chọn Tùy chọn Ghi đè cơ sở dữ liệu hiện có (CÓ THAY THẾ) 

Cơ sở dữ liệu hiện có> Nhiệm vụ> Khôi phục> Cơ sở dữ liệu


34
USE [master];
GO

CREATE DATABASE db;
GO

CREATE DATABASE db2;
GO

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

RESTORE DATABASE db2
  FROM DISK = 'c:\temp\db.bak'
  WITH REPLACE,
  MOVE 'db' TO 'c:\temp\db2.mdf',
  MOVE 'db_log' TO 'c:\temp\db2.ldf';

33

3 bước đơn giản:

1- Nhấp chuột phải vào cơ sở dữ liệu → Nhiệm vụ → khôi phục → Cơ sở dữ liệu

2- Kiểm tra Devicedưới dạng nguồn và định vị tệp .bak (hoặc nén .bak)

3- Trong khung bên trái bấm vào optionsvà:

  • kiểm tra Ghi đè cơ sở dữ liệu hiện có.
  • bỏ chọn Thực hiện sao lưu đuôi đăng nhập trước khi khôi phục
  • kiểm tra Đóng kết nối hiện có với cơ sở dữ liệu đích.

Các tùy chọn khác là thực sự tùy chọn (và tất nhiên quan trọng)!


23

Đó là vì .mdf.ldfTệp từ bản gốc Dbđã được định vị c:\programFile\....và có thể thông tin này được lưu trong Sao lưu!

Nếu bạn tạo cùng một DB trên một Máy chủ SQL khác, nơi cài đặt được bật, c:\program Files (x86)\ ....bạn không thể khôi phục như thường lệ. Bạn cần di chuyển đường dẫn cho .mdf.ldfTệp.

Vì thế:

  • Tạo một DB trống trên Máy chủ mới

  • Nhấp chuột phải vào Db trống> Nhiệm vụ> Khôi phục> Cơ sở dữ liệu> nhấp vào Thiết bị chọn .bakTệp của bạn > Chọn Db để khôi phục vào

  • nhấp vào Tệp ở bên trái> Chọn "Di chuyển tất cả tệp vào thư mục"
  • bấm Tùy chọn trên trang bên trái> bấm vào Ghi đè

Làm xong!
Hy vọng nó giúp!


16

Tôi đã gặp vấn đề tương tự ngày hôm nay. Đã thử tất cả các giải pháp trên nhưng không hiệu quả. Vì vậy, đăng giải pháp của tôi ở đây.

Đừng quên bỏ chọn Sao lưu đuôi dài trước khi khôi phục

Đừng quên bỏ chọn Sao lưu đuôi dài trước khi khôi phục

Hy vọng nó cũng giúp người khác!


Đây là những gì làm việc cho tôi. Cảm ơn!
Bill Norman

16

Nếu bạn đang sử dụng phương pháp tiếp cận tập lệnh và có lỗi liên quan đến các tệp LDF và MDF, trước tiên bạn có thể truy vấn tệp sao lưu để biết tên logic (và các chi tiết khác) của các tệp trong bộ sao lưu, sử dụng như sau:

-- Queries the backup file for the file list in backup set, where Type denotes 
-- type of file. Can be L,D,F or S
-- info: https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-filelistonly-transact-sql
RESTORE FILELISTONLY FROM DISK = 'C:\Temp\DB_backup.bak'
GO

Bạn sẽ nhận được kết quả tương tự như sau:

nhập mô tả hình ảnh ở đây

Và sau đó bạn có thể sử dụng các tên logic đó trong các truy vấn:

    -- Script assumes you want MDF and LDF files restored on separate drives. Modify for your scenario
    RESTORE DATABASE DB 
    FROM DISK='C:\Temp\DB_backup.bak'
    WITH REPLACE,
      MOVE 'DB' TO 'E:\MSSQL\Data\DB.mdf', -- "DB" is the mdf logical name from query above
      MOVE 'DB_log' TO 'F:\MSSQL\Logs\DB.ldf'; -- "DB_log" is LDF logical name from query above

Thông tin thêm RESTORE FILELISTONLY có thể được tìm thấy từ các tài liệu SQL Server .


Tôi có cùng một vấn đề trong câu hỏi và trong trường hợp của tôi, bản sao lưu Db là từ máy chủ từ xa và tôi phải tạo cùng một cấu trúc thư mục trong ổ D giống như đầu ra của truy vấn đầu tiên. Sau đó, truy vấn thứ hai hoạt động chính xác và cơ sở dữ liệu đã được khôi phục.
rinilnath

11

Ngoài ra, điều quan trọng là đảm bảo rằng, tên cơ sở dữ liệu của bạn khớp với tên cơ sở dữ liệu trong bản sao lưu mà bạn đang cố gắng khôi phục. Nếu nó không khớp, bạn sẽ gặp lỗi tương tự.


Điều này có vẻ đặc biệt đúng nếu bạn có nhiều tệp / nhóm tệp và bảng được phân đoạn
AlexC

9

Trước khi làm bất cứ điều gì khác, hãy xác nhận xem bản sao lưu của bạn là Đầy đủ hay Khác biệt. Nếu bạn đang cố gắng tạo một cơ sở dữ liệu mới từ một bản sao lưu khác biệt, bất kể bạn làm gì, bạn sẽ gặp phải lỗi.


1
Đây là vấn đề tôi đã gặp phải, vì vậy cảm ơn vì điều này !!! (Tôi không biết rằng tệp sao lưu thực sự là một bản sao lưu vi sai.). Dưới đây là cách kiểm tra: "RESTORE HeaderONLY TỪ DISK = 'C: \ myfile.bak'" Trong kết quả, BackupType của 1 = Sao lưu toàn bộ. BackupType của 5 = Sao lưu vi sai.
Wimpie Ratte

9

system.data.sqlclient.sqlerror: Bộ sao lưu giữ một bản sao lưu của cơ sở dữ liệu khác với cơ sở dữ liệu 'Dbname' hiện có

Tôi đã đi qua để tìm linh hồn

  1. Không tạo cơ sở dữ liệu có cùng tên hoặc tên cơ sở dữ liệu khác! Quan trọng.

  2. nhấp chuột phải vào cơ sở dữ liệu | Nhiệm vụ> Khôi phục> Cơ sở dữ liệu

  3. Trong "Nguồn để khôi phục", chọn "Từ thiết bị"

  4. Chọn tập tin .bak

  5. Chọn hộp kiểm cho cơ sở dữ liệu trong khung nhìn bên dưới

  6. Đến DataBase: "Tại đây Bạn có thể nhập Tên cơ sở dữ liệu mới" (Ví dụ: DemoDB)

  7. Không chọn cơ sở dữ liệu hiện có từ danh sách DropDownlist

  8. Bây giờ, nhấp vào nút Ok, nó sẽ tạo một Databse mới và khôi phục tất cả dữ liệu từ tệp .bak của bạn.

bạn có thể nhận trợ giúp từ liên kết này

Hy vọng nó sẽ giúp giải quyết vấn đề của bạn ...


1
"Không tạo cơ sở dữ liệu có cùng tên hoặc tên cơ sở dữ liệu khác! Quan trọng." Ý anh là gì?
sajid

6

Điều này luôn luôn do phiên bản không tương thích. làm theo các bước sau để giải quyết:

Bước 1: Tạo cơ sở dữ liệu với tên ưa thích của bạn. (Trong trường hợp của chúng tôi AdventureWorks)

Bước 2: Viết nhấp vào cơ sở dữ liệu và nhấp vào Nhiệm vụ >> Khôi phục >> Cơ sở dữ liệu

nhập mô tả hình ảnh ở đây

Bước 3: Trên màn hình khôi phục, đi đến lựa chọn thứ ba của Tùy chọn. Bây giờ hãy chọn hộp kiểm Ghi đè lên cơ sở dữ liệu hiện có (CÓ THAY THẾ)

nhập mô tả hình ảnh ở đây

Bước 4: Nhấn OK. Nó sẽ khôi phục thành công cơ sở dữ liệu.

Lưu ý: Khi bạn khôi phục cơ sở dữ liệu VỚI REPLACE, nó sẽ ghi đè lên cơ sở dữ liệu cũ.


Cảm ơn Alireza vì nỗ lực của bạn .. Nhưng chúng tôi đang sử dụng truy vấn thay vì GUI.
Pugal

5

Vấn đề tương tự với tôi. Giải pháp cho tôi là:

  1. Nhấp chuột phải vào cơ sở dữ liệu.
  2. Chọn tác vụ, chọn khôi phục cơ sở dữ liệu.
  3. Nhấp vào tùy chọn ở phía bên tay trái.
  4. Kiểm tra tùy chọn đầu tiên Ghi đè cơ sở dữ liệu hiện có (VỚI REPLACE).
  5. Đi đến Chung, chọn cơ sở dữ liệu nguồn và đích.
  6. Nhấp vào OK, đó là nó

3

Tôi chỉ cố gắng giải quyết vấn đề này.

Tôi đã thử mọi cách từ chạy với tư cách quản trị viên cho đến các đề xuất được tìm thấy ở đây và các nơi khác; Điều cuối cùng đã giải quyết cho tôi là kiểm tra tùy chọn "định vị lại tập tin" trong tab thuộc tính Tệp.

Hy vọng điều này sẽ giúp người khác.


3

Tôi đã phải tạo db mới trên địa phương để thử nghiệm và tôi đã sao lưu từ sản phẩm của mình. Tôi đã tạo db đầu tiên và cố gắng chạy BAK trên đầu db mới tạo ra lỗi này cho tôi. Tôi đã xóa db và khôi phục nó trong khi tìm nguồn cung cấp tên db mới trong màn hình khôi phục. Các db đã được tự động tạo khi khôi phục.


3

Một số bạn đã quá phức tạp này. Tôi thấy điều này là vô cùng đơn giản.

1) Tạo cơ sở dữ liệu có cùng tên với tên cơ sở dữ liệu tệp .bak của bạn! Quan trọng

2) nhấp chuột phải vào cơ sở dữ liệu | Nhiệm vụ> Khôi phục> Cơ sở dữ liệu

3) Trong "Nguồn để khôi phục", chọn "Từ thiết bị"

4) Chọn tệp .bak

5) Chọn hộp kiểm cho cơ sở dữ liệu trong khung nhìn bên dưới

6) Trong "Chọn trang" ở bên phải Chọn "Tùy chọn"

7) Chọn hộp kiểm có nhãn "Giữ nguyên cài đặt sao chép (VỚI KEEP_REPLICATION)

Bây giờ Quay trở lại trang Chung và bấm OK để khôi phục cơ sở dữ liệu ... Thế là xong.


"chọn một trang" ở đâu?
KansaiRobot

2

Tôi đã hoàn thành công việc thông qua cách khác, sử dụng Tạo tập lệnh. Điều đó đã làm việc với tôi vì Sao lưu-Khôi phục không giúp giải quyết vấn đề do lỗi tương tự.


2

Trong Tùy chọn, thay đổi tên tệp "Khôi phục dưới dạng" thành cơ sở dữ liệu mới mdf và ldf. Nó đang tham chiếu cơ sở dữ liệu nguồn .mdf và .ldf.


1

Bạn có thể khôi phục DB mới, xác minh cú pháp tên tệp, nó sẽ nằm trong tệp nhật ký, đối với phiên bản SQL mới sẽ là hậu tố "_log"

quảng cáo kiểm tra ghi đè cờ cơ sở dữ liệu hiện có trong tab tùy chọn

Fabio


0

Tôi chắc chắn vấn đề này có liên quan đến các quyền của tập tin và thư mục.


0

Tôi đã cố gắng khôi phục cơ sở dữ liệu sản xuất thành cơ sở dữ liệu dàn trên cùng một máy chủ.

Điều duy nhất hoạt động trong trường hợp của tôi là khôi phục cơ sở dữ liệu trống mới. Điều này hoạt động rất tốt, đã không cố ghi đè lên các tệp sản xuất (điều này sẽ xảy ra nếu bạn chỉ khôi phục tệp sao lưu sản xuất vào cơ sở dữ liệu dàn dựng hiện có). Sau đó xóa cơ sở dữ liệu cũ và đổi tên - các tệp sẽ giữ tên tạm thời mới nhưng trong trường hợp của tôi thì không sao.

(Hoặc trước tiên xóa cơ sở dữ liệu dàn và sau đó bạn có thể khôi phục cơ sở dữ liệu mới có cùng tên với cơ sở dữ liệu phân tầng)


0

thay vì nhấp vào Khôi phục cơ sở dữ liệu, hãy nhấp vào Khôi phục tệp và nhóm tệp ..

đó là hoạt động trên máy chủ sql của tôi


0

Điều này giúp tôi nhập tệp sao lưu từ ổ đĩa hệ thống

  1. Tạo cơ sở dữ liệu có cùng tên (tốt nhất) với tên cơ sở dữ liệu tệp .bak của bạn
  2. Nhấp chuột phải vào cơ sở dữ liệu> Nhiệm vụ> Khôi phục> Cơ sở dữ liệu
  3. Trong "Nguồn để khôi phục", chọn "Từ thiết bị"
  4. Chọn tệp .bak chọn đường dẫn từ hệ thống
  5. Chọn hộp kiểm cho cơ sở dữ liệu trong hộp danh sách bên dưới
  6. Trong "Chọn trang" ở bên phải Chọn "Tùy chọn"
  7. Chọn hộp kiểm có nhãn "Giữ nguyên cài đặt sao chép (VỚI KEEP_REPLICATION)
  8. Chọn hộp kiểm Ghi đè cơ sở dữ liệu hiện có (CÓ THAY THẾ) Bây giờ Quay lại trang Chung và nhấp OK để khôi phục cơ sở dữ liệu ...
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.