我正在尝试使用.BAK和SMO从C#文件中恢复数据库。这是我的密码。
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);
}然而,当我试图运行此方法时,当它试图杀死所有进程时,我会得到以下(错误)消息:
不能使用“杀死”来杀死您自己的进程。
如果有人能帮助解决这个问题,我将非常感激。
发布于 2015-04-06 13:58:55
只是不打电话给KillAllProcesses。RollbackTransactionsImmediately就够了。它会立即杀死数据库中的所有会话。
无论如何,KillAllProcesses并不能帮助您,因为在它完成之后,就会出现一个新的会话。
发布于 2015-04-06 13:04:53
在我尝试还原数据库时,这一直发生在我身上,而且在某个地方有一个活动连接,直到数据库没有更多的活动连接时,数据库才会恢复。
通常我所做的是执行以下命令来断开每个人的连接,然后恢复数据库。
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 .........
GOhttps://stackoverflow.com/questions/29471748
复制相似问题