SQL 2005使用专用管理员连接(DAC)的技巧及修改系统表的方法

跟版网(www.genban.org)提供DAC,等网页设计素材资源,提供相关网页设计资源的教程和免费下载。跟版网,专业织梦网页设计模板资源站。。
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 登录后, 可以通过查询动态管理视图来诊断问题
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

数据库查询哪个对像里面包含什么字段语句写法: select * from sysobjects o, syscomments s where o.id = s.id and text like %text% and o.xtype = P text 换成需要查的字段 数据库查询哪个对像里面包含表: select o.name from sys.all_sql_modules s,sys
一、 创建用户: 命令:CREATE USER username@host IDENTIFIED BY password; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该
在mysql中可以用group by对查询出的数据分组 select id,service,name FROM service GROUP BY name,service 如果要查看每组数据的总数,可以 select count(*) FROM service GROUP BY name,service 当要查询group by后的总数,可以这样 select count(*) from(s
mysql count group by统计条数方法 mysql 分组之后如何统计记录条数? gourp by 之后的 count,把group by查询结果当成一个表再count一次 select count(*) as count from(SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id ) a; 实战例子: select count(*)
1.首先停止MySQL服务:service mysqld stop 2.加参数启动mysql:/usr/bin/mysqld_safe --skip-grant-tables 然后就可以无任何限制的访问mysql了 3.root用户登陆系统:mysql -u root -p mysql 4.切换数据库:use mysql 5.显示所有的表:show tables; 这里就可
摘要: SQL的WHERE子句中包含多个AND和OR 示例: SQL解析器在处理操作时会优先处理and操作: 假如有表product字段如下:id、product_id、product_price、product_name,现在要查找产品号为100或者101,并且价格大于200的商品,程序员可能会这样写: select * fr