![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
I have a question about oracle commit and transactions. Following scenario: Process A performs a single sql-INSERT into a table and commits the transaction. Then he informs process B (ipc) to read the new date. So process B starts "select ..." but does not get the previously inserted row. The timespan between commit and select is very short. (NOTE: two different sessions are used) Questions: 1.) Does commit when returning from call ensure, that all changes are immediatelly visible to all other Sessions/transactions? 2.) Does commit ensure only that all data is stored persistent, but changes are deferred visible to other transactions? 3.) May the "select ..." cause the problem? Other than dml statements a select does not start a transaction. Would "select for update" instead solve the problem? regards markus |
#3
| |||
| |||
|
|
"Markus Breuer" <markus.breuer (AT) gmx (DOT) de> wrote in message news:cie4qd$s30$1 (AT) pentheus (DOT) materna.de... | I have a question about oracle commit and transactions. Following scenario: | | Process A performs a single sql-INSERT into a table and commits the | transaction. Then he informs process B (ipc) to read the new date. So | process B starts "select ..." but does not get the previously inserted | row. The timespan between commit and select is very short. | (NOTE: two different sessions are used) | | Questions: | 1.) Does commit when returning from call ensure, that all changes are | immediatelly visible to all other Sessions/transactions? | 2.) Does commit ensure only that all data is stored persistent, but | changes are deferred visible to other transactions? | 3.) May the "select ..." cause the problem? Other than dml statements a | select does not start a transaction. Would "select for update" instead | solve the problem? | | regards markus the commit completes the transaction before returning control to the issuing application, and the data is immediately available to all other users with privileges is the second process selecting from a view? |
|
do you have VPD policies? |
|
some more details about the processes and SQL involved would help. likely the version would also be helpful |
#4
| |||
| |||
|
|
I have a question about oracle commit and transactions. Following scenario: Process A performs a single sql-INSERT into a table and commits the transaction. Then he informs process B (ipc) to read the new date. |
|
So process B starts "select ..." but does not get the previously inserted row. The timespan between commit and select is very short. (NOTE: two different sessions are used) Questions: 1.) Does commit when returning from call ensure, that all changes are immediatelly visible to all other Sessions/transactions? 2.) Does commit ensure only that all data is stored persistent, but changes are deferred visible to other transactions? 3.) May the "select ..." cause the problem? Other than dml statements a select does not start a transaction. Would "select for update" instead solve the problem? regards markus |
#5
| |||
| |||
|
|
Mark C. Stock wrote: "Markus Breuer" <markus.breuer (AT) gmx (DOT) de> wrote in message news:cie4qd$s30$1 (AT) pentheus (DOT) materna.de... | I have a question about oracle commit and transactions. Following scenario: | | Process A performs a single sql-INSERT into a table and commits the | transaction. Then he informs process B (ipc) to read the new date. So | process B starts "select ..." but does not get the previously inserted | row. The timespan between commit and select is very short. | (NOTE: two different sessions are used) | | Questions: | 1.) Does commit when returning from call ensure, that all changes are | immediatelly visible to all other Sessions/transactions? | 2.) Does commit ensure only that all data is stored persistent, but | changes are deferred visible to other transactions? | 3.) May the "select ..." cause the problem? Other than dml statements a | select does not start a transaction. Would "select for update" instead | solve the problem? | | regards markus the commit completes the transaction before returning control to the issuing application, and the data is immediately available to all other users with privileges is the second process selecting from a view? Is there any difference between selecting from a table and form a view? Our processes directly access the table. do you have VPD policies? I dont know what VPD means... some more details about the processes and SQL involved would help. likely the version would also be helpful We use a Oracle in the Versions 8.1.7.4 and 9.2.0.5. Both show the same problem. The Application is written in c++ using the oracle oci. The described processes A and B are threads within the same process. But that should not make a difference. The main Question is: Does oracle ensure that a returned commit makes changes immediatelly available to all other sessions. And: could there be an restriction when using simple select statements? => select does not start its own transaction. regards markus |
#6
| |||
| |||
|
|
Markus Breuer <markus.breuer (AT) gmx (DOT) de> wrote in news:cie4qd$s30$1 (AT) pentheus (DOT) materna.de: I have a question about oracle commit and transactions. Following scenario: Process A performs a single sql-INSERT into a table and commits the transaction. Then he informs process B (ipc) to read the new date. As strange as this may sound PRIOR to issuing the SELECT, Process B needs to issue a COMMIT. |
#7
| |||
| |||
|
|
I have a question about oracle commit and transactions. Following scenario: Process A performs a single sql-INSERT into a table and commits the transaction. Then he informs process B (ipc) to read the new date. So process B starts "select ..." but does not get the previously inserted row. The timespan between commit and select is very short. (NOTE: two different sessions are used) Questions: 1.) Does commit when returning from call ensure, that all changes are immediatelly visible to all other Sessions/transactions? 2.) Does commit ensure only that all data is stored persistent, but changes are deferred visible to other transactions? 3.) May the "select ..." cause the problem? Other than dml statements a select does not start a transaction. Would "select for update" instead solve the problem? regards markus |
#8
| |||
| |||
|
|
Threads within the same process should not make a difference in and of itself -- but does the 'B' thread have any SET TRANSACTION READ ONLY statements? That would set transaction-level read consistency so that you would not see the newly committed data. |
#9
| |||
| |||
|
|
That does sound strange... the only reason for this would be if B is in a read-only transaction... (see my other post). |
#10
| |||
| |||
|
|
"Ana C. Dent" <anacedent (AT) hotmail (DOT) com> wrote in message news:Xns956745E1C17DDSunnySD (AT) 68 (DOT) 6.19.6... | Markus Breuer <markus.breuer (AT) gmx (DOT) de> wrote in | news:cie4qd$s30$1 (AT) pentheus (DOT) materna.de: | | > I have a question about oracle commit and transactions. Following | > scenario: | | > Process A performs a single sql-INSERT into a table and commits the | > transaction. Then he informs process B (ipc) to read the new date. | | As strange as this may sound PRIOR to issuing the SELECT, | Process B needs to issue a COMMIT. | That does sound strange... the only reason for this would be if B is in a read-only transaction... (see my other post). Issuing a COMMIT to see other user's changes is never a requirement. |
|
If B is in a read-only transaction, then a COMMIT or ROLLBACK should only be entered when the read-only transaction is completed (per the business functionality specification), not as a work around to a scenario that is not yet fully analyzed. ++ mcs |
![]() |
| Thread Tools | |
| Display Modes | |
| |