使用数据链时报错ORA-12545/TNS-12545的重现和解决

本文详细描述了在配置Oracle数据库时遇到的使用DBLINK连接目标数据库失败的问题,包括检查tnsnames.ora文件、创建数据链、在/etc/hosts中添加条目以解析域名到IP地址、以及通过日志分析定位错误原因的过程。最终通过在/etc/hosts文件中增加对应条目解决了无法解析域名导致的连接失败问题。
1. 查看 tnsnames.ora中条目 :

bys3_dblk =

  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = bys3.bys.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = bys3)
    )
  )
/etc/hosts中不写bys3.bys.com与IP的对应,也无法通过DNS得到bys3.bys.com的IP。

2.创建数据链并使用---
BYS@ bysrac1>create database link bys3_db connect to test9 identified by test9 using 'bys3_dblk';
Database link created.

此时使用DBLINK:  执行了很长时间,报错:ORA-12545:Connect failed because target host or object does not exist
21:42:57 BYS@ bysrac1>select * from test9@BYS3_DB;
select * from test9@BYS3_DB
                    *
ERROR at line 1:
ORA-12545: Connect failed because target host or object does not exist
Elapsed: 00:02:40.25
###########3
3.查看日志中报错信息:
[oracle@bysrac1 ~]$ cat alert_bysrac1.log
创建和使用数据链时会有类似如下报错日志:  --截取部分
Sat Dec 28 21:41:29 2013
***********************************************************************
Fatal NI connect error 12545, connecting to:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=racdg)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=racdg)(CID=(PROGRAM=oracle)(HOST=bysrac1.bys.com)(USER=oracle))))

  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.1.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production
  Time: 28-DEC-2013 21:41:29
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12545
    
TNS-12545: Connect failed because target host or object does not exist
    ns secondary err code: 12560
    nt main err code: 515
    
TNS-00515: Connect failed because target host or object does not exist
    nt secondary err code: 110
    nt OS err code: 0
###########
4.解决方法:

/etc/hosts中增加相应条目:

192.168.1.211   bys3.bys.com    bys3
ping bys3.bys.com   测试正常。

BYS@ bysrac1>select * from test9@bys3_db;
AA
----------
dblink-ok    ---此时重新登陆数据库,使用数据链正常:
### ORA-12545 错误原因及解决方法 Oracle数据库的ORA-12545错误通常表示“因目标主机或对象不存在而无法连接”。这种错误通常发生在客户端尝试连接到Oracle数据库,但无法找到指定的主机或服务。以下是该错误的常见原因解决方法: #### 常见原因 1. **主机名或IP地址错误**:客户端配置中指定的主机名或IP地址可能不正确,或者目标主机不存在。 2. **监听器未运行**:Oracle监听器可能未启动,导致无法接受连接请求。 3. **网络问题**:可能存在网络连接问题,导致客户端无法到达目标主机。 4. **监听器配置错误**:`listener.ora`文件中的配置可能不正确,导致监听器无法正确响应连接请求。 5. **服务名或SID不正确**:客户端尝试连接使用的服务名或SID可能不正确。 #### 解决方法 1. **检查主机名IP地址**: - 确保客户端配置中指定的主机名或IP地址是正确的,并且目标主机确实存在。 - 可以通过ping命令测试主机是否可达: ```bash ping <hostname_or_ip> ``` 2. **检查监听器状态**: - 使用`lsnrctl`命令检查监听器是否正在运行: ```bash lsnrctl status ``` - 如果监听器未运行,可以使用以下命令启动它: ```bash lsnrctl start ``` 3. **检查网络连接**: - 确保客户端服务器之间的网络连接正常。 - 可以尝试使用telnet命令测试端口是否开放: ```bash telnet <hostname_or_ip> 1521 ``` 4. **检查监听器配置**: - 确保`listener.ora`文件中的配置正确。以下是一个示例配置: ```ini SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ADR_BASE_LISTENER = C:\app\Administrator ``` - 确保`HOST`参数设置为正确的主机名或IP地址,并且`PORT`参数与客户端尝试连接的端口一致。 5. **检查服务名或SID**: - 确保客户端使用的服务名或SID与数据库实例的配置一致。 - 可以通过查询`v$session`视图来确认数据库实例的SID: ```sql SELECT instance_name FROM v$instance; ``` 6. **使用tnsping测试连接**: - 使用`tnsping`命令测试客户端到数据库的连接: ```bash tnsping <service_name> ``` ### 总结 ORA-12545错误通常是由于主机名、IP地址、监听器配置或网络问题引起的。通过逐一排查这些可能的原因,可以有效地解决该错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值