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

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

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

1.SQL Server实例没法正常启动node

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

3.网络配置失败数据库

4.用户数据库没法启动windows

5.集群环境下SQL Server资源没法保持在线服务器

目录网络

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

5.1 SQL Server服务启动步骤... 1多线程

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

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 数据库启动

系统数据库的启动顺序是mastermsdbmssqlsystemresourcemodeltempdb,也能够在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事务

若是在redoundo遇到问题数据库就会进入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、

1.traceno 3608启动,能够绕过model的恢复

2.恢复model数据库

3.重启

方法2、

直接替换model文件

方法3、

重建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

相关文章
相关标签/搜索