我前几天尝试在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
中这些表格的任何信息。我如何摆脱这些?
答案 0 :(得分:1)
解决方案是:从前一天的备份恢复。将来,我会将gentables
和gentypes
设置为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的删除语句删除模式(不支持最后一个选项)。