2010-11-14 44 views
5

Tôi có tệp bak có trong đó sao lưu cơ sở dữ liệu.Lấy tên cơ sở dữ liệu từ tệp bak

Tôi muốn khôi phục cơ sở dữ liệu này về vị trí mới và tôi cần truy xuất tên cơ sở dữ liệu từ tệp này bất kỳ ý tưởng nào về cách thực hiện?

Tôi cần nó để ghi đè vị trí tệp dữ liệu và vị trí tệp nhật ký.

Cảm ơn bạn đã trợ giúp.

Trả lời

11
RESTORE FILELISTONLY 
FROM DISK = 'full path to your .bak file' 

sẽ hiển thị cho bạn tên tệp hiện tại trong bản sao lưu. Nếu có nhiều bản sao lưu trong một tệp và bạn không chỉ định "WITH FILE = X", bạn sẽ chỉ nhận được thông tin cho bản sao lưu đầu tiên trong tệp.

RESTORE DATABASE MyNewDBname 
    FROM DISK = 'full path to your .bak file' 
    WITH 
     MOVE 'LogicalFilename_Data' TO 'D:\somepath\...\MyDB.mdf', 
     MOVE 'LogicalFilename_Log' TO 'D:\somepath\...\MyDB.ldf'; 
GO 

phác thảo Rough với SMO (không kiểm tra):

Restore restoreDB = new Restore(); 
restoreDB.Database = myDatabase.Name; 
// Specify whether you want to restore database, files or log 
restoreDB.Action = RestoreActionType.Database; 
restoreDB.Devices.AddDevice(@"D:\somepath\...\MyDBFull.bak", DeviceType.File); 

restoreDB.ReplaceDatabase = true; // will overwrite any existing DB  
restoreDB.NoRecovery = true; 

// you can Wire up events for progress monitoring */ 
// restoreDB.PercentComplete += CompletionStatus; 
// restoreDB.Complete += RestoreCompleted; 

restoreDB.SqlRestore(myServer); 

Ref.

Sử dụng SMO, bạn có thể lấy danh sách tập tin sử dụng Restore.ReadFileList

See Also: How to restore a database from C#

+0

tôi đang làm việc với các đối tượng SMO, không phải với các truy vấn sql –

+1

Bạn đã không nói rằng bạn muốn làm điều đó theo chương trình. –

+1

Tôi có một thẻ SMO và C# :-( –

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