如何恢复使用恢复类Microsoft.SqlServer.Management.Smo命名空间 [英] how to restore using restore class of Microsoft.SqlServer.Management.Smo namespace

查看:388
本文介绍了如何恢复使用恢复类Microsoft.SqlServer.Management.Smo命名空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

public void  RestoreDatabase(String databaseName, String filePath, 
            String serverName, String userName, String password, String dataFilePath, String logFilePath)
{
    Restore sqlRestore = new Restore();
    BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
    sqlRestore.Devices.Add(deviceItem);
    sqlRestore.Database = databaseName;
    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);
    Database db = sqlServer.Databases[databaseName];
    sqlRestore.Action = RestoreActionType.Database;
    String dataFileLocation = dataFilePath;
    String logFileLocation = logFilePath; 
    db = sqlServer.Databases[databaseName];
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));
    sqlRestore.ReplaceDatabase = true;
    sqlRestore.Complete +=new ServerMessageEventHandler(sqlRestore_Complete);
    sqlRestore.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();
}

在调用此方法还原操作失败,此消息

On calling this method the restore operation failed with this message

还原失败服务器
'MDM04\SQLEXPRESS'。

Restore failed for Server 'MDM04\SQLEXPRESS'.

mdm04是我的计算机名

mdm04 is my computer name

的内部异常是

System.Data.SqlClient.SqlError:
逻辑文件'VRV'不是
数据库VRV的一部分使用RESTORE
FILELISTONLY来列出逻辑文件
的名字。

"System.Data.SqlClient.SqlError: Logical file 'vrv' is not part of database 'vrv'. Use RESTORE FILELISTONLY to list the logical file names."

VRV是数据库名称

我应该怎么做才能恢复文件

What should I do to restore the file

推荐答案

问题是在这里。

sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));

下面的databaseName手段,在数据库备份文件中所指定的数据库的名称。但你指定目标数据库名称。

here databaseName means, name of the database specified in db backup file. But you are specifying the destination db name.

将其更改为原数据库名称

Change it to original db name

下面的示例代码读取备份文件DB名

here the sample code to read db names from backup file

DataTable dtFileList = sqlRestore.ReadFileList(serverName);
string dbLogicalName = dtFileList.Rows[0][0].ToString();
string dbPhysicalName = dtFileList.Rows[0][1].ToString();
string logLogicalName = dtFileList.Rows[1][0].ToString();
string logPhysicalName = dtFileList.Rows[1][1].ToString

这篇关于如何恢复使用恢复类Microsoft.SqlServer.Management.Smo命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆