Oracle 如何重新创建公共同义词“DUAL”?

Oracle 如何重新创建公共同义词“DUAL”?,oracle,oracle10g,Oracle,Oracle10g,使用SQLDeveloper 4.0.1.14创建一个导出脚本,并选中单独的文件和放置,它在DROP.sql中生成了以下四行: 删除同义词PUBLIC.DUAL; 删除同义词PUBLIC.DBMS_SQL; 删除同义词PUBLIC.DBMS_LOCK; 删除同义词PUBLIC.DBMS_输出; 现在,我已经使用SYSTEM user意外地传递了整个脚本,我无法再进行修改、创建表或将表放到数据库中,出现了以下错误: An error was encountered performing the r

使用SQLDeveloper 4.0.1.14创建一个导出脚本,并选中单独的文件和放置,它在DROP.sql中生成了以下四行:

删除同义词PUBLIC.DUAL; 删除同义词PUBLIC.DBMS_SQL; 删除同义词PUBLIC.DBMS_LOCK; 删除同义词PUBLIC.DBMS_输出; 现在,我已经使用SYSTEM user意外地传递了整个脚本,我无法再进行修改、创建表或将表放到数据库中,出现了以下错误:

An error was encountered performing the requested operation:

ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
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.
Vendor code 604
问题是,当我尝试以下操作时,会出现错误事件:

为SYS.DUAL创建或替换公共同义词DUAL; 我确认SYS.DUAL表仍然存在,因为从SYS.DUAL中选择1有效,但从DUAL中选择1失败,ORA-00942:表或视图不存在

我尝试重新创建同义词SYSTEM和SYSDBA,但失败相同


我可以用另一种方法重新创建这些同义词吗?

尝试使用SYS,但不使用双引号,即:

CREATE OR REPLACE PUBLIC SYNONYM DUAL FOR SYS.DUAL;
不是

据我所知,双引号使对象名区分大小写

更新-如果您有权访问metalink,那么您将在注释973260.1中找到答案,该注释将触发:

ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=FALSE SCOPE=MEMORY;
CREATE OR REPLACE PUBLIC SYNONYM DUAL FOR SYS.DUAL;
ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=true SCOPE=MEMORY;

注释建议,如果这不起作用,请查询DBA_触发器以找到启用了创建前触发器,如果找到禁用它,然后重新发出CREATE ANYNOM语句,然后重新启用触发器。

似乎双表已被删除??重复:否,我仍然有双表实际从SYS.dual works中选择1,从双故障中选择1您是否尝试以“系统仍然”或“系统”的方式运行“重新创建”系统,但我尝试使用SYS SYSDBA实际使用相同的ORA-00942:表或视图不存在结果。不,抱歉,这也不起作用:ORA-00604:递归SQL级别1发生错误ORA-00942:表或视图不存在00604。00000-递归SQL级别%s*发生错误*原因:处理应用于内部字典表的递归SQL语句时出错*措施:如果可以纠正堆栈上下一个错误中描述的情况,请执行此操作;否则,请联系Oracle支持。请以SYS运行此操作,并在此处发布结果:从dba_对象中选择对象名称、对象类型、所有者、状态,其中对象名称='DUAL';在您的请求中使用object\u name修复对象名称我得到一个结果:object\u name object\u TYPE OWNER STATUS---------------双表SYS VALIDTry为SYS.DUAL创建或替换公共同义词mydual。只是想看看问题在哪里。。。我认为表二本身存在,所以它一定是某种巫术在里面。可能还值得查看生成的跟踪文件,以查看604错误所指的表。谢谢!它可以禁用系统触发器,重新创建已删除的DUAL、DBMS_SQL、DBMS_LOCK和DBMS_输出公共同义词。
ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=FALSE SCOPE=MEMORY;
CREATE OR REPLACE PUBLIC SYNONYM DUAL FOR SYS.DUAL;
ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=true SCOPE=MEMORY;