oracle - oracle如何创建队列用户?
问题描述
我有一个有一些队列的 QUEUE_OWNER 模式。当我将应用程序连接到该数据源时,一切正常,应用程序可以从队列中读取数据。
我想创建一个可以访问队列的 _USER 架构,这样我就可以将应用程序连接到它,而不是直接连接到 _OWNER 架构。
这是我尝试过的:
BEGIN
FOR Q IN (SELECT * FROM ALL_QUEUES WHERE owner = 'AQ_OWNER') LOOP
DBMS_OUTPUT.PUT_LINE('queue = ' ||Q.NAME);
DBMS_AQADM.GRANT_QUEUE_PRIVILEGE('ALL','AQ_OWNER.'||Q.NAME ,'AQ_USER',FALSE);
END LOOP;
END;
但是当我将消息放入队列时,应用程序中没有任何反应。
解决方案
您的 DBA 的一点帮助如何?
这是我的用户SCOTT
看到的all_queues
:
SQL> select owner, name from all_queues;
OWNER NAME
------------------------------ ------------------------------
SYS SRVQUEUE
SYS SCHEDULER_FILEWATCHER_Q
SYS SCHEDULER$_EVENT_QUEUE
但是,我想看看其他一些数据。SYS
万能的看到了这一切:
SQL> show user
USER is "SYS"
SQL> select owner, name from dba_queues;
OWNER NAME
------------------------------ ------------------------------
SYS SYS$SERVICE_METRICS
SYS AQ$_SYS$SERVICE_METRICS_TAB_E
SYSTEM DEF$_AQERROR
SYSTEM AQ$_DEF$_AQERROR_E
SYSTEM DEF$_AQCALL
SYSTEM AQ$_DEF$_AQCALL_E
SYS AQ$_KUPC$DATAPUMP_QUETAB_E
<snip>
仍然连接为SYS
,我将创建一个视图,仅显示我选择的所有者的数据(在我的 XE 数据库中没有什么可供选择的,所以我将使用SYSTEM
-owned 值)。然后授予以下select
权限SCOTT
:
SQL> create or replace view v_dba_queues as
2 select name
3 from dba_queues
4 where owner = 'SYSTEM';
View created.
SQL> grant select on v_dba_queues to scott;
Grant succeeded.
回到SCOTT
:为了让我的生活更简单,我先创建一个同义词:
SQL> connect scott/tiger
Connected.
SQL> create synonym v_dba_queues for sys.v_dba_queues;
Synonym created.
最后:
SQL> select * from v_dba_queues;
NAME
------------------------------
DEF$_AQERROR
AQ$_DEF$_AQERROR_E
DEF$_AQCALL
AQ$_DEF$_AQCALL_E
SQL>
基本上,你也会这样做;只是您的视图将包含owner = 'QUEUE_OWNER'
. 看看有没有帮助。
推荐阅读
- html - Angular:如何在不删除子元素的情况下删除包装器(父元素)?
- opencv - 如何使用 PoseNet 为与源人类姿势相同的 3D 模型制作动画?
- python - Scipy.sparse - lil_matrix 乘法不起作用
- javascript - 在反应jsx中的一个元素中实现一组对象作为属性
- angular - How to set filter with mat auto select in angular template driven form
- php - 如何修复Parameter必须是实现Countable的数组或对象
- redux - 如何在 redux 中更新状态的单个数组字段?
- dart - 简单加入渡槽
- java - 线程内存地址大于物理 RAM
- git - 如何避免在每个 Git 命令的开头输入“git”?