现在在SYSTEM用户下面有个存储过程,希望让它只在某一个实例中运行,怎么办?最好是能写在存储过程里面执行的语句.因为在集群(RAC)环境下.有多个实例.

解决方案 »

  1.   

    使用pl/sql 选中此存贮过程进行edit, copy语句,
    conn 用户名/密码@string_other_server;
    粘贴上语句,编译,即可。
      

  2.   

    修改连接的服务名配置即可,如把以下的自动选择实例连接
    ora10 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 134.211.200.36)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 134.211.200.37)(PORT = 1521))
          (LOAD_BALANCE = yes)
          (FAILOVER = YES)
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ora10)
          (FAILOVER_MODE =
            (TYPE = SELECT)
            (METHOD = BASIC)
            (RETRIES = 180)
            (DELAY = 5)
          )
        )
      )
    改为:
    ora10 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 134.211.200.36)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ora10)
        )
      )
      

  3.   

    再写个存储过程,存储过程调用你的存储过程前,判断是那个instance,如果不对就不执行。
    ....
     v_instance varchar2(100);
    begin
     select INSTANCE_NAME into v_instance from v$instance ;
     if v_instance='指定的实例' then
        yourProcedure;
     else
        dbms_output.put_line('不是指定的实例');
     end if;
    end;
    /
      

  4.   

    连接时使用instance_name就可以了.不要指定db_name,, 否则如果配置了load balance的话,就有可能连接到另一实例了.指定rac1就可以