专用管理连接(DAC)和单用户模式
数据库运维人员,在维护数据库时,有时会遇到一些特殊的情况,例如,SQL Server实例无法访问,此时需要用到管理员在紧急情况下专用的连接;有时,在做一些系统级别的配置修改时,当前数据库不能被其他用户访问,必须把数据库切换到单用户模式。居安思危,在系统正常运行时,多做一些演练,避免在真正出现异常时,手忙脚乱。先解释一下两个术语:
专用管理连接(Dedicated Administrator Connection, DAC)是SQL Server提供的一个特殊的诊断连接,用于连接数据执行诊断查询和故障排除,当其他任何方式都无法连接不到SQL Server时,DAC是唯一的方法。不是所有的Login都可以使用DAC,只有sysadmin 服务器角色的成员,才可以使用DAC。每个SQL Server实例,只能有一个DAC连接。如果当前已经有一个DAC连接,SQL Server抛出错误 17810。
单用户模式( Single-User mode),是指只允许一个用户连接到SQL Server实例或数据库,通常情况下,单用户模式用于修复系统数据库等维护操作,例如,还原master数据库,修改实例级别的配置选项。
一,连接DAC
通常情况下,DBA通过sqlcmd 命令行工具访问SQL Server,登陆到SQL Server实例所在的主机(Host),以Administrator身份运行DOS界面,输入命令:sqlcmd -A,参数-A指定的是Administrator选项。

默认情况下,DAC尝试去连接跟Login关联的默认的数据库,如果默认的数据库离线,或不可访问,DAC连接抛出错误 4060,可以使用 -d 参数指定登陆的数据库,推荐登陆master数据库,因为,一旦SQL Server实例启动成功,那么master数据库必定处于在线和可访问状态,sqlcmd 命令行代码如下:
sqlcmd –A –d master
sqlcmd的参数是大小写敏感的,常用参数是:
sqlcmd
-S [protocol:]server[\instance_name][,port]
-E (use trusted connection)
-U login_id
-P password
-d db_name
-A (dedicated administrator connection)
-q "cmdline query"
-Q "cmdline query" (and exit)
二,单用户模式( Single-User mode)
SQL Server支持两种启用单用户模式的方法:在启动SQL Server实例时进入单用户模式,在SQL Server实例运行时把数据库切换到单用户模式,前者是SQL Server实例级别,后者是数据库级别。
1,启动参数(startup option)
启动参数用于在SQL Server 实例启动时,指定实例级别的选项,默认的启动参数是:
- -d master_file_path :用于指定master数据库的数据文件路径
- -l master_log_path :用于指定master数据库的日志文件路径
- -e error_log_path :用于指定存储错误日志的的文件路径
这些默认参数是在安装SQL Server时,系统自动指定的,DBA能够通过SQL Server 配置管理器(SQL Server Configuration Manager)查看和配置 Startup Parameters,如下图所示,通过Add按钮增加启动参数,通过Remove删除启动参数:

2,使用启动参数启用单用户模式
参数 -m ,以单用户模式开始SQL Server实例。使用该选项,当DBA以-m参数启动SQL Server实例时,DBA却无法登陆SQL Server实例,一个未知的客户端应用程序已经占用了唯一的连接,SQL Server实例抛出的异常是:当前已经有用户登陆,
参数 -mClientApplicationName 能够指定允许登陆的客户端应用程序,ClientApplicationName是大小写敏感的。
例如, 参数 -mSQLCMD 指定连接到SQL Server实例的连接必须是sqlcmd 客户端程序,参数 -m"Microsoft SQL Server Management Studio - Query" 指定连接到SQL Server实例的连接必须是SSMS。
3,在SQL Server实例运行时,把数据库切换到单用户模式
在设置数据库进入单用户模式(SINGLE_USER)时,确保数据库选项 AUTO_UPDATE_STATISTICS_ASYNC 被设置未OFF,这是一个后台进程,用于更新数据库的统计信息,当该选项被设置未ON,该后台进程会占用数据库的唯一的连接,这样,其他用户无法访问到数据,使用如下脚本禁用 AUTO_UPDATE_STATISTICS_ASYNC选项:
ALTER DATABASE database_name
SET AUTO_UPDATE_STATISTICS_ASYNC OFF;
当把数据库切换到单用户模式时,如果其他用户已经连接到数据库,那么,该连接将会被关闭,SQL Server也不会提供任何警告。在切换到单用户模式时,通常会使用 WITH ROLLBACK IMMEDIATE 选项,这会导致未完成的事务立即回滚,并立即把其他连接断开。命令执行完成之后,数据库切换到单用户模式,等到维护操作结束之后,用户可以在当前的连接中执行命令,把数据库切换到多用户模式(MULTI_USER),这样其他用户可以正常连接到数据库。
USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks2012
SET MULTI_USER;
GO
四,登陆触发器(Logon Trigger)
登陆触发器有时会阻止所有用户访问数据库,包括sysadmin角色的成员,当无法连接到SQL Server实例时,使用DAC是唯一的途径,DBA只能使用DAC登陆到数据库,删除登陆触发器,把数据库恢复到正常访问状态。
Step1:使用DAC连接到数据库,以管理员身份(Run as Administrator)启动DOS界面,使用sqlcmd连接DAC:
sqlcmd -A
Step2:删除登陆触发器,在命令行中输入以下命令,输入go (batch分隔符),执行命令,删除登陆触发器
drop trigger login_trigger_name
on all server;
go
参考文档:
Diagnostic Connection for Database Administrators
Database Engine Service Startup Options
Start SQL Server in Single-User Mode
Set a Database to Single-user Mode
专用管理连接(DAC)和单用户模式的更多相关文章
- CentOS单用户模式下修改ROOT密码和grub加密
Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 Linux 系统启动到多用户模式,并提供正常的网络服务.如果系统管理员需要进行系统维护或系统出现启动异常时 ...
- centos单用户模式:修改ROOT密码和grub加密
centos单用户模式:修改ROOT密码和grub加密 CentOSLinux网络应用配置管理应用服务器 Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 ...
- CentOS 单用户模式:修改Root密码和grub加密[转]
原文出处: http://zhengdl126.iteye.com/blog/430268 Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 Linux 系 ...
- SQL SERVER的单用户模式以及专用管理员连接
2007-03-08 18:22:03.46 server Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:1 ...
- centos单用户模式修改ROOT密码
首先启动的时候的时候,需要进入单用户模式(进入单用户模式的前提是系统引导器能正常工作),单用户模式是不需要输入密码,并且(进入单用户模式,没有开启网络服务,不支持远程连接 )网上说可以通过GRUB ( ...
- 单用户模式启动SQL Server实例总结
在SQL Server的数据库维护过程中,有时候在一些特殊情况下需要在单用户模式下启动SQL Server实例. 下面总结一下单用户模式启动SQL Server的几种方式: 1:命令模式(sqls ...
- postgres - 以单用户模式运行一个 PostgreSQL服务器
SYNOPSIS postgres [ -A 0 | 1] [ -B nbuffers] [ -c name=value] [ -d debug-level] [ --describe-config ...
- centos6.5单用户模式拯救系统
系统出现启动异常,某个软件卡住了不能启动(按Fx键可以查看是哪个软件卡住了),需要进入单用户模式或修复模式对系统进行管理. 使用单用户模式有一个前提,只要系统引导器(grub)能正常工作,否则要进行系 ...
- SqlServer:此数据库处于单用户模式,导致数据库无法删除的处理
此数据库处理单用户模式,尚在连接当中,无法删除(既使将SQLServer停止后再启动也是如此) USE [master] GO /****** Object: StoredProcedure [dbo ...
随机推荐
- Oracle 11g的安装详细过程
本次采用的电脑为win10 专业版,以下为本人电脑的配置情况: 本人是第一次在win10系统上面进行oracle 11g的安装. 以下为安装步骤: 一.下载软件包 以下为各种oracle安装包的下载网 ...
- 【Linux】CentOS7无法使用tab补全功能
公司新项目在云环境上用CentOS7搭服务器的时候,遇见了无法Tab键自动补齐的情况,上网搜了一下,是因为Centos7在使用最小化安装的时候,没有安装自动补全的包,需要自己手动安装. yum ins ...
- 总结切面编程AOP的注解式开发和XML式开发
有段日子没有总结东西了,因为最近确实有点忙,一直在忙于hadoop集群的搭建,磕磕碰碰现在勉强算是能呼吸了,因为这都是在自己的PC上,资源确实有点紧张(搭建过程后期奉上),今天难得大家都有空(哈哈哈~ ...
- JS小福利 —— 实时更新的页面小时钟
今天小女刚学会了一个好玩的小玩意儿~~特来跟大家分享一下~~~ 这是一个有趣的时钟显示程序,可以进行实时的年月日.星期.时分秒更新,有了这组小代码,以后可以作为日期插件应用在大型的JS代码中哦~~ 积 ...
- 早期MyBatis开发与接口式Mybatis开发的简介
早期MyBatis开发与接口式Mybatis开发的简介 一.早期版本的myBatis使用 导jar包 1.配置mybatis.xml的配置文件 1) ...
- MySQL(七)MySQL常用函数
前言 上一篇给大家介绍了,MySQL常用的操作符其实已经是非常的详细了,现在给大家分享的是MySQL的常用函数.希望对我和对大家都有帮助. 一.字符串函数 1.1.LOWER.lcase(string ...
- 最近找java实习面试被问到的东西总结(Java方向)
时间,就是这么很悄悄的溜走了将近两个年华,不知不觉的,研二了,作为一个一般学校的研究生,不知道该说自己是不学无术,还是说有过努力,反正,这两年里,有过坚持,有过堕落,这不,突然间,有种开窍的急迫感,寻 ...
- Mysql分区表使用的一些限制和需要注意的地方
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt347 mysql分区策略都基于两个非常重要的假设:查询都能够过滤(prunn ...
- Oracle数据库只读事务和无事务的区别
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt382 Oracle默认情况下(没有事务) 保证了SQL语句级别的读一致性,即 ...
- webpack2学习日志
webpack说容易也容易,说难也难,主要还是看个人,想学到什么样的程度,很多公司可能要求仅仅是会用就行,但是也有一些公司要求比较高,要懂一些底层的原理,所以还是要花一些时间的,看个人需求.这篇仅仅是 ...