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

토깽이·2022년 4월 14일
0

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개의 댓글