Я бы сказал, что вы должны сначала зайти в базу данных и завершить там сеанс.
Поскольку в вашей текущей среде может быть несколько сеансов SQL * Plus, вы не будете знать, какой процесс вы завершаете.
Сначала определите идентификаторы процессов из команды ps.
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
Как вы видите, существует несколько сеансов sqlplus, как определить, какой из них принадлежит вам?
Подключитесь к соответствующему сеансу базы данных (в идеале, как пользователь системы / dba)
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;
Теперь pid клиента отличается от PID процесса Oracle , выполняющего задание.
Во-первых, уничтожьте основной процесс Oracle.вы увидите что-то вроде этого, когда запустите ps
на сервере Oracle и grep для spid
, полученного из запроса выше.
oracle 63063 1 32 23:16 ? 00:11:12 oracleSSAR05 (LOCAL=NO)
Если у вас нет доступа к логину Oracle, обратитесь к администратору базы данных.завершить сеанс, соответствующий этому сеансу.
Затем завершить соответствующий сеанс, если он существует, подключаясь к базе данных как dba.
ALTER SYSTEM KILL SESSION '<sid>,<serial#>'; -- from the query above
Теперь проверьте, не завершен ли клиентский процесс.бегать не должно.Убейте его наконец, если оно там.