SQLServer常见系统错误要点.docx
《SQLServer常见系统错误要点.docx》由会员分享,可在线阅读,更多相关《SQLServer常见系统错误要点.docx(56页珍藏版)》请在冰豆网上搜索。
SQLServer常见系统错误要点
SQLServer2000常见系统错误
第一章启动与配置
1、剖析事件查看器,将应用程序中的所有事件清除,
序号
内容
说明
1
17052:
MicrosoftSQLServer2000-8.00.2039(IntelX86)
May3200523:
18:
38
Copyright(c)1988-2003MicrosoftCorporation
DeveloperEditiononWindowsNT5.1(Build2600:
ServicePack2)
SQLServer的版本信息,安装环境的操作系统版本。
2
17104:
服务器进程ID是2828。
分配的服务器进程ID
3
此SQLServer实例最近于2007-9-110:
38:
00(本地)2007-9-12:
38:
00(UTC)报告使用的进程ID是3360。
SQLServer2000实例上一次运行使用的进程ID
4
17162:
SQLServer正在以优先级“high”(已检测到1CPU)启动。
SQLServer安装在1个CPU的服务器上,以高优先级开始启动。
5
17124:
已为thread模式处理而配置了SQLServer。
SQLServer2000的CPU配置为线程模式。
6
17125:
使用dynamic锁分配。
[2500]锁块,[5000]锁所有者块。
为SQLServer2000分配的锁信息。
7
17834:
正在使用“SSNETLIB.DLL”版本“8.0.2039”。
启用默认的由SSNETLIB.DLL文件封装的网络库超级套接字,封闭了TCP/IP协议和NwlinkIPX/SPX两种通信协议。
8
19013:
SQLServer正在监听192.168.1.8:
1433。
19013:
SQLServer正在监听219.140.27.21:
1433。
19013:
SQLServer正在监听127.0.0.1:
1433。
可以使用本地TCP/IP连接
9
SuperSocket信息:
(SpnRegister):
Error1355。
提示无法注册超级套接字网络库的提示信息,这和使用的协议有关。
10
19013:
SQLServer正在监听TCP,SharedMemory,NamedPipes。
SQLServer实例配置了TCP/IP、共享内存和命名管道3种协议。
11
17126:
SQLServer已准备好进行客户端连接
可以接受客户机的请求
12
17052:
恢复完成。
正常完成启动过程。
2、SQLServer服务器——错误日志
错误日志是SQLServer2000服务器中记录服务器级信息的文件。
当SQLServer启动、关闭和发生系统级错误时,SQLServer会自动记录有关信息。
查看错误日志:
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\LOG
总结SQLServer启动的过程
SQLServer数据库系统数据故障
数据库
信息
结论
Master
17052:
MicrosoftSQLServer2000-8.00.2039(IntelX86)
May3200523:
18:
38
Copyright(c)1988-2003MicrosoftCorporation
DeveloperEditiononWindowsNT5.1(Build2600:
ServicePack2);
17104:
服务器进程ID是284;
此SQLServer实例最近于2007-9-116:
43:
19(本地)2007-9-18:
43:
19(UTC)报告使用的进程ID是3752;
17113:
initconfig:
打开“C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\data\master.mdf”以获取配置信息时出错2(系统找不到指定的文件。
);
SQLServer实例的启动过程将停留在仅仅由操作系统分配进程ID阶段。
Model
……17126:
SQLServer已准备好进行客户端连接
如果master数据库正常,而model数据库不存在或有故障,SQLServer实例的启动过程将完成CPU、内存和网络库的初始化,但model数据库的故障仍将导致客户机无法正常连接。
tempdb
成功启动SQLServer实例。
如果master正常,model正常,不论有没有tempdb,SQLServer实例都将重建tempdb。
msdb
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\LOG\SQLAGENT.1
文本内容:
2007-09-0116:
59:
30-?
[393]正在等待SQLServer恢复数据库...
2007-09-0116:
59:
38-?
[131]由于来自用户、进程或操作系统的停止请求,SQLSERVERAGENT服务停止...
2007-09-0116:
59:
39-?
[098]SQLServerAgent已终止(正常)
Msdb数据库存在与否仅影响SQLServerAgent服务,和SQLServer服务没有什么关系。
Master系统数据库对于SQLServer实例至关重要,是管理实例和所有数据库的数据库;
Model系统数据库是系统创建所有数据库的模板。
当发出createdatabase语句时,新数据库的第一部分通过复制model数据库中的内容创建,剩余部分由空页填充。
由于SQLServer每次启动时都要创建tempdb数据库,model数据库必须一直存在于SQLServer系统中。
Tempdb数据库存在与否不影响实例的正常启动。
Msdb数据库。
影响SQLServerAgent服务正常启动。
windows操作系统将为SQLServer服务器上的每个服务分配一个进程ID。
SQLServer服务的启动信息记录在ERRORLOG文件中。
SQLServerAgent服务的启动信息记录在SQLAGENT文件中。
重建master数据库
1、在重建master数据库之前,需要准备好SQLServer2000的安装光盘。
2、重建主控实用工具:
C:
\ProgramFiles\MicrosoftSQLServer\80\Tools\Binn\rebuildm.exe
单用户模式启动
1、单用户模式就是同一时刻仅允许一个DBA用户对SQLServer实例进行操作,如果要恢复已经损坏的master数据库,则必须要启动SQLServer实例的单用户模式。
2、什么情况下切换到单用户模式
常见的情况包括:
更改服务器的配置参数;
重建已经损坏的master数据库;
修复其他系统数据库;
3、如何启动
C:
\ProgramFiles\MicrosoftSQLServer\80\Tools\Binn目录下有管理SQLServer实例服务的命令文件sqlservr,带参数-c–m就表示以单用户模式启动默认实例。
配置SQLServer网络
SQLServer2000基于网络提供服务。
1、IPC
IPC:
即进程间通信机制。
SQLServer2000采用了客户机-服务器的体系结构,即使在物理上的同一台计算机上安装的SQLServer2000,也好像是逻辑上的两台计算机。
客户机上启用的客户机进程,服务器上启用的是服务器进程。
2、IPC的组成
一个IPC包括以下的两个组成部分。
通信协议:
通信协议定义了利用IPC通信的两个进程之间传递的数据分组格式。
API:
应用编程接口,是一组定义好的函数,应用程序通过这些函数来使用IPC机制,发出命令并反馈结果。
3、Net-Library
Net-Library,网络库。
网络库是以动态链接库DLL形式实现的IPC机制。
网络库不是简单的通信协议,而是通信协议和IPC机制组合的结果。
DLL
DLL的另外一个突出特点是动态加载,即虽然在一个主程序中调用了DLL文件中的函数,但主程序的代码中并不复制DLL文件中的函数,而是在运行时才动态加载这些函数。
避免了将大量重复的函数代码复制到主程序中,在运行时同样需要大量占用内存空间的问题。
相对于静态加载技术而言,DLL的动态加载就更能有效节省内存空间。
DLL技术的突出特点是代码重用和节省空间。
网络库DLL
网络库以DLL形式出现,也就是指一些特殊的DLL文件是包含了实现网络通信的、可以重用的函数和代码。
查看网络库DLL
服务器网络实用工具、客户端网络实用工具
网络库和通信协议的关系
一个网络库DLL文件并不一定仅封装一种网络协议的函数,也可能封装多种网络协议。
比如:
SSNETLIB.DLL网络库文件实际上就封装了TCP/IP和IPX/SPX两种网络协议。
1、配置共享内存网络
(1)启用SQL服务器网络实用工具,常规选项卡。
在启用的协议列表框中清除所有协议即可。
(2)重新启动SQLServer2000服务器,服务器上的共享内存协议才能够启动。
(3)启用SQLServer客户端网络实用工具,常规选项卡中,在按顺序启用协议列表框中清除所有的协议。
选择启用共享内存协议复选框。
2、配置TCP/IP网络
(1)配置服务器:
SQLServer网络实用工具,常规选项中,将TCP/IP添加启用的协议列表框。
点击属性可修改默认端口号;
(2)配置客户机:
SQLServer客户端网络实用工具,常规选项中,将TCP/IP添加到按顺序启用协议列表框中;在别名选项卡,单击添加,在[服务器别名]文本框中输入mysqlserver,选[网络库]中的[TCP/IP]单选按钮,[服务器名称]文本框输入SQLServer2000服务器的IP地址192.168.1.8,取消对[动态决定端口]复选框的选择,在[端口号]文本框核实SQLServer2000服务器的端口。
TDS协议
TDS译为表格格式数据流协议,就是SQLServer2000的客户机和服务器之间的应用层协议。
TDS的作用
应用程序的数据必须通过TDS协议的封装,然后交由传输层的协议,经过层层封装之后才能在网络上传输。
TDS的作用主要包括:
创建到SQLServer服务器的连接;
请求数据和服务器的状态;
接收数据、状态、错误信息和其他服务器结果;
完成存储过程的执行;
顺序关闭连接;
TDS的结构:
SQLServer2000使用TDS8.0协议,其数据报(网络上传输的一个数据单元,也称为数据包)包括两个部分:
TDS报头和TDS数据。
第二章未公开的DBCC命令
DBCC(DataBaseConsoleCommand):
数据库控制台命令;
(1)dbccpage命令参数
查询dbid和dbname
selectname,dbidfromsysdatabases
查询filenum和pagenum
selectfileid,size,filenamefromsysfiles
fileid:
即FILENUM
size:
某个数据文件或日志文件已经分配的数据页面总数,编号从0开始
filename:
数据文件和日志文件的物理存储路径;
dbccpage作用可以直接查看某个数据页面的内容。
可查看到数据库的物理存储情况。
dbccpage({dbid|dbname},filenum,pagenum)
dbccpage({dbid|dbname},filenum,pagenum,printoption)
filenum:
数据文件的编号
pagenum:
数据页面文件的编号
printoption:
如何输出结果,0,1,2,3
(2)dbcclog
Dbcclog作用是查看某个数据库使用的事务日志信息。
Dbcclog({dbid|dbname},[,type={-1|0|1|2|3|4}])
参数取值
参数说明
0
输出最小的信息(操作、上下文、事务ID)
1
操作、上下文、事务ID、标记、标签、行长度、描述
2
操作、上下文、事务ID、标记、标签、行长度、描述、对象名称、索引名称、数据页面ID
3
每个操作的完整信息
4
每个操作的完整信息,十六进制的日志行数据
-1
每个操作的完整信息,十六进制的日志行数据、检查点开始、数据库版本等。
(3)dbccerrorlog
作用是初始化SQLServer的错误日志文件的内容。
等同于:
sp_cycle_errorlog
sp_cycle_errorlog
关闭当前的错误日志文件,并循环错误日志扩展编号(就像重新启动服务器)。
新错误日志包含版本和版权信息,以及表明新日志已创建的一行。
语法
sp_cycle_errorlog
返回代码值
0(成功)或1(失败)
结果集
无
注释
每次启动SQLServer时,当前错误日志重新命名为errorlog.1;errorlog.1成为errorlog.2,errorlog.2成为errorlog.3,依次类推。
sp_cycle_errorlog使您得以循环错误日志文件,而不必停止而后再启动服务器。
权限
sp_cycle_errorlog的执行许可权限仅限于sysadmin固定服务器角色的成员
(4)dbccflushprocindb(DBID)
Dbccflushprocindb命令用于清除SQLServer2000服务器上某个数据库在缓存中的存储过程,实际上就是清除缓存中的存储过程的执行计划。
该命令常在需要对存储过程的性能进行测试时使用,一般不要在生产数据库上执行该命令,否则将影响正在运行的应用程序的性能。
dbcctraceon(3604)
go
declare@intDBIDinteger
set@intDBID=(selectdbidfromsysdatabaseswherename='northwind')
dbccflushprocindb(@intdbid)
go
(5)dbccbuffer
Dbccbuffer命令显示缓冲区的头部信息和页面信息。
Dbccbuffer([DBID|dbname][,objid|objname],[,nbufs],[printopt])
参数
参数说明
DBID
数据库的唯一ID。
DBName
数据库的名称。
OBJID
数据库对象的ID
OBJNAME
数据对象的名称
NBUFS
检查的缓冲区数量。
>0按照MRU(最近最常使用算法)
=0所有的缓冲区按照MRU至LRU顺序显示
<0按照LRU到MRU顺序显示
PRINTOPT
输出信息选择。
0:
默认设置,输出缓冲区头部和页面头部
1:
输出页面每行的数据和行偏移数组;
2:
将每行作为一个整体输出,输出行偏移数组;
将显示所有数据库在内存中的缓冲情况。
Dbcctraceon(3604)
Go
Dbccbuffer
Go
(6)dbccdbinfo
Dbccdbinfo命令用于显示特定的数据库结构
Dbccdbinfo(dbname)
dbcctraceon(3604)
go
dbccdbinfo(master)
go
(7)dbccdbtable用于显示管理数据库的表(数据字典)的信息。
Dbccdbtable(dbid|dbname)
dbcctraceon(3604)
go
dbccdbtable(master)
go
(8)dbccind
Dbccind命令用于显示特定表的所有索引页面信息。
Dbccind(DBID,objid,printopt)
参数
参数说明
DBID
数据库的唯一ID
OBJID
数据对象的ID
PRINTOPT
输出信息选项。
0:
默认设置,输出缓冲区中的页头部和数据页头部信息;
1:
输出页头、以行格式输出页数据,偏移表;
2:
输出页头、非格式化的页数据、偏移表;
dbcctraceon(3604)
go
dbccind(master,sysobjects,0)
go
(9)dbccprocbuf
Dbccprocbuf命令用于显示过程缓冲区中缓冲区头部和存储过程头。
Dbccprocbuf([dbid|dbname],[,objid|objname][,nbufs][,printopt])
参数
参数说明
DBID
数据库的唯一ID
DBNAME
数据库名称
OBJID
数据对象的ID
OBJNAME
数据对象的名称
NBUFS
输出的缓冲区的数目
PRINTOPT
输出信息选项。
0:
默认设置,输出过程缓冲区和过程头;
1:
输出过程缓冲区、过程头和缓冲区内容;
dbcctraceon(3604)
go
dbccprocbuf(master,'sp_help',1,0)
go
(10)dbccprtipage
Dbccprtipage命令用输出某个索引页面的每行指向的页面号。
Dbccprtipage(DBID,OBJID,INDEXID,INDEXPAGE)
参数
参数说明
DBID
数据库的唯一ID
OBJID
数据对象的ID
INDEXID
索引对象的ID
INDEXPAGE
索引页面的逻辑页面号码
dbcctraceon(3604)
go
declare@dbidint,@objectidint
select@dbid=db_id('master')
select@objectid=object_id('sysobjects')
dbccprtipage(@dbid,@objectid,1,0)
go
(11)dbccpss
Dbccpss用于显示当前连接到SQLServer2000服务器的进程信息。
dbccpss([suid][,spid][,printopt])
参数
参数说明
SUID
服务器用户ID
SPID
服务器进程ID
PRINTOPT
输出信息选项
0:
标准输出
1:
输出所有打开的DES(标识符)和当前序列树
2:
将进程拥有的锁信息输出到错误日志中;
获取administrator用户系统进程ID为53的SQLServer进程信息。
dbcctraceon(3604)
go
dbccpss(administrator,53,0)
go
(12)dbccresource
Dbccresource用于显示服务器当前使用的资源情况。
dbcctraceon(3604)
go
dbccresource
go
(13)dbcctab
Dbcctab用于显示设定的表的所有数据页面的内容。
Dbcctab(DBID,OBJID,PRINTOPT)
参数
参数说明
DBID
数据库的ID
OBJID
数据对象的ID
PRINTOPT
输出信息选项。
0:
显示页头部;
1:
按照行偏移表显示每行;
2:
按照整体显示页面和偏移表;
dbcctraceon(3604)
go
declare@dbidint,@objectidint
select@dbid=db_id('master')
select@objectid=object_id('sysindexes')
dbcctab(@dbid,@objectid)
go
(14)dbccbufcount
dbccbufcount命令用于显示最长的内存Hash桶的链表长度及平均链表长度,最多显示10个。
Dbccbufcount(n_chains)
n_chains参数,表示hash桶的数目,最多只能显示10个。
Bucketnumber:
内存中Hash桶号;
Chainsize:
桶中数据链表的长度;
AverageChainSize:
内存中所有链表的平均长度;
dbcctraceon(3604)
go
dbccbufcount(10)
go
(15)dbccdbrecover
Dbccdbrecover命令用于在不重启服务器的情况下恢复处于“质疑”(Suspect)状态的数据库。
Dbcctraceon(3604)
Go
Dbccdbrecover(northwind)
Go
(16)dbccdes
Dbccdes输出特定的标志符信息。
Dbccdes[([dbid][,objid])]
Dbcctraceon(3604)
Go
Dbccdes(master,sysindexes)
Go
(17)dbccmemusage
Dbccmemusage命令用于显示服务器内存使用的细节信息。
dbcctraceon(3604)
go
dbccmemusage
go
INDEXID:
索引ID;
BUFFERS:
所分配的缓冲区数量。
DIRTY:
是否为脏数据,即已经被修改过,需要写到硬盘上的数据。
(18)dbccpglinkage
Dbccpglinkage命令用于查看某个数据库数据页面的链接,还可以完成完整性检查。
Dbccpglinkage(dbid,fileid,start,number,printopt={0|1|2})
参数
参数说明
Dbid
数据库ID
FILEID
数据文件ID
START
开始查看的数据页面逻辑编号
NUMBER
检查的页面数量
PRINTOPT
输出信息选项。
0:
仅显示扫描的页面数;
1:
显示最后扫描的16个页面的信息;
2:
显示扫描的所有页数;
实例将扫描从dbid为1(master数据库)的第1个数据文件的页号为100的页面开始,共3个页面的数据对象的链接情况,显示扫描的所有页数。
dbcctraceon(3604)
go
dbccpglinkage(1,1,100,3,1)
go
(19)dbcccachestats
Dbcccachestats用于查看SQLServer实例的内存统计信息。
dbcctraceon(3604)
go
dbcccachestats
go
HitRatio:
在SQLServer2000的内存中对象的命中率。
该值越高,一般情