2010-02-20 22 views
7

Làm cách nào để thay đổi tên cơ sở dữ liệu logic khi khôi phục cơ sở dữ liệu với SMO?Thay đổi tên cơ sở dữ liệu hợp lý bằng SMO

/Viktor

+0

Bạn có nghĩa là tên cơ sở dữ liệu, hoặc tên tập tin? Tất cả các câu trả lời dưới đây xuất hiện để giả sử bạn có nghĩa là tên tập tin hợp lý? – Tao

Trả lời

4

Bạn không thể đổi tên tệp cơ sở dữ liệu lôgic bằng SQL RESTORE DATABASE: nó không được cung cấp. Chỉ có thể thay đổi các tệp vật lý bằng cách sử dụng WITH MOVE

Bạn đổi tên tệp logic bằng cách sử dụng ALTER DATABASE trong SQL, bình thường.

Điều này dường như được xác nhận bởi lớp học RelocateFile SMO.

8
//restore is the Restore object in SMO 

restore.RelocateFiles.Add(new RelocateFile(SourceDataFile.Name, Path.Combine(destinationDirectory, destination.Database + ".mdf"))); 
restore.RelocateFiles.Add(new RelocateFile(SourceLogFile.Name, Path.Combine(destinationDirectory, destination.Database + "_log.ldf"))); 

restore.SqlRestore(destinationServer); 

var destinationDatabase = destinationServer.Databases[destinationDatabaseName]; 

//renaming the logical files does the trick 

destinationDatabase.FileGroups[0].Files[0].Rename(destinationDatabaseName); 
destinationDatabase.LogFiles[0].Rename(destinationDatabaseName + "_log"); 
0

đang Rahul là đúng: Khôi phục các tập tin vật lý mới và đổi tên file logic là một quá trình hai bước:

Cuộc gọi RelocateFile đang nói "bản đồ tên file logic này để tập vật lý này". Bạn cần phải sử dụng tên tệp logic của bản sao lưu gốc ở đây KHÔNG phải là tên mới, nếu không bạn có khả năng nhận được các ngoại lệ ".mdf cannot be overwritten".

Để tạo tên logic mới, hãy sử dụng các cuộc gọi Rename() sau đó, như được hiển thị trong mã của Rahul.

Tuy nhiên, nếu bạn muốn thay đổi tên của cơ sở dữ liệu sử dụng SMO:

var srvConn = new ServerConnection(serverName)  
{ 
    LoginSecure = false, 
    Login = dbUserName, 
    Password = dbUserPassword, 
    DatabaseName = "master",    
}; 
var mainDb = new Database(srvConn, "old database name"); 
mainDb.Rename("new database name"); 
mainDb.Refresh(); 
Các vấn đề liên quan