Rus*_*ard 4 .net c# sql-server smo database-restore
我正在尝试.BAK使用C#和SMO 从文件中恢复数据库.这是我的代码.
public static void RestoreDatabase()
{
string dbConnString = Configuration.DatabaseConnectionString;
ServerConnection connection = new ServerConnection(@"dbserver\sqlexpress", "user", "password");
Server smoServer = new Server(connection);
Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "AppDb";
BackupDeviceItem bkpDevice = new BackupDeviceItem(@"TestData\db-backup.bak", DeviceType.File);
rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
// Kill all processes
smoServer.KillAllProcesses(rstDatabase.Database);
// Set single-user mode
Database db = smoServer.Databases[rstDatabase.Database];
db.DatabaseOptions.UserAccess = DatabaseUserAccess.Single;
db.Alter(TerminationClause.RollbackTransactionsImmediately);
rstDatabase.SqlRestore(smoServer);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行此方法时,我尝试杀死所有进程时收到以下(错误)消息:
无法使用KILL来杀死自己的进程.
如果有人能帮忙解决这个问题,我将非常感激.
根本不打电话KillAllProcesses.RollbackTransactionsImmediately足够.它会立即杀死该数据库中的所有会话.
KillAllProcesses 无论如何都不会帮助你,因为在完成杀戮会话之后会出现一个新的会话.
当我尝试恢复数据库并且某处存在活动连接并且数据库不会恢复,直到不再有与数据库的活动连接时,这种情况总是发生在我身上。
通常我所做的是,执行以下一组命令来断开所有人的连接,然后恢复数据库。
ALTER DATABASE [DatabaseName]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- at this point all the users will be disconnected and the database is in
-- single-user mode
Use [DatabaseName] --<-- Grab that single connection
GO
Use [master] --<-- Disconnect from database and connect to Master DB for restore
GO
RESTORE DATABASE [DatabaseName] --<-- Finally restore database tara
FROM DISK .........
GO
Run Code Online (Sandbox Code Playgroud)