簡體   English   中英

java.sql.SQLException:偵聽器拒絕連接時出現以下錯誤:ORA-12519,TNS:找不到合適的服務處理程序

[英]java.sql.SQLException: Listener refused the connection with the following error: ORA-12519, TNS:no appropriate service handler found

我將Resultset對象傳遞給每個線程。 每個線程都連接到數據庫並插入數據。 直到線程110它工作正常。 在它穿過111線程后,它拋出上述異常。

我正在使用oracle 11g。

我的示例線程代碼是:

class MyThreadClass implements Runnable 

{

    public Connection connection;

    public Statement statement2;

    public ResultSet rs2;    

    public String cookie;


    public MyThreadClass(ResultSet rs1)  
    {
      rs2=rs1;
    }

    public void run() 
    {    
       try
       {                    
            cookie=rs2.getString("COOKIE");
            driver = "oracle.jdbc.driver.OracleDriver";
            url    = "jdbc:oracle:thin:@127.0.0.1:1521:xx";
            /* connection

                statement2.executeUpdate("INSERT INTO visit_header  VALUES ('"+cookie+"')");

       }

我沒有得到如何處理此異常。

您的多線程應用程序打開了太多的連接/會話。 因此,監聽器暫時停止並阻止新連接。

首先檢查數據庫資源使用情況:

SELECT * FROM v$resource_limit WHERE resource_name IN ('processes','sessions');

檢查您的進程或會話的MAX_UTILIZATION是否過於接近LIMIT_VALUE。 如果是,您應該:

  1. 使用數據庫連接池在線程之間共享Connection對象。 要么,
  2. 增加Oracle可以同時服務的進程/會話數。

實際上,應始終完成連接池(#1)。 否則應用程序無法擴展。 有關詳細信息,請查看Apache Commons DBCP 對於#2,以SYSTEM身份打開一個新的SQL * Plus會話並運行:

ALTER system SET processes=<n-as-per-number-of-threads> scope=spfile;

增加后端並發性。 然后重新啟動數據庫。 重要!

我想數據庫只是不接受來自主機的更多連接。 如果我理解你的問題,你可能會制作100個線程,每個線程在短時間內連接到數據庫。 也許您甚至沒有正確關閉連接,或者訪問持續時間太長以至於打開了大量連接。 數據庫具有接受連接的限制。

你應該通過一些聰明的技術減少連接數量。 也許減少並發線程的數量和/或使用連接池。

在你的最后嘗試這個解決方案。 它對我有用。 關閉try / catch塊中的連接,在關閉連接后,寫入 -

Thread.sleep(1000);

在這種情況下,您可以將其寫為 -

finally {
            try {
                if (conn != null && !conn.isClosed())
                    {
                    conn.close();
                    Thread.sleep(1000);
                     }
                }
            catch (SQLException e) {
                e.printStackTrace();}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM