在日常管理维护SQL Server的时候,我们需要注意很多地方,然后有时候做起事情来也不得章法,现在就基本的原理和常见问题的解决思路,在这跟大家分享一下。
首先介绍一下SQL Server基本的运行原理。
作为一个Windows服务,SQL Server的每个实例就是一个sqlserve.exe进程。这个进程启动后会读取SQL Server实例的启动配置,检测硬件,配置内存和CPU,初始化一些SQL Server系统配置,启动数据库,连接网络。然后数据库就算正常启动了,然后客户端可以正常访问了。
这个是基本的启动过程,那在什么情况下回出现不能正常启动呢,当然介绍的都是我们可以解决的基本情况,像执行文件损坏,数据库损坏,这些不能立即解决的问题,日后在介绍。
1.SQL Server实例服务进程无法正常启动
sqlservr.exe进程在启动的时候,需要读取一些注册表的键值以及读取一些文件,然后根据这些配置做相应的动作。
那需要读取的注册表键值是哪些,一般都有什么作用呢:
1)HLM\SPFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer下,
Audit Level:设置SQL Server是否记录用户登录信息,也可以在Management Studio里的服务器属性设置。
Login Mode:设置SQL Server是只接收Windows账户登录,还是同时接收WIndows和SQL server账户。
2)启动参数HLM\SPFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\Parameters下,
SQL Server可以有很多启动参数,有些事提供分析问题用的。
下面介绍几个固定的参数:
-d 记录的是master数据库的数据文件物理位置
-l 记录的是master日志文件物理位置
-e 记录的是SQL Server错误日志文件的位置
3)网络配置信息HLM\SPFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQLServer\SuperSocketNetLib下,
SQL Server会侦听哪几个网络协议,以及每个网络协议的配置,也是放在注册表里。
从注册表读取SQL Server启动信息这一步可能遇到的两个问题:
1)启动账号权限问题
如果启动账号没有权限读取注册表或调用SQL Server的某些资源文件,那么SQL Server这个进程有可能无法创建,这时可能errorlog文件都无法生成。
需要解决这个问题,就是给启动账户赋予权限。
2)日志文件和文件夹访问问题
SQL Server要成功启动,必须要能正确的创建出日志文件errorlog,如果日志文件不能被创建成功,那么SQL Server也就不能启动。
有时候日志的路径不正确,即-e参数指定的位置不正确;或者某个进程将errorlog文件锁定了。
2.系统数据库无法正常启动
SQL Server服务开启后,首先就是要去启动系统数据库,如果系统数据库无法正常打开,SQL Server也不会正常启动。
3.网络配置失败
要接收客户端的连接,SQL Server必须配置好网络协议,一般是TCP/IP,Named Pipe,LPC,如果协议没有正确配置,客户端也不能正常连接到SQL Server。
4.用户数据无法正常启动
SQL Server启动的最后一步是打开用户数据库,如果数据库文件损坏,或者上次SQL Server关闭的时候数据库没有被正常关闭,开启用户数据库的时候可能会遇到麻烦。
5.群集环境下SQL Server资源无法保持正常在线
群集环境下安装的SQL Server,会由Windows群集服务来监控SQL Server是否正常工作。如果群集服务连不上SQL Server,就可能发生切换。管理需要监控和分析,SQL Server资源为什么不能保持在线,上次发生切换的原因是什么。
提示:Errorlog日志记录的是SQL Server在启动或运行过程中遇到的所有严重问题,所以当SQL Server遇到异常问题时,首先检查日志文件。这个文件一般保存7个,按时间由近到远的顺序,且重启SQL Server服务会生成新的errorlog文件。
原文地址:http://blog.51cto.com/9446041/2113504