调试SQLSERVER生成dump文件的方法Word文档格式.docx
- 文档编号:22660997
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:16
- 大小:2.69MB
调试SQLSERVER生成dump文件的方法Word文档格式.docx
《调试SQLSERVER生成dump文件的方法Word文档格式.docx》由会员分享,可在线阅读,更多相关《调试SQLSERVER生成dump文件的方法Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
方法3:
在SSMS里执行下面sql语句
SELECTSERVERPROPERTY('
PROCESSID'
)ASsqlpid
方法4:
从SQLerrorlog里获取进程ID
EXEC[sys].[sp_readerrorlog]
第二步:
生成DUMP文件
使用SqlDumper
最一般的方法就是使用SQLSERVER内部的SqlDumper程序,如果使用默认安装路径defaultinstallationpath会是
C:
\ProgramFiles\MicrosoftSQLServer\100\Shared
语法如下:
SqlDumper<
processid(PID)>
<
threadid(TID)>
Flags:
MinidumpFlags>
SQLInfoPtr>
DumpDirectory>
如果对语法不太熟悉,可以使用/?
查看帮助
一般我们会使用到的flag如下:
0x0120–Minidump(只会dump出栈和所加载的模块,是最小的dump类型,并且这是sqlserver正常情况下自动生成的dump类型)
0x01100–FullDump(这种dump类型包含整个进程空间,如果是64位系统并且SQLSERVER占用大量内存那么dump出来的文件将会非常大)
0x8100–FilteredDump(FilteredDump会dump出
StolenMemory和bufferpool部分)
SqlDumper这个工具不但只可以dump出sqlserver,也可以dump出其他软件,进而生成dump文件
示例:
Minidump:
sqldumper311600x01200C:
\Temp
FullDump:
sqldumper311600x011000C:
FilteredDump:
sqldumper311600x81000C:
SQL进程里当前有45个线程
生成的minidump文件
dump文件的命名规则一般是:
SQLDmpr####.mdmp
使用debuggertools
例如使用WINDBG或其他debugger工具,将debugger附加到进程(使用PID)里面
WINDBG的下载地址:
下载下来进行安装,当然这时候可以同时下载公有符号包
下载地址:
安装好之后,就可以开始菜单看到WINDBG程序,点击他启动
选择AttachtoaProcess。
。
我们附加到进程ID为2168的这个sqlserver进程
一旦连接上,我们只需要使用.dump命令就能生成dump文件,语法如下:
Optionsare:
/a-Createdumpsforallprocesses(requires-u)创建所有进程的dump文件需要-u选项
/b[a]-PackagedumpinaCABanddeletedump包装dump文件为CAB格式然后删除dump文件
/c<
comment>
-Addacomment(notsupportedinallformats)添加注释,不支持所有格式
/j<
addr>
-ProvideaJIT_DEBUG_INFOaddress提供一个JIT_DEBUG_INFO地址
/f-Createalegacystylefulldump创建一个历史fulldump
/m[acdfFhiprRtuw]-Createaminidump(default)创建一个minidump文件(默认选项)
/o-Overwriteanyexistingfile覆盖任何已经存在的文件
/u-Appenduniqueidentifiertodumpname追加唯一标识符到dump文件名
“.dump/ma”命令对于创建一个完整的用户态内存dump文件是合适的
使用下面命令创建SQLSERVER的minidump文件放在C:
\Temp路径下
.dump/maC:
\Temp\sqlexpress_pid2168_dump.dmp
使用SQLSERVER内置的命令
在SQLSERVER里面,你可以使用两种方法创建dump文件,第一,使用下面的undocumented命令手工(手工触发)创建
DBCCSTACKDUMP
这个命令会在SQLSERVER实例安装路径下的LOG文件夹生成dump文件,要生成fulldump,minidump,full-filtereddump需要配合不同的traceflag
要生成fulldump使用下面命令
--fulldump
DBCCtraceon(2544,-1)
go
dbcctraceon(2546,-1)
dbccstackdump
dbccTRACEOFF(2544,2546,-1)
生成minidump使用下面命令
--minidump
GO
生成full-filtereddump使用下面命令
--full-filtereddump
dbcctraceon(2551,-1)
dbccTRACEOFF(2544,2546,2551,-1)
首先看一下你的SQL实例是安装在哪里,打开服务器属性,看到根目录那一栏
然后执行上面的命令
fulldump
minidump
full-filtereddump
可以看到dump文件的大小都不一样
另一种方法是使用下面的另一个undocumented命令(SQLSERVER自动触发)创建DUMP文件
DBCCDUMPTRIGGE
DBCCDUMPTRIGGER命令会在当有错误发生的时候触发dump的产生,当然你可以指定当发生某种特定错误的时候才触发
可以使用下面的命令当发生701错误的时候触发
--turnonTFsforfulldump
DBCCTRACEON(2544,-1)
GO
DBCCTRACEON(2546,-1)
--setDUMPTRIGGERforexception701
DBCCdumptrigger('
set'
701)
--exception701occur
BACKUPDATABASE[Temp2]
TO
DISK='
E:
\Temp21FULLBACKUP.BAK'
DISK='
\Temp22FULLBACKUP.bak'
\Temp23FULLBACKUP.bak'
\Temp24FULLBACKUP.bak'
\Temp25FULLBACKUP.bak'
\Temp26FULLBACKUP.bak'
WITHBUFFERCOUNT=999999999,FORMAT
--消息3013,级别16,状态1,第2行
--BACKUPDATABASE正在异常终止。
--消息701,级别17,状态17,第2行
--资源池'
default'
没有足够的系统内存来运行此查询。
--viewexceptionssetforDUMPTRIGGER
DBCCTRACEON(3604,-1)
display'
)
DBCCTRACEOFF(3604,-1)
--Turnoffdumptriggerforexception701
clear'
这时候在LOG文件夹下就会看到生成的dump文件
添加SQLSERVER的启动参数
–y:
启动参数在SQL启动的时候能完成DBCCDUMPTRIGGER命令类似的功能
Formoreinformationreferto:
方法5:
在任务管理器里按右键->
创建转储文件
这个方法不是太推荐,不是太可控
当点击按钮“创建转储文件”的时候,Windows会创建一个full
dump文件
这个功能只能在Windows2008、Windows2008R2、Vista、Windows7上使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 调试 SQLSERVER 生成 dump 文件 方法