AWS에서 PostgreSQL의 개별 행으로 Oracle CLOB 값을 마이그레이션 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS에서 PostgreSQL의 개별 행으로 Oracle CLOB 값을 마이그레이션

작성자: Sai Krishna Namburu(AWS) 및 Sindhusha Paturu(AWS)

환경: PoC 또는 파일럿

소스: Oracle Database

대상: Aurora PostgreSQL-Compatible 또는 Amazon RDS for PostgreSQL

R 유형: 리플랫포밍

워크로드: Oracle, 오픈 소스

기술: 마이그레이션, 스토리지 및 백업, 데이터베이스

AWS 서비스: Amazon Aurora, AWS DMS, Amazon S3, Amazon RDS

요약

이 패턴은 Amazon Aurora PostgreSQL 호환 버전과 PostgreSQL용 Amazon Relational Database Service(Amazon RDS)에서 Oracle 캐릭터 라지 오브젝트(CLOB) 값을 개별 행으로 분할하는 방법을 설명합니다. PostgreSQL은 CLOB 데이터 형식을 지원하지 않습니다.

간격 파티션이 있는 테이블은 소스 Oracle 데이터베이스에서 식별되며 테이블 이름, 파티션 유형, 파티션 간격 및 기타 메타데이터가 캡처되어 대상 데이터베이스로 로드됩니다. AWS Database Migration Service(AWS DMS)를 사용하여 크기가 1GB 미만인 CLOB 데이터를 대상 테이블에 텍스트로 로드하거나, 데이터를 CSV 형식으로 내보내고 Amazon Simple Storage Service(S3) 버킷으로 로드한 다음 대상 PostgreSQL 데이터베이스로 마이그레이션할 수 있습니다.

마이그레이션 후에는 이 패턴과 함께 제공되는 사용자 지정 PostgreSQL 코드를 사용하여 새 줄 문자 식별자(CHR(10))를 기준으로 CLOB 데이터를 개별 행으로 분할하고 대상 테이블을 채울 수 있습니다. 

사전 조건 및 제한 사항

사전 조건 

  • 간격 파티션과 CLOB 데이터 유형의 레코드가 있는 Oracle 데이터베이스 테이블.

  • 소스 테이블과 유사한 테이블 구조(열 및 데이터 유형이 동일)를 보이는 Aurora PostgreSQL-Compatible 또는 Amazon RDS for PostgreSQL 데이터베이스.

제한 사항

  • CLOB 값은 1GB를 초과할 수 없습니다.

  • 대상 테이블의 각 행에는 새 줄 문자 식별자가 있어야 합니다.

제품 버전

  • Oracle 12c

  • Aurora Postgres 11.6

아키텍처

다음 다이어그램은 CLOB 데이터가 포함된 소스 Oracle 테이블과 Aurora PostgreSQL 호환 버전 11.6의 해당 PostgreSQL 테이블을 보여줍니다.

소스 CLOB 테이블 및 이에 상응하는 대상 PostgreSQL 테이블입니다.

도구

서비스

기타 도구

다음 클라이언트 도구를 사용하여 Aurora PostgreSQL-Compatible 및 Amazon RDS for PostgreSQL 데이터베이스에 연결하고, 액세스하고, 관리할 수 있습니다. (이 패턴에서는 이러한 도구가 사용되지 않습니다.)

  • pgAdmin은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

  • DBeaver는 개발자와 데이터베이스 관리자를 위한 오픈 소스 데이터베이스 도구입니다. 이 도구를 사용하여 데이터를 조작, 모니터링, 분석, 관리 및 마이그레이션할 수 있습니다.

모범 사례

Oracle에서 PostgreSQL로 데이터베이스를 마이그레이션하는 모범 사례는 AWS 블로그 게시물 Oracle 데이터베이스를 Amazon RDS PostgreSQL 또는 Amazon Aurora PostgreSQL로 마이그레이션하는 모범 사례: 마이그레이션 프로세스 및 인프라 고려 사항을 참조하세요.

대용량 바이너리 객체를 마이그레이션하기 위한 AWS DMS 작업을 구성하는 모범 사례는 AWS DMS 설명서의 대형 바이너리 객체(LOB) 마이그레이션을 참조하세요.

에픽

작업설명필요한 기술

CLOB 데이터를 분석합니다.

소스 Oracle 데이터베이스에서 CLOB 데이터를 분석하여 대상 테이블에 데이터를 로드하는 방법을 결정할 수 있도록 열 헤더가 포함되어 있는지 확인합니다. 

입력 데이터를 분석하려면 다음 쿼리를 사용합니다.

SELECT * FROM clobdata_or;  

개발자

대상 데이터베이스에 CLOB 데이터를 로드합니다.

CLOB 데이터가 있는 테이블을 Aurora 또는 Amazon RDS 대상 데이터베이스의 중간 (스테이징) 테이블로 마이그레이션합니다. AWS DMS를 사용하거나 Amazon S3 버킷에 데이터를 CSV 파일로 업로드할 수 있습니다.

이 작업에 AWS DMS를 사용하는 방법에 대한 자세한 내용은 AWS DMS 설명서의 Oracle 데이터베이스를 소스로 사용PostgreSQL 데이터베이스를 대상으로 사용을 참조하세요.

이 작업에 Amazon S3를 사용하는 방법에 대한 자세한 내용은 AWS DMS 설명서의 Amazon S3를 대상으로 사용을 참조하세요.

마이그레이션 엔지니어, DBA

대상 PostgreSQL 테이블을 검증합니다.

대상 데이터베이스에서 다음 쿼리를 사용하여 소스 데이터와 비교하여 헤더를 포함한 대상 데이터를 검증합니다.

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;

결과를 소스 데이터베이스의 쿼리 결과(첫 번째 단계)와 비교합니다.

개발자

CLOB 데이터를 별도의 행으로 분할합니다.

추가 정보 섹션에 제공된 사용자 지정 PostgreSQL 코드를 실행하여 CLOB 데이터를 분할하고 대상 PostgreSQL 테이블의 개별 행에 삽입합니다.

개발자
작업설명필요한 기술

대상 테이블의 데이터를 검증합니다.

다음 쿼리를 사용하여 대상 테이블에 삽입된 데이터를 검증합니다.

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;
개발자

관련 리소스

추가 정보

CLOB 데이터 분할을 위한 PostgreSQL 함수

do $$ declare totalstr varchar; str1 varchar; str2 varchar; pos1 integer := 1; pos2 integer ; len integer; begin select rawdata||chr(10) into totalstr from clobdata_pg; len := length(totalstr) ; raise notice 'Total length : %',len; raise notice 'totalstr : %',totalstr; raise notice 'Before while loop'; while pos1 < len loop select position (chr(10) in totalstr) into pos2; raise notice '1st position of new line : %',pos2; str1 := substring (totalstr,pos1,pos2-1); raise notice 'str1 : %',str1; insert into clobdatatarget(data) values (str1); totalstr := substring(totalstr,pos2+1,len); raise notice 'new totalstr :%',totalstr; len := length(totalstr) ; end loop; end $$ LANGUAGE 'plpgsql' ;

입력 및 출력 예제

데이터를 마이그레이션하기 전에 다음 예제를 사용하여 PostgreSQL 코드를 시험해 볼 수 있습니다.

세 개의 입력 라인이 있는 Oracle 데이터베이스를 생성합니다.

CREATE TABLE clobdata_or ( id INTEGER GENERATED ALWAYS AS IDENTITY, rawdata clob ); insert into clobdata_or(rawdata) values (to_clob('test line 1') || chr(10) || to_clob('test line 2') || chr(10) || to_clob('test line 3') || chr(10)); COMMIT; SELECT * FROM clobdata_or;

그러면 다음 출력이 표시됩니다.

id

rawdata

1

테스트 라인 1, 테스트 라인 2, 테스트 라인 3

처리를 위해 PostgreSQL 스테이징 테이블(clobdata_pg)에 소스 데이터를 로드합니다.

SELECT * FROM clobdata_pg; CREATE TEMP TABLE clobdatatarget (id1 SERIAL,data VARCHAR ); <Run the code in the additional information section.> SELECT * FROM clobdatatarget;

그러면 다음 출력이 표시됩니다.

id1

data

1

테스트 라인 1

2

테스트 라인 2

3

테스트 라인 3