Search code examples
c#sql-serverrestoresmo

Restore DB using SMO without DATABASE is in use error


I am using SMO to restore the database ,

 ServerConnection con = new ServerConnection(_serverName, _userName, _password);
 Server server = new Server(con);
 Restore destination = new Restore();
 destination.Action = RestoreActionType.Database;
 destination.Database = _databaseName;
 BackupDeviceItem deviceItem = new BackupDeviceItem(path, DeviceType.File);
 destination.Devices.Add(deviceItem);
 destination.ReplaceDatabase = true;
 destination.NoRecovery = true;
 destination.SqlRestore(server);

I am getting an exception message :

Exclusive access could not be obtained because the database is in use. RESTORE DATABASE is terminating abnormally.


Solution

  • I resolved the issue by killing the connected processes and database

    ServerConnection con = new ServerConnection(_serverName, _userName, _password);
    Server server = new Server(con);
    Restore destination = new Restore();
    destination.Action = RestoreActionType.Database;
    destination.Database = _databaseName;
    BackupDeviceItem deviceItem = new BackupDeviceItem(path, DeviceType.File);
    destination.Devices.Add(deviceItem);
    destination.ReplaceDatabase = true;
    destination.NoRecovery = true;
    server.KillAllProcesses("your db name");
    server.KillDatabase("your db name");
    destination.SqlRestore(server);