1. 程式人生 > >系統部署提示Cannot create PoolableConnectionFactory錯誤的解決方案

系統部署提示Cannot create PoolableConnectionFactory錯誤的解決方案

為了部署一套給客戶演示的平臺,由於太久動技術,很多東西都生疏了,所以出現錯誤,記錄一下,做技術的不能把技術給丟了。

一、首先在Win7下安裝oracle11G,安裝過程中不是太順利,在安裝嚮導建立資料庫時出現了錯誤ora-31011(網上說是要修改安裝包裡的某某檔案,但是也可以直接忽略)直接忽略,然後資料庫安裝完成,刪除嚮導建立的資料庫,自己重新建立,沒有問題。

二、部署要給客戶演示的平臺,部署在本地,資料庫連線配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context useHttpOnly="true" sessionCookiePath="/" sessionCookieDomain=".gxoa.com">
    <Resource name="jdbc/gxoasource" auth="Container" type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
        username="username" password="password" maxActive="50" maxIdle="30"
        maxWait="10000" />
    <Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
</Context>

啟動服務,錯誤:Cannot create PoolableConnectionFactory,無法連線到資料庫,通過檢視,發現oracle的網路配置指向192.168.80.1(本機的一塊虛擬網絡卡地址),好吧,安裝oracle時,自動選取了這塊網絡卡(這是為什麼?)。

發現問題,修改監聽和服務命名中的IP:127.0.0.1,重啟oracle的監聽和服務。完成後,提示“ORA-12514 TNS 監聽程式當前無法識別連線描述符中請求服務

本問題的解決思路:

根據出錯資訊判斷出監聽程式無法訪問到例項服務名

1、通過重啟服務的方式啟動資料庫,再次連線仍無法連線伺服器。

2、既然第一種方法不能解決問題,那就第二種方法。考慮監聽listener.ora


監聽配置檔案listener.ora中可以不必指定監聽的服務名(安裝Oracle10g後也是沒有指定的)。正常情況下一般只要資料庫啟動,客戶端連線資料庫也沒有什麼問題,但是有時重複啟動關閉也會出現ORA-12514錯誤。

 既然listener.ora中沒有指定監聽,我們可以在listener.ora檔案中指定監聽的例項名,這樣該問題應該可以連線。

步驟如下:

  • 在oracle伺服器Oracle安裝目錄(我的在d:\Oracle11g下,每個人的不一樣,根據自己的情況查詢)Network/admin目錄下找到listener.ora 

# listener.ora Network Configuration File: d:\Oracle11g\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = d:\Oracle11g)
      (PROGRAM = extproc)
    )
   (SID_DESC =
    (GLOBAL_DBNAME = ORCL)
    (ORACLE_HOME = d:\Oracle11g)
    (SID_NAME = ORCL)
    )

 )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = onest)(PORT = 1521))
    )
  )

標紅的為我新增的部分,ORCL為監聽的例項名。

  • 然後在Oracle伺服器的服務中重新啟動監聽服務,然後在oracle客戶端通過再次配置對Orcl例項的監聽
  • 這時我們不要著急,只需要oracle伺服器重新啟動一下,再次連線即成功。這也是我們配置完listener.ora 監聽後,經常忘記的。再次嘗試,可以看到客戶端可以連線上oracle伺服器了,而且PL/SQL再次連線也沒有問題了。

而有些朋友在配置客戶端時,連線資料庫成功,而使用PL/SQL時,又出現瞭如下圖所示的問題。這又如何解決呢?為什麼oracle客戶端已經連線成功了,而PL/SQL確不行呢?
出現如上的原因是,可能是大家再配置oracle客戶端時,雖然連結成功了,步驟上可能有些錯誤。大家使用Net Cofiguration Assistant客戶端時重新配置了Orcl,而不是新增,我們應該如下步驟處理,就不會出問題了。

1、如果Net Cofiguration Assistant中已經有了Orcl。我們可以重新配置

2、如果Net Cofiguration Assistant中沒有Orcl,我們應該新增 。

如果大家該步處理也沒有問題了,listener.ora 修改成功,並且重新啟動了oracle伺服器,無論oracle客戶端還是PL/SQL都能夠成功連線資料庫了。

總結一下。當大家遇到“ORA-12514 TNS 監聽程式當前無法識別連線描述符中請求服務”錯誤的解決步驟:

1、通過重啟服務的方式啟動資料庫,再次連線嘗試。

2、如果第一種方法不可行,我們採用第二種方法

  • 正確新增listener.ora;
  • 重新啟動了oracle伺服器,並檢查oracle所有服務是否啟動;
  • oracle客戶端Net Cofiguration Assistant正確新增或重新配置例項名 

希望該篇博文,能夠解決大家的問題。