改过域名惹的祸,和单顾客情势

在SQL Server 中,master 数据库记录系统级别的元数据,例如,logon accounts, endpoints, linked servers, and system configuration settings,同时,master 数据库记录其他数据库及其文件的位置,因此,在启动SQL Server实例时,master数据库必须最先启动。master 数据库是如此重要,必须频繁地备份master数据库。Only full database backups of master can be created.

数据库运维人员,在维护数据库时,有时会遇到一些特殊的情况,例如,SQL Server实例无法访问,此时需要用到管理员在紧急情况下专用的连接;有时,在做一些系统级别的配置修改时,当前数据库不能被其他用户访问,必须把数据库切换到单用户模式。居安思危,在系统正常运行时,多做一些演练,避免在真正出现异常时,手忙脚乱。先解释一下两个术语:

转载自我的博客:修改域名惹的祸

一,备份master数据库

专用管理连接(Dedicated Administrator Connection, DAC)是SQL Server提供的一个特殊的诊断连接,用于连接数据执行诊断查询和故障排除,当其他任何方式都无法连接不到SQL Server时,DAC是唯一的方法。不是所有的Login都可以使用DAC,只有sysadmin 服务器角色的成员,才可以使用DAC。每个SQL Server实例,只能有一个DAC连接。如果当前已经有一个DAC连接,SQL Server抛出错误 17810。

做了一件很脑残的事,神不知鬼不觉,我将一台存储重要数据的服务器的域名修改了,该服务器是在Hyper-V中创建的VM,修改VM的域名之后,部署在该VM上SQL Server实例就没有权限访问了,通常的管理员账户也访问不了,本地的Administrator账户没有密码,心想,这下完了,捅了这么大的娄子,服务器上1TB的数据怎么搞?虽然,数据最终被成功转移,但是,过程十分曲折,禁不住感慨:当年欠的技术,必须一点点学回来。情怀不说了,上干货。

master数据库只能做full backup,不能做差异备份和事务日志备份,原因是master只能处于Recovered 状态,不能处于NoRecovery(recovering)状态。

单用户模式( Single-User mode),是指只允许一个用户连接到SQL Server实例或数据库,通常情况下,单用户模式用于修复系统数据库等维护操作,例如,还原master数据库,修改实例级别的配置选项。

VM上安装的操作系统是Windows Server 2012 R2 Data Center,使用我的管理员账户登录,登陆失败。在登录界面弹出警告消息: “The security database on the server does not have a computer account for this workstation trust relationship”。有这么一堵墙横亘在我面前,就是项目组不记得本地管理员账户 Administrator 的密码。

backup database [master]
to disk = 'D:TestDBBackupFoldermaster_1.bak' --specify new backup file
with
compression,
format,
init,
skip,
stats=5

一,连接DAC

图片 1

二,还原master数据库

通常情况下,DBA通过sqlcmd 命令行工具访问SQL Server,登陆到SQL Server实例所在的主机(Host),以Administrator身份运行DOS界面,输入命令:sqlcmd -A,参数-A指定的是Administrator选项。

既然VM不能访问,而我又必须登录到VM,心里有点虚,Windows Server的安全系统是纸老虎吗?不管怎么样,不能不战而被吓倒,首先要解决的问题是如何破解本地管理员Administrator的密码。VM上存储的数据不能被破坏,只能通过Windows镜像文件尝试修改操作系统。如何重置本地管理员的密码?感谢老黄的协助。

master数据库必须在单用户模式下还原,因此,在还原master数据之前,必须先停止SQL Server的所有服务(Service),包括MSSQLServer、Agent、Broser、Fulltext等,避免其竞争访问MSSQLService,然后,以管理员打开命令行;

图片 2

step1,修改VM的Firmware,从DVD驱动器加载Windows的镜像文件

step1,使用命令行net start,以single user 模式启动SQL Server实例的Service:MSSQLServer

默认情况下,DAC尝试去连接跟Login关联的默认的数据库,如果默认的数据库离线,或不可访问,DAC连接抛出错误 4060,可以使用 -d 参数指定登陆的数据库,推荐登陆master数据库,因为,一旦SQL Server实例启动成功,那么master数据库必定处于在线和可访问状态,sqlcmd 命令行代码如下:

图片 3

参数/m“sqlcmd”:表示以单用户(Single User)模式启动Service,并且,只允许sqlcmd客户端访问service;

sqlcmd –A –d master

step2,当出现以下界面时,按下任意键,从DVD驱动器加载镜像文件

net start MSSQLSERVER /m"sqlcmd"

sqlcmd的参数是大小写敏感的,常用参数是:

图片 4

step2,使用sqlcmd登录到SQL Server实例

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)

step3,点击“Repair your computer”,利用镜像文件修复计算机

-E:指定sqlcmd以信任连接(trusted connection)方式登录Service,参数-E是默认的;

二,单用户模式( Single-User mode)

图片 5

-S:指定sqlcmd连接的Server-Name

SQL Server支持两种启用单用户模式的方法:在启动SQL Server实例时进入单用户模式,在SQL Server实例运行时把数据库切换到单用户模式,前者是SQL Server实例级别,后者是数据库级别。

step4,选择Troubleshoot,在这里能够使用高级工具修复操作系统

sqlcmd -E -S server-name

1,启动参数(startup option)

图片 6

step3,使用sqlcmd还原master数据库,由于SQL Server实例中已经存在master数据库,必须指定replace选项,将原有的master数据库替换掉;

启动参数用于在SQL Server 实例启动时,指定实例级别的选项,默认的启动参数是:

step5,从高级选项中,选择命令行(Command Prompt)进行高级故障排除操作

restore database master
from disk='D:DBBackupmaster.bak'
with replace;
go
  • -d master_file_path  :用于指定master数据库的数据文件路径
  • -l master_log_path   :用于指定master数据库的日志文件路径
  • -e error_log_path     :用于指定存储错误日志的的文件路径

图片 7

master数据还原完成之后,启动SQL Server实例的Service,就可以正常访问SQL Server实例。

这些默认参数是在安装SQL Server时,系统自动指定的,DBA能够通过SQL Server 配置管理器(SQL Server Configuration Manager)查看和配置 Startup Parameters,如下图所示,通过Add按钮增加启动参数,通过Remove删除启动参数:

step6,进入命令行界面,修改VM开机加载的辅助程序

 

图片 8

进入到System32目录下,先将辅助程序Utilman重命名为Utilman_bak,然后将cmd复制为Utilman。

参考文档:

2,使用启动参数启用单用户模式

百度百科:utilman.exe是一个系统进程,为Windows辅助工具管理器程序。

SqlServer系统数据库还原(三)系统数据库master-msdb-model 还原模拟测试

参数 -m ,以单用户模式开始SQL Server实例。使用该选项,当DBA以-m参数启动SQL Server实例时,DBA却无法登陆SQL Server实例,一个未知的客户端应用程序已经占用了唯一的连接,SQL Server实例抛出的异常是:当前已经有用户登陆,

C:
cd WindowsSystem32
ren Utilman.exe Utilman_bak.exe
copy cmd.exe  Utilman.exe

master Database.aspx)

参数 -mClientApplicationName 能够指定允许登陆的客户端应用程序,ClientApplicationName是大小写敏感的。

这样做的原理是:修改VM开机加载的辅助程序,在Windows登录界面上有轻松访问(Ease of access)辅助工具。当我们从登录界面点击轻松访问时,Windows会启动命令行工具(cmd),此时,虽然我们没有方法登录到Windows Server中,但是,我们拥有系统的最高权限,通过cmd,我们可以进行高级的故障排除,或者你想干的任何事。

Restore the master Database (Transact-SQL).aspx)

例如, 参数 -mSQLCMD 指定连接到SQL Server实例的连接必须是sqlcmd 客户端程序,参数 -m"Microsoft SQL Server Management Studio - Query" 指定连接到SQL Server实例的连接必须是SSMS。

图片 9

Start SQL Server in Single-User Mode.aspx)

3,在SQL Server实例运行时,把数据库切换到单用户模式

step7,重启VM,重置Administrator的密码

sqlcmd Utility.aspx)

在设置数据库进入单用户模式(SINGLE_USER)时,确保数据库选项 AUTO_UPDATE_STATISTICS_ASYNC 被设置未OFF,这是一个后台进程,用于更新数据库的统计信息,当该选项被设置未ON,该后台进程会占用数据库的唯一的连接,这样,其他用户无法访问到数据,使用如下脚本禁用 AUTO_UPDATE_STATISTICS_ASYNC选项:

上述设置完成之后,重启VM,正常进入到登录界面,点击登录界面的轻松访问(Ease of access)辅助工具,

Use the sqlcmd Utility.aspx)

ALTER DATABASE database_name 
SET AUTO_UPDATE_STATISTICS_ASYNC OFF;

图片 10

当把数据库切换到单用户模式时,如果其他用户已经连接到数据库,那么,该连接将会被关闭,SQL Server也不会提供任何警告。在切换到单用户模式时,通常会使用 WITH ROLLBACK IMMEDIATE 选项,这会导致未完成的事务立即回滚,并立即把其他连接断开。命令执行完成之后,数据库切换到单用户模式,等到维护操作结束之后,用户可以在当前的连接中执行命令,把数据库切换到多用户模式(MULTI_USER),这样其他用户可以正常连接到数据库。

由于辅助工具的执行文件被替换为cmd,Windows会启动命令行工具,在命令行工具中,通过net user命令,重置Administrator的密码

USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks2012
SET MULTI_USER;
GO

图片 11

四,登陆触发器(Logon Trigger)

step8,使用Administrator的新密码登录VM

登陆触发器有时会阻止所有用户访问数据库,包括sysadmin角色的成员,当无法连接到SQL Server实例时,使用DAC是唯一的途径,DBA只能使用DAC登陆到数据库,删除登陆触发器,把数据库恢复到正常访问状态。

图片 12

Step1:使用DAC连接到数据库,以管理员身份(Run as Administrator)启动DOS界面,使用sqlcmd连接DAC:

终于,我还是成功登录VM了,在第一时间打开SSMS,登录SQL Server的默认实例 VMxxx,发现登录不上,SQL Server抛出以下错误消息:

sqlcmd -A

图片 13

Step2:删除登陆触发器,在命令行中输入以下命令,输入go (batch分隔符),执行命令,删除登陆触发器

认真查看该错误消息,当建立到SQL Server的连接时,出现网络相关或指定实例的错误,SQL Server实例找不到或者不可访问。在域中,虽然使用本地管理员账户登录默认实例,但是,由于域名服务器的存在,仍然会出现本地管理员登录不了本地的SQL Server默认实例,根本原因是建立的网络连接路由不到指定的SQL Server的实例名。在本机上,我们可以不通过网络路由器,直接使用localhost,或 点(.)登录本机 ,经过几番曲折,SSMS登录成功,终于打开数据库,喜极而泣。

drop trigger login_trigger_name
on all server;
go

但是,这不是真实的情况,实际上,在登录SQL Server失败时,我走了另外一条曲折的路。因为,当时的我有点慌张,误以为是权限的问题,过程虽然曲折,但是,还是挺有趣,用到DAC( Dedicated Administrator Connection,专用管理员连接)为本机增加数据库的管理员权限。

 

step1,在命令行工具中关闭SQL Server服务

参考文档:

net stop MSSQLServer

sqlcmd Utility.aspx)

图片 14

Diagnostic Connection for Database Administrators.aspx)

step2,通过单用户模式启动SQL Server服务,只允许sqlcmd登录SQL Server实例

Database Engine Service Startup Options

net start MSSQLServer -msqlcmd

Start SQL Server in Single-User Mode

图片 15

Set a Database to Single-user Mode

-msqlcmd:该参数指定以单用户模式打开MSSQLServer服务,只允许sqlcmd程序登录该服务

step3,使用DAC连接到SQL Server实例

sqlcmd -A

图片 16

-A:Logs in to SQL Server with a Dedicated Administrator Connection (DAC). This kind of connection is used to troubleshoot a server.

step4,将本地管理员授予sysadmin角色,如果本地管理员不是SQL Server实例的Login,需要新建Windows域登录名

create login [VMxxxAdministrator]
from windows
with default_database=master;
go
alter server role sysadmin
add member [VMxxxAdministrator]
go

图片 17

授予Administrator数据库管理员的权限之后,使用SQL Server的默认实例名依然登录不上,后来,静下心来,仔细看了看登录失败的错误信息,才恍然大悟,特写一篇随笔,记录一下自己无意“放火”和曲折“救火”的经历。在这里很感谢项目经理麦扣的包容,老黄的协助,谢谢!

参考文档:

class="underline">破解windows系统开机登录密码的一种方法

class="underline">SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法

sqlcmd Utility.aspx)

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:改过域名惹的祸,和单顾客情势

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。