我什至不知道如何问这个问题。我们正在运行 SQL Server 2008 R2。我不是管理员,而是程序员。我需要编写一个在晚上更新一些数据库内容的应用程序。我将设置一个标志来禁用对数据库的登录,但我想让一个特定的数据库对除我之外的任何人都不可用,即使有人已经登录到数据库。我的程序将作为批处理文件每晚运行,大概具有管理员权限。
我期望生成类似于 SQL 命令脚本的东西。我可以使数据库脱机,但我需要自己对其进行修改。不确定处理此问题的最佳方法。
我什至不知道如何问这个问题。我们正在运行 SQL Server 2008 R2。我不是管理员,而是程序员。我需要编写一个在晚上更新一些数据库内容的应用程序。我将设置一个标志来禁用对数据库的登录,但我想让一个特定的数据库对除我之外的任何人都不可用,即使有人已经登录到数据库。我的程序将作为批处理文件每晚运行,大概具有管理员权限。
我期望生成类似于 SQL 命令脚本的东西。我可以使数据库脱机,但我需要自己对其进行修改。不确定处理此问题的最佳方法。
您基本上可以将数据库设置为“单用户”模式并独占使用它 - 此 T-SQL 将执行此操作:
USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
(当然 - 替换AdventureWorks2012
为您自己的数据库名称!)
这将使数据库成为“单用户”,例如只有您可以访问它,并且它将启动当前在线的所有用户,并回滚所有打开的事务。
此示例将数据库设置为 SINGLE_USER 模式以获得独占访问。终止选项
WITH ROLLBACK IMMEDIATE
在第一条ALTER DATABASE
语句中指定。这将导致所有未完成的事务被回滚,并且与 AdventureWorks2012 数据库的任何其他连接立即断开。
由于您使用管理帐户来执行更新,因此我假设该帐户具有以下角色之一:db_owner
、dbcreator
、sysadmin
。在 DML 操作期间使用ALTER DATABASE SET ...
语法来控制数据库访问。
假设您要锁定的数据库用户不在上述角色中。
USE master;
-- only allow members of db_owner, dbcreator, or sysadmin roles to access
-- database, allowing current transactions time to complete. if you want to
-- drop access immediately, add WITH ROLLBACK IMMEDIATE
ALTER DATABASE SET RESTRICTED_USER;
-- data load
-- return database to normal operating state
ALTER DATABASE SET MULTI_USER;