程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL 2005使用專用管理員連接(DAC)的技巧及修改系統表的方法

SQL 2005使用專用管理員連接(DAC)的技巧及修改系統表的方法

編輯:關於SqlServer
Server 2005 專用管理員連接 (DAC) 使用技巧
1 什麼是專用管理員連接?
SQL Server 2005 為管理員提供了一種特殊的診斷連接,以供在無法與服務器建立標准連接時使用。
2 專用管理員連接有什麼用?
即使在 SQL Server 不響應標准連接請求時,管理員也可以使用這種連接訪問 SQL Server,以便執行診斷查詢並解決問題。
管理員可以通過 DAC 訪問正在運行的 SQL Server Database Engine 實例來排除服務器的故障(即使該服務器已停止響應其他客戶端連接)。
3 專用管理員連接使用方法
(1)利用sqlcmd
sqlcmd -Sqiangguo\ods -A
sqlcmd -Sadmin:qiangguo\ods
(2)SQL Server Management Studio 查詢編輯器啟動 DAC
admin:<實例名>
如:ADMIN:QIANGGUO\ODS
4 專用管理員連接使用限制
(1)為了保證有可用的連接資源,每個 SQL Server 實例只允許使用一個 DAC。如果 DAC 連接已經激活,則通過 DAC 進行連接的任何新請求都將被拒絕,並出現錯誤 17810。
(2)DAC 最初嘗試連接到與登錄帳戶關聯的默認數據庫。連接成功後,可以連接到 master 數據庫。如果默認數據庫離線或不可用,則連接返回錯誤 4060。但是,如果使用以下命令覆蓋默認數據庫,改為連接到 master 數據庫,則連接會成功:
sqlcmd –A –d master
由於只要啟動數據庫引擎 實例,就能保證 master 數據庫處於可用狀態,因此建議使用 DAC 連接到 master 數據庫。
(4)SQL Server 禁止使用 DAC 運行並行查詢或命令。例如,如果使用 DAC 執行以下任何命令,都會生成錯誤 3637。
RESTORE或BACKUP
(5)DAC 只能使用有限的資源。請勿使用 DAC 運行需要消耗大量資源的查詢(例如,對大型表執行復雜的聯接)或可能造成阻塞的查詢。這有助於防止將 DAC 與任何現有的服務器問題混淆。為避免潛在的阻塞情況,當需要運行可能造成阻塞的查詢時,
請盡可能在基於快照的隔離級別下運行查詢;否則,請將事務隔離級別設置為 READ UNCOMMITTED 和/或將 LOCK_TIMEOUT 值設置為較短的值(如 2000 毫秒)。這可以防止 DAC 會話被阻塞。
但是,根據 SQL Server 所處的狀態,DAC 會話可能會在闩鎖上被阻塞。可以使用 CNTRL-C 終止 DAC 會話,但不能保證一定成功。如果失敗,唯一的選擇是重新啟動 SQL Server。
為保證連接成功並排除 DAC 故障,SQL Server 保留了一定的資源用於處理 DAC 上運行的命令。通常這些資源只夠執行簡單的診斷和故障排除功能,如下所示。
為了保留資源,DAC 連接在 SQL Server 2005 Express Edition 中不可用。
5 如何啟用遠程DAC連接?
只有 SQL Server sysadmin 角色的成員可以使用 DAC 連接。默認情況下,只能從服務器上運行的客戶端建立連接。除非通過 sp_configure 使用 remote admin connections 選項進行配置,否則不允許使用網絡連接。
DAC 支持加密和 SQL Server 的其他安全性功能。DAC 只允許將用戶上下文切換到其他管理用戶。
默認情況下,DAC 僅偵聽環回 IP 地址 (127.0.0.1) 端口 1434。
remote admin connections 設置的可能值如下:
0 - 指明僅允許本地連接使用 DAC
1 - 指明允許遠程連接使用 DAC
--啟用遠程DAC連接
sp_configure 'remote admin connections', 1;
GO
RECONFIGURE;
GO
注意:配置遠程管理連接之後,會立即啟用 DAC 偵聽器而不必重新啟動 SQL Server,並且客戶端可以立即遠程連接到 DAC。
6 常用腳本
--利用sqlcmd
sqlcmd -Sqiangguo\ods -A
sqlcmd -Sadmin:qiangguo\ods
-- 查詢動態視圖
select * from sys.dm_os_memory_cache_counters
select * from sys.dm_exec_requests
select * from sys.dm_exec_sessions
-- 結束會話
KILL <spid>
select * from sys.dm_exec_sessions where session_id = <spid>
select * from sys.dm_os_tasks where session_id = <spid>
7 常見錯誤
問題(1)
C:\Documents and Settings\guoqiang>sqlcmd -S qiangguo\ods,1434
HResult 0x274D,級別 16,狀態 1
TCP 提供程序: 由於目標機器積極拒絕,無法連接。
Sqlcmd: 錯誤: Microsoft SQL Native Client : 建立到服務器的連接時發生錯誤。連接到
SQL Server 2005 時,默認設置 SQL Server 不允許遠程連接這個事實可能會導致失敗。

Sqlcmd: 錯誤: Microsoft SQL Native Client : 登錄超時已過期。
解決:
問題(2)
標題: 連接到服務器------------------------------
無法連接到 ADMIN:QIANGGUO\ODS。
------------------------------
其他信息:
不支持專用管理員連接。 (ObjectExplorer)
解決:
問題(3)
C:\Documents and Settings\guoqiang>sqlcmd -Sadmin:qiangguo\ods
Sqlcmd: 錯誤: Microsoft SQL Native Client : 由於打開服務器連接過程中的延遲,無法
完成登錄過程。
解決:試著不用DAC 連接,用正常的連接成功後,再用DAC連接。
如:
C:\Documents and Settings\guoqiang>sqlcmd -S qiangguo\ods -A
Sqlcmd: 錯誤: Microsoft SQL Native Client : 由於打開服務器連接過程中的延遲,無法
完成登錄過程。
C:\Documents and Settings\guoqiang>sqlcmd -S qiangguo\ods
1> quit
C:\Documents and Settings\guoqiang>sqlcmd -S qiangguo\ods -A
1>
問題(4)
標題: 連接到服務器
------------------------------
無法連接到 ADMIN:QIANGGUO\ODS。
------------------------------
其他信息:
已成功與服務器建立連接,但是在登錄過程中發生錯誤。 (provider: TCP 提供程序, error: 0 - 遠程主機強迫關閉了一個現有的連接。)
(Microsoft SQL Server,錯誤: 10054)

解決:已經建立一個DAC連接,請先關閉後,再連接。
文章出處:http://www.diybl.com/course/7_databases/sql/sqlServer/200863/120812.html
================================================================ 作者:lansz | 可以轉載, 轉載時務必以超鏈接形式標明文章原始出處和作者信息及版權聲明
鏈接:http://www.lansz.com/html/2008/05/system_catalog_change_in_sql2005.html 問題:
在使用SQL Server 2000的時候,大家可能已經很習慣用下面的語句在修改系統表了
EXEC sp_configure 'allow updates', 1
RECONFIGURE WITH OVERRIDE;

-- do some modification to system tables

EXEC sp_configure 'allow updates', 0
RECONFIGURE WITH OVERRIDE;但是如果在SQL Server 2005中,你還是想通過運行上面的語句來修改系統表,那你就大錯特錯了,雖然在SQL Server 2005中運行上面的語句是不會有任何報錯的,但是但你試圖去修改系統表的時候你會得到下面這樣的錯誤信息:
Msg 259, Level 16, State 1, Line 1
Ad hoc updates to system catalogs are not allowed.這時候你只要在SQL Server 2005的BOL中查一下”allow updates”你就會發現如下的說明:
allow updates Option

Updated: 14 April 2006

This option is still present in the sp_configure stored procedure, although its functionality is unavailable in Microsoft SQL Server 2005 (the setting has no effect). In SQL Server 2005, direct updates to the system tables are not supported.看來在SQL Server 2005中allow updates只是一個擺設了,根本不能用,而且系統表也不能直接被修改了。但是如果你確實需要修改系統表那怎麼辦呢?
還好,Microsoft還是沒有做絕的,雖然allow updates不能用了,但還是可以通過別的途徑修改系統表,那就是:先用單用戶模式啟動SQL Server 2005實例,然後再用DAC(Dedicated Administrator Connection/專用管理員連接)連接到SQL實例,然後不用運行什麼sp_configure就可以直接修改系統表了。
基本的步驟:
1、啟動到單用戶模式
"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe" -m2、打開SQL Server Management Studio,在Connect to Server對話框中的Server Name處輸入admin:InstanceName,這樣就可以用DAC登陸啟動的SQL Server實例了。
友情提示:
另外,SQL Server 2005加強了字典管理功能,如果要修改系統表的操作能有存儲過程支持的情況下一定要用存儲過程,不要去直接修改系統表,以維護數據字典的一致性。
參考資料:
1、allow updates Option
2、Using a Dedicated Administrator Connection
3、Starting SQL Server in Single-User Mode

================================================================
如何使用SQL Server 2005 專用管理員連接(DAC)登錄到服務器

一 什麼是DAC SQL Server 2005 為管理員提供了一種特殊的診斷連接,以供在無法與服務器建立標准連接時使用。即使在 SQL Server 不響應標准連接請求時,管理員也可以使用這種連接訪問 SQL Server,以便執行診斷查詢並解決問題。命令行界面 (sqlcmd) 通過使用特殊的管理員開關 (-A),提供並支持這種專用管理員連接 (DAC)。二如何使用DAC登錄到服務器1 本機DAC登錄 命令行方式下執行 sqlcmd -A -S sql服務器名2 遠程DAC登錄 1) 打開遠程DAC選項 '程序'->'Sql Server2005'-> '配置工具'-> 'Sql Server 外圍應用配置器'-> '功能的外圍應用配置器'-> 'DataBase Engine'-> 'DAC' -> '啟用遠程DAC' 2) 登錄到遠程服務器 sqlcmd -A -S 192.168.0.1 -U sa -P 1234563 登錄後, 可以通過查詢動態管理視圖來診斷問題
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved