[TIL] (230823) ⛔ H2 사용중 에러 발생(에러해결)

Noh Jihyeon·2023년 8월 23일
0

TIL

목록 보기
9/49
post-thumbnail

오늘은 Spring 공부하던 중 방금까지도 잘 사용했던 H2가 갑자기 접속도 안되고 데이터 저장도 안되는 에러가 발생했다.
이 에러가 발생한 이유와 해결방법을 찾아보자


🔸문제점


에러코드:

File corrupted while reading record: null. Possible solution: use the recovery tool [90030-200] 90030/90030



H2 에러



IntelliJ 에러


Spring JPA를 공부하면서 방금전까지만 해도 정상적으로 사용하고 있었는데 위와 같은 에러가 발생했다.

🔸시도해본 것들


"H2 데이터베이스 파일 손상"
과 관련된 에러 메시지는 데이터베이스 파일이 손상되어서 데이터베이스 서버가 해당 파일을 
읽거나 처리하는 과정에서 문제가 발생했음을 나타냅니다. 
파일 손상은 다양한 원인에 의해 발생할 수 있습니다.



확인해보니 에러가 발생하는 이유로는 아래의 원인으로 볼 수 있었다.



  1. 시스템 또는 프로세스 비정상 종료: 어떤 이유로든 시스템이나 프로세스가 강제 종료되거나 충돌되면 데이터베이스 파일이 손상될 수 있습니다.

  2. 디스크 고장: 하드 디스크의 물리적인 문제로 데이터가 올바르게 저장되지 않을 수 있습니다.

  3. 저장 장치 문제: 네트워크 드라이브, 클라우드 스토리지 등과 같이 저장 장치 간의 통신 문제로 데이터가 손상될 수 있습니다.

  4. 메모리 문제: 서버나 클라이언트에서 메모리 문제가 발생하면 데이터베이스 파일에 쓰거나 읽는 동안 손상이 발생할 수 있습니다.

  5. H2 버전 호환성 문제: 데이터베이스 파일이 생성된 H2 버전과 사용하려는 H2 버전 간의 호환성 문제로 데이터베이스 파일이 손상될 수 있습니다.

  6. 애플리케이션 또는 데이터베이스 오류: 애플리케이션 또는 데이터베이스 자체의 버그로 인해 데이터베이스 파일 손상이 발생할 수 있습니다.


나는 어떤 경우에 해당 될 지 하나씩 소거해봤다.

일단 마지막으로 H2가 정상작동 한 이후로 프로그램을 종료한 적이 없으니 (1)은 제외한다.
(2)와 (3) 역시 제외하고, (5)는 이미 컴퓨터에 존재하는 H2를 삭제했는데 이전에 MySQL처럼 포트의 중복사용인지 의심스러워져서 한번 확인해봤다.



1. [PID] 확인해보기


8082 포트는 중복할당이 없었다 - (5) 정상




지금으로서는 (4) 혹은 (6)에 해당되지 않을까 싶다.


구글링을 통해 다른사람들은 이 에러를 어떻게 해결했는지 확인해봤다.

2. test.mv.db파일 삭제 후 재생성

사용자 폴더에 들어있는 이 폴더를 삭제 후 동일한 이름으로 다시 만들어서 해결한 기록이 있었다.

나도 똑같이 해당 폴더를 삭제 후 다시 연결해보았다.

=> 정상작동 확인

🔸해결

이 파일을 삭제 후 파일생성으로 이름을 test.mv.db 로 만들었다.
(나는 메모장 생성으로 만듦)


★ 결과


이전처럼 H2에 정상적으로 연결되었다!!! 하지만 연결전 만들어뒀던 DB는 삭제되었다. 데이터베이스를 저장하는 파일을 삭제했으니 당연하다.




그래도 정상적으로 연결된 후에 넣은 데이터는 정상적으로 들어간다.


번외


추가적으로 H2의 주소를 기존과 다르게해서 새로 연결해봤는데 동일한 문제가 발생했고 사용자 폴더를 보니 이번엔 아에 .db 파일이 생성되지 않은것을 발견하고 직접 생성해줬다.


이렇게 생성하고 나니 다시 정상작동을 했다.


🔸알게 된 점



H2에서 URL 마지막 주소에 입력된대로 DB폴더가 생성된 것 같다.
해결방법을 찾아보면서 나처럼 잘 사용하다가 갑자기 에러가 발생하는 사람들이 많았는데 정확한 이유는 확인하지 못했다.
다만, H2를 사용하면서 이전 버전과 새 버전 둘 다 설치한 사람도 사용중 갑자기 발생한 출동로 이와 같은 에러메세지가 뜬 것으로 보아 내부에서 버전충돌이 발생한게 아닌가 싶다.
지금 설치한건 1.4.200버전이고 그 전에 다른 버전을 많이 설치했었는데 제어판으로 삭제했더라도 내가 모르는 어떤 메모리공간을 차지한게 아닐까싶다.

profile
꼭꼭 씹어서 소화시키는 맛있는 코딩

0개의 댓글