来源:http://orax.i.sohu.com/blog/view/261900272.htm
AQ:Oracle Advanced Queuing是一个功能强大并且使用起来相对简单的产品。它提供的java包使我们不用编写太多的java代码就可以实现enqueue和dequeue操作。
方法一:
先建aq,然后再Imp导入表结构和数据,这样是最保险的做法。
方法二:
先导入表结构和数据,再导入AQ,这样需要手动删除AQ的所有对象包括字典表中的对象,需小心操作!
涉及视图:
obj$
system.aq$_queues
system.aq$_queue_tables
aq$_queue_table_affinities
删除AQ对象操作:
Host01% sqlplus /nolog
SQL*Plus: Release 9.2.0.6.0 - Production on 星期二 4月 23 08:59:35 2013
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn wyzc/wyzc
已连接。
SQL> select count(*) from user_objects;
COUNT(*)
----------
381
SQL> set line 132
SQL> exec dbms_aqadm.stop_queue('sms_mt_queue');
BEGIN dbms_aqadm.stop_queue('sms_mt_queue'); END;
ERROR 位于第 1 行:
ORA-24010: QUEUE WYZC.SMS_MT_QUEUE不存在
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 3684
ORA-06512: 在"SYS.DBMS_AQADM", line 240
ORA-06512: 在line 1
SQL> exec dbms_aqadm.drop_queue('sms_mt_queue');
BEGIN dbms_aqadm.drop_queue('sms_mt_queue'); END;
*
ERROR 位于第 1 行:
ORA-24010: QUEUE WYZC.SMS_MT_QUEUE不存在
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 2747
ORA-06512: 在"SYS.DBMS_AQADM", line 167
ORA-06512: 在line 1
SQL> exec dbms_aqadm.drop_queue_table('ss_mt_tab');
BEGIN dbms_aqadm.drop_queue_table('ss_mt_tab'); END;
*
ERROR 位于第 1 行:
ORA-24002: QUEUE_TABLE WYZC.SS_MT_TAB 不存在
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 2973
ORA-06512: 在"SYS.DBMS_AQADM", line 197
ORA-06512: 在line 1
SQL> select object_name,owner from dba_objects where object_name='SS_MT_TAB';
OBJECT_NAME
------------------------------
OWNER
------------------------------
SS_MT_TAB
FWBZ
SS_MT_TAB
WYZC
SQL> exec dbms_aqadm.drop_queue_table('SS_MT_TAB');
BEGIN dbms_aqadm.drop_queue_table('SS_MT_TAB'); END;
*
ERROR 位于第 1 行:
ORA-24002: QUEUE_TABLE WYZC.SS_MT_TAB 不存在
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 2973
ORA-06512: 在"SYS.DBMS_AQADM", line 197
ORA-06512: 在line 1
SQL> begin dbms_aqadm.create_queue_table(queue_table=>'ss_mt_tab', queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE',multiple_consumers => true); end;
2 /
begin dbms_aqadm.create_queue_table(queue_table=>'ss_mt_tab', queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE',multiple_consumers => true); end;
*
ERROR 位于第 1 行:
ORA-24001: 无法创建 QUEUE_TABLE,WYZC.SS_MT_TAB已经存在
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 2224
ORA-06512: 在"SYS.DBMS_AQADM", line 58
ORA-06512: 在line 1
SQL> col object_name for a20
SQL> col object_name for a30
SQL> l1
1* select object_type,object_name from user_objects where object_name like '%MT_TAB%'
SQL> r
1* select object_type,object_name from user_objects where object_name like '%MT_TAB%'
OBJECT_TYPE OBJECT_NAME
------------------ ------------------------------
VIEW AQ$SS_MT_TAB
VIEW AQ$SS_MT_TAB_R
VIEW AQ$SS_MT_TAB_S
QUEUE AQ$_SS_MT_TAB_E
VIEW AQ$_SS_MT_TAB_F
TABLE AQ$_SS_MT_TAB_G
TABLE AQ$_SS_MT_TAB_H
TABLE AQ$_SS_MT_TAB_I
SEQUENCE AQ$_SS_MT_TAB_N
TABLE AQ$_SS_MT_TAB_S
TABLE AQ$_SS_MT_TAB_T
OBJECT_TYPE OBJECT_NAME
------------------ ------------------------------
EVALUATION CONTEXT AQ$_SS_MT_TAB_V
TABLE SS_MT_TAB
已选择13行。
SQL> alter session set events'10851 trace name context forever,level 1';
会话已更改。
SQL>select * from dba_queue_tables;
SQL> exec dbms_aqadm.drop_queue_table('SS_MT_TAB');
BEGIN dbms_aqadm.drop_queue_table('SS_MT_TAB'); END;
*
ERROR 位于第 1 行:
ORA-24002: QUEUE_TABLE WYZC.SS_MT_TAB 不存在
ORA-06512: 在"SYS.DBMS_AQADM_SYS", line 2973
ORA-06512: 在"SYS.DBMS_AQADM", line 197
ORA-06512: 在line 1