如何连接oracle xe_为什么应始终将连接池与Oracle XE一起使用
如何連接oracle xe
介紹
Oracle Express Edition是Oracle Enterprise Edition的免費版本,其較小的尺寸使其非常方便地測試各種Oracle功能。
根據Oracle文檔 ,Express Edition最多可以使用一個CPU和1 GB RAM,但是實際上還有其他限制并不總是很明顯。
數據庫連接處理異常
以下測試試圖模擬低延遲的事務環境,因此租用連接的時間非常短:
private void simulateLowLatencyTransactions(DataSource dataSource, int waitMillis) throws SQLException {for (int i = 0; i < callCount; i++) {try {try (Connection connection = dataSource.getConnection()) {//Let's assume we are running a//short-lived transactionsleep(waitMillis);}} catch (SQLException e) {LOGGER.error("Exception on iteration " + i, e);}} }此測試可以正常工作,直到將等待時間降低到超過某個閾值為止,在這種情況下,數據庫偶爾會開始引發以下異常:
ERROR [main]: c.v.b.h.j.c.OracleConnectionCallTest - Exception on iteration 111 java.sql.SQLException: Listener refused the connection with the following error: ORA-12516, TNS:listener could not find available handler with matching protocol stackat oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157) ~[ojdbc6-11.2.0.4.jar:11.2.0.4.0]at com.vladmihalcea.book.high_performance_java_persistence.jdbc.connection.OracleConnectionCallTest.simulateLowLatencyTransactions(OracleConnectionCallTest.java:50) [test-classes/:na]at com.vladmihalcea.book.high_performance_java_persistence.jdbc.connection.OracleConnectionCallTest.testConnections(OracleConnectionCallTest.java:40) [test-classes/:na]盡管代碼是單線程的,但是Oracle開始抱怨連接請求偵聽器找不到用于處理傳入請求的進程處理程序。
可以通過將流程和會話參數提高到更高的值來證明這一假設:
alter system set processes=1000 scope=spfile; alter system set sessions=1000 scope=spfile;使用這些新設置,代碼可以正常運行,并且不會發出異常。 盡管增加流程和會話限制可以解決問題,但是此解決方案僅是一種解決方法,它只會提高連接閾值,而無法解決根本原因。
此IBM故障排除說明給出了一種可能的解釋,建議連接關閉事件可能不會立即通知連接偵聽器。 這可能會導致連接偵聽器錯誤地聲明實際的連接數,并假定已經達到最大進程數。
在Oracle 11g企業版上,此問題不可復制。
解決方法
精明的讀者在查看異常堆棧跟蹤時會注意到該問題。 OracleDataSource不提供任何連接池機制 ,這導致大量連接在服務器端和驅動程序這兩個驅動程序上建立了開銷。
使用連接池解決了此問題,因為連接被重用而不是按需建立。 連接池大大減少了連接獲取時間,這也導致了較低的事務等待時間和更好的吞吐量。
翻譯自: https://www.javacodegeeks.com/2015/08/why-you-should-always-use-connection-pooling-with-oracle-xe.html
如何連接oracle xe
總結
以上是生活随笔為你收集整理的如何连接oracle xe_为什么应始终将连接池与Oracle XE一起使用的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 用丹田发声的方法 用丹田发声的方法是什么
 - 下一篇: Spring Batch –用JavaC