内容如题。这是在网上收到的解决方案。
ORA-04052 error occurred when looking up remote object 
    Cause: An error has occurred when trying to look up a remote object.
    Action: Fix the error. Make sure the remote database system has run KGLR.SQL to create necessary views used for querying/looking up objects stored in the database现在KGLR.SQL已经更名为catrep.sql了,而且必须以sys身份去执行它。问题是现在我的oracle 10g生产系统是在solaris上面的,如果我直接这些catrep.sql会不会影响现场应用??可以有替代的方法吗?

解决方案 »

  1.   

    问题1,在pl/sql命令窗口中执行select * from t_tjh_rep@orcl,可以访问远程数据库中的表内容;但是当我把select * from t_tjh_rep@orcl放到过程和函数里面执行时,在编译的时候就报下面的错误:
    Compilation errors for PROCEDURE YGJ_REP.SP_ORCLError: PL/SQL: ORA-04052: 在查找远程对象 FL_PRO.T_TJH_REP@ORCL 时出错
           ORA-00604: 递归 SQL 级别 1 出现错误
           ORA-02020: 过多的数据库链接在使用中
    Line: 7
    Text: from t_tjh_rep_2Error: PL/SQL: SQL Statement ignored
    Line: 5
    Text: SELECT c_name
    网上搜索到的解决方案:
    ORA-04052 error occurred when looking up remote object 
        Cause: An error has occurred when trying to look up a remote object.
        Action: Fix the error. Make sure the remote database system has run KGLR.SQL to create necessary views used for querying/looking up objects stored in the database
    现在KGLR.SQL已经更名为catrep.sql了,而且必须以sys身份去执行它。
    问题2:现在我的oracle 10g生产系统是在solaris系统上面的,如果我直接这些catrep.sql会不会影响现场应用??可以有其他的替代方法解决不??
      

  2.   

    你把open_links的值改大了试试。你建个过程,当中只执行这一条查询sql是否也出错?再看看通过dblink访问的远端表是否是dblink到其他数据库的。
      

  3.   

    不是open_links的问题。因为在窗口中单独执行sql都可以作增加,删除,插入操作。放到过程中编译时就报错。
      

  4.   

    用法有问题
    pl/sql命令窗口中执行时候用的是本地服务名,在plsql里面并不适用
    如果想在plsql中用,要创建DATABASE LINK
    下面是个sampleCREATE DATABASE LINK basement.tsumiki
    CONNECT TO tsumiki IDENTIFIED BY tsumiki_pass
    USING 'basement';SELECT * FROM [email protected];
      

  5.   

    楼上正解,应该先dblink一把,
    关于dblink详见:http://blog.sina.com.cn/u/4ac46e02010007dx
      

  6.   

    这是我的dblink
    create database link ORCL
      connect to FL_PRO identified by xxx  using 'orcl';在命令窗口执行:
    select * from t_tjh_rep@orcl
    结果:
    c_id    c_name
    22 1
    2 2
    3 33
    4 4
    过程如下:
    create or replace procedure sp_orcl( table_bslw out varchar2) is
    var_sql         varchar2(4000);
    begin
     
      SELECT c_name
      into  var_sql 
      from t_tjh_rep_2
      where c_id = '1';
      
      var_sql := 'aa'||var_sql;
      table_bslw := var_sql;
      
    end sp_orcl;编译就报错。不信可以试试。现在我的oracle 10g生产系统是在solaris系统上面的,我知道执行catrep.sql可能就可以解决这个问题。问题是现在这个是生产系统,不知道执行了catrep.sql后会对数据库有什么不利不。
    所以不敢轻易执行。
      

  7.   

    存储过程是在服务器端执行, 你必须在 服务器端 create dblink, 然后再grant 给 user才可以
      

  8.   

    1、你给出的过程sp_orcl中没有使用DBLINK。
    2、编译时报的错误是什么。