Programming/Error

(Hibernate) Unknown table 'SEQUENCES' in information_schema 원인과 해결 방법

Jan92 2023. 1. 10. 00:49

Unknown table 'SEQUENCES' in information_schema

 

Unknown table 'SEQUENCES' in information_schema

INFO 22239 --- [  restartedMain] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:mysql://localhost:3306/testdb?autoReconnect=true'
INFO 22239 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
INFO 22239 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.14.Final
INFO 22239 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
INFO 22239 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
WARN 22239 --- [  restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1109, SQLState: 42S02
ERROR 22239 --- [  restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper   : Unknown table 'SEQUENCES' in information_schema
ERROR 22239 --- [  restartedMain] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.SQLGrammarException: Unable to build DatabaseInformation

 

h2 Database를 사용하다가 MySQL로 변경하면서 발생한 에러로 원인과 해결 방법은 실행 로그를 살펴보면서 찾을 수 있었는데요.

 

로그에서 SQL Error: 1109, SQLStatus: 42S02 라는 에러 코드를 확인할 수 있으며, Unknown table 'SEQUENCES' in information_schema와 같이 information_schema에 있는 'SEQUENCES' 테이블을 찾을 수 없다는 메시지를 확인할 수 있습니다.

 

 

SEQUENCES table

여기서 찾고 있는 information_schema의 'SEQUENCES' 테이블이 어디에 있는 것인지 찾아보면, 바로 h2 Database의 기본 구성 테이블에서 찾을 수 있었는데요.

 

Using dialect: org.hibernate.dialect.H2Dialect

다시 위 실행 로그를 살펴보면, 에러가 발생한 바로 윗 줄에서 실행에 적용되는 데이터베이스 Dialect(방언)으로 H2Dialect가 사용되고 있는 것을 확인할 수 있었습니다.

 

spring.jpa.database=h2

그리고 .properties 파일 설정을 확인해 보니, 다음과 같이 spring.jpa.database 옵션의 값이 h2로 설정되어 있었고, 때문에 스프링부트에서는 자동으로 h2 database에 맞는 dialect를 가져온 것입니다.

 

***

연결을 시도하는 DBMS는 MySQL인데 스프링 부트 실행 시 적용되는 dialect는 H2Dialect 였기 때문에 오류가 발생했던 것입니다.

 

 

 

해결 방법

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

해결 방법으로는 적용되는 dialect를 MySQL에 맞는 것으로 설정해주면 되는데요.

.properties (또는 .yml) 파일에 spring.jpa.database-platform 옵션의 값을 org.hibernate.dialect.MySQL5InnoDBDialect(또는 사용 중인 MySQL 버전에 맞는 dialect)로 설정해주고 동작하면 스프링부트가 정상적으로 동작하는 것을 확인할 수 있었습니다.

 

(Dialect에 대한 내용은 아래 참조자료를 통해 조금 더 살펴보실 수 있습니다.)

 

 

< 참고 자료 >

2022.12.07 - [Programming/Spring Boot] - JPA에서 Native SQL Function 사용하는 방법 (MetadataBuilder)