I have a JDBC-based application which uses XA datasources and transactions which span multiple connections, connected to an Oracle database. The app sometimes needs to make some queries using join with a table from another (Oracle) server using a shared DbLink. The request works if I don't do it too often, but after 4 or 5 requests in rapid succession I get an error (ORA-02020 - too many links in use). I did some research, and the suggested remedy is to call "ALTER SESSION CLOSE DATABASE LINK ". If I call this request after the query that joins the DbLnk table, I get the error ORA-2080 (link is in use). If I call it before the query, I get ORA-2081 (link closed). Does this call do any good at all? The JDBC connection is closed long before the transaction commit (which is managed either by servlet or by EJB container, depending on the circumstances). I get the impression that when the connection closes, Oracle marks the link as closed, but it takes a minute or two for it to return to the pool of available links. I understand I could enlarge the pool of links (using the open_links property in the config file), but that won't guarantee that I won't have the same problem under a heavier load. Is there something I can do differently to get the dblinks to close more rapidly?
How can I close Oracle DbLinks in JDBC with XA datasources and transactions to avoid ORA-02020 errors?
5.9k Views Asked by aro_biz At
1
There are 1 best solutions below
Related Questions in ORACLE
- Column displays each count
- MAX and GROUP BY - SQL
- Best Practice for adding columns to a Table in Oracle database
- Updating an Oracle row with value from same row
- Retrieving data from Oracle database
- Ibatis execute update sql on oracle, it is not working and no exceptions
- Building an sql execution plan history
- Implementation of Rank and Dense Rank in MySQL
- how to update the date field for this specific condition using oracle query?
- Oracle stored procedure wrapping compile error with inline comments
- Android: How to connect oracle database using Android Java code?
- SQL Conditional Join on Columns
- Multi value wildcard search in ibatis
- Get count of consecutive days meeting a given criteria
- How to update the metadata of a layer in Oracle imported through FME Workbench?
Related Questions in JDBC
- Slick query for one to optional one (zero or one) relationship
- No Suitable Driver Found For My Java Application Code
- How to grant privileges to current user
- Selecting a count from my database using Java and Netbeans
- ActiveMQ offline message transfer on database level
- Not able to update db table from one server to another server in JAVA
- How to use CachedRowSet in Google App Engine?
- Where should ? be placed in a PreparedStatement?
- How to figure out the optimal fetch size for the select query
- Microsoft SQL Server JDBC Driver -SSL issues
- Error in updating records using JDBC
- Retrieving image in a jtable
- Log4jdbc-log4j2 to log OracleTypes.CURSOR
- Cannot initialise HikariCP pooled connection, Failure in loading native library db2jcct2
- How to write an java application that takes a sql query and a number as input and fire it
Related Questions in DBLINK
- Managed ODP.NET Calls to PUBLIC Database Link tables cause TNS errors
- PostgreSQL different database connection slows down
- PostgreSQL 9.5: Hide password from dblink connection
- DBLink Optimized Insertions
- When does a database link connection is established?
- Is it possible to access a DB link through a DB link
- Bulk Binds over simple inserts in oracle 9i
- No records when using SELECT query on DBLINK in Oracle
- mysql and oracle issue using dblink
- Oracle 11g select from three databases using two dblinks
- mysql equivalent to oracle's dblink
- Securing Oracle distributed transactions against network failures
- How can I close Oracle DbLinks in JDBC with XA datasources and transactions to avoid ORA-02020 errors?
- Installing DBLink for Postgres 9
- Recovering jdbc connection after db link failure
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Any distributed SQL, even a select, will open a transaction that must be closed before you can close the database link. You need to either rollback or commit before you call ALTER SESSION CLOSE DATABASE LINK.
But it sounds like you've already got something else handling your transactions. If it's not possible to manually rollback or commit, you should try to increase the number of open links. The OPEN_LINKS parameter is the maximum number of links per session. The number of links you need isn't really dependent on the load, it should be based on the maximum number of distinct remote databases.
Edit:
The situation you describe in your comment shouldn't happen. I don't understand enough about your system to know what's really happening with the transactions. Anyway, if you can't figure out exactly what the system is doing maybe you can replace "alter session close database link" with a procedure like this:
You'll probably need this grant: