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。
我使用命令导出了一个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。