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

来源:互联网 发布:c语言分析图书管理系统 编辑:程序博客网 时间:2024/05/04 08:28


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


[oracle@ORACLEMAIN ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Sat Jul 23 13:27:09 2016Copyright (c) 1982, 2009, Oracle.  All rights reserved.ERROR:ORA-12547: TNS:lost contactEnter user-name: ERROR:ORA-12547: TNS:lost contactEnter user-name: ERROR:ORA-12547: TNS:lost contactSP2-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_ora11goracle     849   769  0 13:37 pts/1    00:00:00 grep ora_oracle    3468     1  0 11:33 ?        00:00:00 ora_pmon_ora11goracle    3470     1  0 11:33 ?        00:00:02 ora_vktm_ora11goracle    3474     1  0 11:33 ?        00:00:00 ora_gen0_ora11goracle    3476     1  0 11:33 ?        00:00:00 ora_diag_ora11goracle    3478     1  0 11:33 ?        00:00:00 ora_dbrm_ora11goracle    3480     1  0 11:33 ?        00:00:00 ora_psp0_ora11goracle    3482     1  0 11:33 ?        00:00:01 ora_dia0_ora11goracle    3484     1  0 11:33 ?        00:00:02 ora_mman_ora11goracle    3486     1  0 11:33 ?        00:00:00 ora_dbw0_ora11goracle    3488     1  0 11:33 ?        00:00:00 ora_lgwr_ora11goracle    3490     1  0 11:33 ?        00:00:03 ora_ckpt_ora11goracle    3492     1  0 11:33 ?        00:00:00 ora_smon_ora11goracle    3494     1  0 11:33 ?        00:00:00 ora_reco_ora11goracle    3496     1  0 11:33 ?        00:00:01 ora_mmon_ora11goracle    3498     1  0 11:33 ?        00:00:01 ora_mmnl_ora11goracle    3500     1  0 11:33 ?        00:00:00 ora_d000_ora11goracle    3502     1  0 11:33 ?        00:00:00 ora_s000_ora11goracle    3542     1  0 11:33 ?        00:00:00 ora_qmnc_ora11goracle    3570     1  0 11:34 ?        00:00:00 ora_q000_ora11goracle    3572     1  0 11:34 ?        00:00:00 ora_q001_ora11goracle    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  ORAHOSTNAME=ORACLEMAINORACLE_SID=ora11gORACLE_BASE=/opt/app/oracleORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1[oracle@ORACLEMAIN bin]$ 
如果没有上述变量,请添加上


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


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

根据 oracle 官方文档的 检查

 orcle 官方 文档 要求配置如下

shmmni4096/proc/sys/kernel/shmmnifile-max6815744/proc/sys/fs/file-maxip_local_port_rangeMinimum: 9000Maximum: 65500/proc/sys/net/ipv4/ip_local_port_rangermem_default262144/proc/sys/net/core/rmem_defaultrmem_max4194304/proc/sys/net/core/rmem_maxwmem_default262144/proc/sys/net/core/wmem_defaultwmem_max1048576/proc/sys/net/core/wmem_maxaio-max-nr1048576Note: 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           ResourceSoft Limit     Hard LimitOpen file descriptors           nofile     at least 1024    at least 65536Number of processes available   nproc      at least 2047     at least 16384to a single userSize of the stack segment       stack      at least 10240 KB  at least 10240 KB, and at most 32768 KBof the process


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

[oracle@ORACLEMAIN ~]$ ulimit -Hn65536[oracle@ORACLEMAIN ~]$ ulimit -Sn1024[oracle@ORACLEMAIN ~]$ ulimit -Hu16384[oracle@ORACLEMAIN ~]$ ulimit -Su16384[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 fileoracle  soft nofile 1024oracle  hard nofile 65536oracle  soft noproc 2047oracle  hard noproc 16384<span style="color:#ff0000;">oracle  soft stack  10240oracle  hard  stack 10240</span>[root@ORACLEMAIN ~]# 


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

切换 到 oracle 用户 检查参数


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

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

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

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

[root@ORACLEMAIN ~]# su - oracle[oracle@ORACLEMAIN ~]$ ulimit  -s10240[oracle@ORACLEMAIN ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Sat Jul 23 15:01:01 2016Copyright (c) 1982, 2009, Oracle.  All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> SQL> 

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


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


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




  


0 0