(다양한 DB를 쓰다보니, 알게되는 디폴트 isolation level은 저 멀리..., mysql 을 그렇게 써놓고도 또 실수하는 것이 나다.. 나같은 실수를 하는 이를 위해서 정리)


play2의 db 설정의 isolation 레벨은 read_committed로 되어 있다. 


https://www.playframework.com/documentation/2.0.x/SettingsJDBC



oracle이나 ms sql은 default isolation level이 read committed 라 그냥 사용했다

http://www.dba-oracle.com/t_oracle_isolation_level.htm

http://msdn.microsoft.com/en-us/library/ms175909.aspx



사용하고 있는 DB는 mariadb(mysql) 인데, 아래와 같은 에러가 발생했다. 



java.sql.SQLException: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED. 



mysql default isolation level은 repeatable read 라서, 에러가 발생했다.

http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html



mariadb(mysql) play2의 db 설정을 repeatable_read로 수정하니. 정상적으로 작동된다. 




db.default.isolation=REPEATABLE_READ






Posted by '김용환'
,