- PR -

トランザクション分離レベル(SERIALIZABLE)を設定するとORA-01453発生

1
投稿者投稿内容
くえるぼ
会議室デビュー日: 2004/12/15
投稿数: 16
投稿日時: 2005-12-03 19:45
題記に関して、解決すべき方法が見つからず悩んでおります
下記に内容を記載させていただきます。お気づきの点や調査すべき事など
ありましたら、ご教授くださいm(_ _)m。

---以下本文
■プログラム概要
以前DBにレコードを格納するプログラムを構築しました。

JDK:1.3
接続先DB:Oracle9iR2
JDBCドライバはOracle社から提供されているclasses12.zipをCLASS_PATHに含め使用

■エラー発生経緯

先週Oracle社から提供されているclasses12.zipを最新のものに置き換えました
そうしたところ、トランザクション分離レベルを設定する箇所で
ORA-01453エラーが発生するようになってしまいました。

■チェックした内容

1)トランザクション分離レベル設定前の状況調査
Conn.getTransactionIsolation();
DEFAULTである2(READ_COMMITTED)が帰ってきた。

2)SERIALIZABLEの設定が許されるかの調査
DatabaseMetaData metaData=Conn.getMetaData();
boolean support=metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE);

support→Trueが帰ってきた。

3)エラー発生箇所
/* 接続のトランザクション遮断レベル設定 */
Conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
//↑ここで下記ORA-01453エラーが必ず出てしまう。。

■発生するORA-メッセージ(抜粋)

ORA-01453: SET TRANSACTION must be first statement of transaction

java.sql.SQLException: ORA-01453: SET TRANSACTION must be first statement of transaction

at java.lang.Throwable.fillInStackTrace(Native Method)
at java.lang.Throwable.fillInStackTrace(Compiled Code)
at java.lang.Throwable.<init>(Compiled Code)
at java.lang.Exception.<init>(Exception.java:42)
at java.sql.SQLException.<init>(SQLException.java:43)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(Compiled Code)
at oracle.jdbc.ttc7.Oall7.receive(Compiled Code)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(Compiled Code)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(Compiled Code)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(Compiled Code)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:854)
at oracle.jdbc.driver.OracleConnection.setTransactionIsolation(OracleConnection.java:1640)
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2005-12-03 20:07
SET TRANSACTIONをトランザクションの最初の文にする必要があります

そのまんまじゃないの?
くえるぼ
会議室デビュー日: 2004/12/15
投稿数: 16
投稿日時: 2005-12-04 13:12
仰る通りですね。
どうも。。。初心者じみてて
ほんますいません。。。
1

スキルアップ/キャリアアップ(JOB@IT)