DB 엔진 업그레이드시 유의사항
최근 회사에서 오라클 버전 업그레이드 작업이 진행되었다. 기존 11g의 지원기간(EOS)가 2022년 7월까지였고, 정말 하기 싫었지만 업그레이드 작업은 필수가 되었다. 현재 지원되는 오라클 버전중 19c가 가장 EOS기간이 긴 버전이었고 해당 버전으로 업그레이드가 진행되었다.
업그레이드를 진행하면서 난감한 상황과 아찔한 상황들을 많이 겪었는데, 업그레이드를 앞둔 다른 개발자들에게 조금이라도 도움이 되었으면 하는 바램으로 해당 내용들을 공유하고자 한다.
다운타임에 대한 대책
첫번째로 고려할 사항은 다운타임에 대한 대책을 세워야 한다는 점이다. AWS Oracle RDS 메이저버전 업그레이드시에 1시간 가량의 다운타임이 생기는데 이 상황에서 기존 서비스들이 어떤 방법으로 대응해야하는지 계획을 세워야 한다.
내가 회사에서 운영중인 시스템의 경우 실시간 처리시스템이지만, 데이터가 우선 Kinesis로 들어와 각 서비스로 분기처리 되기 떄문에 DB 다운타임 발생시, DB적재 서비스만 잠시 멈춰두었다 작업 이후 실행시켜주면 되었다. 이런식으로 잘 짜여진 아키텍쳐라면 영향도를 최소화하며 작업을 진행할 수 있기때문에 시스템 구축시 아키텍쳐가 얼마나 중요한지 알 수 있었다.
JDK별 JDBC버전 확인
Oracle Database의 Java프로그램 DB커넥션은 oracle에서 제공해주는 ojdbc 라이브러리를 통해 맺어지게 된다. 공식사이트에 가게되면 Oracle 엔진 버전과 Jdk버전에 호환되는 ojdbc 버전이 명시되어있다. 물론 해당 ojdbc 버전을 사용하지 않는다고해서 문제가 꼭 생기지 않을수도 있다. 하지만 우리 회사에서 진행된 오라클 버전 업그레이드 작업에서는 해당 문제가 발생하였다.
기존에는 ojdbc6.jar파일을 사용하였는데, ojdbc라이브러리의 버전 호환성을 생각하지 못하고 각종 테스트를 진행하였다. 모든 기능과 성능에서 문제가 없다고 판단되어 반영을 3일 앞둔 시점에 테스트중이던 배치프로그램에서 문제가 발생였다. 잘 수행되던 배치 프로그램이 갑자기 커넥션을 맺는데 시간이 점점 늘어나더니, 기존에 5초정도면 수행되던 배치가 10분 20분이 걸리기 시작한 것이다. 패닉상황이었지만 결국 ojdbc버전 호환성 문제임을 인식하고 해결을 하였지만, 전 프로그램에 대해서 테스트 재수행과 라이브러리 버전업그레이드로 인한 소스 수정은 불가피했다.
이와같은 상황이 발생하지 않도록 아래의 oracle 버전과 jdk버전에 따른 ojdbc라이브러리 버전을 잘 확인해보기 바란다.
[자료출처] https://www.oracle.com/database/technologies/faq-jdbc.html
응용서비스 SQL전수검사
DB전환작업을 진행하게 되면 전체적인 쿼리에 대한 검사가 필요하다. 기본적이 기능검사는 물론 성능검사가 필수이다. 오라클 버전이 업그레이드 되면서 기존에 지원되던 함수가 실행되지 않을수도 있고, 빠르게 수행되던 쿼리가 느리게 수행될 수도 있다.
우리의 이번 업그레이드 과정에서는 기존에 3분정도 걸리던 배치수행쿼리가 20분 이상 걸리는 현상이 발견되었다. 업그레이드 된 데이터베이스에서 쿼리 작성자가 의도했던 인덱스를 타지 않았던 것이 원인이 되었다. 이 경우 의도한 인덱스를 타도록 힌트를 주어 해결하였다.
데이터베이스 사설IP 변경대응
RDS가 업그레이드 되는 과정은 새로운 RDS를 생성하여 기존 데이터베이스와 바꿔치는 과정이다. 이 과정에서 도메인 주소는 기존과 동일하지만, 사설 IP는 변경이 될 수 밖에없다. 타 시스템 혹은 우리 시스템 내부에서도 사설IP를 통해 운영되는 서비스가 있다면 버전 업그레이드 작업 진행과 동시에 IP변경작업도 진행해주어야 한다.
기존에 타 시스템과 우리시스템의 결합도를 미리 파악하고 사전 공유해주는게 굉장히 중요하다고 할 수있다. 이번에 진행된 우리 시스템에서는 이 부분을 놓쳐 연계솔루션 팀과 빅데이터 파트와의 연결이 끊어져, 해당파트에서 주말동안 복구작업을 진행하였다고 전달받았다. 이러한 불상사가 생기지 않도록 미리 잘 파악해야 한다.
Character set, 인코딩 이슈
해당 이슈는 내가 겪었던 이슈는 아니지만 많은 사람들이 오라클 데이터 전환작업에서 유의할 사항으로 뽑았기에 추가해 보았다. 기존 데이터에서 지원되던 character set이 19c에서는 지원이 안되는 경우가 있다고 한다.
해당 이슈는 꽤나 큰 문제가 될 수 있으니 미리 체크를 하여, 업그레이드 될 데이터베이스에서 지원해주는 캐릭터셋으로 미리 변경하여 영향도를 최대한 감수할 필요가 있다.
마치며
이번 포스팅에서는 회사에서 진행된 오라클 버전업그레이드시 내가 겪었던 다양한 상황들에 대해서 다루어 봤다. 위에서 다룬 이슈들 이외에 많은 유의사항이 있겠지만 아직 능력이 부족해 다 파악하지는 못했던거 같다. 앞으로 연차가 더 쌓이면 위에서 언급한 실수들도 더이상 안하게 되고, 더 깊이 있는 내용까지 신경쓸 수 있겠지 라고 생각한다…
출처:
DB 엔진 업그레이드시 유의사항