如何列出 Oracle DB 中的所有上下文命名空间?
Posted
技术标签:
【中文标题】如何列出 Oracle DB 中的所有上下文命名空间?【英文标题】:How do I list all context namespaces in Oracle DB? 【发布时间】:2011-11-28 11:53:58 【问题描述】:如果我创建一个上下文命名空间:-
CREATE OR REPLACE CONTEXT hr_security
USING hr.pkg_security
ACCESSED GLOBALLY;
如何列出所有此类命名空间并查找它们的属性。比如hr_security
可以全局访问,可以从pkg_security
包中设置。
【问题讨论】:
【参考方案1】:您可以根据您的权限和正在查看的上下文查询DBA_CONTEXT
(或[ALL_CONTEXT][1]
)视图。 ALL_CONTEXT
将列出在当前会话中设置了属性的所有上下文。 DBA_CONTEXT
列出数据库中的所有上下文。但是,您需要具有额外的权限才能查询DBA_CONTEXT
视图(SELECT ANY DICTIONARY
权限或SELECT_CATALOG_ROLE
角色已经绰绰有余,但您也可以专门被授予访问该视图的权限)
SELECT namespace,
schema,
package,
type
FROM dba_context
HR_SECURITY
命名空间将有一行显示它与PKG_SECURITY
包相关联,其中TYPE
为ACCESSED GLOBALLY
。
【讨论】:
对我来说DBA_CONTEXT
有效。 ALL_CONTEXT
几乎没有列出任何命名空间。【参考方案2】:
如果您缺少对 DBA_CONTEXT 的授权,您也可以使用 ALL_OBJECTS。 但是要列出由各个用户创建的所有全局上下文,需要额外的命名约定来区分谁创建了这个全局上下文(在您的示例中,对象的所有者将是 SYS 而不是 HR)
SELECT * FROM ALL_OBJECTS AO WHERE AO.OBJECT_TYPE = 'CONTEXT' AND AO.OBJECT_NAME LIKE 'HR%' AND AO.OWNER = 'SYS';
【讨论】:
以上是关于如何列出 Oracle DB 中的所有上下文命名空间?的主要内容,如果未能解决你的问题,请参考以下文章