Oracle 队列在 Oracle 11g 中不是 imp 或 exp

Oracle queue is not been imp or exp in Oracle 11g

我使用命令导出了一个oracle数据库

exp system/password@sid file=c:\expdb.dmp

在我使用

将其导入另一个实例后
imp system/password@sid file=c:\expdb.dmp 

一切看起来都不错,但仔细观察我发现我所有的队列和我所有的 queue_tables 都没有进入新数据库。

在尝试让 exp/imp 工作一段时间后,我决定重新安装队列会更容易,只是为了找到你我在数据库中有与该查询相关的表,所以我首先尝试

Delete from table

我得到了错误:

ORA-24005: Inappropriate utilities used to perform DDL on AQ table

所以我试试

BEGIN
DBMS_AQADM.DROP_QUEUE_TABLE('table',TRUE);
END;

终于成功了。但我的问题是,我如何首先避免所有这些麻烦?有没有办法用队列导出数据库?我错过了一些旗帜吗?因为每次我们必须导入一个带有队列的新数据库时,这是一个非常痛苦的练习。

您不使用 exp 或 expdp 导出 Oracle 队列。

必须在目标数据库中创建新队列。

exp/imp 队列将导致数据库目录损坏。

注意:在 11GR2 文档中指出:

现在完全支持队列 table 级粒度的队列导出导入。用户只需要导出队列table。队列中的所有队列 table、主要对象授权、视图、IOT、规则等相关对象都会自动导出。

这仅在您 exp/imp 使用 11GR2 作为源数据库和目标数据库时才有效。例如,AQ 定义从 11GR1 更改为 11GR2。

关于您在提交删除语句时遇到的错误消息:

这是 11.2 中的预期行为。您无法在 11.2 中对 AQ 对象执行不适当的 DDL,并报告了 ORA-24005。

要截断队列 table 和关联的 IOT,请使用 DBMS_AQADM.PURGE_QUEUE_TABLE。