SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库

5.启动SQL Server服务和数据库


在数据库和服务启动过程中,经常会出现的问题:

1.SQL Server实例无法正常启动

2.系统数据库无法正常启动

3.网络配置失败

4.用户数据库无法启动

5.集群环境下SQL Server资源无法保持在线

目录

5.启动SQL Server服务和数据库...
1

5.1 SQL
Server服务启动步骤...
1

5.1.1
从注册表中读取SQL Server启动信息...
1

5.1.2
检查硬件,配置内存和CPU..
2

5.1.3
数据库启动...
3

5.1.4
准备网络...
4

5.2 数据库状态切换...
5

5.2.1
Recovering.
5

5.2.2
Online.
6

5.2.3
RECOVERY PENDING..
6

5.2.4
SUSPECT.
6

5.2.5
EMERGENCY.
6

5.2.6
RESTORING..
6

5.2.7
Offline.
6

5.3 数据库长时间处于RECOVERING状态...
7

5.3.1
多线程并行处理重做和回滚...
7

5.3.2
延迟事务...
7

5.4 数据库无法启动的常见问题...
7

5.4.1
Master数据库不能启动...
7

5.4.2
资源数据库...
7

5.4.3
model数据库...
8

5.4.4
tempdb数据库...
8

5.4.5
用户数据库...
8

5.5 集群环境下,数据库资源不能ONLINE的常见问题...
10

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服务和数据库,布布扣,bubuko.com

时间: 2024-12-26 06:13:44

SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库的相关文章

SQL Server 2012实施与管理实战指南(笔记)——Ch3Alwayson可用组

3.AlwaysOn可用组 Alwayson支持的,是一个可用性组,每个可用性组是包含了多个用户数据库的容器,可用性组内的数据库可以作为一个整体进行故障转移. AlwaysOn关键特性: 一.类似集群的特性 1.多个数据库可以一起迁移 2.提供一个虚拟服务器名,这个虚拟服务器名始终是当前的primary. 3.可以有自动切换,手动切换和强制切换 4.一个primary,最多4个secondary(sql server 2014增加到了8个) 5.Dashborad可以监视alwayson运行状况

SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查

6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查... 1 6.1协议选择和别名... 1 6.1.1 服务器网络配置... 1 6.1.2 SQL Server Browser的作用... 1 6.1.3 客户端网络配置... 2 6.1.4 客户端网络连接选择机制... 2 6.2 连接失败检测步骤--命名管道... 2 6.3连接失败检测步骤--TCP/IP. 2 6.3.1 SQL S

?Windows Server 2012 Hyper-V虚拟化管理实践

链接: https://pan.baidu.com/s/1bZ-aqDpx1tE-2WTVD6yMjA 密码: yvz3 Windows Server 2012 Hyper-V虚拟化管理实践 内容简介: 作为虚拟化领域的后起之秀,微软最新发布的windows server 2012(hyper-v r3)在企业级应用中更具优势,在高可用性方面提供更多的解决方法(虚拟机复制.基于smb共享虚拟机部署.hyper-v群集.虚拟机实时迁移等),更符合实际应用环境(多网卡聚合.hba 卡支持等):同时升

windows server 2012 r2 远程桌面连接指南

具体详情请阅览文档  http://pan.baidu.com/s/1i5vytvv windows server 2012 r2 远程桌面连接指南 - 作者 rick·bao - 日期 2016-08-03 序言 近期接触了阿里云和腾讯的云服务器产品,觉着原理貌似虚拟机. 首先,以阿里云为例. 1.在其[https://www.aliyun.com/]注册为会员 2.购买虚拟主机产品,付款后可以到后台开启虚拟机 3.使用可以联网的本地计算机远程登录,对服务器进行应用部署,维护等操作 那么,模拟

SQL Server 2012 AlwaysOn集群配置指南

1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows Server FailOver Cluster),通过在同一个WSFC的不同Node上,安装独立的SQL Server实例,定义AlwaysOn Group,一个数据库最多可以部署4个镜像.当热备机出现故障时,可以手工或自动实现故障转移,交换主.辅数据库的角色. AlwaysOn的亮点在于镜像可读

Windows Server 2012 AD域管理创建

前言 关于AD域管理及其权限划分概论: 1. AD域源于微软,适用于windows,为企业集中化管理和信息安全提供强力保障. 2. 提供域中文件夹共享,但同时又对不同用户有不用的权限. 3.通过对设备限制USB接口,网络访问特定网站来实现对企业内部信息的保护和防止流失. 4.个人文件夹可以重定向到服务器文件夹上,实现真正的在同一个域中使用者数据不受固定PC限制既数据跟随用走. 5.用户的权限不需要定制,只需要加入若干个带有不同权限属性的固定组就可以获得相应的权限功能. 我们按照下图来创建第一个林

Windows Server 2012 NIC Teaming配置实战

以往在WINDOWS SERVER上配置NIC时,例如WINDOWS SERVER 2003或2008上一般需要安装厂商的网卡聚合绑定软件,厂商软件针对自己系列的网卡设备支持的较好,但如果一个物理服务器上安装了2种以上的网卡,那么这个多厂商的网卡聚合绑定配置起来就比较麻烦了,容易互相冲突.现今WINDOWS SERVER 2012上自身NIC组件可以支持多网卡的聚合绑定,这个问题容易解决多了,那么如何掌握和配置WINDOWS SERVER 2012上的NIC呢?下面来具体学习下. 一.什么是NI

Windows Server 2012 R2 服务器管理器介绍和配置使用

1. 服务管理器是用于管理系统服务的管理工具.一般常用于windows系统,使用这个工具你可以启动.停止服务:设置服务是自动.手动启动或禁用:查看某个服务的相关信息:设置服务以什么用户启动等等(一般包括了超级管理员用户.管理员用户和游客用户):设置用户注销,软件等 2. 服务器管理器配置: http://www.jb51.net/os/windows/63454.html http://bbs.51cto.com/thread-953444-1-1.html Windows防火墙:控制面板-->

OpenStack实战指南 笔记

OpenStack实战指南 跳转至: 导航. 搜索 目录 1 OpenStack简介 2 OpenStack安装 3 OpenStack组织结构一览 4 OpenStack API的介绍和开发 5 Keystone认证组件 6 Glance镜像组件 7 Nova计算组件 8 Neutron网络组件 9 Cinder块存储组件 10 OpenStack日常运维 11 使用Fuel快速安装OpenStack OpenStack简介 2010,来自于NASA Nebula(之前用的是Eucalyptu