Database 从SQL Server引导用户

Database 从SQL Server引导用户,database,sql-server-2008-r2,offline,Database,Sql Server 2008 R2,Offline,我甚至不知道该怎么问这个问题。我们正在运行SQL Server 2008 R2。我不是管理员,而是程序员。我需要写一个应用程序,在晚上更新一些数据库的东西。我将设置一个标志来禁用对数据库的登录,但我想使某个特定数据库对除我以外的任何人都不可用,即使有人已经登录到该数据库。我的程序将作为批处理文件每晚运行,可能具有管理员权限 我希望生成类似于SQL命令脚本的东西。我可以让数据库离线,除非我需要自己修改它。不确定处理此问题的最佳方法。基本上,您可以将数据库设置为“单用户”模式并以独占方式使用它-此T

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


我希望生成类似于SQL命令脚本的东西。我可以让数据库离线,除非我需要自己修改它。不确定处理此问题的最佳方法。

基本上,您可以将数据库设置为“单用户”模式并以独占方式使用它-此T-SQL将实现以下功能:

USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
(当然-用您自己的数据库名称替换
AdventureWorks2012

这将使数据库成为“单用户”,例如,只有您有权访问它,它将启动当前联机的所有用户,并回滚所有打开的事务

!

本例将数据库设置为单用户模式以获得独占访问。在第一条
alterdatabase
语句中指定了具有立即回滚功能的终止选项
。这将导致回滚所有未完成的事务,并立即断开与AdventureWorks2012数据库的任何其他连接。

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;

由于您使用的是管理帐户来执行更新,因此我将假定该帐户处于以下角色之一:
db\u owner
dbcreator
sysadmin
。在DML操作期间,使用该语法控制数据库访问

假设要锁定的数据库用户不属于上述角色。

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;

告诉我们更多关于为什么在更新过程中数据库必须不可访问的信息。如果您担心并发性,为什么不在显式事务中包装您的更新呢?此外,“数据库内容”是纯DML还是混合了一些DDL(索引重建等)?我必须这样做的方式是每天晚上从外部源完全重新加载新数据(然后更新从旧数据更新的任何内容,然后擦除旧数据)。这就是问题对我的定义——我无法改变它。我将在ldap.DML上搜索。我以后可能需要添加索引,但不是现在。我误解了。。。您只需要每天备份数据库?比备份多一点,尽管我将使用备份功能来避免数据库复制。我将在新数据库和“旧数据库”之间交换数据库,将新数据库归零,将全新信息上传到新数据库中,然后从旧数据库更新新数据库,但只更新已添加的新记录。(注意,旧的是前一天的新的)。这会引导已经登录的用户吗?我想这可能会给我一个错误。当我获得所需的访问权限时,我也会尝试使用这个。@elbillaf:阅读文档!在MSDN上-是的,这将启动当前连接…我刚才正在阅读文档…是的…我明白了…谢谢。那太完美了。一个更干净的解决方案,但如此简单,我甚至不知道为什么在我需要它的时候我没有想到它。啊,我希望你也留下另一个。更多的东西给谷歌。这不是真的在这个时刻,但它将是真的。我试试那个。