DB 별 default isolation level (play2의 db 설정의 isolation 레벨 관련)
(다양한 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