두 가지 스프링 배치 작업이 있습니다. 첫 번째 작업 (작업 A)은 CRM 시스템에서 데이터를 읽고 (웹 서비스를 통해) Oracle 데이터베이스 테이블에 씁니다. 두 번째 작업 (작업 B) - 바이스 (vise) - 동일한 Oracle 데이터베이스 테이블에서 데이터를 읽어 CRM (웹 서비스를 통해)으로 보냅니다. HibernateTemplate을 사용하여 데이터베이스 작업을 수행합니다. Oracle 데이터베이스 저장 및 업데이트 방법은 @Transactional (propagation = Propagation.REQUIRES_NEW)로 표시됩니다. 이러한 배치 작업은 동시에 작동합니다. 어떤 시점에서 두 작업이 서로 차단합니다. - 작업 Oracle 데이터베이스 블록에서 레코드를 읽는 동안 CRM에 데이터를 읽고 보내야하는 작업이 수행 할 수있는 작업은 수동으로 중지하는 것입니다.스프링 배치 작업이 동시에 데이터베이스 잠금에 액세스
나 최대 절전 모드 특히 익숙하지 않다 자원을 기다리는 동안 감지 된 교착 상태 : java.sql.SQLException의 : ORA-00060
Caused by: org.hibernate.exception.LockAcquisitionException: could not execute update query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:87)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:84)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:396)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:259)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1141)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:94)
at org.springframework.orm.hibernate3.HibernateTemplate$39.doInHibernate(HibernateTemplate.java:1150)
at org.springframework.orm.hibernate3.HibernateTemplate$39.doInHibernate(HibernateTemplate.java:1)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
... 60 more
에 의해 발생 : B 나중에 너무 정지 및 -job 예외가 발생합니다 그것은 봄과 함께 작동합니다. 내 이해는 Hibernate가 트랜잭션을 관리한다는 것이지만 분명히 틀렸다. 자물쇠가있는 이유는 어디에있을 수 있습니까? 내 최대 절전 모드 설정은 다음과 같습니다
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.default_batch_fetch_size">0</prop>
<prop key="hibernate.cache.use_structured_entries">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.use_sql_comments">true</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF8</prop>
<prop key="hibernate.mapping.precedence">class</prop>
<prop key="hibernate.transaction.flush_before_completion">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
</props>
</property>
Isolation_level은 무엇입니까? – Cygnusx1
여기에 대한 좋은 링크입니다 : http://www.oratechinfo.co.uk/deadlocks.html#unindex_fk – Cygnusx1
나는 기본 오라클 격리 레버 - 커밋 된 읽기를 사용합니다. – user2382219