批量更改dblink的地址

来源:互联网 发布:管家婆软件怎样做库存 编辑:程序博客网 时间:2024/05/17 15:18

      在数据库迁移以后,生产开发库有500多个用户的dblink的ip地址需要变更,可以通过修改SYS.LINK$的方式来修改ip。

--更新SYS.LINK$的地址UPDATE SYS.LINK$ SET HOST = REPLACE (HOST, :PRM_FROMIP, :PRM_TOIP) WHERE INSTR(HOST, :PRM_FROMIPPRM_FROMIP) > 0;--然后刷新共享池ALTER SYSTEM CHECKPOINT;ALTER SYSTEM FLUSH SHARED_POOL ;

一个完成的过程,另加上批量修改数据源的地址。(生产环境勿用)


 --******************************************************************************  -- 过程名称 :PROCEDURE_IPCHANGE  -- 功能描述 : 将源数据库dblink的ip改为目标数据库的IP  --  -- 参数描述 :参数标识        名称                输入/输出  类型  --            -------------------------------------------------------------  --            PRM_FROMIP     源IP              输入       VARCHAR2  --            PRM_TOIP      目标IP                输出       VARCHAR2  --  -- 作    者 :li.chh        完成日期 :2013-03-26  ---------------------------------------------------------------------------  -- 修改记录 :  --******************************************************************************  PROCEDURE PRC_IPCHANGE(PRM_FROMIP VARCHAR2, PRM_TOIP VARCHAR2) IS      V_SQL VARCHAR2(4000);  BEGIN    --更改dblink 的地址    UPDATE SYS.LINK$      SET HOST = REPLACE(HOST, PRM_FROMIP, PRM_TOIP)    WHERE INSTR(HOST, PRM_FROMIP) > 0;    --更改datasorce的ip地址    FOR REC_USER IN (SELECT OWNER || '.' || TABLE_NAME TABNAME                       FROM DBA_TABLES                      WHERE TABLE_NAME = UPPER('drm_sys_datasource')) LOOP          V_SQL := 'update ' || REC_USER.TABNAME ||               ' SET  DBURL=REPLACE(DBURL,:1,:2)   WHERE INSTR(DBURL, :3) > 0';     -- DBMS_OUTPUT.PUT_LINE(V_SQL);     execute immediate v_sql using PRM_FROMIP,PRM_TOIP,PRM_FROMIP;        END LOOP;    EXCEPTION    WHEN OTHERS THEN      NULL;  END;