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 answers
Related Questions in ORACLE
- sqlplus myusername/mypassword@ORCL not working with Oracle on Docker
- Oracle setting up on k8s cluster using helm charts enterprise edition
- Oracle Managed Data Access Client can't work from IIS but work for local debug environment
- If composite indexing created - indexing is called?
- Oracle Http server ISNT-07551
- why here not creating table?
- Data migration from Oracle Database Clob to GCP Bucket
- SQL Alchemy custom type, forcing blob bind parameter
- How to send message to syslog agent in plsql
- Whatever the data available in previous record it should add to the new record
- I have an Oracle SQL query that is giving me a "ORA-00918: column ambiguously defined" error on a line that is a comment line
- 'ORA-12170: TNS:Connect timeout occurredORA-12170: TNS:Connect timeout occurred' ERROR while working on oracle with laravel
- Is their any way i can open parallel query tabs
- VSCode Libraries not showing for New Java Project
- I can't ssh to my instance, Connection refused
Related Questions in JDBC
- Hibernate ClobJdbcType bindings: what are the diferences?
- Update a MySQL row depending on the ID in Google Sheets Apps Script
- How RowSet works java?
- java ee jdbc jstl servlet connection to db
- VSCode Libraries not showing for New Java Project
- Is there any guide online on how to correctly map the sakila database using Java and hibernate?
- Java cancel task running Oracle query through JDBC - connection broken because of SQLSTATE(08006), ErrorCode(17002) IO Error: Socket read interrupted
- Ibm Db2 Jdbc Connection
- How to connect to mysql inside a Kubernetes cluster?
- How to specify multiple databases when connecting to DolphinDB Server with JDBC interface?
- Connecting to MS SQL DB from Java thows error
- Access denied for user 'root'@'localhost' (using password: YES) in eclipse when connecting with jdbc
- databricks / pycharm sql connection
- How to correctly insert a jsonb into postgresql using a Java PreparedStatement
- How to query jsonb column with spring data
Related Questions in DBLINK
- ORA-28500 from dblink oracle UUID
- Migrating data from source data into new relation?
- PL/SQL dblink Timeout Issue During Data Copy from Remote Site
- Check history session run by DB Link oracle
- Count of number of rows using dblink in postgresql
- how do i pass a list of variable values to a SQL statement in a postgres dblink function?
- Select data from 2 Data Bases without DB Link
- No Host information in dba_db_links
- Create dblink connection string from variables in PostgesSQL
- DBLink to connect to remote RDS Postgresql
- POSTGRESQL: How to store dblink SELECT result to an ARRAY?
- create view for all tables from multiple databases
- Create DBLINK from oracle to SYBASE
- How can I force a trigger to connect to a remote database using a specific account?
- How we can select blob data from One server another server using dB link
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?
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)
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: