繁体   English   中英

如何使用 Microsoft.SqlServer.Management.Smo 命名空间的还原类进行还原

[英]how to restore using restore class of Microsoft.SqlServer.Management.Smo namespace

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();
}

调用此方法时,还原操作失败并显示此消息

服务器“MDM04\\SQLEXPRESS”的还原失败。

mdm04 是我的电脑名

内部异常是

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

vrv 是数据库名称

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

问题在这里

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

这里databaseName的意思是db备份文件中指定的数据库名。 但是您正在指定目标数据库名称。

将其更改为原始数据库名称

这里是从备份文件中读取数据库名称的示例代码

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

现在转到“浏览”选项卡并浏览以下路径-

C:\\Program Files\\Microsoft SQL Server\\100\\SDK\\Assemblies 或 C:\\Program Files\\Microsoft SQL Server\\110\\SDK\\Assemblies

现在选择以下dll

Microsoft.SqlServer.ConnectionInfo.dll

Microsoft.SqlServer.Management.Sdk.Sfc.dll

微软.SqlServer.Smo.dll

Microsoft.SqlServer.SmoExtended.dll

微软.SqlServer.SqlEnum.dll

         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();
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM