plamka
I'm new here

Zugriff für diese Transaktion kann nicht serialisiert werden

Hallo,

ich bekomme vermehrt beim Freigeben von Datensätzen (FS5) die folgende Fehlermeldung.

Jemand eine Idee?

Hört sich nach einem grundsätzlichen Problem an?

Caused by: java.sql.SQLException: ORA-08177: Zugriff für diese Transaktion kann nicht serialisiert werden

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)

    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)

    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)

    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)

    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)

    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)

    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:861)

    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145)

    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1267)

    at oracle.jdbc.driver.OracleStatement.doScrollExecuteCommon(OracleStatement.java:4735)

    at oracle.jdbc.driver.OraclePreparedStatement.doScrollPstmtExecuteUpdate(OraclePreparedStatement.java:10184)

    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3447)

    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3493)

    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)

    at de.espirit.or.impl.TemporalCommandHandler.getLastReleasedEntry(TemporalCommandHandler.java:668)

    at de.espirit.or.impl.TemporalCommandHandler.handle(TemporalCommandHandler.java:266)

    at de.espirit.or.impl.ReleaseCommand.accept(ReleaseCommand.java:42)

    at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:797)

    at de.espirit.or.impl.AbstractSessionHandler.commit(AbstractSessionHandler.java:76)

    at de.espirit.firstspirit.content.ContentManagerImpl$TemporalSessionHandler.commit(ContentManagerImpl.java:1296)

    at de.espirit.firstspirit.content.ContentManagerImpl.commit(ContentManagerImpl.java:688)

    at sun.reflect.GeneratedMethodAccessor6175.invoke(Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke(Method.java:606)

    at de.espirit.firstspirit.io.DefaultServerHandler.callManager(DefaultServerHandler.java:62)

    at de.espirit.firstspirit.server.io.handler.ManagerCall.doCall(ManagerCall.java:95)

    at de.espirit.firstspirit.server.io.handler.CompactCall.handle(CompactCall.java:68)

    at de.espirit.firstspirit.server.io.ManagerCallWorker.run(ManagerCallWorker.java:108)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$RunnableWrapper.call(ExecutionManagerImpl.java:578)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:545)

    at java.util.concurrent.FutureTask.run(FutureTask.java:262)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)

    at java.util.concurrent.FutureTask.run(FutureTask.java:262)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

    at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)

    at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:55)

    at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)

    at de.espirit.firstspirit.server.$Proxy36.commit(Unknown Source)

    at de.espirit.firstspirit.store.access.templatestore.SessionHandlerImpl.commit(SessionHandlerImpl.java:129)

    at de.espirit.or.impl.SessionImpl.doCommit(SessionImpl.java:215)

    at de.espirit.or.impl.AbstractSession.commit(AbstractSession.java:589)

    at de.espirit.firstspirit.client.gui.tree.store.contentstore.GuiContent$4$1.run(GuiContent.java:567)

3 Replies
andre
I'm new here

der fix ist hier in der Layer/jdbc Konfiguration: "jdbc.isolation=READ_COMMITTED" zu setzen. das bezieht sich nur auf oracle.

Set transaction isolation mode to TRANSACTION_READ_COMMITTED and see

ORA-08177 no more. See last paragraph of this posting for how. If you

use no entity beans (ie. direct JDBC from a session bean) and / or run

in a clustered multi-app-server shared-database env, you might want to

look closer though:

ORA-08177 is only possible in TRANSACTION_SERIALIZABLE (WLS default) tx

isolation mode. Are you sure that you need this (strictest) level of

transaction isolation ? Do you genuinely have multiple transactions

updating and reading the same data ? Even so,

TRANSACTION_READ_COMMITTED is often quite sufficient, provides better

concurrency, is almost as strict (no dirty reads of uncommitted data),

and I recall it to be an Oracle default.

This said, TRANSACTION_SERIALIZABLE is necessary in cases where you

really need to prevent chronologically overlapping transactions from

seeing each other's committed modifications or record additions

("non-repeatable reads/phantom inserts" as laid out by ISO SQL92).

But for instance, in a simple case of EJB1.1 entity bean single-server

configuration TRANSACTION_SERIALIZABLE and ORA-08177 would most of the

time be an unnecessary nuisance, because by EJB1.1 definition the

container locks access to entity instances exclusively by one

transaction at a time. Thus inconsistent reads would seem impossible

there, because a single (ie. the same) entity instance would be used for

the immediately consecutive reads in any case. (gurus, make my day.

Rather, please correct me if I'm all wrong, since I do want to

understand this problem correctly

IMHO, WLS 5.1 .. WLS 7.0 documentation could provide a little more

verbose understanding of the RDBMS tx isolation modes in the J2EE

context and mention READ_COMMITTED for Oracle (with its restrictions for

databases shared in a cluster, perhaps), or provide pointers to

3rd-party documentation, because this still seems to be a frequent

headache for developers. A FAQ-candidate perhaps ? I found this link

helpful (you need Oracle technet access):

http://technet.oracle.com/docs/products/oracle8i/doc_library/817_doc/appdev.817/a76939/adg08sql.htm#...

Hallo David,

benötigst du noch weitere Hilfe oder hat Andrés Antwort zur Lösung des Problems geführt? In diesem Fall wäre es super, wenn du seine Antwort als "richtige Antwort" markierst.

Viele Grüße

Michaela

0 Kudos

Wir sind noch dran das Problem nachzustellen und zu beheben. Den Fix haben wir bereits auf unserem Testsystem installiert. Soabld wir das System erfogreich getestet haben, markiere ich die Antwort auch als Richtig.

0 Kudos