Ora-12547: Tns:Lost Contact Creating Database After Clean Installation

本文介绍了解决Oracle数据库安装后创建数据库时出现的ORA-12547:TNS:LostContact错误的方法。该问题通常由不正确的ulimit设置导致,通过收集系统跟踪信息并调整ulimit设置可以解决。
Ora-12547: Tns:Lost Contact Creating Database After Clean Installation [ID 744512.1]

修改时间 14-DEC-2011类型 PROBLEM 状态 PUBLISHED

In this Document
Symptoms
Cause
Solution
References


Applies to:

Oracle Server - Standard Edition - Version: 9.2.0.8 and later [Release: 9.2 and later ]
Oracle Server - Enterprise Edition - Version: 9.2.0.8 and later [Release: 9.2 and later]
Information in this document applies to any platform.

Symptoms

After a clean installation of the Oracle Database Server software the following error is seen when trying to create a database either manually or via DBCA:


> sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.2.0 - Production on Mon Sep 29 13:17:17 2008
Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
ERROR:
ORA-12547: TNS:lost contact
Enter user-name:



Cause

Insufficient ulimit setting for stack

Bug 4335746 STARTUP GIVES TNS LOST CONTACT , TRACES GIVE SKGM ERROR 27148 WITH ERROR CODE 1

When running a system trace (truss in this case) the following stack is produced


% truss -aefo /tmp/sqlplus.out sqlplus / as sysdba


sqlplus.out
-----------
23: lxstat(2, "/rdbms1/ora10gr2/rdbms/log/testdb_ora_23.trc", 0x08045AB8) Err#2 ENOENT
23: xstat(2, "/rdbms1/ora10gr2/rdbms/log/testdb_ora_23.trc", 0x08045AB8) Err#2 ENOENT
23: open("/rdbms1/ora10gr2/rdbms/log/testdb_ora_23.trc", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE,
0660) = 3
23: write(3, 0x0BED1F20, 0) = 0
23: write(3, " / r d b m s 1 / o r a 1".., 44) = 44
23: write(3, "\n", 1) = 1
23: write(3, " O r a c l e D a t a b".., 122) = 122
23: write(3, "\n", 1) = 1
23: write(3, " O R A C L E _ H O M E ".., 31) = 31
23: uname(0x0C4BF314) = 1
23: write(3, " S y s t e m n a m e :".., 19) = 19
23: write(3, " N o d e n a m e :\t o".., 19) = 19
23: write(3, " R e l e a s e :\t 5 . 1".., 14) = 14
23: write(3, " V e r s i o n :\t G e n".., 27) = 27
23: write(3, " M a c h i n e :\t i 8 6".., 15) = 15
23: write(3, " I n s t a n c e n a m".., 22) = 22
23: write(3, " R e d o t h r e a d ".., 47) = 47
23: write(3, " O r a c l e p r o c e".., 25) = 25
23: write(3, " U n i x p r o c e s s".., 43) = 43
23: write(3, "\n", 1) = 1
23: write(3, "\n", 1) = 1
23: brk(0x0C4DC778) = 0
23: brk(0x0C4DE778) = 0
23: open("/usr/share/lib/zoneinfo/US/Pacific", O_RDONLY) = 5
23: fstat64(5, 0x08045BD0) = 0
23: read(5, " T Z i f\0\0\0\0\0\0\0\0".., 1017) = 1017
23: close(5) = 0
23: write(3, " * * * 2 0 0 8 - 1 0 -".., 27) = 27
23: write(3, "\n", 1) = 1
23: write(3, " s k g m e r r o r 2".., 46) = 46
23: write(3, "\n", 1) = 1
23: _exit(0)
20: read(11, 0x0803FAF0, 64) = 0
20: close(11) = 0
20: close(10) = 0
20: getpid() = 20 [29981]
20: open64("/rdbms1/ora10gr2/sqlnet.log", O_WRONLY|O_APPEND|O_CREAT, 0666) = 9


sqlnet.log
--------------
***********************************************************************
Fatal NI connect error 12547, connecting to:


(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=/rdbms1/ora10gr2/bin/oracle)(ARGV0=oracletestdb)(ARGS='

(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))')(DETACH=NO))(CONNECT_DATA=(CID=(PROGRAM=sqlplus@o
mnibus)(HOST=omnibus)(USER=ora10g))))

VERSION INFORMATION:
TNS for Solaris: Version 10.2.0.2.0 - Production
Oracle Bequeath NT Protocol Adapter for Solaris: Version 10.2.0.2.0 - Production
TCP/IP NT Protocol Adapter for Solaris: Version 10.2.0.2.0 - Production
Time: 07-OCT-2008 09:05:34
Tracing not turned on.
Tns error struct:
ns main err code: 12547
TNS-12547: TNS:lost contact
ns secondary err code: 12560
nt main err code: 517
TNS-00517: Lost contact
nt secondary err code: 32
nt OS err code: 0



testdb_ora_23.trc
-----------------
/rdbms1/ora10gr2/rdbms/log/testdb_ora_23.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /rdbms1/ora10gr2
System name: SunOS
Node name: omnibus
Release: 5.10
Version: Generic_118855-36
Machine: i86pc
Instance name: testdb
Redo thread mounted by this instance: 0 <none>
Oracle process number: 0
Unix process pid: 23, image: oracle@omnibus

*** 2008-10-07 09:05:34.880
skgm error 27128: errno = 1, info = 3, 0, 0, 0


Solution

1. Collect a system trace via OS command. See

Note 110888.1 How to Trace Unix System Calls

for the available trace command on your OS.

for example:

%truss -aefo /tmp/sqlplus.out sqlplus / as sysdba

2. Check system trace for log files and additional errors

3. Confirm what the current ulimit setting is for stack

% ulimit -a

Note 188149.1 How to Display and Change UNIX Process Resource Limits

4. Check the install guide for your specific platform and version of Oracle and set stack as stated.

example: ulimit -s -1 ** This is Unlimited, the recommended setting on AIX **

Note 188149.1 How to Display and Change UNIX Process Resource Limits

5. Confirm sqlplus now works


%sqlplus / as sysdba


References

NOTE:110888.1 - How to Trace Unix System Calls
NOTE:188149.1 - How to Display and Change UNIX Process Resource Limits

显示相关信息相关内容


产品
  • Oracle Database Products > Oracle Database > Oracle Database > Oracle Server - Standard Edition
  • Oracle Database Products > Oracle Database > Oracle Database > Oracle Server - Enterprise Edition
关键字
AFTER INSTALLATION; CREATE DATABASE; DBCA; INSTALL & CONFIGURE; INSTALLATION; SQLNET.LOG; TRUSS; ULIMIT
错误
TNS-12547; TNS-517; ORA-12547

返回页首返回页首

Copyright (c) 2007, 2010, Oracle. All rights reserved. Legal Notices and Terms of Use | Privacy Statement

<think>我们正在处理ORA-12547: TNS:lost contact错误。根据引用[1]和引用[2],该错误通常与权限问题有关。引用[1]提到在日志中出现了TNS-12546: TNS:permission denied,这进一步表明是权限问题。引用[2]则展示了环境变量的设置,但问题可能仍然存在。 结合之前我们处理过的“权限不够”问题(即/app/oracle/bin/oracle权限问题),以及当前错误,我们应重点检查以下方面: 1. Oracle可执行文件的权限(特别是oracle二进制文件) 2. 监听器相关文件的权限 3. 环境变量设置(ORACLE_HOME, PATH等) 4. 防火墙或SELinux设置 具体步骤: 步骤1:检查Oracle二进制文件权限 我们已经知道,如果$ORACLE_HOME/bin/oracle文件的权限不正确,会导致权限问题。请确保: - 文件权限为6751(-rwsr-s--x) - 文件所有者为oracle:oinstall 执行命令: ```bash ls -l $ORACLE_HOME/bin/oracle chmod 6751 $ORACLE_HOME/bin/oracle chown oracle:oinstall $ORACLE_HOME/bin/oracle ``` 步骤2:检查监听器文件权限 同样,监听器相关的可执行文件也需要正确的权限。检查$ORACLE_HOME/bin/tnslsnr的权限: ```bash ls -l $ORACLE_HOME/bin/tnslsnr chmod 6751 $ORACLE_HOME/bin/tnslsnr chown oracle:oinstall $ORACLE_HOME/bin/tnslsnr ``` 步骤3:检查环境变量 确保在连接数据库时,环境变量设置正确。特别是ORACLE_HOME和PATH。可以像引用[2]中那样设置环境变量,并执行source使其生效。 步骤4:检查SELinux状态 如果SELinux处于enforcing模式,可能会阻止连接。可以临时禁用SELinux来测试: ```bash setenforce 0 ``` 如果问题解决,则需要永久禁用SELinux或调整SELinux策略。 步骤5:检查防火墙 确保防火墙允许数据库监听端口(默认1521)的通信。 步骤6:检查监听器日志 查看监听器日志($ORACLE_HOME/network/log/listener.log)以获取更多错误信息。 步骤7:重新启动监听器 ```bash lsnrctl stop lsnrctl start ``` 步骤8:检查/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 在某些情况下,如果该值设置为1,可能会导致TNS问题。可以尝试将其设置为0: ```bash echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ``` 步骤9:检查/etc/hosts文件 确保/etc/hosts文件中正确配置了主机名和IP地址的映射。 步骤10:检查数据库实例状态 确保数据库实例已经启动。 如果以上步骤仍然不能解决问题,可能需要进一步检查网络配置或重新安装Oracle客户端。 注意:在修改权限后,需要重启数据库实例和监听器。 引用[1]中提到的问题原因可能是权限被拒绝,因此我们应重点检查权限设置。 生成的相关问题: 1. 如何正确设置Oracle监听器的权限? 2. 如何永久禁用SELinux? 3. 如何配置Oracle网络环境以避免TNS错误? 4. ORA-12547错误的其他可能原因有哪些?</think>### ORA-12547: TNS:lost contact 错误深度排查与解决方案 #### 一、核心错误原因分析 1. **权限问题**(最常见) - Oracle二进制文件(`$ORACLE_HOME/bin/oracle`)权限不足(参考[^1]) - 监听器进程权限异常 - 操作系统用户组配置错误 2. **环境配置问题** - `ORACLE_HOME`路径设置错误(参考[^2]) - `LD_LIBRARY_PATH`未包含Oracle库路径 - 环境变量未生效(未执行`.bash_profile`) 3. **网络与安全限制** - SELinux/LSM安全模块拦截 - 防火墙阻断1521端口通信 - `/etc/hosts`解析错误 #### 二、分步解决方案 ```mermaid graph TD A[ORA-12547错误] --> B{排查方向} B --> C[文件权限] B --> D[环境变量] B --> E[网络配置] C --> F[检查oracle二进制权限] D --> G[验证ORACLE_HOME] E --> H[测试端口连通性] ``` ##### 1. 权限修复(关键步骤) ```bash # 检查文件权限 ls -l $ORACLE_HOME/bin/oracle # 修复权限(oracle用户执行) chmod 6751 $ORACLE_HOME/bin/oracle chown oracle:oinstall $ORACLE_HOME/bin/oracle # 检查监听器权限 ls -l $ORACLE_HOME/bin/tnslsnr chmod 6751 $ORACLE_HOME/bin/tnslsnr ``` ##### 2. 环境配置验证 ```bash # 检查环境变量(oracle用户执行) echo $ORACLE_HOME echo $PATH echo $LD_LIBRARY_PATH # 重新加载配置 source ~/.bash_profile # 验证环境 sqlplus / as sysdba <<EOF SELECT * FROM v\$version; EXIT; EOF ``` ##### 3. 网络与安全配置 ```bash # 关闭SELinux(临时) setenforce 0 # 检查防火墙 firewall-cmd --list-ports | grep 1521 firewall-cmd --add-port=1521/tcp --permanent # 验证主机解析 ping -c 3 $(hostname) cat /etc/hosts ``` #### 三、高级排查方案 1. **监听器日志分析** ```bash tail -100 $ORACLE_HOME/network/log/listener.log ``` - 关注 `TNS-12546` 错误(权限拒绝) 2. **Strace 系统调用跟踪** ```bash strace -f -o /tmp/oracle_trace.log $ORACLE_HOME/bin/oracle ``` - 检查 `EPERM` (Operation not permitted) 错误 3. **文件系统挂载检查** ```bash mount | grep noexec ``` - 若包含 `noexec` 选项,修改 `/etc/fstab` 后重启 #### 四、预防措施 1. **创建权限修复脚本** ```bash #!/bin/bash chmod 6751 $ORACLE_HOME/bin/oracle chmod 6751 $ORACLE_HOME/bin/tnslsnr restorecon -Rv $ORACLE_HOME/bin ``` 2. **环境自检函数** ```bash oracle_env_check() { [ -x "${ORACLE_HOME}/bin/oracle" ] || echo "权限错误" [ -n "${LD_LIBRARY_PATH}" ] || echo "库路径未设置" sqlplus -L /nolog <<< "exit" | grep -q ORA-12547 && echo "连接异常" } ``` > **关键注意**:麒麟系统需额外检查 `kylin-sec` 安全模块,使用: > ```bash > systemctl stop kylin-sec > systemctl disable kylin-sec > ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值