我在PuTTY中创建了一个sql文件,并使用以下命令保持其运行:
sqlplus username/pwd@SSAR05 @exec_lmn_DELETE.sql > exec_lmn_DELETE_17102018.log &
我没有记下它的SPID,但现在我想终止该过程。
该怎么做?
答案 0 :(得分:1)
尝试一下:
ps -ef| grep "sqlplus"
这应该为您提供如下结果:
mayankp 30927 22295 0 Oct09 pts/22 00:00:02 /home/mayankp/anaconda2/bin/python /home/mayankp/anaconda2/bin/ipython
其中30927
是进程ID。像这样杀死它:
kill -9 30927
答案 1 :(得分:0)
我要说的是,您必须首先进入数据库并在那里终止会话。
由于当前环境中可能存在多个SQL * Plus会话,因此您不知道要终止哪个进程。
首先从ps命令中识别进程ID。
~2
您会看到有多个sqlplus会话,如何识别属于您的会话?
连接到相关的数据库会话(最好以系统/ dba用户身份)
knayak-/Users/knayak-$ps -ef | grep [s]qlplus
501 23750 23309 0 11:46AM ttys004 0:00.05 sqlplus
501 23445 23309 0 11:50AM ttys004 0:00.05 sqlplus
现在,客户端pid与正在运行作业的 Oracle进程的PID不同。
首先,终止底层的Oracle进程。当您在Oracle服务器中运行SELECT s.username,
s.sid,
s.osuser,
t.sql_id,
sql_text,
p.spid, -- OS Process id of the Oracle process
s.process . -- Client session process ID
FROM v$sqltext_with_newlines t JOIN
v$session s
ON t.address = s.sql_address AND t.hash_value = s.sql_hash_value
JOIN v$process p ON p.addr = s.paddr
WHERE s.status = 'ACTIVE' AND s.username <> 'SYSTEM'
AND sql_text LIKE '%DELETE%' --This should correspond to your statements in the sql file.
AND s.process IN ( '<list of pids from the command>') --put the client pids here.
ORDER BY s.sid,
t.piece;
并从上面的查询中获取ps
的grep时,将会看到类似的内容。
spid
如果您无法访问Oracle登录名,请要求DBA终止与此会话相对应的会话。
然后杀死相应的会话(如果存在)以dba连接到db。
oracle 63063 1 32 23:16 ? 00:11:12 oracleSSAR05 (LOCAL=NO)
现在,检查客户端进程是否仍在运行,应该不会运行。如果有,最后将其杀死。