在 Oracle 中选择"使用无效包引用查询"



我有一个包含函数的包,该函数只是从给定产品 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#>';

最新更新