版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
你所不知道的SQLServer数据库启动过程,以及启动不起来的各种问题的分析及解决技巧目前SQLServer数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表、存储过程、视图、函数等一系列应用方式,而当有一天它运行的正常的时候突然启动不起来了,这时候就束手无策了,能做的或许只能是重装、配置、还原等,但这一个过程其实是一个非常耗时的过程,尤其当我们面对是庞大的生产库的时候,可能在这火烧眉毛的时刻,是不允许你再重搭建一套环境的。所以作为一个合格的数据库使用者,我们要了解其启动、运行过程的事情,一旦发生问题,我们也能及时定位,迅速解决。闲言少叙,我们进入本篇的正题。
SQLServer本身就是一个Windows服务,每一个实例对应的就是一个sqlserver.exe进程。这是一个可执行的文件,默认就放在SQLServer的安装目录下,当我们启动的时候,就是直接调用这个文件,然后启动这个服务。
第一部分、SQLServer实例启动的方法和启动所发生的问题
SQLServer实例分为下面几种启动方法:(1)在Windows服务控制台里手动启动,或者自动启动(默认),这个也是最常用的方式(2)第二种方式是SQLServer本身自己提供的启动方式,我们这里可以手动启动(3)在SQLServer的SSMS里面手动启动它,这个方式一般大部分利用这种方式进行手动重启(4)通过Windows命令窗口,用'netstart'命令手动启动,这种方法也可以用以上这几种方式都可以启动SQLSever,并且都会在SQL日志信息中有所记录。
霸气的分割线第二部分、SQLServer实例启动的详细过程以及所发生的问题项第一步、检查注册表项当一个sqlserver.exe文件开始启动的时候,首先要干的第一件事就是先检查它的配置信息存放于注册表的值项比较重要的几个键值有下面几个:这里的AuditLevel:其实就是SQL如何记录用户登录记录;LoginMode:是SQLServer服务器身份验证方式等;BackupDirectory:默认的备份路径等信息;关于注册表信息简要了解即可,不建议做任何修改,当然这些值的信息默认在SQLServer中都能设置:在不修改注册表的情况下,一般这一步的启动顺序一般不会出现问题,当然出现问题了也通常没有办法解决,大部分的解决方式只有重装了。但这一步骤,通常出现以下两个个问题通常是可以解决的:<1>启动账号权限问题如果我们启动SQLServer的进程使用的账号连读注册表的权限都没有,那这个服务是怎么也启动不了的,通常这时候连SQL的错误日志都没有能力生成出来。这时候我们该如何发现呢,虽然这时候它没有能力创建SQL的错误日志,但是它在Windows层面留下了痕迹,我们来看:我将服务启动账号设置成gust来宾账号,来启动该服务这时候会产生以下错误信息:在Windows的日志信息里也会产生一条错误日志记录:这里的拒绝访问指的就是拒绝访问注册表信息了。解决方法:此问题的解决方式就很简单了,只需要将当然的用户提权到SQLServer服务的启动账号就行了,提权的方式也很简单,只需要添加到SQL的本地用户的启动服务组就可以了。当然,也可以直接换一个更高级别的用户登录。一般默认都用的超级管理员账户。<2>访问日志和文件夹出现问题默认在SQLServer启动的时候会创建一个启动日志文件,记录所有正确的日志信息,当然也包括错误的日志信息,如果这时候找不到这个日志信息的路径,或者已经存在一个日志,但是日志被锁定了(某些NB的杀毒软件擅长干这个),这时候这个服务也是启动不了的,同样也创建不出SQLServer的日志文件,这时候我们还得借助于Windows平台本身,来解决。SQLServer启动的创建的日志文件路径,同样存在于注册表项里,我们来看这个参数:这里我们故意改成一个错误的路径,来启动下看看:会产生以下错误系统的错误日志信息错误说明的很清楚。解决方法:这个问题解决起来也很简单,只需要检查好该路径,确保路径下的文件正确就可以。不过有一点需要注意,当SQLServer还没启动起来的时候,有部分错误信息日志需要检查Windows平台下的系统日志。
霸气的分割线
第二步、检查系统配置环境,包括硬盘、内存与CPU等当我们进行完第一步的时候,SQLServer已经读取完注册表信息,完成了它的errorlog文件的创建,然后开始进行第二步的进行,这一步骤所有的信息就会按照顺序依次记录到errorlog文件中,我们可以通过查看该文件来详细跟踪这一步骤的进行,根据上一步的注册表信息,我们先来手动清空下这个日志,然后重启一下SQLServer服务,查看下这个日志记录我们简单大致分了以下几大步骤:一、首先检查系统的软件环境,包括OS版本、电脑信号、内存、硬盘、注册表基础配置项是否正确等二、启动系统数据库master三、开始利用服务用户登录系统、启动系统资源数据库、检查数据库版本信息等四、启动系统数据库model五、开始网络配置进行连接,对外提供服务,使用的默认的1433端口我们接着分析下面的日志:六、其实完成上面的第五步之后,也就开始启动msdb系统数据库七、这时候开始真正的启动用户数据库,并且完整各个库的完整性校验,并且在启动用户数据库之前,先将系统库的tempdb进行清空八、在搭建完成之后,才开始启系统的另外一个数据库tempdb
上面的整个SQL
Server系统启动的过程产生了详细的日志记录,我们下面会依次按照该步骤进行详细的进行逐步分析。在检查系统软硬件环境的过程中,基本不会发生什么致命错误。比较常见的问题就是内存配置问题,其实在上面的日志记录中有一句特别重要,它反映的就是SQLServer利用内存的情况,我们来看:这句话的意思是将所有的数据页锁定到内存中,作为大部分数据库而言,内存就是生命线,SQLServer同样也是,如果系统(64bit中)没有内存压力的情况下,才能将数据页正常的锁定到内存中,如果内存压力过大,系统内存是不允许将数据页也加入到内存中,而这样导致的问题就是SQL
Server严重的性能问题。很多用户希望限制SQLServer内存使用,并且有些客户机将它限制到服务都不能启动的情况,这时候在SQLServer的日志中是这样展现的,我们来看:可以看到,该错误的原因还是挺清楚的,修复该错误的解决方法也很简单,将内存配置调大就可以。跟内存有关的还有一种特殊的情况,就是SQLServer的启动账号在服务器上没有Lockpageinmemory的权限,如果没有这个权限,在明细日志中查看不到上面的日志记录,该问题的解决方法也很简单,只需要将需要权限加上就可,加权限的方式如下:经过上面的步骤基本,完成数据的软硬件检测过程。
霸气的分割线
第三步、启动系统数据库mastermaster数据库是SQLServer系统启动过程中的第一个系统库,是非常关键的数据库。如果这个库不能被正常打开,则SQLServer就不能正常启动。和其它数据库一样,master数据库也分为数据文件和日志文件,启动的过程是依次打开,然后做恢复动作,如果这个过程没问题的话,在Errorlog日志文件中,我们会看到如下的这句话:如果这个过程出现了任何问题,SQLServer的启动过程都会被中断,启动过程失败。而这个过程发生的错误,无非就集中以下几种情况,我们来分析一下:<1>在指定的路径找不到master数据的数据文件或日志文件关于这个SQLServer的最主要的系统数据库的路径,它是以注册表形式存在的,在一下注册表项,可以看到如果在该路径下找不到这个系统数据库的话,服务是启动不了的,并且会产生相应的错误日志信息,我们来模拟下,关掉服务,将这两个文件移除走,然后启动看一下:首先,该服务是启动失败的我们来看一下系统日志看Errorlog的日志信息可以看到,该问题提示错误信息还是挺详细的。我们来看第二种情况<2>文件找到了,但是没有权限访问,或者不能以排他的方式打开该文件(默认的是独占锁进行文件打开的)此种情况也是有可能产生的,比如某些NB的杀毒软件就可以干这个事,让你的系统库无法访问,这样同样也是启动不了的,我们这样来看,提示的错误的信息有哪些:来看Errorlog的错误记录:<3>文件找到了,访问权限也有,但是文件有问题,就是说是数据库损坏了这个问题也经常出现,比如磁盘坏掉了,恢复后发现文件有问题,不能正常打开,这种问题我们来看错误信息:
日志中的信息关于master系统库的启动过程,基本就是上面的三种错误,关于这三种问题,我们该如何解决呢?解决方法:首先如果根据错误日志定位出问题的性质,如果是前两种问题其实是挺好解决的,比如文件没找到、权限项不对等,这些问题相应的去解决就可以,最棘手的就是第三种情况,出现这种情况最理想的情况是master数据库进行了备份,通过备份文件进行恢复就可以,一切就可以正常,当然通过暴力的停掉服务,拷贝文件进去也可以解决。最揪心的就是这个库就没备份,那该如何解决呢?这种方式的解决就得借助SQLServer的安装程序,进行重建master数据了,但是这种方式重建的master数据库会导致以前的SQLServer的设定全部清空掉。清空的信息包括:所有的账户信息(意味着需要重建)、msdb中的所有job信息等(也需要重建)、用户数据库信息(必须全部重新附加attch上)而这一系列过程如果是一个生产库,可能会是一个非常大的工作量!
霸气的分割线
第四步、启动系统资源数据库,并检查数据版本信息资源数据库是SQLServer2005中引入的逻辑数据库,在实例下是看不到的,但是有它的物理文件,主数据库默认名称为:mssqlsystemresource.mdf、日志名称为:mssqlsystemresource.ldf如果该数据库启动的过程中也出现了问题,那SQLServer也不能正常启动。这个系统数据库比较特别,它是一个只读数据库,完全由SQLServer自己维护,用户是不能更改的,所以我们只要保证它的是数据库文件和日志完好就可以,不需要对它进行任何的跟踪和维护。当然如果非要看这个数据库,可以通过单用户的DAC方式进行连接。所以这个数据库在一般情况下不会发生意外,基本上是能正常启动,不过特殊情况下,不能启动的情况就以下两种:<1>数据库文件不存在,无法访问,或者文件坏掉了其实它的报的错误信息,类似于上面的master数据库,我来截个图,看一下:这个是errorlog记录的错误信息在windows层面也有它自己的错误日志信息:<2>资源数据库的版本和SQLServer的版本不一致这个有可能是人为的更改了这个资源数据库,导致现有的资源数据库文件和数据库版本不一致,这样的话也会导致错误的形成
windwos平台也记录下了该错误的信息,看下面的图片:
解决方法:关于资源库的这两个问题解决方法,非常的简单。只要找到和这台服务器上的SQLServer的版本一致的数据库,拷贝过来就行。当然最好的预防措施是:每当安装完SQLServer或者打完补丁之后,就及时的备份这个两个文件,放在安全的地方,用的时候拷贝过来就行,备份是数据库管理员的天职当然有时候在紧急的情况下,找不到相同版本的数据库,理论上这个库是只读的,所以不会发生任何改变,我们随便找一台机器,安装一下同版本数据库,然后拷贝过来就行,当然一定注意的是这里面是相同版本。
霸气的分割线第五步、启动系统数据库modelmodel系统数据库同样也是SQLServer启动过程中用到的一个非常关键的数据库,如果这个库损坏,SQLServer启动也会失败,关于model数据不能启动的原因基本和master的类似,同样也是两种:1、数据库文件早不到或者不能访问;2、数据库文件能访问但是是损坏的文件。诊断此种问题的方式也和上面的两种方式一样,查看启动过程产生的errorlog文件或者windows系统日志,这里我们就不重现该问题了。我们只给出此种问题的解决方法:1、如果该库我们已经做过备份,那最直接也是最有效的解决方式就是直接还原,这里的还原方式可能和普通库的还原方式不一样,因为SQL
Server实例还没有启动,我们恢复过程采取以下过程:a.用参数启动SQLServer,在命令提示行中执行以下命令,这样的话SQLServer启动就会跳过model数据库恢复这一步netstartMSSQLSERVER/f/m/T3608b.现在恢复model数据库,打开SSMS,直接输入RESTOREDATABASEmodelFROMDISK='G:\data\model.bak'WITHMOVE'modeldev'TO'E:\dataDefaultFileManger\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.mdf'MOVE'modellog'TO'E:\dataDefaultFileManger\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.ldf',replacec.恢复成功后,直接重启SQLServer既可以。2、将SQLServer关闭,然后直接采取暴力的方式将model数据文件拷贝回来就可以,这种方式简单有效,但是非常规操作3、还有一种方式是利用setup安装文件,重建该数据库,过程缓慢,稍显复杂,很不推荐。
霸气的分割线第六步、开始网络配置进行连接,对外提供服务,使用的默认的1433端口当上面的几个重要的系统库都已经启动完成之后,下一步就是开始检查网络环境,进行网络服务的配置,对外进行提供服务了,一般来讲,在SQLServer中利用的网络启动协议有三种:SharedMemory、NamedPope和TCP/IP,其实在日常我们最常用的就是TCP/IP这种方式了,并且默认开启的是1433端口。我们来看一下正常启动过程中,该部分的详细日志:这里面的SharedMemory是专供本地连接通过LPC(LocalProcedureCall)技术向SQLServer做的连接。它不走网络层,所以他是速度最快的连接方式。正常启动后会显示上面的正常日志。NamedPipe方式正常启动,也会显示出上面的日志。可以看到。这其中我们最常用的TCP/IP这种方式,也正常的启动了,并且指定了两种访问方式,ipv4/ipv6,然后后面加上了1433端口号。在这个过程中最常出现的问题就是,1433端口被其它程序占用,这样就导致TCP/IP协议无法正常启动,这样我们会看到如下日志信息并且在windows系统日志中也会有记录解决方法:其实这里出现的问题还是挺好解决的,只需要找到占用这个端口的应用程序,采取措施让它把这个端口给让出来就可以。当然出现这些问题就意味着客户端已经无法通过TCP/IP这种远程连接的方式进行连接访问了。这时候一般管理员可以采用SQLServer给其提供的“专用管理员连接”(DAC)进行连接,这种方式我们以后再介绍。当然,在SQLServer启动的过程中,一般出现这种网络问题,或者协议不能成功加载,SQLServer会报出错误信息,但是一般情况下是不会影响SQLServer的正常启动的。受影响的可能只是出问题的那种协议功能。我们只需要根据日志,定位问题,然后解决掉,重新启动就可以了。
霸气的分割线第七步、开始启动msdb系统数据库关于msdb这个系统数据库,它是被安排在系统库中接近最后一个了,除了用户数据库和临时库tempdb之外,当启动过程中已经进行到这一步的时候,其实我们的实例就已经启动起来了,并且能够连接。我们知道msdb这个库中主要的存储的信息是应用各个库的备份信息,各种job的历史跑批信息等,其实诸多的都是来自于用户数据库所产生的一些客观数据。我们来看一下这个库出现了问题会产生什么现象:我将这个库文件移除走,然后重新启动服务,启动过程中没有报任何错误,并且能够顺利启动,我们用SSMS直接连接过去,也可以正常连接但是当我们点击开数据的时候,其实是看不到任何用户数据库的,并且会产生一个错误提示:看来是不能使用的,我们来查看一下错误日志:虽然这个库的重要性比起master之类的库重要性要稍显差一些,但是缺少了它我们的SQLServer虽然能启动,但是依然不能使用。解决方法:要解决这个问题其实方式就很多种了,因为到此我们的SQLServer实例已经能够正常启动了,我们可以采取:1、利用备份还原该库,参考文章前面的方式(推荐)2、关掉服务,利用暴力的拷贝文件的方式进行恢复,简单有效,非常规操作3、找台相同的环境,找到相同的文件,直接拷贝过来使用4、利用安装文件进行恢复(不推荐)
霸气的分割线第八步、启动用户数据库,并且完整各个库的完整性校验,并且在启动用户数据库之前,先将系统库的tempdb进行清空本步骤所遇到的问题层出不穷,各种样式,我打算再重新组织一篇文章,专门列举,此篇就不介绍了。但有一点需要记住:在这一步之前SQLServer会将tempdb这个系统库清空掉,也就是说,每次的重启操作,系统都会将tempdb清空,然后重建,这一步一般不会发生异常,成功之后会出现以下日志信息:
第九步、开始重建系统的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿山防羊施工协议
- 林业资源开发招投标合同方案
- 智能化外墙安装项目协议
- 专利申请流程保密协议管理办法
- 网络公司兼职运维工程师协议
- 展览馆校车驾驶员招聘协议
- 办公设施智能化施工合同
- 痔疮医院护士招聘协议
- 环保项目招投标与采购监控
- 玻璃制品注册师工程师招聘合同
- 2023简约黄蓝平安校园知识竞赛PPT模板
- JJF 1999-2022转子式流速仪校准规范
- GB/T 39204-2022信息安全技术关键信息基础设施安全保护要求
- JJG 736-1991气体层流流量传感器
- GB/T 6479-2013高压化肥设备用无缝钢管
- GB/T 17622-2008带电作业用绝缘手套
- 计量管理人员培训资料课件
- 菌种保藏的方法课件
- 英语天气课件
- 《活着》读书分享优秀课件
- 上海市一模二模或中考数学答题纸
评论
0/150
提交评论