大家好我尝试从文本文件中提取“SID”值,使用带有批处理文件的(for / f)提取SID后运行查询我需要为此命令分配SID值“alter system kill session 'SID_value' 所以请任何人知道如何使用它或任何其他解决方案都可以使用。
输出: (SID,S#= 5694,55482) => 55482 alter system kill session'55482'
query_result.txt:
SQL * Plus:2017年3月12日星期日09:28:16发布11.2.0.1.0版本
版权所有(c)1982,2010,Oracle。保留所有权利。
连接到: Oracle Database 12c企业版12.1.0.2.0版 - 64位生产 使用分区,Real Application Clusters,OLAP,Advanced Analytics 和实际应用程序测试选项
SQL> LOGCDE @ DOM \ AMANSAPP1(SID,S#= 5694,55482)阻止GENCDE @ DDOM \ SA = V M-MOTOR-WS(SID,S#= 959,36066)
LOGCDE @ DOM \ AMANSAPP1(SID,S#= 5694,55482)阻止GENCDE @ DDOM \ SA = V M-MOTOR-WS(SID,S#= 1025,36066)
SQL>与Oracle Database 12c企业版12.1.0.2.0版 - 64位生产版断开连接 使用分区,Real Application Clusters,OLAP,Advanced Analytics 和实际应用程序测试选项
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q42744864.txt"
FOR /f "delims=" %%a IN (
'findstr /L /i /c:"is blocking " "%filename1%"'
) DO (
FOR /f "tokens=2*delims=()" %%m IN ("%%a") DO (
ECHO(%%n|FINDSTR /b /L /C:" is blocking ">NUL
IF NOT ERRORLEVEL 1 (
FOR /f "tokens=1-4delims==, " %%p IN ("%%m") DO (
IF "%%p"=="SID" IF "%%q"=="S#" ECHO(alter system kill session '%%s'
)
)
)
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
我使用了一个名为q42744864.txt
的文件,其中包含我的测试数据。
首先,使用findstr
阅读该文件,以查找包含/i
不区分大小写的/L
字面/c:"this string"
的行。 Ass点击%%a
找到的每一行。
接下来,使用%%a
和(
标记)
,并将括号之间的部分分配给%%m
,将第二个括号后的部分分配给%%n
回复%%n
进入findstr
测试/b
开始的行... / L和/ C:我已经介绍了。使用findstr
- >nul
处理findstr
的输出会将errorlevel
设置为找到字符串的0,否则为1。
如果errorlevel为0,则使用%%m
,=
和 Space 标记,
中括号的内容,以便SID
应该转到%%p
,S#
转到%%q
,无论S#
到%%r
后面的号码是多少,还是%%s
所需的号码。
如果%%p
和%%q
结帐,请显示所需的行。