① 如何检索 sql 错误日志或 DBCC 输出错误
为查找问题,有必要经常检查 DBCC 输出和 SQL Server 错误日志。这可能会引起错误,而且是一件极为烦琐的过程,尤其是必须在几台服务器上进行检查,而每台服务器可能有多个数据库时。Windows NT 在发布时提供一个功能强大的模式搜索工具(称为 Findstr.exe),该工具可以被用来从很大程度上自动处理该任务。根据是否找到某些错误字符串,还可以使用该工具有条件地执行批处理文件。本文讲述如何使用 Findstr 工具。
更多信息
Findstr 是一个高性能的模式搜索工具,它使用 Win32 异步和文件映射 I/O 以获取最佳的吞吐量。该工具允许使用常规表达式、向下递归搜索目录树、和排除模式的功能,这样可以获得 NOT 功能。有关其它信息,请参阅 Windows NT 文档。
有两种使用 Findstr.exe 搜索 SQL Server 错误日志或 DBCC 输出以查找错误的基本方法:
明确说明要查找的字符串。
说明不想查找的字符串(这样将显示除这些字符串之外的所有字符串)。
在第一种方法中,可以创建一个字符串行表来定义错误,让 Findstr 进行匹配。该字符串行表可以作为输入文件提供给 Findstr。
例如,假如您要查找所有的“table corrupt”字符串(该字符串带有许多严重的数据错误)以及所有“msg 605”字符串(一种特定的错误类型)。请将这些字符串放到一个文件中,其内容类似于:
table corrupt
msg 605
使用下列语法对 DBCC 输出文件运行 Findstr.exe:
findstr /i /g:search.txt dbcc.* > findstr.out
其中,search.txt 是包含搜索字符串的文件,dbcc.* 对应于一组要搜索的 DBCC 输出文件,而 findstr.out 是存放搜索结果的文件。
使用该方法要求事先知道要搜索的错误字符串。但遗憾地是,并没有一个全面的 SQL Server 错误字符串行表可以涵盖所有可能的 DBCC、服务器与内核错误。对于 7.0 版以前的版本,只对以下字符串进行搜索就可能提供相当全的范围作为起始点:“table corrupt”、“level 16” – “level 21”以及“Severity: 16”-“Severity: 21."
使用一个小试验,通常有可能对此做进一步的改进,并得到相当可靠的检查结果(当然比通过肉眼进行查找要可靠得多)。
另外,还可以使用 Findstr 的“反向匹配”功能排除搜索字符串的列表。该方法应用于 DBCC 输出比应用于错误日志输出要简便得多,这是因为需要排除的独特的字符串比较少。从某种程度上讲,该方法(如果可以使用)要安全得多,因为只需明确地说明不要匹配的内容,而且在默认情况下任何新的或意想不到的错误将会被显示。
由于 7.0 版目前遇到的错误消息非常有限,因此“反向匹配”方法可能是适用于这一版本的最好方法。
举个例子,假设您要将一系列 DBCC 输出文件中的“The total number”、“Table has”和“Checking”字符串排除在外。这将排除许多不重要的 DBCC 状态消息,而且不会导致任何错误消息的丢失。对于 7.0 版之前的版本,将这些字符串放到内容类似如下文件中:
The total number
Table has
Checking
使用以下语法对 DBCC 输出文件运行 Findstr:
findstr /v /i /g:search.txt dbcc.* > findstr.out
其中 search.txt 是包含搜索字符串的文件,dbcc.* 与要搜索的一组输出文件匹配,而 findstr.out 是存放搜索结果的文件。/v 参数表明是“反向匹配”,这可以有效地匹配除列表中这些字符串之外的所有字符串。
对于 7.0 版,做法与上述方法类似,但使用下列字符串:
pages for object
DBCC results
DBCC execution completed
下面是错误日志排除列表的一个示例,该排除列表将筛选出不重要的消息并查找最为重要的错误。该示例并不全面,仅作为示例使用。可以根据您的需要对其进行修改。
Copyright
All rights reserved
Logging SQL Server
initconfig: number
SQL Server is start
initializing virtual
Opening Master Data
Loading SQL Server
Recovering Database
Recovery dbid
transactions roll
Activating disk
initializing virtual
server name is
Clearing
Using 'SQLEVENT.DLL
Using 'OPENDSNT.DLL
Using 'NTWDBLIB.DLL
Using 'SSNMPNTW.DLL
rolled forward
default sort
nocase
default character
recovery complete
terminating e
windows nt
(id =
killed by hostname
17824
17825
1608
17832
OS error : 109
OS error : 232
unable to write to
restrictions
contracts
server is unnamed
no_log
working thread
Sybase
network error
united states
unable to read login
plication
subdivision
clause
number of buffers
using asynchronous disk
pipe name is
number of proc buffers
network information
file descriptors
transactions before ckpt
shutdown by request
在某些情况下,将这两种方法结合使用可以将两者的优点结合在一起,或者至少可以避过因使用其中一个方法而出现的问题。
例如,假设您在搜索错误日志查找“Severity:16”到“Severity:21”字符串,这些字符串应当能匹配最严重的错误。但是您会在搜索输出结果中发现几个与通信相关的错误,如 1608 和 17832,这些错误通常不表示严重的问题。您可以保留原来的搜索条件并只将这些特定的不必要错误从搜索结果中排除出去,其方法是将一个 Findstr 命令输出到另一个中:
findstr /i /g:search.txt errorlog*.* | findstr
/v /i /g:exclude.txt > f.out
其中 search.txt 是包含搜索字符串的文件,errorlog*.* 是要搜索的 SQL Server 错误日志文件,exclude.txt 是包含要排除的搜索字符串的文件,f.out 是存放搜索结果的文件。这种方法可以多级层叠使用,但不能在同一级连续多次层叠。
编写批处理文件,有可能根据 Findstr 是否检查到某个错误字符串有条件地执行操作。这种技术使用 Windows NT 的条件处理命令“&&”和“||”。如果在 seach.txt 文件中找到任何 SQL Server 错误字符串,下面的命令将执行批处理文件 batch1.bat:
findstr /i /g:search.txt errorlog*.* && batch1
Batch1.bat 能够调用程序,甚至运行使用 SQL Server 的 xp_sendmail 功能发送邮件的 ISQL 作业,通知操作员出现的问题。
以上所说明的技术可以结合使用以执行多种任务。例如,下面的批处理文件将不断运行 Findstr 命令,如果在 search.txt 文件中找到任何 SQL 错误字符串,该命令都会有条件地执行 batch1.bat 文件,排除 exclude.txt 中的字符串。
echo off
:start
findstr /i /g:search.txt errorlog*.* | findstr
/v /i /g:exclude.txt && (echo WARNING & batch1)
goto start
通过一个小的试验,就会发现这些技术有助于减少搜索 SQL Server 错误日志和 DBCC 输出文件所花费的精力。上述这些技术也可用于对任何普通文本的搜索,而并非仅限于与 SQL Server 相关的内容。
有些情况下,Findstr 可能受到内部限制,而不能完成搜索任务。出现这种情况时,在输出文件中会得到下列消息:
FINDSTR:Write error.
如果出现这种情况,请减少所使用的匹配字符串数,尝试使用正向匹配替代反向匹配,或者使用其它搜索工具,比如 Perl(以下对此进行更多的介绍)。
相关主题是 Windows NT 命令行工具的使用。启动 Windows NT 4.0 可以得到增强的命令扩展。运行 cmd /x /? 查看列表。增强的 FOR 命令就是一个示例。执行 for /? 查看语法。下面的例子说明如何在一行中使用 FOR 语句连续 5 次运行 isql,并将每次的输出结果保存到具有不同称的文件中:
FOR /L %f IN (1, 1, 5) do isql /Usa /P /itest.sql /otest%f.out
下面的例子说明如何将包含某个错误字符串的所有文件移到公共目录中。这对于从一大堆没有错误的错误日志中剔除包含错误的错误日志是很有用的,这样可以将这些错误日志发送给某些专家进一步研究。下面将举例说明如何在包含名称列表的文件中对每个文件名执行程序。
findstr /s /i /c:"error.*605" errorlog*.* > srch.out
FOR /F %f IN (srch.out) do %f c:\results
除命令扩展之外,Windows NT 资源工具包中还包含 Perl 版本。Perl 是一种类似于 C 的解释性语言,该语言在很大程度上优化了对文件和字符串的处理。使用 Perl 语言很容易实现复杂的模式匹配和编辑/替代操作。Perl 可以和 Windows NT 命令行结合使用以提供非常强大的功能。有许多关于 Perl 的书籍和站点信息资源。
② SQL错误日志在哪里看
SQL Server 错误日志可用 SQL Server 企业管理器或任何文本编辑器查看。默认情况下,错误日志位于 Program Files\Microsoft SQL Server\Mssql\Log\Errorlog。
置疑可能是lDF文件丢失,如没有备份,可参照只有Mdf文件恢复数据库
③ 用友sql升级错误怎么办
看一下是哪张表出现的这个问题,表只有能一个主键,
④ 我装用友microsoft SQL server desktop engine 时老是出现安装程序配置服务器失败。请参考服务器错误日志
你把office
2003
安装好了。那个补丁就自动安装了,最好现在控制面板里删除microsoft
sql
server
desktop
engine。然后在安装microsoft
sql
server
desktop
engine。
⑤ 用友数据库安装失败
问题原因:此问题属于sql server的bug, GetComputerName 用于获取本地计算机名。客户端网络库组件 (DBMSLPCn.dll) 将该名称转换为全部大写。服务器网络库组件 (SSMSLPCn.dll) 保留返回时的名称。当 Windows 计算机名称包含大写字母和小写字母或者都是小写字母时安装会失败。
解决办法: 把计算机名更改成大写即可以解决此问题。但有时报错之后,注册表删除干净,删除安装目录,重新安装似乎也能成功!
⑥ SQL错误日志 在哪
如果是SQL Server,在安装目录中找:MSSQL.1\MSSQL\LOG
这个目录下ERRORLOG就是错误日志,双击打开即可查看
⑦ 用友t3 的sql server database sevces安装失败,出现日志错误
从新下个新的 看你的数据库什么版本 先把之前的卸载干净
⑧ 用友升级错误,提示信息:升级sql server数据库!
原来考出来的mdb文件中的某些键值没改对,
并不是每个帐套都只需要改了路径 主机名称 或者其他的就可以的
需要深入研究下, 打集团电话咨询