本地服务端 使用 sqlplus / as sysdba 报ORA-12547: TNS:lost contact


  在某个时候 突然 接到 运维 人员反馈, 今天业务相关的数据 都堆积 很多了,   原因是文件入库失败,  后台数据库直接 报如下错


[oracle@ORACLEMAIN ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sat Jul 23 13:27:09 2016

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact


Enter user-name: 
ERROR:
ORA-12547: TNS:lost contact


Enter user-name: 
ERROR:
ORA-12547: TNS:lost contact


SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

原因分析,  后台本地登录数据库 居然要 TNS  ?


1/   产看数据后台进程,发现正常

[oracle@ORACLEMAIN ~]$ ps -ef  |  grep  ora_
oracle     824     1  0 13:29 ?        00:00:00 ora_w000_ora11g
oracle     849   769  0 13:37 pts/1    00:00:00 grep ora_
oracle    3468     1  0 11:33 ?        00:00:00 ora_pmon_ora11g
oracle    3470     1  0 11:33 ?        00:00:02 ora_vktm_ora11g
oracle    3474     1  0 11:33 ?        00:00:00 ora_gen0_ora11g
oracle    3476     1  0 11:33 ?        00:00:00 ora_diag_ora11g
oracle    3478     1  0 11:33 ?        00:00:00 ora_dbrm_ora11g
oracle    3480     1  0 11:33 ?        00:00:00 ora_psp0_ora11g
oracle    3482     1  0 11:33 ?        00:00:01 ora_dia0_ora11g
oracle    3484     1  0 11:33 ?        00:00:02 ora_mman_ora11g
oracle    3486     1  0 11:33 ?        00:00:00 ora_dbw0_ora11g
oracle    3488     1  0 11:33 ?        00:00:00 ora_lgwr_ora11g
oracle    3490     1  0 11:33 ?        00:00:03 ora_ckpt_ora11g
oracle    3492     1  0 11:33 ?        00:00:00 ora_smon_ora11g
oracle    3494     1  0 11:33 ?        00:00:00 ora_reco_ora11g
oracle    3496     1  0 11:33 ?        00:00:01 ora_mmon_ora11g
oracle    3498     1  0 11:33 ?        00:00:01 ora_mmnl_ora11g
oracle    3500     1  0 11:33 ?        00:00:00 ora_d000_ora11g
oracle    3502     1  0 11:33 ?        00:00:00 ora_s000_ora11g
oracle    3542     1  0 11:33 ?        00:00:00 ora_qmnc_ora11g
oracle    3570     1  0 11:34 ?        00:00:00 ora_q000_ora11g
oracle    3572     1  0 11:34 ?        00:00:00 ora_q001_ora11g
oracle    3582     1  0 11:38 ?        00:00:00 ora_smco_ora11g

2  产看数据的 警告文件

<pre name="code" class="html">[oracle@ORACLEMAIN trace]$ grep  "ORA-"  alert_ora11g.log
[oracle@ORACLEMAIN trace]$ 


 警告文件 没有报 任何错误, 说明数据 运行还是很正常的,  
 

查了 官方资料, 有下面几点 方法

  1.  检查 $ORACLE_HOME/bin/oracle  文件的 权限是否  为 6751

  

[oracle@ORACLEMAIN bin]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle oinstall 210824714 Dec 14  2014 /opt/app/oracle/product/11.2.0/db_1/bin/oracle
[oracle@ORACLEMAIN bin]$ 
  如果不为 上面结果   那么就需要 把权限 改回来

chmod 6751 oracle


2. 检查环境变量配置是否正确  需要设置好


 ORACLE_BASE, 

ORACLE_HOME, 

LD_LIBRARY_PATH,

 PATH

  

[oracle@ORACLEMAIN bin]$ env | grep  ORA
HOSTNAME=ORACLEMAIN
ORACLE_SID=ora11g
ORACLE_BASE=/opt/app/oracle
ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1
[oracle@ORACLEMAIN bin]$ 
如果没有上述变量,请添加上


环境变量配置是正确的,  应为生产库已经使用了好几年了,所以这个出问题 的可能性应该不大


3 . 检查操作 系统内核参数

根据 oracle 官方文档的 检查

 orcle 官方 文档 要求配置如下

shmmni	4096	/proc/sys/kernel/shmmni
file-max	6815744	/proc/sys/fs/file-max
ip_local_port_range	Minimum: 9000
Maximum: 65500

/proc/sys/net/ipv4/ip_local_port_range
rmem_default	262144	/proc/sys/net/core/rmem_default
rmem_max	4194304	/proc/sys/net/core/rmem_max
wmem_default	262144	/proc/sys/net/core/wmem_default
wmem_max	1048576	/proc/sys/net/core/wmem_max
aio-max-nr	1048576
Note: This value limits concurrent outstanding requests and should be set to avoid I/O subsystem failures.

/proc/sys/fs/aio-max-nr
</pre>我根据 上述检查后 系统配置 都达到 要求<p></p><p></p><p>然后我们再来看 软/硬 限 参数配置</p><p>官方最低要求是</p><p></p><pre name="code" class="html">Resource Shell Limit           	Resource	Soft Limit	     Hard Limit
Open file descriptors           nofile     at least 1024    at least 65536

Number of processes available   nproc      at least 2047     at least 16384
to a single user

Size of the stack segment       stack      at least 10240 KB  at least 10240 KB, and at most 32768 KB
of the process


通过下面的命令检查 我系统参数的配置

[oracle@ORACLEMAIN ~]$ ulimit -Hn
65536
[oracle@ORACLEMAIN ~]$ ulimit -Sn
1024
[oracle@ORACLEMAIN ~]$ ulimit -Hu
16384
[oracle@ORACLEMAIN ~]$ ulimit -Su
16384
[oracle@ORACLEMAIN ~]$ ulimit -Hs
<span style="color:#ff0000;">1024</span>
[oracle@ORACLEMAIN ~]$ ulimit -Ss
<span style="color:#ff0000;">1024</span>
[oracle@ORACLEMAIN ~]$ 


问题已经 找到    stack   oracle 的最低要求是 10240   而我的是 1024 


[root@ORACLEMAIN ~]# tail -l /etc/security/limits.conf 
#@student        -       maxlogins       4

# End of file

oracle  soft nofile 1024
oracle  hard nofile 65536
oracle  soft noproc 2047
oracle  hard noproc 16384
<span style="color:#ff0000;">oracle  soft stack  10240
oracle  hard  stack 10240</span>
[root@ORACLEMAIN ~]# 


在这个文件 加入 最后 标红的 2 行

切换 到 oracle 用户 检查参数


<pre name="code" class="html">[root@ORACLEMAIN ~]# su -  oracle
[oracle@ORACLEMAIN ~]$ ulimit -s
1024
[oracle@ORACLEMAIN ~]$ 

 
 

发现参数 并没有变,, 这种情况是不应该的, 当修改完后 就应该立马生效的,  所以想到的是 立马重启服务器, 但是 改服务器上 有很多业务, 所以 重启  那是不可能的事情了,所以怀疑是设置 全局变量

 检查 /etc/profile 发现这个文件的最后  ulimit  -s  1024   靠!!!!, 谁在环境变量做了配置, 害的我花了 将近三个小时

 把这一行 去掉 , 再切换 到 oracle用户  产看参数 正常 登录数据库也正常

[root@ORACLEMAIN ~]# su - oracle
[oracle@ORACLEMAIN ~]$ ulimit  -s
10240
[oracle@ORACLEMAIN ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sat Jul 23 15:01:01 2016

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> 
SQL> 

问题解决, 如果 你到这里  ,  unlimt  -s  值还是没有变的话, 建议 在 /etc/profile  的最后 加上  ulimit  -s 10240  


如果 上述 三个步骤 还没有 解决你的 问题 那么请用 步骤4


4 .  relink  all   (在oracle 用户下 使用这个命令)




  


猜你喜欢

转载自blog.csdn.net/brighter_xiao/article/details/52004087