筆記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就在運行,不用了關閉即可。