2014-08-28 44 views
0

有什麼方法可以找到有多少模式正在使用特定軟件包。獲取在oracle中使用特定軟件包的模式列表

因此,在更改包之前,我可以知道有多少架構會受到影響。

+0

你是問哪些模式具有執行權限還是想提出哪些模式有依賴的對象(例如dba_dependencies)?當然,這裏也可能有一些遞歸,對吧? – 2014-08-28 13:56:24

+0

是@Patrick,我在說的依賴關係。 – donstack 2014-08-28 14:14:07

回答

0

可以使用dba_tab_privs觀點:

SQL> ed 
Wrote file afiedt.buf 

    1 create package test_pkg 
    2 as 
    3 function get_one 
    4 return number; 
    5* end test_pkg; 
SQL>/


SQL> ed 
Wrote file afiedt.buf 

    1 create or replace package body test_pkg 
    2 as 
    3 function get_one 
    4 return number 
    5 is 
    6 begin 
    7  return 1; 
    8 end get_one; 
    9* end test_pkg; 
SQL>/

SQL> grant execute on test_pkg to hr 
    2/

Grant succeeded. 

SQL> ed 
Wrote file afiedt.buf 

    1 SELECT grantee 
    2 FROM dba_tab_privs 
    3 WHERE table_name = 'TEST_PKG' 
    4  AND privilege = 'EXECUTE' 
    5 union 
    6 SELECT owner 
    7 FROM dba_tab_privs 
    8* WHERE table_name = 'TEST_PKG' 
SQL>/

GRANTEE 
------------------------------ 
HR 
SYS 

SQL> 
1

這是很容易超過預期:

select * from user_dependencies where name='object_name' 
1

有關於已回答了有關計算器對象依賴許多類似的問題。我無法找到完全匹配(其他場景適用於視圖或表格類型的對象)。這是一個很好的答案(看奧利的回答Recursively list concents of Oracle's DBA_DEPENDENCIES view)。

這裏是我的,我使用的這類問題的遞歸查詢:

SELECT LEVEL DEP_LEVEL, 
    DD.OWNER, 
    DD.NAME, 
    DD.REFERENCED_OWNER, 
    DD.REFERENCED_NAME, 
    DD.TYPE, 
    DD.OWNER 
    || '.' 
    || DD.NAME OBJECT_NAME, 
    DD.REFERENCED_OWNER 
    || '.' 
    || DD.REFERENCED_NAME REFERENCED_OBJECT_NAME 
FROM DBA_DEPENDENCIES DD 
    START WITH DD.OWNER  = '&package_owner' 
AND DD.NAME    = '&package_name' 
    CONNECT BY NOCYCLE PRIOR DD.NAME =DD.REFERENCED_NAME 
AND PRIOR DD.OWNER = DD.REFERENCED_OWNER 
相關問題