Oracle 11g下TNS連線報錯ora-12532故障解決
TNS連線錯誤是Oracle使用者經常遇到的問題。在實際工作中,由於使用者終端環境的複雜,各種TNS連線問題經常困擾日常使用者。作業系統版本問題、客戶端伺服器雙重安裝、多版本客戶端安裝、本地環境變數配置是我們經常遇到的故障場景和原因。
本篇記錄一個TNS Bug引發問題的解決,記錄下來,供有需要的朋友不時之需。
1、問題說明
問題是一個同事在配置連線到資料庫時候,總是報錯不能連線。筆者使用tnsping繼續測試,發現客戶端不能正確解析連線名稱。
這種問題出現的最大可能,就是tnsnames.ora檔案中配置格式出現問題。Oracle Net網路協議中,listener.ora、tnsnames.ora和sqlnet.ora是三個核心配置檔案。三個檔案保持著文字規格配置方法,是比較簡單、但也容易出錯的配置檔案。
果然在tnsnames.ora檔案中,我們發現了配置片段。
testDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.xx.xx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = testdb)
)
)
這種格式顯然是同事從其他地方黏貼過來的。在之前的部落格文章中,我們討論過tnsnames.ora中格式的解析規則,具體如下:
ü 本地Net名稱必須頂行頭書寫,不能出現空格;
ü 配置資訊括號中,只有最外層括號允許頂行頭書寫,其他括號不允許。注意:如果最外層括號頂行頭書寫,雖然tnsping和連線可以識別連線,但是netca配置工具不能識別,會出現配置工具hang住的情況;
根據這個思路,進行格式整理,形成如下格式:
testDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.xx.xx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = testdb)
)
)
之後,使用tnsping進行測試。
C:\Users\Thinkpad>tnsping testdb
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 01-6月 -
2015 14:12:27
Copyright (c) 1997, 2007, Oracle. All rights reserved.
已使用的引數檔案:
F:\app\xxx\product\11.1.0\db_1\network\admin\sqlnet.ora
已使用 TNSNAMES 介面卡來解析別名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 172.16.xx.xx)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = testdb)))
TNS-12532: TNS: 無效的引數
這個就有超出筆者經驗的情況了。從tnsping的情況看,Oracle Net是可以正確解析出連結字串。而且配置引數型別都是比較常見的型別,沒有出現錯誤的機率。
最詭異的是錯誤提示:無效的引數。讓人一時摸不到頭腦。
無奈之下,筆者嘗試刪除掉連線內容,重新執行netca配置一個相同的連線。但是在最後測試的環節,出現相同提示錯誤:
正在連線...ORA-12532: TNS: 無效的引數
測試未成功。
您提供的一些資訊可能不正確。
單擊“後退”檢查提供的 Net 服務名的資訊, 或單擊“更改登入”來更改使用者名稱。
比較詭異的問題了。
2、問題分析與解決
資料庫伺服器、監聽程式肯定是正常的,其他使用者連線沒有問題。問題根源依然是在客戶端沒錯。根據經驗:首先詳細檢查一下同事本地機器的配置和軟體情況。
首先,發現同事安裝的不是客戶端程式,而是Oracle 11gR1版本伺服器。
C:\Users\Thinkpad>tnsping sicsdb
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 01-6月 -
2015 14:12:27
具體版本是11.1.0.6,此外同事64位伺服器上安裝了32位資料庫軟體。根據經驗,Oracle任何一個大版本釋出,不到release 2的時候,是可能有很多潛在Bug出現的。另外,雖然在Windows環境下,64位作業系統可以相容32位軟體程式,但是很多底層呼叫是會出現問題的,更容易引起bug的出現。
按照這個思路,筆者在官方MOS網站上找到對應的文章資訊:11g: TNS-12532 / ORA-12532 Reported When Firewall Is Enabled (文件 ID 748466.1)。
在文章中,說明在11.1.0.6的Oracle Net Services中,可能會出現ora 12532錯誤。標準的該錯誤提示內容為:
[oracle@SICS-MIGPC-DB ~]$ oerr ora 12532
12532, 00000, "TNS:invalid argument"
// *Cause: An internal function received an invalid parameter.
// *Action: Not normally visible to the user. For further details, turn
// on tracing and reexecute the operation. If error persists, contact
// Oracle Customer Support.
這是一個很內部的錯誤,一般不會被普通使用者看到。主要原因在於從客戶端向外傳送資訊的時候,被防火牆或者其他原因阻塞。
這個問題已經被Oracle內部識別為一個bug,編號是6031201。出現12532錯誤的提示資訊顯然是不正確的,應該對應TNS:connection refused資訊。
聯絡同事修改該問題,將本機的防火牆關閉,重新實驗,連線成功。
C:\Users\Thinkpad>tnsping testdb
TNS Ping Utility for 32-bit Windows: Version 11.1.0.6.0 - Production on 01-6月 -
2015 14:39:54
Copyright (c) 1997, 2007, Oracle. All rights reserved.
已使用的引數檔案:
F:\app\xxxx\product\11.1.0\db_1\network\admin\sqlnet.ora
已使用 TNSNAMES 介面卡來解析別名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 172.16.xx.xx)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = testdb)))
OK (10 毫秒)
故障消失。建議同事解除安裝低版本Oracle,安裝11.2.0.4系列客戶端。
3、結論
Oracle Net是官方提供的連線策略,很多朋友在配置過程中存在各種各樣的問題。在實際中,不要被問題表象所迷惑,抽絲剝繭、逐步深入可以幫助我們正確的解決問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1710661/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 連線oracle報錯Oracle
- 【轉】ORACLE TNSING報錯(TNS-03505)的解決Oracle
- Oracle TNS報錯大全Oracle
- 連線oracle錯誤解決辦法Oracle
- Linux下ODBC連線HGDB報Could not SQLConnect錯解決方法LinuxSQL
- 解決連線Oracle 11g報ORA-01034和ORA-27101的錯誤Oracle
- 寬頻連線錯誤678怎麼辦? 寬頻連線錯誤678故障解決辦法
- 客戶端連線EBS 11i VIS報ORA-12537: TNS: 連線已關閉 錯誤的解決客戶端
- TNS-12555報錯的解決方案
- TNS-12537報錯解決方法
- Oracle 資料庫連線錯誤解決方法Oracle資料庫
- 網路裝置重啟造成rac監聽故障連線資料庫報ora-12170:TNS:連線超時的錯誤資料庫
- navicate oracle 連線報錯問題Oracle
- 解決PLSQL Developer8連線Oracle 10g X64報錯SQLDeveloperOracle 10g
- 【故障處理】修改maxuproc引數解決TNS-00519錯誤
- linux下oracle的TNS-12546錯誤解決辦法LinuxOracle
- Windows連線RHEL上的Oracle,報錯:ORA-12560: TNS: 協議介面卡錯誤WindowsOracle協議
- ORACLE RAC中連線ScanIP報錯ORA-12545的問題解決Oracle
- Percona Toolkit工具連線MySQL 8報錯的解決方案MySql
- 連線mysql報錯lost connect to sever during query解決MySql
- 解決用PLSQL Developer連線VMWare中的Oracle 11g問題SQLDeveloperOracle
- Oracle備庫TNS連線失敗的分析Oracle
- 連線ORACLE報錯:ORA-12528Oracle
- tns連線非常慢
- ORACLE 11G 無法連線到資料庫例項故障排除Oracle資料庫
- 客戶端使用SCNAIP連線11G RAC資料庫報錯ORA-12545解決客戶端AI資料庫
- 爛泥:【解決】windowslivewrite報連線到日誌時出錯Windows
- weblogic 11g部署報錯及解決Web
- 新裝11GRAC遠端連線不上資料庫,報TNS-12547: TNS:lost contact故障處理資料庫
- 解決使用SSH連線Linux伺服器時連線失敗的故障Linux伺服器
- Oracle的TNS-12502 錯誤原因及解決Oracle
- oracle 11g登陸報錯'ORA-12162: TNS:net service name is incorrectly specified'Oracle
- java通過jdbc連線oracle報錯No suitable driverJavaJDBCOracleUI
- 本地連線沒有有效的ip配置的故障解決
- 一次oracle 11g 資料泵 報錯 的解決過程Oracle
- TNS-12560: TNS:protocol adapter error 錯誤解決ProtocolAPTError
- Homestead 在 Windows 下軟連結報錯的解決辦法Windows
- Arcgis連線HGDB報錯