我有一个包含函数的包,该函数只是从给定产品 id 的表中返回描述。
现在我有一个过程,它有一个 select 语句,它使用这个函数。 今天早上我注意到,包体变得无效, 并且对此过程的所有调用都会导致运行该 select 语句, 由于包引用无效而永远不会完成。
我需要对我的包进行更改,但在所有进程完成(或回滚(之前我无法这样做。
我能做什么..?
您可以使用以下查询查询活动进程以获取 sid & serial#。
SELECT ses.sid, ses.serial#, ses.username, ses.schemaname, sql.sql_text
FROM v$session ses,
v$sql sql
WHERE sql.sql_id(+) = ses.sql_id
AND ses.type = 'USER'
AND ses.status = 'ACTIVE'
AND UPPER(sql.sql_text) LIKE '%MY_PKG.MY_FUNC%';
然后,您可以让 DBA 终止执行函数的会话。
ALTER SYSTEM KILL SESSION '<sid, serial#>';