tập tin mdf không thể được ghi đè khi khôi phục cơ sở dữ liệu trong SQL Server


21

Tôi có một databse A. Nó có một số dữ liệu trong đó. Tôi đã tạo một bản sao lưu cho A dưới dạng tệp A.bak . Sau đó, tôi tạo một cơ sở dữ liệu trống mới B. Và sau đó tôi cố gắng khôi phục B từ A.bak . Nhưng SQL Serve cho tôi biết lỗi sau:

Tệp 'C: \ SQL Directory \ DATA \ A.mdf' không thể được ghi đè. Nó đang được sử dụng bởi cơ sở dữ liệu 'A'.

Nhưng nếu tôi xóa A khỏi SQL Server, thì việc truy xuất lại vẫn ổn.

Tôi không hiểu tại sao SQL cần ghi vào tệp cơ sở dữ liệu gốc trong khi khôi phục từ tệp sao lưu riêng biệt ?

Cảm ơn

Câu trả lời:


19

Nếu bạn khôi phục cơ sở dữ liệu, SQL Server sẽ, theo mặc định, sẽ cố gắng khôi phục tất cả các tệp dữ liệu và nhật ký về vị trí ban đầu của chúng. Vì các vị trí ban đầu vẫn được sử dụng bởi cơ sở dữ liệu gốc ("A"), nên việc khôi phục không thành công. Bạn cần sử dụng mệnh đề VỚI MOVE để chỉ định vị trí mới cho tất cả các tệp trong cơ sở dữ liệu.

RESTORE DATABASE B FROM DISK = 'A.bak'
WITH MOVE 'DataFileLogicalName' TO 'C:\SQL Directory\DATA\B.mdf',
MOVE 'LogFileLogicalName' TO 'C:\SQL Directory\DATA\B.ldf',
REPLACE --Needed if database B already exists

Một cái gì đó như thế nào. Sử dụng RESTORE FILELISTONLY TỪ DISK ... để xem tên tệp logic trong bản sao lưu nếu cần.


11

WITH MOVE/ MOVElà giải pháp phù hợp trong T-SQL.

Nhân tiện, nếu bạn muốn sử dụng GUI, bạn có thể vào Tệp và đổi tên:

  • a.MDF
  • a.NDF
  • a.LDF

đến

  • b.MDF
  • b.
  • b.LDF

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


1
Ngoài ra, khi thay đổi tên Cơ sở dữ liệu đích trong tab Chung, GUI sẽ tự động cập nhật tên Khôi phục dưới dạng tương ứng.
Wouter

0

Khi bạn khôi phục sao lưu, bạn có thể chỉ định các tệp dữ liệu để khôi phục.

Nhìn ở đâyở đây . Bạn có thể sử dụng tùy chọn "Khôi phục tệp cơ sở dữ liệu dưới dạng" và cờ "Ghi đè cơ sở dữ liệu hiện có".


0

Bạn đang sử dụng tùy chọn REPLACE, trong lệnh TSQL, hoặc dưới dạng hộp kiểm đã chọn? Ngoài ra, bạn có thể đổi tên các tệp và gọi cơ sở dữ liệu khác.

Bạn cũng sẽ thấy hơi khó khăn khi khôi phục cơ sở dữ liệu đang được sử dụng ..... bạn sẽ cần phải giết các quy trình bằng cơ sở dữ liệu; HOẶC thả / xóa cơ sở dữ liệu trước, đóng các kết nối (đây có thể là cách dễ nhất); HOẶC thiết lập cơ sở dữ liệu mà bạn muốn ghi đè vào một cái gì đó như chế độ người dùng bị hạn chế với khôi phục ngay lập tức để hy vọng chỉ DBA mới có thể sử dụng; HOẶC thậm chí dừng SQL Server và khởi động lại nó - hy vọng sẽ khôi phục lại trước khi bất cứ ai / bất cứ điều gì sử dụng cơ sở dữ liệu đó.

PS hãy sao lưu cơ sở dữ liệu mà bạn sắp ghi đè, chỉ trong trường hợp.


0

Nếu ai đó tìm kiếm giải pháp trong GUI của Management Studio sau khi đã sử dụng Optionstrang và Overwrite the existing database (WITH REPLACE)tùy chọn kích hoạt :

Chỉ cần nhấp vào Restore Ascột và thay đổi tên tệp của *.mdftệp và *.ldftệp.

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.