在玩Server时,我遇到了一个半隐错误。基本上,我只需要登录DAC。对于什么时候需要发援会有什么一般性的建议吗?我如何知道我需要它来访问sys.sysobjvalues,而无需搜索错误消息?
发援会提供什么访问权?
发布于 2017-12-17 11:34:21
DAC (专用管理连接)仅用于故障排除目的(一个元数据工具)。如果无法访问或连接到Server,则SQL Server DBA将其用作最后手段。在某些情况下,一个进程或某个人试图使用您所有的系统内存和CPU,而没有人可以使用Server (没有新的进程可以连接)。
DAC是在Server 2005中构建的,因为在Server 2005之前,如果我们无法访问/连接到Server,则可以关闭所有会话并重新启动Server。在Server 2005中,Microsoft决定创建DAC,用于故障排除(后门)。
当我们连接为DAC (特殊连接)时,我们有专用处理器(调度器)和一个预留内存来运行一个简单的查询。我们需要一个系统管理员的权限来连接。我们只能通过登录到本地服务器并进行连接来在本地进行连接(除非您需要对需要远程DAC的集群或AGs进行故障排除)。在SQL Server中只有一个可以作为DAC连接的会话,在我们断开DAC会话之前,没有人可以作为DAC连接。
我们可以通过查询来检查是否有人在使用DAC:
SELECT dese.session_id
FROM sys.tcp_endpoints as te
JOIN sys.dm_exec_sessions as dese ON te.endpoint_id = dese.endpoint_id
WHERE te.name ='Dedicated Admin Connection';当我们作为发援会连接时,我们能做些什么:
我们不能做的是:
我们不能在正常连接中查询系统表。
试一试
SELECT * FROM sys.objects WHERE type_desc='SYSTEM_TABLE';。这些表是在正常连接中无法查询的。

当我们作为DAC连接时,您可以访问系统表(例如。sys.sysrscols)

最后,作为一种最佳做法,始终在使用后断开DAC连接。
我建议使用SSMS、阅读有关服务器内部结构的书和服务器故障排除。它不是特定于Server 2017,但大多数概念仍然适用于当前版本的Server。
来自微软:
重要事项:系统基表仅在Server数据库引擎中使用,不适合一般客户使用。它们可能会发生变化,兼容性也得不到保证。使用DAC访问系统基表是为Microsoft人员设计的,并不是受支持的客户场景。
https://dba.stackexchange.com/questions/193336
复制相似问题