审计数据库链接时发现LINK类DB_LINK无主机信息,求相关经验
问题描述
在对数据库的database links进行审计时,发现大量名称格式为LINK加时间戳的database links不存在主机信息,查询SYS.LINK$表后,对应记录的HOST字段也为空。
执行查询语句:
SELECT OWNER#,NAME,HOST FROM SYS.LINK$ WHERE OWNER#=234 AND NAME = 'LINK20111011104440086446000';
返回结果:
OWNER# NAME HOST 234 LINK20111011104440086446000
请问有人遇到过此类问题吗?
可能原因及处理建议
- 未完成创建的残留条目:创建dblink过程中如果遇到网络中断、权限不足、目标库不可达等异常,可能导致字典表仅写入了OWNER#和NAME信息,HOST字段未被填充,形成残留记录。
- 手动修改字典表的遗留问题:若有人直接操作
SYS.LINK$表删除了HOST字段内容,但未清理整条记录,也会出现这种情况。 - 老版本Oracle的已知bug:在Oracle 11g早期版本中,使用
DBMS_DDL包创建dblink时,若出现异常中断,可能会留下这类不完整的dblink条目。
处理步骤:
- 确认dblink是否可用:切换到对应owner用户(用户ID234),执行
SELECT * FROM DUAL@LINK20111011104440086446000;测试连通性,或用SELECT * FROM ALL_DB_LINKS WHERE OWNER = (SELECT USERNAME FROM DBA_USERS WHERE USER_ID=234) AND DB_LINK LIKE 'LINK%';查看应用层的dblink列表。 - 清理无用条目:如果确认这些dblink无业务用途,直接删除:
-- 切换到对应owner用户执行 DROP DATABASE LINK LINK20111011104440086446000; -- 或用SYS权限指定owner删除 DROP DATABASE LINK "OWNER_NAME".LINK20111011104440086446000; - 排查创建源头:检查数据库定时任务(
DBA_SCHEDULER_JOBS)、应用侧脚本,看是否有自动创建这类带时间戳dblink的逻辑,修复异常中断的处理逻辑,避免再次产生残留。
内容的提问来源于stack exchange,提问作者Cheryl Grant
相关产品推荐
相关产品推荐

