If yes, how to do this?
When I am trying to connect to db used by another program I am getting OpenError: IO error: lock ....
Form DB documentation
"A database may only be opened by one process at a time. The leveldb implementation acquires a lock from the operating system to prevent misuse."
Please find more info here
https://github.com/google/leveldb/issues/182
Possible solution
https://github.com/juliangruber/multilevel
Related
We are trying to use the Oracle Debezium connector (1.9b) on top of Kafka.
We tried to use 2 things regarding snapsot_mode: schema_only and initial.
We use "log.mining.strategy":"online_catalog" (should be the default)
We are using a PDB/CDB Oracle instance on Oracle 19c.
My understanding is that;
The connector create a session to the PDB
It add a shared lock to ensure the structure will not change (shared) for a short duration
the DDL structure is retrieved from the PDB
It create a session to the CDB
It retrieve the last LSN event from CDB
if snapshot == initial, it will use a "JDBC query to retrieve the whole data" from PDB
it does NOT seems to release the initiated session (or rather process) to the PDB
it continues to mines new events from CDB
x. ... it seems to work for a couple of minutes
After a couple of minutes, the number of process increase drastically
The Oracle database freeze, due to an excess of process (that you can follow using v$process)
We had a lot of errors message; like:
A. Failed to resolve Oracle database
B. IO Error: Got minus one from a read call
C. ORA-04025: maximum allowed library object lock allocated
D. None of log files contains offset SCN: xxxxxxx
The message in point D. said it tries to use a offset which was part of "an old" archived log.
Every 30min (or before, it we have more activity), the log is switched from a file to another.
And a backup is occuring every 30minutes which will read the logs, backup it and then: delete it .
It seems to me that Debezium tried to reach past archived log whose was deleted by the backup process.
The process of "deleting previous archived logs" seems "correct" to me, isn't it ?
Why Debezium tries to pass through the archived logs ? because when snapshot==schema_only it should only catch the news events, therefore why using the archived one ?
How can we manage it ?
I hope that if this point is resolved in my use-case, the debezium will stop to "loop" creating new process and ultimately will stop blocking the Oracle DB.
If you have any clues or opinions, don't hesitate to share it. Many thanks
We try to use shared lock and none
We try to limite the number of tables in the scope
I cannot ask to stop the backup, in production it's not a good idea and in test, it seems that the backup is only there to clean the archived logs and avoid ending with completely used storage.
I'm opening some Oracle sessions from a java-hibernate app. When I shutdown my java-hibernate application, the oracle sessions remain opened, even if the java process is not seen as running with ps -fea | grep java.
The problem is that this oracle sessions never die, they remain there and the only way to kill them is either manually kill oracle process, restart the oracle instance or restart the unix box where oracle resides.
My java/hibernate app always closes the session with a final statement in the source code, no matter what.
Thanks in advance.
Is difficult to help you without more information, but I thing I can guess. When you open or close sessions using hibernate you probably dont open real oracle sessions. Hibernate may use a pool or control when open or not a real session. So, your problem is not close your java session after each statement but to correctly close and finish hibernate's pool or whatever before kill your app.
Please post more information so i dont have to guess :)
we're having an issue with lock timeouts connecting from a was 6 server to an iseries v6r1 db.
We have the default table and record lock wait times on the relevant tables, however these seem to be overridden by the transaction (http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=/rzakj/rzakjrecords.htm) suggests this is what's happening.
We're using the XA toolbox driver (com.ibm.as400.access.AS400JDBCXADataSource); does anyone know where we can configure the default lock wait time on this driver? I can't find any documentation anywhere.
Thanks in advance.
If you are having problems finding answers trying posting your message to WEB400 at midrange.com. There are several people who use WebSphere App Server on there.
Just out of curiosity, a few days ago we had a discussion about whether there is a way to connect to the DB without using TNS Listener, the connection must be made by any program SQLPlus. Net, ODBC, and so on.
Basically only local connections can avoid the listener (ie you have to be already logged on to the machine that the database instance is running on).
Rather than relying on a listener to fork out a process to act on behalf of the connection, this is done by the local process. Generally it means that the local user needs to be run as 'oracle' as well. Sort of equivalent to a console logic.
It appears there isn't one magic bullet, but there are several ways.
For ODBC, have a look at this SO question.
There's a lot of good info at Connectionstrings.com/oracle as well.
You connect to Oracle via a client, such as sqplplus, or a java program (or tool) utilizing a protocol such as SQL*NET or JDBC (as examples) through the listener. The listener in turn forks a process on the target database (or assigns the connection to an existing process if you use shared servers).
In psql we have PL/Perl to communicate with external program when the new row is inserted into our table. Like that is there any way (procedural language ) to communicate with external program in Oracle . For achieving this things, what should I do.....?
Can any one help me out of this problem.....
Oracle offeres packages to communicate externally to a file, or pipe. Create a trigger to write to one of these when a row is updated. Be careful how you deal with failures in this code so you don't lock up the database or rollback the transaction if you external program is not available. Checkout out the utl packages.
The most suitable answer to your rather vague question depends on the kind of problem you want to solve when you mention communicate with external programs.
Please check documentation about Oracle's Database Change Notification, you will find your answers there.