SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库
5.启动SQL Server服务和数据库
在数据库和服务启动过程中,经常会出现的问题:
1.SQL Server实例无法正常启动
2.系统数据库无法正常启动
3.网络配置失败
4.用户数据库无法启动
5.集群环境下SQL Server资源无法保持在线
目录
5.1 SQL Server服务启动步骤
5.1.1 从注册表中读取SQL Server启动信息
Sqlservr.exe启动会去注册表中找自己所在实例的注册表信息。这些配置信息存放在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer下。有几个比较重要的信息:
1.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer下,LoginMode:表示是windows验证还是混合验证,Audit Level:设置是否记录用户登录信息。
2.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer \Parameters下是实例的启动参数
3.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer \SuperSocketNetLib下记录了监听的网络和访问方式的。
5.1.1.1 启动账号的权限
由于要读取注册表信息和SQL Server的资源文件,需要启动服务账号有很足够的权限。那么无法启动实例,甚至连errorlog都无法启动。
可以使用Process Monitor进行监控。如果发现有ACCESS DENIED那么说明有权限问题。
5.1.1.2 日志文件和文件夹访问问题
如果SQL Server要启动,必须正确的创建出日志文件,如果注册表内-e参数指定的不够正确就会出现报错,无法启动。
5.1.2 检查硬件,配置内存和CPU
等创建出errorlog之后,所有的启动过程就可以从errorlog中看出来了。
Errorlog先会打印出SQL Server版本号和Windows版本号,启动参数和进程基本信息:
2014-05-04 14:42:07.05 Server Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
2014-05-04 14:42:07.08 Server UTC adjustment: 8:00
2014-05-04 14:42:07.08 Server (c) Microsoft Corporation.
2014-05-04 14:42:07.08 Server All rights reserved.
2014-05-04 14:42:07.08 Server Server process ID is 4252.
2014-05-04 14:42:07.08 Server System Manufacturer: 'System manufacturer', System Model: 'System Product Name'.
2014-05-04 14:42:07.09 Server Authentication mode is MIXED.
2014-05-04 14:42:07.10 Server Logging SQL Server messages in file 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG'.
2014-05-04 14:42:07.10 Server The service account is 'FanrCo-PC\Administrator'. This is an informational message; no user action is required.
2014-05-04 14:42:07.10 Server Registry startup parameters:
-d C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\master.mdf
-e C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG
-l C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
2014-05-04 14:42:07.10 Server Command Line Startup Parameters:
-s "MSSQLSERVER"
之后或读取出服务器的配置信息,包括处理器和内存,以及进程的优先级:
2014-05-04 14:42:08.73 Server SQL Server detected 1 sockets with 2 cores per socket and 2 logical processors per socket, 2 total logical processors; using 2 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
2014-05-04 14:42:08.73 Server SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.
2014-05-04 14:42:08.73 Server Detected 3838 MB of RAM. This is an informational message; no user action is required.
2014-05-04 14:42:08.76 Server Using conventional memory in the memory manager.
之后会显示NUMA信息和lock的信息,或为每个节点分配2500个锁块,5000个锁拥有者
注意,在32bit系统下,每个锁块需要64字节,锁拥有者32字节,64bit下,锁块96字节,锁拥有者56个字节:
2014-05-04 14:42:10.38 Server Node configuration: node 0: CPU mask: 0x0000000000000003:0 Active CPU mask: 0x0000000000000003:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2014-05-04 14:42:10.40 Server Using dynamic lock allocation. Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node. This is an informational message only. No user action is required.
显示CLR版本信息和默认TRACE的开启:
2014-05-04 14:42:11.33 Server CLR version v4.0.30319 loaded.
2014-05-04 14:42:12.44 spid8s Resource governor reconfiguration succeeded.
2014-05-04 14:42:12.49 spid8s SQL Server Audit is starting the audits. This is an informational message. No user action is required.
2014-05-04 14:42:12.60 spid8s SQL Server Audit has started the audits. This is an informational message. No user action is required.
2014-05-04 14:42:13.93 spid8s SQL Trace ID 1 was started by login "sa".
2014-05-04 14:42:14.09 spid8s Server name is 'FANRCO-PC'. This is an informational message only. No user action is required.
5.1.3 数据库启动
系统数据库的启动顺序是master,msdb,mssqlsystemresource,model,tempdb,也可以在errorlog中找到相关信息:
2014-05-04 14:42:10.57 spid8s Starting up database 'master'.
2014-05-04 14:42:16.67 spid21s Starting up database 'msdb'.
2014-05-04 14:42:16.67 spid22s Starting up database 'AdventureWorks2012'.
2014-05-04 14:42:16.74 spid10s Starting up database 'mssqlsystemresource'.
2014-05-04 14:42:16.74 spid23s Starting up database 'tst'.
2014-05-04 14:42:16.75 spid24s Starting up database 'AdventureWorksDW2012'.
2014-05-04 14:42:18.27 spid10s Starting up database 'model'.
2014-05-04 14:42:19.42 spid10s Clearing tempdb database.
2014-05-04 14:42:20.13 spid10s Starting up database 'tempdb'.
启动完成后,会打印一下信息:
2014-05-04 14:42:22.40 spid8s Recovery is complete. This is an informational message only. No user action is required.
5.1.4 准备网络
启动完成master数据库之后,就开始准备网络了,从注册表中读取注册表信息。然后开启功能:
Shard Memory启动后,errorlog会有:
2014-05-04 14:42:15.45 spid15s Server local connection provider is ready to accept connection on [ \\.\pipe\SQLLocal\MSSQLSERVER ].
Named Pipe启动后,会有:
2014-05-04 14:42:15.45 spid15s Server local connection provider is ready to accept connection on [ \\.\pipe\sql\query ].
还有tcp启动之后监听的端口:
2014-05-04 14:42:15.52 Server Server is listening on [ ::1 <ipv6> 1433].
2014-05-04 14:42:15.52 Server Server is listening on [ 127.0.0.1 <ipv4> 1433].
如果有DAC专用管理连接,那么还会打印:
2014-05-04 14:42:15.52 Server Server is listening on [ ::1 <ipv6> 1434].
2014-05-04 14:42:15.52 Server Server is listening on [ 127.0.0.1 <ipv4> 1434].
2014-05-04 14:42:15.52 Server Dedicated admin connection support was established for listening locally on port 1434.
当网络准备完成之后会打印:
2014-05-04 14:42:15.59 spid15s SQL Server is now ready for client connections. This is an informational message; no user action is required.
在准备网络中,如果某个协议不能被加载,SQL Server会报错但是不会影响实例的启动。只有一个例外,使用SSL对连接加密的,SSL在启动需要SQL Server加载证书,如果证书无法加载那么SQL Server启动会被终止。
5.2 数据库状态切换
5.2.1 Recovering
Recovering主要处理3件事情:
1.分析要做的工作:就是在事务日志文件中,找到那些事务要重做,那些事务要回滚
2.Redo:将已经提交的但是没有写入数据文件的事务,做前滚
3.undo:对没有提交的事务做回滚
一下几个动作会让数据库进入Recovering:
1.创建数据库
2.Alter Online,上线数据库
3.RESTORE WITH RECONVERY:恢复数据库
4.DatabaseStartup,数据库启动,如果数据库设置了自动关闭,就会在用户第一次访问的时候做这个动作。
恢复正常之后,数据库会进入online状态。
5.2.2 Online
这个状态下用户可以访问,修改。
5.2.3 RECOVERY PENDING
如果在数据恢复的时候不能正确打开数据库文件,数据库会进入RECONVERY PENDING的状态。
解决办法:用ALTER ONLINE再恢复一次,或者使用备份恢复
5.2.4 SUSPECT
数据库进入SUSPECT状态在这个状态下管理员有3个选择:
1.在一次ALTER ONLINE,命令SQL Server再恢复一次
2.放弃当前数据库,再还原一个
3.将数据库状态设置为,EMERGENCY,然后尝试修复
5.2.5 EMERGENCY
在这个模式下,SQL Server对没有完全恢复的数据库开放一个只读窗口
5.2.6 RESTORING
数据库在还原状态下,如果是WITH RECOVERY,还原的最后一步会进入RECONVERY状态。
5.2.7 Offline
数据库处于离线状态,可以使用ALTER ONLINE让数据库上线。
5.3 数据库长时间处于RECOVERING状态
RECONVERING主要做3件事:
1.查看需要恢复那些事务
2.redo事务
3.undo事务
如果在redo和undo遇到问题数据库就会进入SUSPECT状态,在完成恢复之前数据库必须等待完成。
如果长期处于RECOVERING可以使用,以下sql查看进度
SELECT*FROMsys.sysprocesses
SELECT*FROMsys.dm_exec_requests
如果没有什么变化,可以开了重启服务,再做一次恢复。
有时候不是很忙的数据库恢复要很长时间,是因为有过多的VLF(虚拟日志文件),导致恢复计算量过大,导致恢复很慢。
可以使用DBCC LOGINFO查看虚拟日志情况。
5.3.1 多线程并行处理重做和回滚
在企业版上,SQL Server会启动多个线程来重做和回滚动作。
5.3.2 延迟事务
这个和找不到数据文件不同,延迟事务是在恢复过程中,出现IO错误,那个事务所修改的数据都会被适当的锁定。SQL Server会放弃这个事务的回滚,继续回滚其他事务。上面的锁会在dbcc checkdb修复一致性后释放。
5.4 数据库无法启动的常见问题
5.4.1 Master数据库不能启动
Master数据库不能启动一般是有怎么几种情况:
1.sql server启动参数中,指定的文件路径不对。
2.找到了数据库文件但是没有权限
3.数据库文件出现损坏,如果出现损坏,要不从备份中恢复,要不重建master数据库(重建master数据库可以看联机文档)。
5.4.2 资源数据库
Mssqlsystemresouce数据库,对用户透明,用户无法直接访问这个数据库。出现的问题一般如下:
1.sql server启动参数中,指定的文件路径不对。
2.发现资源数据库的版本和数据库版本不一致。
如果发现不一致相同版本的其他实例中复制一个。
5.4.3 model数据库
Model数据库是所有用户数据库的样板,根据model数据库创建的用户数据库。出现的问题和master类似。
如果出现问题:
方法一、
1.带traceno 3608启动,可以绕过model的恢复
2.恢复model数据库
3.重启
方法二、
直接替换model文件
方法三、
重建model数据库
5.4.4 tempdb数据库
Tempdb数据库是每次服务重启就会重建,所以可能出现的问题是:
1.物理文件路径不对
a.traceno 3608启动
b.修改数据库文件路径
c.重启
2.tempdb创建文件失败,创建失败一般是没有权限或者空间不够,如果空间不够:
a.traceno 3608启动
b.修改数据库文件大小
c.重启
5.4.5 用户数据库
用户数据库不能启动的常见问题是:缺少或者无法打开部分文件,恢复失败。前者数据库进入RECOVERY_PENDING状态,后者会进入SUSPECT状态。
5.4.5.1 文件打开问题
文件打开分为2类:数据文件,日志文件。
数据库文件
如果主文件组出现问题,只有当主文件组全部恢复后才能打开数据库
如果是辅助文件组可以先把辅助文件组offline,然后 ALTER ONLINE数据库。
然后从备份中恢复这个文件组
日志文件
如果是简单恢复模式,在上次数据库正常关闭(写入所有提交的数据,撤销所有未提交的事务),那么下次SQL Server启动这个数据库的时候,发现日志文件不存在会重新创建一个。
如果是完全恢复模式,或者上次没有正常关闭,就不会为这个数据库创建日志文件
如果要恢复数据库,可以使用备份还原,也可以通过dbcc checkdb来恢复,不过可能会丢失一部分数据。
5.4.5.2 恢复失败
在恢复中会出现3累错误
1.在redo过程中遇到能延迟的错误
2.在undo过程中遇到能延迟的错误
3.遇到不能延迟的错误
重做中遇到错误
如果错误是可以延迟的,遇到错误的页面被锁定。
撤销中遇到错误
在侧小的时候发生错误,SQL Server会标记整个事务涉及到的页面,然后继续其他undo。该锁的对象属于session -3
遇到这个问题可以通过备份恢复,也可以用dbcc checkdb恢复,不会可能要丢失一部分数据
SUSPECT模式
当数据库恢复失败不能延迟,最终会进入SUSPECT模式。一般出现这种情况,要不就是有大量的损坏,要不就是分配页出现损坏。
遇到这个问题可以通过备份恢复,也可以用dbcc checkdb恢复,不会可能要丢失一部分数据
5.5 集群环境下,数据库资源不能ONLINE的常见问题
略
参考:
http://www.cnblogs.com/lyhabc/archive/2012/09/15/2687076.html
SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库的更多相关文章
- SQL Server 2012实施与管理实战指南(笔记)——Ch3Alwayson可用组
3.AlwaysOn可用组 Alwayson支持的,是一个可用性组,每个可用性组是包含了多个用户数据库的容器,可用性组内的数据库可以作为一个整体进行故障转移. AlwaysOn关键特性: 一.类似集群 ...
- SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查
6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查 6.1协议选择和别名 6.1.1 服务器网络配 ...
- SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件
4.数据库连接组件 访问数据库有多种不同的技术,包括ADO,ODBC,OLEDB,ADO.NET等这些都有一些共性.首先要建立连接(Connection),然后通过命令(Command)对数据库进行访 ...
- 《SQLSERVER2012实施与管理实战指南》前4章节笔记内容
<SQLSERVER2012实施与管理实战指南>前4章节笔记内容 <SQLSERVER2012实施与管理实战指南>的前面4章是<SQLSERVER企业级平台管理实践> ...
- windows server 2012 r2 远程桌面连接指南
具体详情请阅览文档 http://pan.baidu.com/s/1jHTCpW6 windows server 2012 r2 远程桌面连接指南 - 作者 rick·bao - 日期 2016-0 ...
- SQL Server 2012 AlwaysOn集群配置指南
1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...
- Windows Server 2012 AD域管理创建
前言 关于AD域管理及其权限划分概论: 1. AD域源于微软,适用于windows,为企业集中化管理和信息安全提供强力保障. 2. 提供域中文件夹共享,但同时又对不同用户有不用的权限. 3.通过对设备 ...
- Windows Server 2012 R2 服务器管理器介绍和配置使用
1. 服务管理器是用于管理系统服务的管理工具.一般常用于windows系统,使用这个工具你可以启动.停止服务:设置服务是自动.手动启动或禁用:查看某个服务的相关信息:设置服务以什么用户启动等等(一般包 ...
- Linux实战教学笔记32:企业级Memcached服务应用实践
一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共 ...
随机推荐
- ajaxfileupload asp.net 的简单使用
本人菜鸟,第一次写博客,不会排版,只是记录工作中常用的东西 ajaxfileupload.js源码: http://www.rczjp.cn/HTML/110420/20113620053635.ht ...
- Delphi 10.1 Berlin 官方未列之修正
Delphi 10.1 Berlin 官方修正列表: Bug fix list for RAD Studio 10.1 Berlin Delphi 10.1 Berlin 官方未列之修正: 修正 iO ...
- 点我吧工作总结(技术篇) Velocity
1. 什么是velocity Velocity[vəˈlɑ:səti],名称字面翻译为:速度.速率.迅速.该项目的开源地址:http://velocity.apache.org/,它是一个基于Java ...
- php中数组遍历改值
<?php $arr = array(100, 99, 88, 77, 55, 66); //方法1 foreach ($arr as &$v) { $v = 2; } print_r( ...
- Guava学习笔记:Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...
- Myeclipse10下载,安装,破解,插件,优化介绍
一.Myeclipse10下载与破解 Genuitec 公司发布了MyEclipse 10,一款Genuitec旗下的商业化Eclipse集成开发工具的升级版本.MyEclipse 10基于Eclip ...
- 简单可用好实现的 HA 高可用设计
本文为作者原创,如需转载请注明出处. 1. 实现的功能 一主多备,自动选主 启动记录可查询 2. 前置需求 一台数据库用以记录,如 MySQL.Redis.MongoDB 等.关键是设计中的思想,用啥 ...
- 验证:mysql AUTO_INCREMENT 默认值是1
用mongodb时,有些字段需要做自增,而且是用二十进制字母表示(使用a-t对应0-19),做了一个_auto_increment字段用来保存,但是应该从0开始还是从1开始呢? 和mysql保持一致便 ...
- 如何在Visual Studio中开发自己的代码生成器插件
Visual Studio是美国微软公司开发的一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等,且所写的目标代码适用于微 ...
- SharePoint 2013 配置HTTPS(SSL)
1.打开服务器上的IIS,找到服务器证书,如下图: 2.进入服务器证书,点击右侧操作“创建自签名证书”,如下图: 3.为证书指定一个好记名称,存储选择个人,如下图: 4.点击确定以后,服务器证书页面, ...