在Oracle中注册XML模式 - 如何摆脱剩余的对象

时间:2010-01-13 18:40:48

标签: xml oracle plsql xsd

我前几天尝试在Oracle中注册一个模式来验证XML文档。我使用的代码非常简单:

dbms_xmlschema.registerSchema(schemaURL => 'http://www.myCompany.com/schema',
                              schemaDoc => :schemaCLOB);

首先,就验证而言,一切似乎都运作良好。我注意到,有几十个新的数据库对象:表,触发器和类型(一些dowsn表和触发器,但可能有数百种类型)。 我试图删除这样的架构:

dbms_xmlschema.deleteSchema(schemaURL => 'http://www.myCompany.ca/schema',
                            delete_option => dbms_xmlschema.DELETE_INVALIDATE);

取消注册架构,但所有对象都被遗忘。

我RTFM有点太晚了,发现额外的对象是通过在registerSchema的调用中保留默认值来创建的,所以我意识到我必须手动删除多余的对象。

现在,当我尝试删除对象时,Oracle告诉我它们不存在。我无法从中选择,我的IDE(PL / SQL Developer)将它们显示为无效(旁边有一点红色的“X”)。我也找不到all_tables中这些表格的任何信息。我如何摆脱这些?

3 个答案:

答案 0 :(得分:1)

解决方案是:从前一天的备份恢复。将来,我会将gentablesgentypes设置为FALSE,并使用DELETE_CASCADE_FORCE删除。任何事情都不起作用,我可能会发布一个新问题。

答案 1 :(得分:0)

我可能遗漏了一些显而易见的东西,但是看documentation你能否使用DELETE_CASCADE或DELETE_CASCADE_FORCE选项?

答案 2 :(得分:0)

Metalink是Oracle的支持站点(http://support.oracle.com),但您需要一个客户支持ID(entifier)才能进入受保护站点。

如果在11g上使用DBMS_XMLSCHEMA.PURGESCHEMA来摆脱对象。如果在10gRx上使用

dbms_xmlschema.deleteSchema(schemaURL => 'http://www.myCompany.ca/schema', delete_option => dbms_xmlschema.DELETE_CASCADE_FORCE);

dbms_xmlschema.deleteSchema('http://www.myCompany.ca/schema',4);

如果在使用强制删除后无法帮助退回数据库,请重试。如果这没有帮助,请通过基于user_xml_schemas的删除语句删除模式(不支持最后一个选项)。