對于現網已運行N久的oracle,突然連接不到了,所有人都說沒有動過什么。
這么妖怪的事情,怎么可能是沒動過什么地方呢?
事情已經被處理了一個小時以上,無果。
流轉到我手里-30分鐘,無果。
BOSS請了個外援一個小時,無果。
歷經三個人的手,最后因猜測-修改配置后搞定,只能說運氣好。
在對方不了解你的環境部署和網絡環境時,請外援不一定能快速地解決問題。因為他需要時間去判斷-我們描述的現象去和具體環境做個對比,好確定問題到底出現在哪里。
網絡部署圖
oracle-網絡圖.jpg
oracle服務器和應用服務器在同一網段-網絡是互通的。
oracle啟動后,本機用sqlplus連接是OK的,但是應用服務器就是訪問不到。
剛開始看日志查到 clsc.log 中有異常,還以為是這個異常導致了遠程訪問不了,在處理這個問題,在錯誤的道路上越走越遠。
clsc.log
2016-09-04 09:55:32.353: [ default][3527604032]utgdv:2:ocr loc file /etc/oracle/olr.loc cannot be opened. errno 2
[ CLSE][3527604032]clse_get_crs_home: Error retrieving OLR configuration [0] [Error opening olr.loc file. No such file or directory]
之后開始檢查配置sqlnet.ora、listener.ora 、tnsnames.ora和/etc/hosts
一:host 和/etc/hosts中定義的不同-改成一致
二:刪除了listener.ora中部分配置
以后處理了問題-及時總結,不然等兩三個月后-好些細節都忘記啦,總結的意義就大大折扣啦
正確的配置如下:
sqlnet.ora 配置
# sqlnet.ora Network Configuration File: /opt/oracle_11/product/112010/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
ADR_BASE = /opt/oracle_11
listener.ora 配置
# listener.ora Network Configuration File: /opt/oracle_11/product/112010/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = chances123)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /opt/oracle_11
tnsnames.ora配置
# tnsnames.ora Network Configuration File: /opt/oracle_11/product/112010/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = chances123)(PORT = 1521))
(CONNECT_DATA =
(SID=ORCL)
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
/etc/hosts配置
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.220.123 chances123
知道了結果,但還是不知道遠程訪問時-Oracle是如何處理,于是翻看了《OCP/OCA認證考試指南手冊-oracle database 11g》,書中給了一張圖,非常清楚地畫出了oracle net的流程
oracle-net.jpg
從流程圖來看-上次應該是Listener錯啦。