我本来有一些同义词指向某个用户下相应的表,这个用户我现在不用了,于是就先删除该用户,然后再试图删除同义词,就报错了:
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist请问有没有什么办法删除这些同义词?或者重建它们,使其指向存在的用户下相应的表?
谢谢!

解决方案 »

  1.   

    create or replace synonym 不可以重建吗?
      

  2.   

    这样倒是可以,重新定位后,all_objects也显示状态为valid,但还是没有办法删除该同义词,那是否以后我就再也无法删除该同义词了呢?
      

  3.   

    是否可以这样,先重建,将原先指向删除用户的表或视图换成其他表,然后在drop掉该同义词?
      

  4.   

    数据库版本是多少?oracle 11g里面已经没有这个情况了. 
      

  5.   

    to 楼上两位:
    我的oracle版本是10g,重建同义词,重新指定为存在的用户下的表后,再删除仍旧不行。仍旧报这个错:
    ORA-00604: error occurred at recursive SQL level 1 
    ORA-00942: table or view does not exist 
      

  6.   

    我用10g版本试了下,先drop user,再drop别的user定义在该user下的对象的synonym没问题。你做个drop synonym时的sql trace.贴出来。看看错误发生在哪一步。
      

  7.   

    to vc555:我建的是public synonym。比如基于user1用户下tab1建的public synonym tab1,你可以先drop user1,然后再drop public synonym tab1试试看。
      

  8.   

    synonym创建的时候,不会去做对象有效的检查,应该drop的时候也不会去做吧。
      

  9.   

    楼上的可以试试看,我现在就是不行。并且我现在都将user1重建了,在user1下重新建了表tab1,将public synonym再次指向tab1,然后再删,还是无法删除。
      

  10.   

    to #7楼 
    后台无法删除,console应该同样无法删除吧?关键是我现在oem也无法进入,具体原因也不明,报错如下:
    500 Internal Server Error
    java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:393) at oracle.sysman.emSDK.svc.conn.FGAConnectionCache.getFGAConnection(FGAConnectionCache.java:182) at oracle.sysman.emSDK.svc.conn.ConnectionService.getConnection(ConnectionService.java:289) at oracle.sysman.emSDK.svc.conn.ConnectionService.getConnection(ConnectionService.java:261) at oracle.sysman.db.adm.inst.ChangeStateController.getRepConnection(ChangeStateController.java:1213) at oracle.sysman.db.adm.inst.ChangeStateController.setEMDUrl(ChangeStateController.java:1239) at oracle.sysman.db.adm.inst.ChangeStateController.handleGetDBState(ChangeStateController.java:735) at oracle.sysman.db.adm.inst.ChangeStateController.handleSpecifyOperations(ChangeStateController.java:677) at oracle.sysman.db.adm.inst.ChangeStateController.onEvent(ChangeStateController.java:516) at oracle.sysman.db.adm.DBController.handleEvent(DBController.java:3064) at oracle.sysman.emSDK.svlt.PageHandler.handleRequest(PageHandler.java:376) at oracle.sysman.db.adm.RootController.handleRequest(RootController.java:169) at oracle.sysman.db.adm.DBControllerResolver.handleRequest(DBControllerResolver.java:114) at oracle.sysman.emSDK.svlt.EMServlet.myDoGet(EMServlet.java:688) at oracle.sysman.emSDK.svlt.EMServlet.doGet(EMServlet.java:291) at oracle.sysman.eml.app.Console.doGet(Console.java:135) at oracle.cabo.servlet.UIXServlet.doPost(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) at oracle.sysman.emSDK.svlt.EMRedirectFilter.doFilter(EMRedirectFilter.java:101) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:16) at oracle.sysman.db.adm.inst.HandleRepDownFilter.doFilter(HandleRepDownFilter.java:109) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:20) at oracle.sysman.eml.app.ContextInitFilter.doFilter(ContextInitFilter.java:239) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:600) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:793) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:270) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112) at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.1.0)].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192) at java.lang.Thread.run(Thread.java:534)
      

  11.   

    我试了,我这确实没问题。别猜了,贴出sql trace,原因一目了然。