【问题标题】:How to create a queue user in oracle?oracle如何创建队列用户?
【发布时间】:2021-02-02 11:48:46
【问题描述】:

我有一个包含一些队列的 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; 

但是当我将消息放入队列时,应用程序中没有任何反应。

【问题讨论】:

    标签: oracle queue oracle-aq


    【解决方案1】:

    请您的 DBA 帮忙怎么样?

    这是我的用户SCOTTall_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-拥有值)。然后将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' 的数据。看看有没有帮助。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2011-11-22
      • 2019-03-17
      • 2023-01-09
      • 1970-01-01
      • 2018-01-19
      • 2022-08-14
      • 2014-03-03
      • 1970-01-01
      相关资源
      最近更新 更多