当前位置:首页 » 编程语言 » sqlint1
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlint1

发布时间: 2022-01-16 06:40:26

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 的书籍和站点信息资源。