OracleConnection은 병렬 트랜잭션을 지원하지 않습니다. 해결 방법

오라클 커넥션은 말 그대로 병렬 트랜잭션을 지원하지 않습니다. 해당 오류는 트랜잭션을 병렬로 설정하여 발생합니다. 다음은 병렬 트랜잭션 오류가 발생하는 예제 자료입니다. (OracleConnection does not support parallel transactions)

OracleConnection은 병렬 트랜잭션을 지원하지 않습니다.

오류 발생 경위는 다음과 같습니다.

  1. 커넥션에서 트랜잭션을 시작합니다. => IDbTransaction tx = con.BeginTransaction();
  2. 커맨드에 트랜잭션을 할당합니다. => cmd.Transaction = (OracleTransaction)tx;
  3. 커맨드에 병렬로 트랜잭션을 할당합니다. => cmd.Transaction = con.BeginTransaction();
int i;
using (IDbConnection con = new OracleConnection("User Id=userName;Password=password;Data Source=dataSourceName"))
{
    con.Open();
    using (IDbCommand cmd = con.CreateCommand())
    {
        using (IDbTransaction tx = con.BeginTransaction())
        {
            cmd.Transaction = (OracleTransaction)tx;
            cmd.CommandText = "INSERT INTO table_name (column_name) VALUES (:param)";
            cmd.Parameters.Clear();
            ((OracleParameterCollection)cmd.Parameters).AddWithValue("param", "value");
            i = cmd.ExecuteNonQuery();
            //병렬 트랜잭션
            cmd.Transaction = con.BeginTransaction();
            cmd.Transaction.Commit();
        }
    }
}

해당 오류가 발생하면 커맨드에 트랜잭션 할당이 되는 부분을 점검해 주세요. 커밋 및 롤백 이전에 병렬 할당 부분이 있을 것입니다.

댓글