深刻商量SQL Server中DAC连接及其余

DAC(Dedicated Admin Connection)是SQL Server
二零零五引进的三个东西,指标是在SQL
Server发生严重品质难点的时候仍保存少数的财富保障管理员能够实行一些粗略的一声令下用于难题会诊、释放财富、杀死肇事过程等。微软官方对DAC的认证:采取专项使用管理员连接.aspx)。对于DAC使用的貌似景色,有八个不利的Blog值得推荐介绍:

SQL Server
为组织者提供了一种特殊的会诊连接,以供在不能够与服务器建立规范连接时选用。纵然在
SQL Server 不响应标准连接伏乞时,管理员也足以选拔此会诊连接访谈 SQL
Server,以便推行会诊查询并化解难题。

Server 二〇〇六专项使用管理员连接 (DAC) 使用才能

地点的两篇blog涉及到的为主是DAC访问单机单实例的景色。本文试图对DAC访谈单机多实例的图景也做个研究。

此专项使用管理员连接 (DAC) 扶助 SQL Server 的加密功用和别的安全效用。DAC
只同意将客商上下文切换成任何管理顾客。

1 什么是专项使用管理员连接?
SQL Server 2005为组织者提供了一种新鲜的确诊连接,以供在不可能与服务器创建正式连接时行使。

1)单机单SQL Server实例,且SQL Server实例使用暗中同意端口(1433)

SQL Server 尽力使 DAC
连接成功,但在非常特别的意况下也说不定会现出一而再战败。

2 专项使用助理馆员连接有何样用?
固然在 SQL Server 不响应标准连接央求时,助理馆员也能够选取这种连接访问 SQL
Server,以便实施检查判断查询并化解难点。
助理馆员能够通过 DAC 访问正在运营的 SQL Server Database Engine
实例来解除服务器的故障(尽管该服务器已偃旗息鼓响应别的顾客端连接)。

--以下的形式都可以访问
sqlcmd -S myServer -U myUser -P myPassword -A
sqlcmd -S ADMIN:myServer -U myUser -P myPassword
sqlcmd -S myServer,1434 -U myUser -P myPassword
sqlcmd -S xxx.xxx.xxx.xxx -U myUser -P myPassword -A
sqlcmd -S xxx.xxx.xxx.xxx,1434 -U myUser -P myPassword

说明:
a) sqlcmd命令行中参数与参数值之间可以有空格也可以没有;如果你的密码中有空格,你可以用双引号把你的密码引起来;
b) sqlcmd命令中的“-S”其实也可以用"/S",其它参数也一样;
c) 1434是SQL Server连接的默认端口号;
d) 在服务器前加"ADMIN:"也是为了指定进行DAC连接;
e) “-A”是在sqlcmd命令行中指定DAC连接的参数;
f) "-A","ADMIN:",",1434"不能在一条命令中出现两个或以上,否则会报错;
g) 不在命令行中加入这3个参数("-A","ADMIN:",",1434")的任何一个,登录也能成功,差别在于你使用的连接是普通连接,不是DAC连接。一般来说,普通连接能用的资源更多,但是当系统性能出现严重问题的时候普通连接可能没法建立,这也是引入DAC的初衷;再就是DAC连接下能看到一些有助于诊断的秘密视图(参见上面推荐的第一个blog)。

使用 DAC 连接

暗中同意情况下,只可以从服务器上运营的客商端创设连接。不容许实行互联网连接,除非它们是使用带
sp_configure 存款和储蓄进度配置的。

只有 SQL Server sysadmin 角色的成员能够利用 DAC 连接。

通过运用专项使用的领队按钮 (-A) 的 sqlcmd
命令提醒实用工具,能够支撑和采用 DAC。有关使用 sqlcmd
的详细消息,请参阅。您还足以将前缀 admin: 连接到实例名上,格式为
sqlcmd -Sadmin:*<instance_name>。还足以由此连日到
admin:<
实例名*>,从 SQL Server Management Studio
查询编辑器运行 DAC。

3 专项使用管理员连接使用方式
(1)利用sqlcmd
sqlcmd -Sqiangguo\ods -A
sqlcmd -Sadmin:qiangguo\ods
(2)SQL Server Management Studio 查询编辑器运维 DAC
admin:<实例名>
如:ADMIN:QIANGGUO\ODS

2)单机单SQL Server实例,SQL Server实例使用非暗中认可端口

限制

由于 DAC 仅用于在极少数情景下会诊服务器问题,由此对连日有部分范围:

  • 为了保障有可用的连天能源,每种 SQL Server 实例只同意选取一个DAC。倘使 DAC 连接已经激活,则透过 DAC
    举办三番五次的别样新央求都将被驳回,并出现错误 17810。

  • 为了保存能源,SQL Server Express 不侦听 DAC 端口,除非选取追踪标志7806 实行运行。

  • DAC 最早尝试连接受与登入帐户关联的暗中同意数据库。连接成功后,能够接连到
    master 数据库。要是暗中认可数据库脱机或不可用,则连接重返错误
    4060。然则,假如应用以下命令覆盖默许数据库,改为连日来到 master
    数据库,则连接会中标:

    sqlcmd –A –d master

    是因为只要开动数据库引擎实例,就会担保 master
    数据库处于可用状态,由此建议选拔 DAC 连接到 master 数据库。

  • SQL Server 禁用 DAC 运转并行查询或指令。比方,如果选取 DAC
    施行下列任何语句,都会转移错误 3637。

    • RESTORE

    • BACKUP

  • DAC 只好使用轻巧的能源。请勿使用 DAC
    运营供给开支多量财富的查询(比如,对大型表试行复杂的联网)或恐怕变成堵塞的查询。那推进防御将
    DAC
    与任何现存的服务器难点混淆。为了幸免爆发地下的梗塞意况,要是非得试行大概会发生堵塞的查询,则尽量在依据快速照相的割裂品级下运作查询;大概,将业务隔开等级设置为
    READ UNCOMMITTED,将 LOCK_TIMEOUT 值设置为相当的短的值(如 2000纳秒),只怕同期实行那二种操作。那可避防止 DAC
    会话被封堵。不过,依照 SQL Server 所处的意况,DAC
    会话只怕会在闩锁上被堵塞。可以使用 CNTCR-VL-C 终止 DAC
    会话,但不可能保障一定成功。假使失利,独一的精选是重复起动 SQL
    Server。

  • 为保证连接成功并免去 DAC 故障,SQL Server 保留了必然的财富用于拍卖
    DAC
    上运转的吩咐。日常那几个财富只够推行轻便的确诊和故障排除作用,如下所示。

固然理论上能够运营任何不必在 DAC 上并行试行的 Transact-SQL
语句,但努力提出你限制使用下列诊断和故障排除命令:

  • 查询动态管理视图以开展着力的确诊,比如查询 sys.dm_tran_locks
    以明白锁定状态,查询 sys.dm_os_memory_cache_counters
    以检讨缓存质量,查询 sys.dm_exec_requests 和
    sys.dm_exec_sessions
    以询问活动的对话和伸手
    。防止采纳须求开销多量能源的动态管理视图(比如,sys.dm_tran_version_store
    扫描整个版本存款和储蓄区,而且会促成大批量的
    I/O)或采用了复杂连接的动态管理视图。有关质量影响的新闻,请参阅特定的文书档案。

  • 询问目录视图。

  • 基本 DBCC 命令,例如 DBCC FREEPROCCACHE、DBCC
    FREESYSTEMCACHE、DBCC DROPCLEANBUFFERS, 和 DBCC
    SQLPERF
    。请勿运营供给消耗多量财富的一声令下,如 DBCC CHECKDB、DBCC
    DBREINDEX 或 DBCC SHRINKDATABASE。

  • Transact-SQL KILL <spid> 命令。依据 SQL Server
    的地方,KILL 命令并不是必然会马到功成;假使失利,则独一的取舍是重新启航
    SQL Server。上边是相似的指引标准:

    • 请通过查询
      SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>
      来验证 SPID
      是不是已被实际终止。若无回去任何行,则申明会话已被终止。

    • 一经会话仍在运维,则经过运转查询
      SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>
      来验证是或不是为此会话分配了职分。假如开掘还会有任务,则相当的大概当前正值终止会话。注意,此操作或许会持续非常长日子,也说不定根本不会中标。

    • 若是在与此会话关联的 sys.dm_os_tasks
      中未有别的任务,然则在实行 KILL 命令后该会话照旧出现在
      sys.dm_exec_sessions
      中,则评释未有可用的劳作线程。选拔有个别当前正值运营的任务(在
      sys.dm_os_tasks 视图中列出的 sessions_id <> NULL
      的天职),并终止与其涉嫌的对话以自由工作线程。请细心,终止单个会话大概相当不足,可能要求结束五个会话。

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 会话或许会在闩锁上被封堵。能够动用
CNT景逸SUVL-C 终止 DAC
会话,但无法保险一定成功。若是退步,独一的选项是重复起动 SQL Server。
为保证连接成功并免去 DAC 故障,SQL Server 保留了迟早的能源用于拍卖 DAC
上运转的下令。常常这个能源只够实施轻易的会诊和故障排除功效,如下所示。
为了保存财富,DAC 连接在 SQL Server 二零零五 Express Edition 中不可用。

我通过测试得到的结论是:对于单机单SQL Server实例,使用非默认端口时候的DAC访问跟使用默认端口1433时候完全一样。网上的一些论坛说要确保“SQL Server Browser”在运行,似乎不是必要的,至少我测试(用的SQL Server 2008 R2 SP3)过程中“SQL Server Browser”是不是在运行不影响访问。

DAC 端口

SQL Server 在起步数据库引擎时动态分配的专项使用 TCP/IP 端口上侦听
DAC。错误日志包涵所侦听的 DAC 所在的端口号。暗中同意意况下,DAC
侦听器只接受本地端口上的接连。有关激活远程管理员连接的代码示例,请参阅

安插远程管理连接之后,会马上启用 DAC 侦听器而毋庸再次起动 SQL
Server,并且客商端能够即时远程连接到 DAC。通过先在本土利用 DAC 连接到
SQL Server,然后再执行 sp_configure 存款和储蓄进度接受远程连接,则正是SQL Server 甘休响应,DAC 侦听器依然能够承受远程连接。

对于集合配置,DAC 在私下认可景况下是禁止使用的。顾客能够施行 sp_configure
remote admin connection 选项,使 DAC 侦听器能够访谈远程连接。尽管SQL Server 结束响应何况未启用 DAC 侦听器,则可能必得重新起动 SQL Server
来三翻五次 DAC。由此,提出在集结系统上启用 remote admin connections
配置选项。

DAC 端口由 SQL Server 在运维时动态分配。当连接到暗许实例时,DAC
会幸免在接二连三时对 使用 SQL Server 化解合同 (SSRP) 诉求。它先经过 TCP 端口
1434 实行三回九转。若是失败,则透过 SSRP 调用来获得端口。借使 SQL Server
浏览器没有侦听 SSRP 央浼,则总是供给将回到错误。若要领会 DAC
所侦听的端口号,请参阅错误日志。如若将 SQL Server
配置为接受远程处理连接,则必需使用显式端口号运营 DAC:

sqlcmd –Stcp:*<server>,<port>*

SQL Server 错误日志列出了 DAC 的端口号,暗许情状下为 1434。假如将 SQL
Server 配置为只接受当地 DAC 连接,请使用以下命令和环回适配器进行连接:

sqlcmd –S127.0.0.1,1434

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。

3)单机多SQL Server实例

示例

在此示例中,管理员发掘服务器 URAN123
不响应,因而要确诊该难题。为此,客户激活 sqlcmd
命令提示实用工具,并利用 -A 指明 DAC 连接到服务器 URAN123

sqlcmd -S URAN123 -U sa -P <xxx> –A

今昔,管理员能够试行查询来会诊难题,并且能够告一段落甘休响应的对话。

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>

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图