DAC(Dedicated Admin Connection)是SQL Server
二零零五引进的三个事物,指标是在SQL
Server发生严重质量难点的时候仍保留少数的财富保险管理员能够实行一些轻巧的通令用于难点检查判断、释放能源、杀死肇事进程等。微软官方对DAC的注解:选用专项使用管理员连接.aspx)。对于DAC使用的貌似景色,有七个不利的Blog值得推荐介绍:

使用 DAC 连接

默许境况下,只可以从服务器上运营的客户端创立连接。不容许开始展览互连网连接,除非它们是接纳带
sp_configure 存款和储蓄进程配置的。

只有 SQL Server sysadmin 剧中人物的分子能够应用 DAC 连接。

因此采取专项使用的指挥者开关 (-A) 的 sqlcmd
命令提醒实用工具,能够支持和动用 DAC。有关使用 sqlcmd
的详细音信,请参阅。您还足以将前缀 admin: 连接到实例名上,格式为
sqlcmd -Sadmin:*<instance_name>。还足以透过连日到
admin:<
实例名*>,从 SQL Server Management Studio
查询编辑器运营 DAC。

7 常见错误
问题(1)
C:\Documents and Settings\guoqiang>sqlcmd -S qiangguo\ods,1434
HResult 0x274D,级别 16,状态 1
TCP 提供程序: 由于目的机器积极拒绝,不能连接。

4)DAC访谈与防火墙

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

问题(2)
标题: 连接到服务器——————————

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

限制

出于 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 值设置为很短的值(如 两千微秒),也许同不经常间施行这二种操作。那足防止范 DAC
    会话被打断。不过,依照 SQL Server 所处的动静,DAC
    会话可能会在闩锁上被卡住。能够采纳 CNT奥迪Q5L-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
      的任务),并终止与其关联的对话以释放专门的工作线程。请小心,终止单个会话可能非常不够,或然须求截止多少个会话。

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>

5)怎么着确认当前是DAC连接依旧普通连接

SQL Server 尽力使 DAC
连接成功,但在那么些例外的图景下也恐怕会出现一连败北。

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。

上面包车型地铁两篇blog涉及到的主干是DAC访问单机单实例的气象。本文试图对DAC访谈单机多实例的景色也做个探讨。

此专项使用管理员连接 (DAC) 帮助 SQL Server 的加密效率和任何安全成效。DAC
只同意将用户上下文切换来其余管理用户。

C:\Documents and Settings\guoqiang>sqlcmd -S qiangguo\ods -A
1>

可以使用下面的SQL:
select s.session_id,
 s.login_time,
 s.login_name,
 s.host_name,
 p.endpoint_id,
 p.protocol_desc,
 p.name
from sys.dm_exec_sessions s
inner join sys.endpoints p on s.endpoint_id = p.endpoint_id

你可以从login_time,login_name,host_name来判断出哪一个是你当前的连接session,如果是DAC连接的话,你能从name列看到“Dedicated Admin Connection”。

SQL Server
为大班提供了一种特有的确诊连接,以供在不可能与服务器建设构造正式连接时选取。尽管在
SQL Server 不响应规范连接要求时,管理员也足以利用此检查判断连接访问 SQL
Server,以便实践检查判断查询并缓和难题。

2 专项使用管理员连接有哪些用?
就算在 SQL Server 不响应标准连接央浼时,管理员也足以利用这种连接访问 SQL
Server,以便实行会诊查询并缓解难点。
协会者可以由此 DAC 访问正在周转的 SQL Server Database Engine
实例来消除服务器的故障(即便该服务器已截止响应其余客户端连接)。

通过DAC来访问单机多SQL Server实例的情况要复杂一些。上面的几条命令行在这种情况下都会失效。原因在两个:
a) DAC访问是实例级别的,服务端得有办法知道你要访问的是哪个实例;
b) 在单机多实例的情况下监视DAC访问的是随机端口,而不再是默认的1434(当然,具体的端口号在SQL Server启动的时候是确定的,可以在SQL Server启动的Log中找到:打开SSMS--->连接到数据库实例--->Management--->SQL Server Logs--->Current,在里面找到类似”Dedicated admin connection support was established for listening locally on port 50458.“)

--怎么破?
我们在访问数据库引擎的时候,碰到单机多实例的情况有两种办法,一种是在配置S参数的时候加上实例名,一种是加实例端口号。命令行的形式类似下面:
sqlcmd -S myServer\InstanceName -U myUser -P myPassword
sqlcmd -S xxx.xxx.xxx.xxx\InstanceName -U myUser -P myPassword
sqlcmd -S myServer,6xxx -U myUser -P myPassword
sqlcmd -S xxx.xxx.xxx.xxx,6xxx -U myUser -P myPassword

先从实例名着手:
sqlcmd -S myServer\InstanceName -U myUser -P myPassword -A
sqlcmd -S xxx.xxx.xxx.xxx\InstanceName -U myUser -P myPassword -A
sqlcmd -S ADMIN:myServer\InstanceName -U myUser -P myPassword
sqlcmd -S ADMIN:xxx.xxx.xxx.xxx\InstanceName -U myUser -P myPassword

经测试确认,以上4种连接方式都是OK的。注意一点,对于InstanceName的解析是服务器上的“SQL Server Browser”进行的,如果这个服务不在运行,DAC的访问是要失败的。流程是:Browser根据“myServer\InstanceName”或者“xxx.xxx.xxx.xxx\InstanceName”找到你要访问的实例,然后根据“-A”或者“ADMIN:”找到你要访问的端口。

既然这样可以进行DAC访问,那用类似访问数据库引擎的方式,把上面命令中的“\InstanceName”改成",xxxx"格式的端口号是不是也行呢?
sqlcmd -S myServer,xxxx -U myUser -P myPassword -A
sqlcmd -S xxx.xxx.xxx.xxx,xxxx -U myUser -P myPassword -A
sqlcmd -S ADMIN:myServer,xxxx -U myUser -P myPassword
sqlcmd -S ADMIN:xxx.xxx.xxx.xxx,xxxx -U myUser -P myPassword

如果你在几个命令行中配的端口号跟访问数据库引擎时候配置的端口号是一样的话,答案是不行。原因在哪里呢?那个端口是数据库引擎的访问端口,并不是被监听的DAC端口,因为不在一个频道上DAC还不知道你想访问。我的理解,在命令行中指定了端口号的情况下,Browser认为那就是你想访问的端口,结果因为它并不是那个随机的DAC端口而导致了失败。

DAC访问侦听跟数据库引擎一样,从根本上来说也是一个tcp服务(关于这一点你可以查看sys.endpoints来确认)。是服务,我们如果能知道它侦听的端口号就应该能解决问题。但不幸也在这儿,如上面b)所说,在单机多实例的情况下这个被监听的端口是随机的。视图sys.endpoints是能查到当前SQL Server实例上的tcp服务信息的,每个endpoint都有一条记录,比如你就能在这里查到用于镜像的5022,但遗憾的是对于DAC,端口那一列却显示的是0.通过端口访问的这条路我没能走通。

示例

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

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

这段时间,管理员能够实行查询来检查判断难点,而且能够告一段落甘休响应的对话。

没辙连接到 ADMIN:QIANGGUO\ODS。

admin

相关文章

发表评论

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