① 如何檢索 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文件中的某些鍵值沒改對,
並不是每個帳套都只需要改了路徑 主機名稱 或者其他的就可以的
需要深入研究下, 打集團電話咨詢