ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PostgreSQL 백업 및 복구 - Migration
    PostgreSQL 2019. 11. 22. 15:00

    이 문서에서는 툴을 사용해 Oracle 데이터를 PostgreSQL로 이관하는 방법에 대해 설명한다.

    먼저, 이와 관련된 툴에 대해 조사를 하고, 이 툴들을 비교한 내용을 작성한다.

    조사된 툴에 대해 상세 설명을 추가하고, 실행한 예제를 작성한다.

     

    툴 조사에서는 RDB에서 PostgreSQL로 이관하는 툴에 대해 알아본다.

    흔히 이관은 2가지로 분류할 수 있으며, data 이관과 schema 이관이 있다.

    data 이관에서 data는 테이블에 있는 row을 의미하며,

    csv 형태로 export/import 기능을 제공하는 툴을 이용해 간단하게 이기종 DB 간에 data 이관이 가능할 것이다.

    schema 이관에서 schema는 role, tablespace, trigger, function, procedure 등을 의미하며,

    이러한 schema 이관은 data 이관처럼 간단하게 되지 않기 때문에 툴이 필요하다.

    RDB에서 PostgreSQL로 이관하는 툴은 기존에 RDB에서 PostgreSQL로 이관하는 툴이 사용될 것이다.

     

    RDB에서 PostgreSQL로 이관하는 툴

    github 검색에 "migrate postgresql"이라고 입력해서 찾는다.

     

    툴명 이관 최신 릴리즈 구현 언어 회사 라이선스 문서 github github star 수
    PGLoader MySQL, SQLite, MSSQL → PostgreSQL 2017년7월7일, v3.4.1 Common Lisp   postgresql licence https://pgloader.readthedocs.io/en/latest/ https://github.com/dimitri/pgloader 1527
    ora2pg Oracle, MySQL → PostgreSQL 2017년9월1일, v18.2 Perl   GPL-3.0 http://ora2pg.darold.net/documentation.html https://github.com/darold/ora2pg 268

    참고:

    Converting from other Databases to PostgreSQL: https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL

    Oracle to Postgres Conversion: https://wiki.postgresql.org/wiki/Oracle_to_Postgres_Conversion

    Converting MySQL to PostgreSQL: https://en.wikibooks.org/wiki/Converting_MySQL_to_PostgreSQL

     

    export/import 기능을 제공하는 툴

    data를 csv 형태의 파일을 만들어 export/import하는 방법은 "RDB에서 PostgreSQL로 이관"에서 사용할 수 있다.

     

    툴명 최신 릴리즈 구현 언어 회사 라이선스 문서 github github star 수
    DBeaver 2018년5월14일, v5.0.5 Java   Apache-2.0 https://dbeaver.io/ https://github.com/dbeaver/dbeaver 5099

    조사된 툴에 대한 기능 비교는 해당 문서를 참고한다.

     

    조사된 툴에 대해 상세 설명은 해당 문서를 참고한다.

     

    예제에서 사용한 툴은 ora2pg와 DBeaver이다.

     

    다음은 ora2pg 툴을 사용한 예제이다.

    윈도우 환경에서 테스트를 진행하였다.


    oracle에서 PostgreSQL로 이관할 때 ora2pg 명령어를 사용해 oracle의 object를 sql 형태로 output 파일을 생성하고, psql 명령어를 통해 접속해서 \i 명령어로 ora2pg에서 출력한 output 파일을 실행한다. 

    과정

    1. perl, ora2pg, oracle 11g, agensgraph master 설치
      1. oracle 11g 다운로드: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
      2. 압축 풀기

        • unzip ./linux.x64_11gR2_database_1of2.zip 

        • unzip ./linux.x64_11gR2_database_2of2.zip 

      3. 설치

        • 글자가 네모상자로 깨져 나올 경우
          • export LANG=C
          • export LC_ALL=C
        • ./runInstaller

    2. perl 설정
    3. ora2pg.conf 설정
      • PG_DSN
      • PG_USER
      • PG_PASS
      • Oracle_DSN
      • Oracle_USER
      • Oracle_PASS
      • ALLOW [테이블명]
      • TYPE 
    4. PostgreSQL 테이블 생성
      • TYPE에 INSERT 지정시 PostgreSQL에 테이블이 생성되어 있어야 한다.
    5. ora2pg 실행
      • output.sql 파일 생성
    6. psql 접속
      • \i output.sql 

     

    다음은 DBeaver 툴을 사용해 데이터를 export하고, PostgreSQL에 import하는 예제이다. 

    다음은 fedora 27 환경에서 실행되었다. 다른 환경을 사용한다면 실행 및 결과가 달라질 수 있다.

    과정

    1. DBeaver 설치
      1. wget 명령어로 다운로드
      2. rpm 명령어로 설치
    2. Neo4j와 PostgreSQL DB에 연결
      • Neo4j: 
        • 메뉴 > Database > New Connection > Neo4j > Next
        • General 탭
          • JDBC URL: jdbc:neo4j:bolt://localhost:7687
          • Host: localhost
          • Port: 7687
          • User Name: neo4j
          • Password: 1530810
          • Edit Driver Settings 버튼 클릭
        • Test Connection... 버튼 클릭하여 연결이 되는지 확인 
        • Next > Next > Finish 버튼
      • PostgreSQL:
        • 메뉴 > Database > Driver Manager > New 버튼
        • Settings
          • Driver Name: PostgreSQL
          • Class Name: org.PostgreSQL.Driver
        • Libraries 탭
          • Add File 버튼을 클릭해 PostgreSQL JDBC driver 선택
        • OK 버튼 
    3. Neo4j로부터 export
      • 메뉴 > SQL Editer 클릭
      • CREATE 질의 수행
      • MATCH 질의 수행
      • Result에 대해 CSV 형태로 export 
    4. PostgreSQL에 import(주의:DBeaver의 import 기능을 사용할 수 없다. import 시 insert into 구문을 사용)
      1. 메뉴 > SQL Editer 클릭
      2. CREATE EXTENSION 질의 수행
      3. CREATE SERVER 질의 수행
      4. CREATE FOREIGN TABLE 질의 수행

    위 과정에 대한 실행 예제는 다음과 같다.

    1. DBeaver 설치

      --다운로드

      $ wget https://dbeaver.io/files/dbeaver-ce-latest-stable.x86_64.rpm

      --2018-05-17 11:28:13--  https://dbeaver.io/files/dbeaver-ce-latest-stable.x86_64.rpm

      Resolving dbeaver.io (dbeaver.io)... 104.236.93.175

      Connecting to dbeaver.io (dbeaver.io)|104.236.93.175|:443... connected.

      HTTP request sent, awaiting response... 302 Found

      Location: https://dbeaver.io/files/5.0.5/dbeaver-ce-5.0.5-stable.x86_64.rpm [following]

      --2018-05-17 11:28:14--  https://dbeaver.io/files/5.0.5/dbeaver-ce-5.0.5-stable.x86_64.rpm

      Reusing existing connection to dbeaver.io:443.

      HTTP request sent, awaiting response... 200 OK

      Length: 54333821 (52M) [application/x-redhat-package-manager]

      Saving to: 'dbeaver-ce-latest-stable.x86_64.rpm'

       

      dbeaver-ce-latest-stable.x86_64.r 100%[============================================================>]  51.82M  3.29MB/s    in 19s    

       

      2018-05-17 11:28:33 (2.68 MB/s) - 'dbeaver-ce-latest-stable.x86_64.rpm' saved [54333821/54333821]

       

      --설치

      $ sudp rpm -ivh dbeaver-ce-latest-stable.x86_64.rpm

    2. Neo4j와 PostgreSQL DB에 연결
      1. Neo4j: 
        • 메뉴 > Database > New Connection > Neo4j > Next
        • General 탭
          • JDBC URL: jdbc:neo4j:bolt://localhost:7687
          • Host: localhost
          • Port: 7687
          • User Name: neo4j
          • Password: 1530810
          • Edit Driver Settings 버튼 클릭
        • Test Connection... 버튼 클릭하여 연결이 되는지 확인 
        • Next > Next > Finish 버튼
      2. :PostgreSQL
        • 메뉴 > Database > Driver Manager > New 버튼
        • Settings
          • Driver Name: PostgreSQL
          • Class Name: org.PostgreSQL.Driver
        • Libraries 탭
          • Add File 버튼을 클릭해 PostgreSQL JDBC driver 선택
        • OK 버튼 
    3. Neo4j로부터 export
      1. 메뉴 > SQL Editer 클릭
      2. 질의 수행 

        match (m:Movie) return id(m) as id, m.title as title, m.tagline as tagline, m.released as released;

         

        match (p:Person) return id(p) as id, p.name as name, p.born as born;

         

        match ()-[r:ACTED_IN]->() return id(r) as id, id(startnode(r)) as startid, id(endnode(r)) as endid, type(r) as type;

        Result 결과 표에서 우클릭 > 결과 내보내기

         

      3.  

    4. PostgreSQL에 import

      CREATE EXTENSION file_fdw;

      CREATE SERVER import_server FOREIGN DATA WRAPPER file_fdw;

       

      --person 테이블 생성

      CREATE FOREIGN TABLE Person (id text, name text, born text)

      SERVER import_server

      OPTIONS( FORMAT 'csv', HEADER 'false', FILENAME '/home/bylee/test/DBeaver/Person.csv', delimiter '|');

       

      --person 테이블 확인

      select * from Person;

       

      --movie 테이블 생성

      CREATE FOREIGN TABLE Movie (id text, title text, tagline text, released text)

      SERVER import_server

      OPTIONS( FORMAT 'csv', HEADER 'false', FILENAME '/home/bylee/test/DBeaver/Movie.csv', delimiter '|');

       

      --movie 테이블 확인

      select * from Movie;

       

      --acted_in 테이블 생성

      CREATE FOREIGN TABLE ACTED_IN (id text, startid text, endid text, type text)

      SERVER import_server

      OPTIONS( FORMAT 'csv', HEADER 'false', FILENAME '/home/bylee/test/DBeaver/ACTED_IN.csv', delimiter '|');

       

      --acted_id 테이블 확인

      select * from ACTED_IN;

     

     

     

    'PostgreSQL' 카테고리의 다른 글

    PostgreSQL 동시성 개요  (0) 2019.11.22
    PostgreSQL Authorization  (0) 2019.11.22
    PostgreSQL 백업 및 복구 - Tool 사용  (0) 2019.11.22
    PostgreSQL 백업 및 복구 - 명령어 사용  (0) 2019.11.22
    대기업 PostgreSQL DBA 면접 후기  (1) 2019.11.22
Designed by Tistory.