ORA-02019: connection description for remote database not found
本文记录该问题的分析定位过程及最终解决方案。
问题复现
升级完成后,我确认已成功创建了 DBLink 并进行了基础测试:
1 2 3 4 5 6 7 8 9 10
-- 从源库提取 DBLink 创建语句 (9i 密码可见) SQL> SELECT'CREATE ' || DECODE(U.NAME, 'PUBLIC', 'public ') || 'DATABASE LINK ' || DECODE(U.NAME, 'PUBLIC', Null, 'SYS', '', U.NAME || '.') || L.NAME || ' CONNECT TO ' || L.USERID || ' IDENTIFIED BY "' || L.PASSWORD || '" USING ''' || L.HOST || ''';'TEXT FROM SYS.LINK$ L, SYS.USER$ U WHERE L.OWNER# = U.USER#;
-- 在新库创建 DBLink CREATEpublicDATABASE LINK LUCIFER.LPC.ORACLE.COM CONNECTTO ORACLE IDENTIFIED BY "ORACLE" USING'LUCIFER';
-- 基础测试 (成功) select sysdate from dual@LUCIFER.LPC.ORACLE.COM;
查询结果如下:
然而,应用反馈其查询失败(使用的短名称格式):
1
select sysdate from dual@LUCIFER;
在 SQL*Plus 中复现应用查询方式,确实报错:
1 2 3 4 5
SQL> select count(*) from od_cow@LUCIFER; select count(*)from od_cow@LUCIFER * ERROR at line 1: ORA-02019: connection description for remote database not found
-- 新库操作:使用 RENAME 命令修改 global_name SQL> alterdatabaserename global_name to ORCL.LPC.ORACLE.COM;
Database altered.
-- 尝试重建 DBLink (先删除旧的) SQL> SELECT * FROM dba_db_links;
OWNER DB_LINK USERNAME HOST CREATED -------------------- ------------------------------------------------------------ -------------------- ------------------------------ ---------- PUBLIC LUCIFER ORACLE LUCIFER
SQL> droppublicdatabase link LUCIFER.LPC.ORACLE.COM; droppublicdatabase link LUCIFER.LPC.ORACLE.COM * ERROR at line1: ORA-02024: database link notfound
SQL> droppublicdatabase link LUCIFER; droppublicdatabase link LUCIFER * ERROR at line1: ORA-02024: database link notfound