在Oracle中,形成錯誤「ORA-12547: TNS:lost contact」的常見緣由有哪些?node
在執行「sqlplus / as sysdba」時可能會報「ORA-12547: TNS:lost contact」的錯誤,常見緣由有以下幾點:程序員
1、查看操做系統內核參數是否無誤面試
1core file size (blocks, -c) 0
2data seg size (kbytes, -d) unlimited
3scheduling priority (-e) 0
4file size (blocks, -f) unlimited
5pending signals (-i) 16384
6max locked memory (kbytes, -l) 32
7max memory size (kbytes, -m) unlimited
8open files (-n) 1024
9pipe size (512 bytes, -p) 8
10POSIX message queues (bytes, -q) 819200
11real-time priority (-r) 0
12stack size (kbytes, -s) 10240
13cpu time (seconds, -t) unlimited
14max user processes (-u) 16384
15virtual memory (kbytes, -v) unlimited
16file locks (-x) unlimited
對於文件/etc/security/limits.conf中的「oracle hard stack」值至少應該是10240。sql
2、確認$ORACLE_HOME/bin/oracle文件權限和屬主是否有問題數據庫
須要注意的是,在rac環境下須要查看$ORACLE_HOME/bin/oracle和$GRID_HOME/bin/oracle兩個文件。在沒有安裝GI的環境下,正確權限爲:微信
1[oracle@OCPLHR ~]$ ll $ORACLE_HOME/bin/oracle
2-rwsr-s--x 1 oracle oinstall 232424392 Feb 2 10:30 /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
3[oracle@OCPLHR ~]$
在有grid用戶的狀況下,oracle可執行文件正確屬主應該是oracle:asmadmin,而且權限必須有s才能夠,以下所示:網絡
1[root@orclalhr ~]$ which setasmgidwrap
2/u01/app/11.2.0/grid/bin/setasmgidwrap
3[root@orclalhr ~]$ setasmgidwrap -o /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
4[root@orclalhr ~]$ ll /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
5-rwsr-s--x 1 oracle asmadmin 232399083 Apr 21 2015 /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
6[root@orclalhr ~]# ll /u01/app/11.2.0/grid/bin/oracle
7-rwsr-s--x. 1 grid oinstall 203972117 Jan 5 2015 /u01/app/11.2.0/grid/bin/oracle
8[root@orclalhr ~]# chmod 6751 /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
9[root@orclalhr ~]# ll /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
10-rwsr-s--x 1 oracle asmadmin 232399083 Apr 21 2015 /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
11[root@orclalhr bin]# cd /u01/app/oracle/product/11.2.0/dbhome_1/bin/
12[root@orclalhr bin]# which stat
13/usr/bin/stat
14[root@orclalhr bin]# stat oracle
15 File: `oracle'
16 Size: 210823844 Blocks: 411776 IO Block: 4096 regular file
17Device: 802h/2050d Inode: 1717737 Links: 1
18Access: (6751/-rwsr-s--x) Uid: ( 501/ oracle) Gid: ( 504/asmadmin)
19Access: 2017-03-16 12:33:44.809363974 +0800
20Modify: 2014-05-18 17:09:50.508549983 +0800
21Change: 2017-03-16 11:05:15.733816820 +0800
文件權限的詳細說明以下:oracle
u:User,即文件或目錄的擁有者。app
g:Group,即文件或目錄的所屬羣組。dom
o:Other,除了文件或目錄擁有者或所屬羣組以外,其餘用戶皆屬於這個範圍。
a:All,即所有的用戶,包含擁有者,所屬羣組以及其餘用戶。
有關權限代號的部分,列表於下:
r:讀取權限,數字代號爲4。
w:寫入權限,數字代號爲2。
x:執行或切換權限,數字代號爲1。
-:不具任何權限,數字代號爲0。
s:當文件被執行時,根據who參數指定的用戶類型設置文件的setuid或者setgid權限。
若是權限不對,那麼能夠執行如下命令進行修復:
1chmod 6751 $ORACLE_HOME/bin/oracle
若是權限不對,那麼使用strace跟蹤命令也能夠看到以下信息:
1$strace -f -o /tmp/trace.1.log $ORACLE_HOME/bin/sqlplus / as sysdba
在trace.1.log文件中能夠看到以下的內容:
121810 open("/oracle/PROD/db/tech_st/11.1.0/admin/PROD_erptest/diag/rdbms/prod/PROD/alert/log.xml", O_WRONLY|O_CREAT|O_APPEND, 0664) = -1 EACCES (Permission denied)
2......
3
421810 open("/oracle/PROD/db/tech_st/11.1.0/admin/PROD_erptest/diag/rdbms/prod/PROD/trace/alert_PROD.log", O_WRONLY|O_CREAT|O_APPEND, 0664) = -1 EACCES (Permission denied)
3、檢查一下環境變量
1echo $ORACLE_HOME
2echo $ORACLE_SID
3echo $LD_LIBRARY_PATH --注意:不一樣的操做系統此環境變量會不一樣
4echo $PATH
4、檢查$ORACLE_HOME/bin/oracle和$ORACLE_HOME/rdbms/lib/config.o的文件大小是否爲0
1[oracle@OCPLHR ~]$ ll $ORACLE_HOME/bin/oracle
2-rwsr-s--x 1 oracle oinstall 232424392 Feb 2 10:30 /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
3[oracle@OCPLHR ~]$ ll $ORACLE_HOME/rdbms/lib/config.o
4-rw-r--r-- 1 oracle oinstall 1248 Jan 15 21:45 /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/config.o
5[oracle@OCPLHR ~]$
若是大小爲0,那麼須要先備份config.o文件,而後從新編譯oracle軟件:
1% cd $ORACLE_HOME/rdbms/lib
2% mv config.o config.o.bad
3[oracle@OCPLHR ~]$ relink all
4writing relink log to: /u01/app/oracle/product/11.2.0/dbhome_1/install/relink.log
須要注意的是,relink可能會報錯,因此須要檢查上邊生成的日誌文件$ORACLE_HOME/install/relink.log。
五、檢查$ORACLE_HOME/network/admin/sqlnet.ora文件中的內容
查看是否設置了限制某些IP地址登陸的內容,此時能夠經過查看監聽日誌的內容來肯定。若是設置了限制登陸的內容,則能夠把tcp.validnode_checking設爲no,或者在tcp.invited_nodes加入容許訪問的IP或機器名。
六、檢查監聽日誌文件的大小,確保監聽日誌文件的大小不能超過2G。若是超過2G,那麼可使用以下的方法解決:
1[oracle@test ~]$ cd $ORACLE_HOME/network/log
2[oracle@test log]$ cat /dev/null > listener.log
七、檢查文件/etc/hosts文件中是否含有如下內容:
1[oracle@OCPLHR ~]$ cat /etc/hosts
2# Do not remove the following line, or various programs
3# that require network functionality will fail.
4127.0.0.1 localhost.localdomain localhost
5::1 localhost6.localdomain6 localhost6
6192.168.59.155 OCPLHR
必須確保/etc/hosts文件中含有127.0.0.1這行。
八、查看系統是否缺乏必要安裝包,例如glibc、glibc-devel、libaio、libaio-devel
九、使用操做系統跟蹤命令跟蹤sqlplus鏈接過程,從而觀察跟蹤文件
Linux系統的跟蹤命令:
1strace -o /tmp/output.txt -T -tt -e trace=all sqlplus / as sysdba
2strace -t -p 4545
Unix跟蹤sqlplus進程:
1truss -dfaie -o /tmp/sched_trace.out.02271 sqlplus '/as sysdba'
& 說明:
有關該錯誤的更多內容能夠參考個人BLOG:http://blog.itpub.net/26736162/viewspace-2150922/
本文選自《Oracle程序員面試筆試寶典》,做者:小麥苗
DB寶分享的IT資料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag
● 本文做者:小麥苗,只專一於數據庫的技術,更注重技術的運用
● 做者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列題目來源於做者的學習筆記,部分整理自網絡,如有侵權或不當之處還請諒解
● 版權全部,歡迎分享本文,轉載請保留出處
● QQ:646634621 QQ羣:23016159九、618766405
● 微信:lhrbestxh
● 微信公衆號:DB寶
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最實用的技能培訓
● 題目解答如有不當之處,還望各位朋友批評指正,共同進步
長按下圖識別二維碼或微信掃描下圖二維碼來關注小麥苗的微信公衆號:DB寶,學習最實用的數據庫技術。
本文分享自微信公衆號 - DB寶(lhrdba)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。