DBeaver 사용하여 데이터 이관하기

토깽이·2022년 4월 14일

GCP로 배포중인 임시 프로젝트의 서버 비용이 부담 되어 당분간 컴퓨터 한대를 서버로 사용하기로했다.

VM, SQL, Storage를 사용중인데 Storage는 거의 비용이 나가지 않았고 VM과 SQL이 각각 총 비용의 2:8를 차지하며 SQL에서 많은 비용이 발생하였다.(아마 batch 때문에 그런거같다...) 일단 전용 서버 장비가 아니다보니 모든 기능을 이관하기엔 보틀넥 문제같은.. 이슈가 발생할 것 같아서 선택적으로 이관하기로 했다.

비용이 거의 나가지 않는 Storage는 유지하고 싶었다. 그런데 Storage는 VM을 통하지 않으면 외부 접근 권한 설정을 해줘야하는 문제가 생길 수 있었다. 접근 권한 설정에도 추가 공수가 필요할 것 같았기에 결과적으로 SQL 인스턴스만 이관하기로 했다. (하려면 할 수 있겠지만... 시간이 없었다.)

DB를 이관하는 방법을 찾아보았는데, 쿼리문을 작성하는 방법과 데이터베이스 관리 도구를 이용해 옮기는 방법이 있었다. DB 이관 작업이 처음이기도하고, 혹시 모를 실수를 위해 직관적으로 볼 수 있는 편이 나을 것 같아 DBeaver를 이용하여 이관하기로 했다.

검색해보니 방법은 생각보다 간단(할 것으로 예상)하였다.

이관하려는 테이블을 선택한 후 우클릭 > Export (데이터 내보내기)

target DB를 선택한 후 진행하면 된다.

DB 테이블이 무사히 복사가 된 것을 확인한다.

하지만 복사되지 않은 것이 있었다... 각 테이블의 Constraints, Foreign Keys와 DB의 Sequence이다.

  • Constraints는 PK, UK 설정이 포함되어있다.
  • Foreign Keys는 PK를 모두 설정한 후에 설정해줄 수 있다.

이 값들은 테이블 옮기는 것과 같은 방법으로 옮겨지지 않았다... 하나하나 설정해주었다.

아래 사항들을 주의해서 설정하자.

주의

  • PK 값이 테이블 별로 서로 다를 수 있기 때문에 referenced column의 컬럼명을 반드시 확인 후 추가하도록 한다.
  • 참조하려는 테이블의 column명이 같을 경우 auto match 해주지만 다를 경우 직접 선택해주어야한다. (왼쪽의 빈 부분을 누르면 선택할 수 있는 드롭박스가 뜬다.)
  • Sequence는 auto increment (ex JPA의 @generateId) 값의 초기값, 마지막값에 대해 정의한다. 위 방법으로 테이블을 export할 경우 Sequence 값은 초기화 되기 때문에 1부터 시작한다.(초기화 되지 않게 이관할 수 있는 방법을 알고계시다면 알려주세요..) 따라서 last value를 수기로 입력해주어야한다. 이때 이전 테이블 sequence에서 +1이 된 값을 입력해주어야 오류가 나지 않았다.(is_called가 false로 바뀌기 때문인 것 같다. 정확하지 않음)

0개의 댓글