天天看點

專用管理連接配接(DAC)和單使用者模式

資料庫運維人員,在維護資料庫時,有時會遇到一些特殊的情況,例如,SQL Server執行個體無法通路,此時需要用到管理者在緊急情況下專用的連接配接;有時,在做一些系統級别的配置修改時,目前資料庫不能被其他使用者通路,必須把資料庫切換到單使用者模式。居安思危,在系統正常運作時,多做一些演練,避免在真正出現異常時,手忙腳亂。先解釋一下兩個術語:

專用管理連接配接(Dedicated Administrator Connection, DAC)是SQL Server提供的一個特殊的診斷連接配接,用于連接配接資料執行診斷查詢和故障排除,當其他任何方式都無法連接配接不到SQL Server時,DAC是唯一的方法。不是所有的Login都可以使用DAC,隻有sysadmin 伺服器角色的成員,才可以使用DAC。每個SQL Server執行個體,隻能有一個DAC連接配接。如果目前已經有一個DAC連接配接,SQL Server抛出錯誤 17810。

單使用者模式( Single-User mode),是指隻允許一個使用者連接配接到SQL Server執行個體或資料庫,通常情況下,單使用者模式用于修複系統資料庫等維護操作,例如,還原master資料庫,修改執行個體級别的配置選項。

一,連接配接DAC

通常情況下,DBA通過sqlcmd 指令行工具通路SQL Server,登陸到SQL Server執行個體所在的主機(Host),以Administrator身份運作DOS界面,輸入指令:sqlcmd -A,參數-A指定的是Administrator選項。

專用管理連接配接(DAC)和單使用者模式
預設情況下,DAC嘗試去連接配接跟Login關聯的預設的資料庫,如果預設的資料庫離線,或不可通路,DAC連接配接抛出錯誤 4060,可以使用 -d 參數指定登陸的資料庫,推薦登陸master資料庫,因為,一旦SQL Server執行個體啟動成功,那麼master資料庫必定處于線上和可通路狀态,sqlcmd 指令行代碼如下:

sqlcmd –A –d master      

sqlcmd的參數是大小寫敏感的,常用參數是:

sqlcmd 
-S [protocol:]server[\instance_name][,port]
-E (use trusted connection)
-U login_id
-P password
-d db_name
-A (dedicated administrator connection)
-q "cmdline query"
-Q "cmdline query" (and exit)      

二,單使用者模式( Single-User mode)

SQL Server支援兩種啟用單使用者模式的方法:在啟動SQL Server執行個體時進入單使用者模式,在SQL Server執行個體運作時把資料庫切換到單使用者模式,前者是SQL Server執行個體級别,後者是資料庫級别。

1,啟動參數(startup option)

啟動參數用于在SQL Server 執行個體啟動時,指定執行個體級别的選項,預設的啟動參數是:

  • -d master_file_path  :用于指定master資料庫的資料檔案路徑
  • -l master_log_path   :用于指定master資料庫的日志檔案路徑
  • -e error_log_path     :用于指定存儲錯誤日志的的檔案路徑

這些預設參數是在安裝SQL Server時,系統自動指定的,DBA能夠通過SQL Server 配置管理器(SQL Server Configuration Manager)檢視和配置 Startup Parameters,如下圖所示,通過Add按鈕增加啟動參數,通過Remove删除啟動參數:

專用管理連接配接(DAC)和單使用者模式

2,使用啟動參數啟用單使用者模式

參數 -m ,以單使用者模式開始SQL Server執行個體。使用該選項,當DBA以-m參數啟動SQL Server執行個體時,DBA卻無法登陸SQL Server執行個體,一個未知的用戶端應用程式已經占用了唯一的連接配接,SQL Server執行個體抛出的異常是:目前已經有使用者登陸,

參數 -mClientApplicationName 能夠指定允許登陸的用戶端應用程式,ClientApplicationName是大小寫敏感的。

例如, 參數 -mSQLCMD 指定連接配接到SQL Server執行個體的連接配接必須是sqlcmd 用戶端程式,參數 -m"Microsoft SQL Server Management Studio - Query" 指定連接配接到SQL Server執行個體的連接配接必須是SSMS。

3,在SQL Server執行個體運作時,把資料庫切換到單使用者模式

在設定資料庫進入單使用者模式(SINGLE_USER)時,確定資料庫選項 AUTO_UPDATE_STATISTICS_ASYNC 被設定未OFF,這是一個背景程序,用于更新資料庫的統計資訊,當該選項被設定未ON,該背景程序會占用資料庫的唯一的連接配接,這樣,其他使用者無法通路到資料,使用如下腳本禁用 AUTO_UPDATE_STATISTICS_ASYNC選項:

ALTER DATABASE database_name 
SET AUTO_UPDATE_STATISTICS_ASYNC OFF;      

當把資料庫切換到單使用者模式時,如果其他使用者已經連接配接到資料庫,那麼,該連接配接将會被關閉,SQL Server也不會提供任何警告。在切換到單使用者模式時,通常會使用 WITH ROLLBACK IMMEDIATE 選項,這會導緻未完成的事務立即復原,并立即把其他連接配接斷開。指令執行完成之後,資料庫切換到單使用者模式,等到維護操作結束之後,使用者可以在目前的連接配接中執行指令,把資料庫切換到多使用者模式(MULTI_USER),這樣其他使用者可以正常連接配接到資料庫。

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

四,登陸觸發器(Logon Trigger)

登陸觸發器有時會阻止所有使用者通路資料庫,包括sysadmin角色的成員,當無法連接配接到SQL Server執行個體時,使用DAC是唯一的途徑,DBA隻能使用DAC登陸到資料庫,删除登陸觸發器,把資料庫恢複到正常通路狀态。

Step1:使用DAC連接配接到資料庫,以管理者身份(Run as Administrator)啟動DOS界面,使用sqlcmd連接配接DAC:

sqlcmd -A      

Step2:删除登陸觸發器,在指令行中輸入以下指令,輸入go (batch分隔符),執行指令,删除登陸觸發器

drop trigger login_trigger_name
on all server;
go      

參考文檔:

sqlcmd Utility

Diagnostic Connection for Database Administrators

Database Engine Service Startup Options

Start SQL Server in Single-User Mode

Set a Database to Single-user Mode

作者

:悅光陰

出處

:http://www.cnblogs.com/ljhdo/

本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。

繼續閱讀