2009-09-01 25 views
22

Tôi có cơ sở dữ liệu SQL2005 Express mà tôi muốn tạo một bản sao trên cùng một cá thể. Làm thế nào để bạn đi về việc này với một kịch bản?Làm cách nào để sao lưu và khôi phục cơ sở dữ liệu dưới dạng bản sao trên cùng một máy chủ?

Tôi đã có một kịch bản để tạo ra bản sao lưu, nhưng khôi phục được thất bại ...

THE ERROR:

Msg 3234, Level 16, State 2, Line 2 Logical file 'MyDB_data' is not part of database 'MyDB_Test'. Use RESTORE FILELISTONLY to list the logical file names.
Msg 3013, Level 16, State 1, Line 2 RESTORE DATABASE is terminating abnormally.

NGHỊ QUYẾT:

RESTORE DATABASE [MyDB_Test] 
FROM DISK = 'C:\temp\SQL\MyDB.bak' 
WITH 
MOVE 'MyDB' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test.mdf' 
, MOVE 'MyDB_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDB_Test_log.ldf' 
, REPLACE; 

THE REASON:
Tôi không xác định đường dẫn logic một cách chính xác trong lần thử đầu tiên của mình.

+0

Đây không phải là hàng đợi Máy chủ stion. Tôi đang viết một ứng dụng sẽ thực hiện công việc này ... – RSolberg

+1

Chỉ cần cập nhật câu trả lời của tôi sau khi xem các chỉnh sửa bạn đã thực hiện. –

Trả lời

38

RESTORE FILELISTONLY là một lệnh thông tin và không cần thiết để thực hiện một khôi phục. Người dùng có thể sử dụng điều này để tìm ra tên logic cho các tệp dữ liệu, có thể được sử dụng với các lệnh MOVE để khôi phục cơ sở dữ liệu đến một vị trí mới.

Như được đề xuất bởi thông báo lỗi bạn cần sử dụng RESTORE FILELISTONLY để xem tên logic của cơ sở dữ liệu là gì. Lệnh khôi phục của bạn có những lỗi này.

Dưới đây là một ví dụ làm việc của những gì bạn cần làm:

--backup the database 
backup database test1 to disk='c:\test1_full.bak' 

-- use the filelistonly command to work out what the logical names 
-- are to use in the MOVE commands. the logical name needs to 
-- stay the same, the physical name can change 
restore filelistonly from disk='c:\test1_full.bak' 
-------------------------------------------------- 
| LogicalName |   PhysicalName   | 
-------------------------------------------------- 
| test1   | C:\mssql\data\test1.mdf   | 
| test1_log  | C:\mssql\data\test1_log.ldf  | 
------------------------------------------------- 

restore database test2 from disk='c:\test1_full.bak' 
with move 'test1' to 'C:\mssql\data\test2.mdf', 
move 'test1_log' to 'C:\mssql\data\test2.ldf' 
Các vấn đề liên quan