专用管理连接(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

参考文档:

sqlcmd Utility

Diagnostic Connection for Database Administrators

Database Engine Service Startup Options

Start SQL Server in Single-User Mode

Set a Database to Single-user Mode

时间: 2024-09-28 22:50:44

专用管理连接(DAC)和单用户模式的相关文章

CentOS单用户模式下修改ROOT密码和grub加密

Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 Linux 系统启动到多用户模式,并提供正常的网络服务.如果系统管理员需要进行系统维护或系统出现启动异常时,就需要进入单用户模式或修复模式对系统进行管理了. 使用单用户模式有一个前提,就是您的系统引导器(grub)能正常工作,否则要进行系统维护就要使用修复模式. 特注:进入单用户模式,没有开启网络服务,不支持远程连接 Linux 系统中不同的运行级别(Run Level)代表了系统的不同运行状态,例如

centos单用户模式:修改ROOT密码和grub加密

centos单用户模式:修改ROOT密码和grub加密 CentOSLinux网络应用配置管理应用服务器 Linux 系统处于正常状态时,服务器主机开机(或重新启动)后,能够由系统引导器程序自动引导 Linux 系统启动到多用户模式,并提供正常的网络服务.如果系统管理员需要进行系统维护或系统出现启动异常时,就需要进入单用户模式或修复模式对系统进行管理了. 使用单用户模式有一个前提,就是您的系统引导器(grub)能正常工作,否则要进行系统维护就要使用修复模式.特注:进入单用户模式,没有开启网络服务

SQL SERVER的单用户模式以及专用管理员连接

2007-03-08 18:22:03.46 server    Microsoft SQL Server  2000 - 8.00.2039 (Intel X86) May  3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft CorporationDeveloper Edition on Windows NT 5.1 (Build 2600: Service Pack 2)2007-03-08 18:22:03.46 server    Cop

单用户模式连接以及故障排除

场景:这是一个命名实例,需要进入单用户模式进行维护. 一.启动实例 我们将直接使用命令行窗口启动.参考文章:<忘记管理员密码的补救办法> http://jimshu.blog.51cto.com/3171847/1563207 1. 找到 sqlservr.exe 的路径 在Windows的"服务"中找到这个命名实例,查出"可执行文件的路径".例如: "C:\Program Files\Microsoft SQL Server\MSSQL10_

centos6.5单用户模式拯救系统

系统出现启动异常,某个软件卡住了不能启动(按Fx键可以查看是哪个软件卡住了),需要进入单用户模式或修复模式对系统进行管理. 使用单用户模式有一个前提,只要系统引导器(grub)能正常工作,否则要进行系统维护就要使用修复模式.进入单用户模式,没有开启网络服务,不支持远程连接 1.Linux开机引导的时候,按键盘上的e 就可以进入进入GRUB菜单界面. 2.在出现GRUB引导画面时(CentOS(2.6.18-274**)),按字母e键,进入GRUB编辑状态. 3.把光标移动到kernel ...那

linux单用户模式修改root密码和grub密码设定

linux管理员在接管新服务器的时候,有一个常见的问题就是root密码的重置.如root密码长时间不用,或者接管一个陌生的服务器,需要用到单用户模式来重置root的密码. 以下内容是虚拟机VMware11下的centos 6.6版本的介绍: 一.单用户模式修改root密码: 1. 开机显示3s内按任意键,进入选择模式,随便按一个键: 2. 根据提示,点字母e进入编辑模式. 3. 光标选中第二项,再点字母e. 4. 进入编辑模式,在最后面加空格,输入1 .s .S都可以,然后点击回车.再根据后续的

1.13 单用户模式;1.14 救援模式;1.15 克隆虚拟机;1.16 Linux机器相互登录

1.13 单用户模式: 重启命令: reboot init 6 shutdown -r now 关机命令: init 0 poweroff 1. 开机界面:在倒计时进入系统时,快速操作键盘任意键: 选中第一项:CentOS Linux (3.10.0-514.e17.X86 64) 7 (Core) --按键盘:e(编辑模式) 2. 键盘方向键移动--移动到linux16开头的行, 找到ro更改为rw,空格后添加:init =sysroot/bin/sh 3. 进入内存操作系统: 键盘Ctrl

1周4次课 单用户模式,救援模式,克隆虚拟机,linux相互登录

如果我们在生产环境中忘记了root用户的密码,在Linux下有两种方法,第一种为单用户模式,是在系统启动时选择一下,它类似与windows的安全模式.方法是首先重启linux,(重启命令有reboot.lint6.shutdown -r now.关机命令有init0.pweroff).编辑grub然后进入下一步输入ls命令,然后找到sysroot下的bin目录然后切换到原来的系统环境中, 可以使用chroot /sysroot命令然后确认在原来的系统中,输入passwd root更改密码确认密码

单用户模式 救援模式 克隆虚拟机 linux机器互相登录

一.单用户模式忘记root密码:方法一:使用单用户模式linux重启命令:reboot.init 6.shutdown -r nowlinux关机命令:init 0.poweroff虚拟机开机重启按方向键上下键进行选择,选择第一个,按e键进入如下界面,按向下方向键找到下图标记处修改ro为rw并添加字符串: init=/sysroot/bin/sh(注释:ro表示只读,rw表示读写),添加完这些,按Ctrl+x切换系统:chroot /sysroot/,这样就登录上原来使用的操作系统了,然后修改密