3

我什至不知道如何问这个问题。我们正在运行 SQL Server 2008 R2。我不是管理员,而是程序员。我需要编写一个在晚上更新一些数据库内容的应用程序。我将设置一个标志来禁用对数据库的登录,但我想让一个特定的数据库对除我之外的任何人都不可用,即使有人已经登录到数据库。我的程序将作为批处理文件每晚运行,大概具有管理员权限。

我期望生成类似于 SQL 命令脚本的东西。我可以使数据库脱机,但我需要自己对其进行修改。不确定处理此问题的最佳方法。

4

2 回答 2

5

您基本上可以将数据库设置为“单用户”模式并独占使用它 - 此 T-SQL 将执行此操作:

USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

(当然 - 替换AdventureWorks2012为您自己的数据库名称!)

这将使数据库成为“单用户”,例如只有您可以访问它,并且它将启动当前在线的所有用户,并回滚所有打开的事务。

在 MSDN 上阅读有关单用户模式的更多信息

此示例将数据库设置为 SINGLE_USER 模式以获得独占访问。终止选项WITH ROLLBACK IMMEDIATE在第一条ALTER DATABASE语句中指定。这将导致所有未完成的事务被回滚,并且与 AdventureWorks2012 数据库的任何其他连接立即断开。

于 2012-10-23T12:41:15.213 回答
1

由于您使用管理帐户来执行更新,因此我假设该帐户具有以下角色之一:db_ownerdbcreatorsysadmin。在 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;
于 2012-10-23T12:45:22.497 回答