Oracle SQL Developer - 将视图从一个数据库复制到另一个数据库时出错
Posted
技术标签:
【中文标题】Oracle SQL Developer - 将视图从一个数据库复制到另一个数据库时出错【英文标题】:Oracle SQL Developer - errors copying a view from one database to another 【发布时间】:2014-12-03 10:55:25 【问题描述】:我正在尝试将视图从一个数据库复制到另一个数据库。我正在使用“快速 DDL > 保存到工作表”导出视图以生成脚本。在脚本的顶部,我收到消息:
"-- Unable to render VIEW DDL for object <view name> with DBMS_METADATA attempting internal generator."
两个数据库完全相同,我尝试复制的视图存在于两个数据库中,但在其中一个数据库中被错误删除。
当我尝试在第二个数据库上运行脚本时出现错误
错误报告:
SQL Error: ORA-00604: error occurred at recursive SQL level 1
ORA-00001: unique constraint (SYS.I_COL1) violated
00604. 00000 - "error occurred at recursive SQL level %s"
*Cause: An error occurred while processing a recursive SQL statement
(a statement applying to internal dictionary tables).
*Action: If the situation described in the next error on the stack
can be corrected, do so; otherwise contact Oracle Support.
有人知道我做错了什么吗?
【问题讨论】:
复制视图的方式。您的错误似乎与视图创建无关 嗨,我正在使用快速 DDL > 保存到工作表来生成脚本并在第二个数据库上运行该脚本。我已经更新了问题以澄清。 您正在使用 SQL Developer - 请务必明确说明,以便人们知道您在做什么。您说的是 2 个问题,无法获取脚本,但在运行所述脚本时也会出错。您可能对第一个有权限问题,让 DBA 授予您更高的数据字典权限,因为针对不同模式中的模式对象运行 DBMS_METADATA 包需要一些“权力”。第二条错误消息听起来像是数据字典已损坏 - 就像数据库认为视图或其部分仍然存在。 是的,我正在使用 sql developer。我已经更新了问题以反映这一点。所以我向我的 DBA 提出了这个问题,他确认这个问题与我的权限有关。至于第二条错误消息,我无法发表评论,因为问题出在我的 DBA 上。感谢您的帮助! 【参考方案1】:消息
-- 无法为带有 DBMS_METADATA 尝试内部的对象呈现 VIEW DDL
提供 SQL Developer。 这是因为他不能使用dbms_metadata.get_ddl。 如果权限一切正常,很可能是由于错误类型(在执行 dbms_metadata.get_ddl 时):
ORA-06502: PL/SQL: numeric or value error
LPX-00210: expected '<' instead of 'n'
ORA-06512: at "SYS.UTL_XML", line 0
ORA-06512: at "SYS.DBMS_METADATA_INT", line 3296
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4148
ORA-06512: at "SYS.DBMS_METADATA", line 458
ORA-06512: at "SYS.DBMS_METADATA", line 615
ORA-06512: at "SYS.DBMS_METADATA", line 1221
ORA-06512: at line 1
尝试重新加载 XML API:
1. enable restricted database session
2. run:
(from $ORACLE_HOME/rdbms/admin):
catnomet.sql
rmxml.sql
to remove the xml subsystem and after that: catxml
utlcxml.sql
prvtcxml.plb
catmet.sql
to reload it.
【讨论】:
【参考方案2】:在我的情况下,问题是因为在视图中有两列具有相同的名称或别名,并且由于 COL $ 表具有对象编号和列名称的唯一索引,因此两列是不允许同名
【讨论】:
以上是关于Oracle SQL Developer - 将视图从一个数据库复制到另一个数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章
pl/sql developer中文乱码,为啥呢?怎么解决?Oracle问题
pl/sql developer中文乱码,为啥呢?怎么解决?Oracle问题
pl/sql developer中文乱码,为啥呢?怎么解决?Oracle问题