SQL 服务器更改数据库并立即回滚
SQL Server alter database with rollback immediate
有时(例如)通过执行以下命令将数据库设置为离线时,会抛出异常,因为连接了一个或多个客户端:
ALTER DATABASE <dbname> SET OFFLINE
根据this answer,一种解决方案是在末尾使用with rollback immediate
:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
为什么这实际上会断开其他客户端的连接?这听起来像是一种非常不明显的强制断开连接的方法,尽管它确实有效。
来自MSDN
WITH <终止>::=
Specifies when to roll back incomplete transactions when the database
is transitioned from one state to another. If the termination clause
is omitted, the ALTER DATABASE statement waits indefinitely if there
is any lock on the database. Only one termination clause can be
specified, and it follows the SET clauses.
在你的情况下 ROLLBACK IMMEDIATE
终止。
当其他用户在其上有交易 运行 时,您不能使数据库脱机,因此您将不得不以某种方式断开用户的连接以使数据库脱机。
如果你有礼貌,你可以要求所有用户在你使数据库脱机之前完成他们正在做的事情
但如果这不可行,包括选项
WITH ROLLBACK IMMEDIATE
表示所有当前事务都被回滚(数据库重置为事务开始的点)。你也可以使用
WITH ROLLBACK AFTER 60 SECONDS
但我从来没有
如果您可以在有未完成的事务时使数据库脱机 运行,那么数据库将处于不稳定状态,既没有进行更改也没有取消更改
有时(例如)通过执行以下命令将数据库设置为离线时,会抛出异常,因为连接了一个或多个客户端:
ALTER DATABASE <dbname> SET OFFLINE
根据this answer,一种解决方案是在末尾使用with rollback immediate
:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE
为什么这实际上会断开其他客户端的连接?这听起来像是一种非常不明显的强制断开连接的方法,尽管它确实有效。
来自MSDN
WITH <终止>::=
Specifies when to roll back incomplete transactions when the database is transitioned from one state to another. If the termination clause is omitted, the ALTER DATABASE statement waits indefinitely if there is any lock on the database. Only one termination clause can be specified, and it follows the SET clauses.
在你的情况下 ROLLBACK IMMEDIATE
终止。
当其他用户在其上有交易 运行 时,您不能使数据库脱机,因此您将不得不以某种方式断开用户的连接以使数据库脱机。
如果你有礼貌,你可以要求所有用户在你使数据库脱机之前完成他们正在做的事情
但如果这不可行,包括选项
WITH ROLLBACK IMMEDIATE
表示所有当前事务都被回滚(数据库重置为事务开始的点)。你也可以使用
WITH ROLLBACK AFTER 60 SECONDS
但我从来没有
如果您可以在有未完成的事务时使数据库脱机 运行,那么数据库将处于不稳定状态,既没有进行更改也没有取消更改