笔记159 如何将SQL数据库设定为单用户模式
笔记159 如何将SQL数据库设定为单用户模式
1 --如何将SQL数据库设定为单用户模式: 2 3 --单用户模式指定一次只有一个用户可访问数据库,该模式通常用于维护操作。 4 5 --注意: 6 --如果其他用户在您将数据库设置为单用户模式时连接到了数据库,则他们与数据库的连接将被关闭,且不发出警告。 7 -- 8 --即使设置此选项的用户已注销,数据库仍保持单用户模式。这时,其他用户(但只能是一个)可以连接到数据库。 9 10 --命令行单用户模式在CMD下输入: 11 --首先进入SQL Server的BINN路径,比如 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn 12 13 sqlservr.exe -c -m 14 15 -- SQL2000 16 17 -- 普通数据库,只需在企业管理器中,选择数据库属性,恶访问选项,但用户即可;如果是Master Database,就需要一句查询命令: 18 19 USE MASTER 20 GO 21 SP_DBOPTION YOURDATABASE,'SINGLE USER',TRUE 22 23 24 --SQL2005 25 -- 26 -- 将数据库设置为单用户模式 27 -- 28 --在对象资源管理器中,连接到 SQL Server 2005 数据库引擎实例,再展开该实例。 29 -- 30 --右键单击要更改的数据库,再单击“属性”。 31 -- 32 --在“数据库属性”对话框中,单击“选项”页。 33 -- 34 --在“限制访问”选项中,选择“单用户”。 35 -- 36 --如果其他用户连接到数据库,将出现“打开的连接”消息。若要更改属性并关闭所有其他连接,请单击“是”。 37 38 ************************************************************ 39 -- 40 --单用户|限制用户|多用户 41 -- 42 --这三个选项描述了一个数据库的用户访问属性。这些选项是相互排斥的;选择一个选项的同时不能选择其他选项。要对数据库设置一个这种选项,只需使用选项的名称。 43 -- 44 --例如,可以使用下面的代码将AdventureWorks数据库设置为单用户(single-user)模式: 45 46 ALTER DATABASE AdventureWorks SET SINGLE_USER; 47 48 --一个在单用户(SINGLE_USER)模式下的数据库一次只能有一个连接。在限制用户(RESTRICTED_USER)模式下的数据库只能接受被认为是“合格”用户的连接——这些用户属于dbcreator或sysadmin服务器角色,或者是那个数据库的db_owner角色的成员。 49 -- 50 --数据库在默认时处于多用户模式(MULTIPLE_USER),这意味着所有具有一个数据库中有效用户名的用户都可以连接该数据库。 51 -- 52 --如果我们试图将数据的状态改变到一个与当前情况不相容的状态——例如,在有多个连接存在的情况下试图将数据库设置为单用户模式,这时SQL Server的行为由我们所指定的“结束”(TERMINATION)选项决定。稍后我们会对该“结束”选项进行讨论。 53 -- 54 --为了确定一个数据库中设置了哪一个用户访问值,我们可以检查sys.databases目录视图,如下所示: 55 56 SELECT USER_ACCESS_DESC FROM sys.databases 57 58 WHERE name = '<name of database>'; 59 60 --该查询将会返回这些值之一:MULTI_USER、SINGLE_USER或RESTRICTED_USER。 61 62 63 64 ************************************************************ 65 66 --提问: 67 --如何将数据库设置为单用户模式,并将访问限制为只供 dbo 使用? 68 69 --解答: 70 71 --在 SQL Server 2000 中,数据库不能同时为单用户模式和只供 dbo 使用模式。而以下可选选项可以通过使用 ALTER DATABASE 命令来使用: 72 ALTER DATABASE database SET SINGLE_USER。 73 --该命令限制用户只能逐个访问数据库。 74 75 ALTER DATABASE database SET RESTRICTED_USER。 76 --该命令限制只有 db_owner、dbcreator 或 sysadmin 角色的成员才能访问数据库。 77 78 ALTER DATABASE database SET MULTI_USER。 79 --该命令将数据库的访问权限返回其一般运行状态。 80 81 ********************************************************** 82 83 84 -- 85 -- 1. 86 -- 87 -- 在对象资源管理器中,连接到 SQL Server 数据库引擎实例,然后展开该实例。 88 -- 89 -- 2. 90 -- 91 -- 右键单击要更改的数据库,再单击“属性”。 92 -- 93 -- 3. 94 -- 95 -- 在“数据库属性”对话框中,单击“选项”页。 96 -- 97 -- 4. 98 -- 99 -- 在“限制访问”选项中,选择“单用户”。 100 -- 101 -- 5. 102 -- 103 -- 如果其他用户连接到数据库,将出现“打开的连接”消息。若要更改属性并关闭所有其他连接,请单击“是”。 104 -- 105 --还可以使用此过程将数据库设置为“多用户”访问或“限制”访问。有关“限制访问”选项的详细信息,请参阅数据库属性(“选项”页)。 106 107 **************************************************************** 108 109 110 --解决方案: 111 112 --1)在运行修复数据库语句之前应必须先将数据库处于单用户模式下才可以进行修复: 113 sp_dboption @dbname = ‘database_name‘ , @optname = ‘single user‘ , @optvalue = ‘true‘ use database_name go 114 115 --2)在运行修复数据库语句之后还必须将数据库还原为非单用户模式,执行下面语句: 116 sp_dboption @dbname = ‘database_name‘ 117 118 ********************************************************************** 119 -- 120 --数据库变成单用户模式,会使客户端登录不进系统和数据库维护失败. 121 --可以使用以下的语句把单用户模式取消: 122 exec sp_dboption '数据库名', 'single user', false 123 124 ******************************************************************** 125 126 --在恢复SQL Server的一个备份数据库的时候报了一个错误: 127 128 RESTORE DATABASE must be used in single user mode when trying to restore the master database. 129 130 --那么,应该怎么样用单用户模式(single user mode)启动SQL Server呢? 131 132 --Put the SQL Server into single-user mode via the command line. Execute the following from the BINN directory: 133 134 --首先进入SQL Server的BINN路径,比如 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn 135 136 --然后在CMD下输入: 137 138 sqlservr.exe -c -m 139 140 --只要保持这窗口开着,SQL Server就在运行,不用了关闭即可。