修改主机IP导致的ORA-12514错误(ORACLE)

在尝试远程连接Oracle数据库时遇到ORA-12514错误,经过排查发现是修改Linux主机IP地址时遗漏了hosts文件的更新导致。通过修改hosts文件中的IP地址并重启监听器服务,问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当时我遇到的情况是主机自身(CENTOS)可以进入SQLPLUS,但远程客户端就报ORA-12514。但了很多资料,一般的解决情况就是服务器的listener.ora或远程登陆机的tnsnames.ora的配置问题,但我的配置均没有问题,最后终于查到原来是修改LINUX主机IP的时候漏修了一个文件。

 

连接时报错:  

    [oracle@yangtk2 ~]$ lsnrctl status
  LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 01-SEP-2008 17:36:03
  Copyright (c) 1991, 2007, Oracle. All rights reserved.
  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
  STATUS of the LISTENER
  ------------------------
  Alias LISTENER
  Version TNSLSNR for Linux: Version 11.1.0.6.0 - Production
  Start Date 01-SEP-2008 17:01:31
  Uptime 0 days 0 hr. 34 min. 32 sec
  Trace Level off
  Security ON: Local OS Authentication
  SNMP OFF
  Listener Parameter File /data/oracle/product/11.1/network/admin/listener.ora
  Listener Log File /data/oracle/diag/tnslsnr/yangtk2/listener/alert/log.xml
  Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.25.1.104)(PORT=1521)))
  The listener supports no services
  The command completed successfully

 

  检查listener.ora和tnsnames.ora都未发现异常:  

    [oracle@yangtk2 admin]$ more listener.ora
  # listener.ora Network Configuration File: /data/oracle/product/11.1/network/admin/listener.ora
  # Generated by Oracle configuration tools.
  LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.25.1.104)(PORT = 1521))
  )
  )
  [oracle@yangtk2 admin]$ more tnsnames.ora
  # tnsnames.ora Network Configuration File: /data/oracle/product/11.1/network/admin/tnsnames.ora
  # Generated by Oracle configuration tools.
  ORA11G_S =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.25.1.104)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = ora11g_s.ytk-thinkpad)
  )
  )
  ORA11G_P =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.25.1.102)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = ora11g_p.ytk-thinkpad)
  )
  )

   而且以前这个配置没有任何问题,就是这次启动虚机后才出现的问题。         

  查询了metalink,虽然上面记载了很多ORA-12514错误,但是没有发现什么有帮助的线索。

  由于这个错误以前并没有出现,所以怀疑是最近修改了什么东西导致了这个问题。而启动之后做了唯一的修改就是修改了主机的IP地址。

  通过ifconfig修改了主机IP地址,莫非是修改错误导致了问题,不过现在通过IP地址可以正常的登陆主机,而且tnsping也没有任何的问题:  

    [oracle@yangtk2 admin]$ tnsping ora11g_s
  TNS Ping Utility for Linux: Version 11.1.0.6.0 - Production on 01-SEP-2008 17:54:31
  Copyright (c) 1997, 2007, Oracle. All rights reserved.
  Used parameter files:
  /data/oracle/product/11.1/network/admin/sqlnet.ora
  Used TNSNAMES adapter to resolve the alias
  Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.25.1.104)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ora11g_s.ytk-thinkpad)))
  OK (0 msec)


  
最后检查listner的日志:
  [oracle@yangtk2 admin]$ tail -20 /data/oracle/diag/tnslsnr/yangtk2/listener/alert/log.xml  

  type='UNKNOWN' level='16' host_id='yangtk2.ytk-thinkpad'
  host_addr='172.25.4.70'>
  01-SEP-2008 17:54:31 * ping * 0  
  type='UNKNOWN' level='16' host_id='yangtk2.ytk-thinkpad'
  host_addr='172.25.4.70'>
  WARNING: Subscription for node down event still pending 
  type='UNKNOWN' level='16' host_id='yangtk2.ytk-thinkpad'
  host_addr='172.25.4.70'>
  01-SEP-2008 17:58:24 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=yangtk2.ytk-thinkpad)(USER=oracle))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=185599488)) * status * 0

 

  发现日志中的IP地址并没有改变,看来是修改IP的时候遗漏了什么位置。

  检查HOSTS文件,发现里面的配置忘了进行修改:  

    [oracle@yangtk2 admin]$ more /etc/hosts
  # Do not remove the following line, or various programs
  # that require network functionality will fail.
  172.25.4.70 yangtk2.ytk-thinkpad
  127.0.0.1 localhost.localdomain localhost

 

  将hosts文件中的ip也修改为当前的IP后,问题解决。

  [oracle@yangtk2 ~]$ lsnrctl stop
  LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 01-SEP-2008 18:01:00
  Copyright (c) 1991, 2007, Oracle. All rights reserved.
  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
  The command completed successfully
  [oracle@yangtk2 ~]$ lsnrctl start
  LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 01-SEP-2008 18:01:10
  Copyright (c) 1991, 2007, Oracle. All rights reserved.
  Starting /data/oracle/product/11.1/bin/tnslsnr: please wait...
  TNSLSNR for Linux: Version 11.1.0.6.0 - Production
  System parameter file is /data/oracle/product/11.1/network/admin/listener.ora
  Log messages written to /data/oracle/diag/tnslsnr/yangtk2/listener/alert/log.xml
  Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.25.1.104)(PORT=1521)))
  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
  STATUS of the LISTENER
  ------------------------
  Alias LISTENER
  Version TNSLSNR for Linux: Version 11.1.0.6.0 - Production
  Start Date 01-SEP-2008 18:01:10
  Uptime 0 days 0 hr. 0 min. 0 sec
  Trace Level off
  Security ON: Local OS Authentication
  SNMP OFF
  Listener Parameter File /data/oracle/product/11.1/network/admin/listener.ora
  Listener Log File /data/oracle/diag/tnslsnr/yangtk2/listener/alert/log.xml
  Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.25.1.104)(PORT=1521)))
  The listener supports no services
  The command completed successfully
 

 稍等一会,通过sqlplus连接数据库: 

  [oracle@yangtk2 ~]$ sqlplus sys/test@ora11g_s as sysdba 
  SQL*Plus: Release 11.1.0.6.0 - Production on Mon Sep 1 18:03:16 2008 
  Copyright (c) 1982, 2007, Oracle. All rights reserved. 
  Connected to: 
  Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production 
  With the Partitioning, OLAP, Data Mining and Real Application Testing options 
  SQL>

转载于:https://www.cnblogs.com/songzhenhua/archive/2011/10/15/9312871.html

<think>我们正在解决Oracle11g中的ORA-12514错误。根据引用资料,这个错误通常与监听程序配置有关。下面我们将结合引用内容逐步分析并提供解决方案。首先,引用[2]提到一个特殊情况:当Windows环境下的Oracle11g的应用程序日志写满时,可能导致登录审计无法记录,从而引发ORA-12514错误。因此,我们需要检查Windows事件查看器中的应用程序日志是否已满。引用[4]则指出,需要检查listener.ora和tnsnames.ora文件中的主机名配置,确保它们使用正确的主机名或固定IP地址。此外,引用[1]和[3]也提到了类似问题,但主要围绕配置文件的修改。综合这些引用,以下是解决ORA-12514错误的步骤:###步骤1:检查Windows应用程序日志(针对引用[2]的情况)1.打开Windows事件查看器(运行`eventvwr`)。2.在左侧导航树中,展开“Windows日志”,选择“应用程序”。3.查看日志是否已满(例如,大量错误或警告事件)。4.如果日志已满,清除日志并重启Oracle服务。###步骤2:检查监听配置文件1.定位到`%ORACLE_HOME%\network\admin`目录(例如`C:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN`)。2.用文本编辑器打开`listener.ora`,检查监听配置:-确保`HOST`的值是正确的主机名、IP地址或`localhost`。例如:```iniLISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))))```-如果主机名发生变化(例如,计算机重命名),则需将`HOST`改为当前主机名或IP地址。3.打开`tnsnames.ora`文件,同样检查`HOST`参数:-确保每个服务名(SERVICE_NAME)对应的`HOST`与`listener.ora`中的一致。-例如:```iniORCL=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))```4.修改后保存文件。###步骤3:重启监听服务1.打开命令提示符(以管理员身份运行)。2.执行以下命令重启监听:```bashlsnrctlstoplsnrctlstart```3.检查监听状态:```bashlsnrctlstatus```确认监听程序已启动,并且服务名(ServiceNames)正确列出。###步骤4:检查Oracle服务1.确保Oracle数据库实例服务(如`OracleServiceORCL`)和监听服务(`OracleOraDb11g_home1TNSListener`)已启动(通过Windows服务管理台)。###步骤5:测试连接使用SQL*Plus或PL/SQLDeveloper测试连接:```bashsqlplususername/password@orcl```如果问题依旧,请检查防火墙是否允许1521端口通信。###注意事项-如果主机名经常变化(如动态IP),建议在配置文件中使用固定IP地址或`localhost`。-确保`listener.ora`和`tnsnames.ora`中的端口号一致(默认1521)。通过以上步骤,通常可以解决ORA-12514错误。如果问题仍未解决,可能需要检查数据库实例是否已注册到监听(动态注册或静态注册)[^2][^4]。§§相关问题§§1.如何配置Oracle监听程序的静态注册?2.如何解决Oracle数据库连接超时问题?3.如何备份和恢复Oracle监听配置文件?</think>### Oracle 11g ORA-12514 错误解决方案 #### **错误原因分析** ORA-12514 表示监听程序无法识别客户端请求的服务名,主要涉及监听配置问题。结合引用资料,常见原因包括: 1. **监听配置文件错误**:`listener.ora` 或 `tnsnames.ora` 中的主机名/IP配置不匹配(引用[4])。 2. **Windows日志写满**:Oracle 11g 审计日志占满系统应用程序日志导致异常(引用[2])。 3. **主机名变更**:安装后修改主机导致配置失效(引用[4])。 4. **服务未注册**:数据库实例未正确注册到监听程序。 --- #### **详细解决步骤** ##### **1. 检查监听配置文件** - **路径**:`%ORACLE_HOME%\network\admin\`(如 `C:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN`) - **修改 `listener.ora`**: ```ini LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) # 确保HOST为当前主机名或IP ) ) ``` - **修改 `tnsnames.ora`**: ```ini ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) # HOST需与listener.ora一致 (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) # 此处需与实际数据库服务名匹配 ) ) ``` > **关键点**:将 `HOST` 值改为当前主机名、固定IP或 `localhost`(引用[4])。 ##### **2. 清理Windows应用程序日志** - 按 `Win+R` 输入 `eventvwr` 打开**事件查看器**。 - 展开 **Windows日志 > 应用程序** → 右键 **清除日志**。 - 重启Oracle服务(引用[2])。 ##### **3. 重启监听与服务** ```bash # 命令提示符执行 lsnrctl stop # 停止监听 lsnrctl start # 启动监听 lsnrctl status # 验证状态(检查Service Names是否正常显示) # 重启数据库服务 net stop OracleServiceORCL net start OracleServiceORCL ``` ##### **4. 验证服务注册** - 若 `lsnrctl status` 未显示服务名,手动注册: ```sql SQL> ALTER SYSTEM REGISTER; -- 在SQL*Plus中执行 ``` ##### **5. 检查防火墙与端口** - 确保 **1521端口** 在防火墙放行: ```bash netsh advfirewall firewall add rule name="OraclePort" dir=in action=allow protocol=TCP localport=1521 ``` --- #### **预防措施** - 使用固定IP或 `localhost` 替代主机名(避免主机名变更引发问题)。 - 定期清理Windows应用程序日志(引用[2])。 - 配置监听日志:在 `listener.ora` 添加 `LOGGING_LISTENER = ON` 以便排查。 > **注意事项**:修改配置文件后必须重启监听!若问题持续,检查数据库实例状态(`sqlplus / as sysdba` → `SELECT status FROM v$instance;`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值