⑴ sql Server 伺服器名後的(Windows NT)是什麼一意思
操作系統類型,新技術版本Windows(一種視窗型的32位元組操作系統)。
⑵ PLSQL的SQL WINDOW中不能執行的語句
樓主的意思,我大概知道了。
其實樓主的意思,基本上就是 哪些 命令,不是標準的 SQL 命令
是 SQL Plus 所特有的命令。
清單如下:
有樓主的 「SHO[W] [option]」 哦
Alphabetic List of SQL*Plus Commands
@{url | file_name[.ext]} [arg ...]
@@ { url | file_name[.ext] } [arg ...]
/ (slash)
ACC[EPT] variable [NUM[BER] | CHAR | DATE | BINARY_FLOAT | BINARY_DOUBLE] [FOR[MAT] format] [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE]
*A[PPEND] text
ARCHIVE LOG {LIST | STOP} | {START | NEXT | ALL | integer} [TO destination]
ATTRIBUTE [type_name.attribute_name [option...]]
BRE[AK] [ON report_element [action [action]]] ...
BTI[TLE] [printspec [text | variable] ...] | [ON | OFF]
*C[HANGE] sepchar old [sepchar [new [sepchar]]]
CL[EAR] option ...
COL[UMN] [{column | expr} [option ...]]
COMP[UTE] [function [LAB[EL] text] ... OF {expr | column | alias} ...ON {expr | column | alias | REPORT | ROW} ...]
CONN[ECT] [{logon | /} [AS {SYSOPER | SYSDBA}]]
COPY {FROM database | TO database | FROM database TO database} {APPEND | CREATE | INSERT | REPLACE} destination_table[(column, column, column, ...)] USING query
DEF[INE] [variable] | [variable = text]
*DEL [n | n m | n * | n LAST | * | * n | * LAST | LAST]
DESC[RIBE] {[schema.]object[@connect_identifier]}
DISC[ONNECT]
*ED[IT] [file_name[.ext]]
EXEC[UTE] statement
{EXIT | QUIT} [SUCCESS | FAILURE | WARNING | n | variable | :BindVariable] [COMMIT | ROLLBACK]
*GET [FILE] file_name[.ext] [LIST | NOLIST]
HELP | ? [topic]
*HO[ST] [command]
*I[NPUT] [text]
L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST]
*PASSW[ORD] [username]
PAU[SE] [text]
PRI[NT] [variable ...]
PRO[MPT] [text]
{QUIT | EXIT} [SUCCESS | FAILURE | WARNING | n | variable | :BindVariable] [COMMIT | ROLLBACK]
RECOVER {general | managed | BEGIN BACKUP | END BACKUP}
REM[ARK]
REPF[OOTER] [PAGE] [printspec [text | variable] ...] | [ON | OFF]
REPH[EADER] [PAGE] [printspec [text | variable] ...] | [ON | OFF]
R[UN]
*SAV[E] [FILE] file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]]
SET system_variable value
SHO[W] [option]
SHUTDOWN [ABORT | IMMEDIATE | NORMAL | TRANSACTIONAL [LOCAL]]
*SPO[OL] [filename[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]
STA[RT] { url | file_name[.ext] } [arg ...]
STARTUP options | upgrade_options
*STORE {SET} file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]]
TIMI[NG] [START text | SHOW | STOP]
TTI[TLE] [printspec [text | variable] ...] | [ON | OFF]
UNDEF[INE] variable ...
VAR[IABLE] [variable [type]]
WHENEVER OSERROR {EXIT [SUCCESS | FAILURE | n | variable | :BindVariable] [COMMIT | ROLLBACK] | CONTINUE[COMMIT | ROLLBACK | NONE]}
WHENEVER SQLERROR {EXIT [SUCCESS | FAILURE | WARNING | n | variable | :BindVariable] [COMMIT | ROLLBACK] | CONTINUE [COMMIT | ROLLBACK | NONE]}
XQUERY xquery_statement
*Commands not available in iSQL*Plus.
⑶ 用SQL語言select @@version查詢SQL版本的具體方法,越詳細越好
如何確定所運行的 SQL Server 2005 的版本
要確定所運行的 SQL Server 2005 的版本,請使用 SQL Server Management Studio 連接到 SQL Server 2005,然後運行以下 Transact-SQL 語句:
SELECT SERVERPROPERTY('proctversion'),
SERVERPROPERTY ('proctlevel'), SERVERPROPERTY ('edition')
運行結果如下:
• 產品版本(例如,「9.00.1399.06」)。
• 產品級別(例如,「RTM」)。
• 版本(例如,「Enterprise Edition」)。
例如,運行結果可能類似於如下內容:
9.00.1399.06 RTM Enterprise Edition
下表列出了 Sqlservr.exe 的版本號:
發行版 Sqlservr.exe
RTM 2005.90.1399
SQL Server 2005 Service Pack 1 2005.90.2047
如何確定所運行的 SQL Server 2000 的版本
要確定所運行的 SQL Server 2000 的版本,請使用查詢分析器連接到 SQL Server 2000,然後運行下列代碼:
SELECT SERVERPROPERTY('proctversion'),
SERVERPROPERTY ('proctlevel'),
SERVERPROPERTY ('edition')
運行結果如下:
• 產品版本(例如,8.00.534)。
• 產品級別(例如,「RTM」或「SP2」)。
• 版本(例如,「Standard Edition」)。
例如,運行結果可能類似於如下內容:
8.00.534 RTM Standard Edition
下表列出了 Sqlservr.exe 的版本號:
發行版 Sqlservr.exe
RTM 2000.80.194.0
SQL Server 2000 SP1 2000.80.384.0
SQL Server 2000 SP2 2000.80.534.0
SQL Server 2000 SP3 2000.80.760.0
SQL Server 2000 SP3a 2000.80.760.0
SQL Server 2000 SP4 2000.8.00.2039
如何確定所運行的 SQL Server 7.0 的版本
要確定所運行的 SQL Server 7.0 的版本,請使用查詢分析器連接到 SQL Server 7.0,然後運行下列代碼:
SELECT @@VERSION
運行結果類似如下所示:
Microsoft SQL Server 7.00 - 7.00.623 (Intel X86)
Nov 27 1998 22:20:07
Copyright (c) 1988-1998 Microsoft Corporation
Desktop Edition on Windows NT 5.1 (Build 2600:)
注意:在此示例中,版本號為 7.00.623。
使用下表中的版本號識別產品級別或 Service Pack 的級別:
版本號 Service Pack
7.00.1063 SQL Server 7.0 Service Pack 4 (SP4)
7.00.961 SQL Server 7.0 Service Pack 3 (SP3)
7.00.842 SQL Server 7.0 Service Pack 2 (SP2)
7.00.699 SQL Server 7.0 Service Pack 1 (SP1)
7.00.623 SQL Server 7.0 RTM (Release To Manufacturing)
如果此表中未列出 @@VERSION 報告的版本號,則所運行的 SQL Server 安裝了修補程序或安全更新程序內部版本。例如,如果 @@VERSION 報告版本號為 7.00.859,則您正在運行安裝了修補程序的 SQL Server 7.0 SP2。每個新版本的 Sqlservr.exe 可執行文件的版本號都會增加。有關更多信息,請參閱修補程序或安全更新程序的 Readme.txt 文件。
如何確定所運行的 SQL Server 6.5 的版本
要確定所運行的 SQL Server 6.5 的版本,請使用 Isql_w 連接到 SQL Server 6.5,然後運行下列代碼:
SELECT @@VERSION
使用下表中的版本號識別產品級別或 Service Pack 的級別:
版本號 Service Pack
6.50.479 SQL Server 6.5 Service Pack 5a (SP5a) Update
6.50.416 SQL Server 6.5 Service Pack 5a (SP5a)
6.50.415 SQL Server 6.5 Service Pack 5 (SP5)
6.50.281 SQL Server 6.5 Service Pack 4 (SP4)
6.50.258 SQL Server 6.5 Service Pack 3 (SP3)
6.50.240 SQL Server 6.5 Service Pack 2 (SP2)
6.50.213 SQL Server 6.5 Service Pack 1 (SP1)
6.50.201 SQL Server 6.5 RTM
如果此表中未列出 @@VERSION 報告的版本號,則所運行的 SQL Server 安裝了修補程序或安全更新程序內部版本。每個新版本的 Sqlservr.exe 可執行文件的版本號都會增加。有關更多信息,請參閱修補程序或安全更新程序的 Readme.txt 文件。
如何確定所運行的 SQL Server 的版本
如果您不能確定運行的 SQL Server 的版本,則 @@VERSION 返回的輸出中的最後一行報告您所連接的版本。本文中使用的示例為在 Windows NT 5.0(內部版本 2195:Service Pack 2)上安裝的 SQL Server 2000 Standard Edition。Service Pack 2)。
⑷ 是什麼意思,sql,死鎖中spid是啥
SQL Server中的SPID,是唯一的sessionID
像.net中的session一樣,如果能知道了資料庫中的sessionID,那所有的操作都能知道了,因為有了這個唯一的身份識別的標識。
可以做的事情有很多,如:當前哪個用戶在做什麼操作,在執行什麼sql, 又如一個比較大的邏輯中要分別執行很多存儲過程,
在執行這些存儲過程的過程當中,你想知道當前執行的進度,SQLServer正在執行哪個段sql語句,那麼通過sessionID是很容易
就得到這些信息的。
SQL Server 得到SPID,唯一的sessionID:
SELECT @@SPID
以前我一直不知道,最近又裝了SQLServer2014,發現每開一個Query 界面就有一個ID出來。我就特別想知道怎麼取sessionID.
下面的存儲過程是用來查看哪些sessionID正在執行什麼操作。
createPROC[dbo].[dba_WhatSQLIsExecuting]
AS
BEGIN
--Donotlockanything,anddonotgethelpbyanylocks.--?
SELECT[Spid]=session_Id
,ecid
,[Database]=DB_NAME(sp.dbid)
,[User]=nt_username
,[Status]=er.status
,[Wait]=wait_type
,[IndivialQuery]=SUBSTRING(qt.text,
er.statement_start_offset/2,
(CASEWHENer.statement_end_offset=-1
THENLEN(CONVERT(NVARCHAR(MAX),qt.text))*2
ELSEer.statement_end_offsetEND-
er.statement_start_offset)/2)
,[ParentQuery]=qt.text
,Program=program_name
,Hostname
,nt_domain
,start_time
FROMsys.dm_exec_requestser
INNERJOINsys.sysprocessesspONer.session_id=sp.spid
CROSSAPPLYsys.dm_exec_sql_text(er.sql_handle)asqt
WHEREsession_Id>50--Ignoresystemspids.
ANDsession_IdNOTIN(@@SPID)--Ignorethiscurrentstatement.
--andDB_NAME(sp.dbid)='RangeCheckTool'
ORDERBY1,2
END
⑸ bat文件調用 sql命令後 不繼續執行
osql "XXXXXXXX" -Q
C:\Documents and Settings\Administrator>osql /?
Microsoft (R) SQL Server 命令行工具
版本 9.00.1399.06 NT INTEL X86
版權所有 (c) Microsoft Corporation。保留所有權利。
注意: osql 並不支持 SQL Server 2005的所有功能。
請使用 sqlcmd。有關詳細信息,請參閱 SQL Server 聯機叢書。
用法: osql [-U 登錄 ID] [-P 密碼]
[-S 伺服器] [-H 主機名] [-E 可信連接]
[-d 使用資料庫名稱] [-l 登錄超時值] [-t 查詢超時值]
[-h 標題] [-s 列分隔符] [-w 列寬]
[-a 數據包大小] [-e 回顯輸入] [-I 允許帶引號的標識符]
[-L 列出伺服器] [-c 命令結束] [-D ODBC DSN 名稱]
[-q "命令行查詢"] [-Q "命令行查詢" 並退出]
[-n 刪除編號方式] [-m 錯誤級別]
[-r 發送到 stderr 的消息] [-V 嚴重級別]
[-i 輸入文件] [-o 輸出文件]
[-p 列印統計信息] [-b 出錯時中止批處理]
[-X[1] 禁用命令,[退出的同時顯示警告]]
[-O 使用舊 ISQL 行為禁用下列項]
<EOF> 批處理
自動調整控制台寬度
寬消息
默認錯誤級別為 -1 和 1
[-? 顯示語法摘要]
提供
www.8023ni.com
www.jvhao.com
望採納
⑹ Oracle服務
OracleDBConsoleorcl 這個是採用瀏覽器使用的oracle企業管理器
OracleOraDb10g_home1iSQL*Plus 是isql*plus的服務,要使用isqlplus,必須開啟該服務,其它的服務見下面
如果只用cmd中的sqlplus管理oracle的話,必須的就一個OracleServiceORCL
要是還要其它的至少兩個:OracleServiceORCL OracleOraDb10g_home1TNSListener
一個資料庫伺服器,一個監聽器(等待客戶端工具來連接資料庫的程序)
(1)OracleServiceSID
資料庫服務,這個服務會自動地啟動和停止資料庫。如果安裝了一個資料庫,它的預設啟動類型為自動。服務進程為ORACLE.EXE,參數文件initSID.ora,日誌文件SIDALRT.log,控制台SVRMGRL.EXE、SQLPLUS.EXE。
(2)OracleHOME_NAMETNSListener
監聽器服務,服務只有在資料庫需要遠程訪問時才需要(無論是通過另外一台主機還是在本地通過 SQL*Net 網路協議都屬於遠程訪問),不用這個服務就可以訪問本地資料庫,它的預設啟動類型為自動。服務進程為TNSLSNR.EXE,參數文件 Listener.ora,日誌文件listener.log,控制台LSNRCTL.EXE,默認埠1521、1526。
(3)OracleHOME_NAMEAgent
OEM代理服務,接收和響應來自OEM控制台的任務和事件請求,只有使用OEM管理資料庫時才需要,它的預設啟動類型為自動。服務進程為DBSNMP.EXE,參數文件snmp_rw.ora,日誌文件nmi.log,控制台LSNRCTL.EXE,默認埠1748。
(4)OracleHOME_NAMEClientCache
名字緩存服務,服務緩存用於連接遠程資料庫的Oracle Names 數據。它的預設啟動類型是手動。然而,除非有一台Oracle Names 伺服器,否則沒有必要運行這個服務。服務進程為ONRSD.EXE,參數文件NAMES.ORA,日誌文件ONRSD.LOG,控制台 NAMESCTL.EXE。
(5)OracleHOME_NAMECMAdmin
連接管理服務,是構建Connection Manager伺服器所用,只有伺服器作為Connection Manager才需要,它的預設啟動類型是手動。服務進程為CMADMIN.EXE,參數文件CMAN.ORA,日誌文件CMADM_PID.TRC,控制台CMCTL.EXE,默認埠1830。
(6)OracleHOME_NAMECMan
連接網關服務,是構建Connection Manager伺服器所用,只有伺服器作為Connection Manager才需要,它的預設啟動類型是手動。服務進程為CMGW.EXE,參數文件CMAN.ORA,日誌文件CMAN_PID.TRC,控制台 CMCTL.EXE,默認埠1630。
(7)OracleHOME_NAMEDataGatherer
性能包數據採集服務,除非使用Oracle Capacity Planner 和 Oracle Performance Manager,否則不需要啟動,它的預設啟動類型是手動。服務進程為VPPDC.EXE,日誌文件alert_dg.log,控制台 vppcntl.exe。
(8)OracleHOME_NAMEHTTPServer
Oracle 提供的WEB伺服器,一般情況下我們只用它來訪問Oracle Apache 目錄下的Web 頁面,比如說JSP 或者modplsql 頁面。除非你使用它作為你的HTTP服務,否則不需要啟動(若啟動它會接管IIS的服務),它的預設啟動類型是手動。服務進程為APACHE.EXE,參數文件 httpd.conf,默認埠80。
(9)OracleHOME_NAMEPagingServer
通過一個使用數據機的數字傳呼機或者電子郵件發出警告(沒試過),它的預設啟動類型是手動。服務進程PAGNTSRV.EXE,日誌文件paging.log。
(10)OracleHOME_NAMENames
Oracle Names服務,只有伺服器作為Names Server才需要,它的預設啟動類型是手動。服務進程NAMES.EXE,參數文件NAMES.ORA,日誌文件NAMES.LOG,控制台NAMESCTL.EXE,默認埠1575。
(11)OracleSNMPPeerMasterAgent
SNMP服務代理,用於支持SNMP的網管軟體對伺服器的管理,除非你使用網管工具監控資料庫的情況,否則不需要啟動,它的預設啟動類型是手動。服務進程為AGNTSVC.EXE,參數文件MASTER.CFG,默認埠161。
(12)OracleSNMPPeerEncapsulater
SNMP協議封裝服務,用於SNMP協議轉換,除非你使用一個不兼容的SNMP代理服務,否則不需要啟動,它的預設啟動類型是手動。服務進程為ENCSVC.EXE,參數文件ENCAPS.CFG,默認埠1161。
(13)OracleHOME_NAMEManagementServer
OEM管理服務,使用OEM時需要,它的預設啟動類型是手動。服務進程為OMSNTSVR.EXE,日誌文件oms.nohup。
⑺ 請問什麼是SQL注入
就是搞MM的意思
⑻ 在SQL中怎麼查看版本號
方法一:通過代碼
打開sqlserver管理器,連接進入資料庫,然後點擊「新建查詢」。
⑼ 如何修復sql資料庫master
在網上搜索了一下,發現了一篇介紹比較詳細的,而且也確實解決了這一問題(我在VM上測試過可以),特將其全文轉貼如下:
關於系統資料庫的恢復總結如下:
在SQL Server資料庫中,系統信息存儲在系統資料庫中,主要的系統資料庫包括:
master-從整體上控制用戶資料庫和SQL Server操作,在創建了任何用戶定義的對象後,都要備份它
model-為新資料庫提供模版和原型
msdb-包含了有關作業、報警及操作員等信息
如果包含系統資料庫的介質變了,那麼必須重建系統資料庫,如果你仍然可以啟動SQL Server服務,則可以通過RESTORE語句從系統資料庫的備份中恢復資料庫。
如果master壞了,不能啟動系統,可以按照下面步驟進行恢復
1.重建系統資料庫 運行c:/mssql7/binn/rebuildm.exe,按照提示進行即可,
過程中需要系統資料庫樣本的路徑,可在安裝光碟中找到;
2 重建系統資料庫後,啟動SQL Server服務,用系統資料庫的備份恢復資料庫
就行了通常恢復順序為master->msdb->model
在恢復master的備份時要注意:必須在單用戶(single user)模式下進行
a.進入單用戶模式的方法:
1.在命令行模式下輸入sqlservr -c -f -m或者輸入sqlservr -m
其中:-c 可以縮短啟動時間,SQL Server 不作為Windows NT的服務啟動
-f 用最小配置啟動SQL Server
-m 單用戶模式啟動SQL Server
2.可以在控制面板-服務-MSSQLServer的啟動參數中輸入-c -f -m或者輸入-m,點擊開始
3.進行master資料庫的恢復
a.直接進入查詢分析器,有個提示不要理會它
輸入恢復語句進行資料庫恢復:
RESTORE DATABASE master from disk='c:/具體的備份文件名'
b.或者用這個,在命令提示符下輸入,注意大小寫
使用"windows身份驗證"的,輸入:isql /E
使用"sql server和windows身份驗證"的,輸入:isql /U"用戶名" /P"密碼"
然後在出現的提示符下輸入(注意1>,2>是提示符):
⑽ 如何檢索 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 的書籍和站點信息資源。