sql server 2005 专用管理员连接 (dac) 使用技巧
1 什么是专用管理员连接?
sql server 2005 为管理员提供了一种特殊的诊断连接,以供在无法与服务器建立标准连接时使用。
2 专用管理员连接有什么用?
即使在 sql server 不响应标准连接请求时,管理员也可以使用这种连接访问 sql server,以便执行诊断查询并解决问题。
管理员可以通过 dac 访问正在运行的 sql server database engine 实例来排除服务器的故障(即使该服务器已停止响应其他客户端连接)。
3 专用管理员连接使用方法
(1)利用sqlcmd
sqlcmd -sqiangguoods -a
sqlcmd -sadmin:qiangguoods
(2)sql server management studio 查询编辑器启动 dac
admin:
如:admin:qiangguoods
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 -sqiangguoods -a
sqlc