如何从腻子中杀死在Oracle数据库服务器上运行的进程?

时间:2018-10-22 05:13:38

标签: sql oracle unix sqlplus

我在PuTTY中创建了一个sql文件,并使用以下命令保持其运行:

sqlplus username/pwd@SSAR05 @exec_lmn_DELETE.sql > exec_lmn_DELETE_17102018.log &

我没有记下它的SPID,但现在我想终止该过程。

该怎么做?

2 个答案:

答案 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)

现在,检查客户端进程是否仍在运行,应该不会运行。如果有,最后将其杀死。