aws

AWS RDS 오라클 사용기

mysop 2021. 3. 4. 13:45
반응형

공식 메뉴얼 : docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPumpS3.Step1

 

Amazon RDS의 Oracle로 데이터 가져오기 - Amazon Relational Database Service

덤프 파일이 5TB를 초과하면 병렬 옵션을 사용하여 Oracle Data Pump 내보내기를 실행할 수 있습니다. 이 작업은 개별 파일에 대해 5TB 제한을 초과하지 않도록 데이터를 여러 덤프 파일로 분산합니다.

docs.aws.amazon.com

 

먼소린지 못 알아 먹으면 삽질 당첨

 

1. ORACLE RDS생성하기

2. S3 생성

3. IAM 설정으로 S3와 ORACLE RDS연결하기

4. S3에 DMP파일 올리기 (AWS클라이언트)

4-1. 옵션 생성하고 RDS에 옵션 연결하기

5. S3에 올려진 DMP파일을 ORACLE RDS로 보내기

6. SQLPLUS 또는 SQL DEVELOPER를 사용하여 ORACLE에 올리기

 

AWS 공식 메뉴얼에 다 있는 내용이지만

포인트만 뽑아서 다시 올리겠다

 

1, 2 생성은 AWS콘솔에서 각각 알아서 생성

 

4. S3에 DMP 파일 올리기

 

[root@ip-172-31-44-30 ~]# aws s3 cp 디비파일명.dmp s3://S3이름
upload: ./디비파일명.dmp.dmp to s3://S3이름/디비파일명.dmp.dmp 

이렇게 올리면 S3메뉴에서 파일등록 내역 확인.

 

aws cli로 파일올릴때 (이런젠장 ㅋ)

참고: Amazon S3 콘솔을 사용하는 경우 업로드할 수 있는 최대 파일 크기는 160GB입니다. 160GB보다 큰 파일을 업로드하려면 AWS CLI, AWS SDK 또는 Amazon S3 REST API를 사용합니다.

aws.amazon.com/ko/premiumsupport/knowledge-center/s3-large-file-uploads/

 

Amazon S3에 용량이 큰 파일을 업로드하는 문제 해결

용량이 큰 파일의 경우 Amazon S3에서 업로드 속도를 극대화하고자 파일을 여러 개로 나눌 수 있습니다. Amazon S3 콘솔은 세션 시간 초과로 인해 대규모 업로드 중에 제한 시간을 초과할 수 있습니다

aws.amazon.com

 

4-1 옵션을 RDS에 추가하자

추가 안하고 파일전송 쿼리 날리면 아래 같은 에러 무조건 뜬다

ERROR at line 1:
ORA-00907: missing right parenthesis

다시말해 옵션등록을 하면 프로시저로 rdadmin 업/다운로드가 등록되어

오라클 서버로 파일을 보낼수가 있는데

옵션 등록이 없으니 죽어도 파일 못보낸다

 

등록된 프로시저 목록에 s3로 검색해서 안나오면 옵션등록 안된거

이걸로 삽질하지 말자

 

5. 파일 보내기

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

 

DATA_PUMP_DIR은 기본등록된 디렉토리명

위 명령은 해당 디렉토리에 등록된 파일 리스트 확인용

쿼리는 입맛대로 잘 수정하자

 

SQL> SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(

          p_bucket_name => 's3버켓명',  

          p_s3_prefix => '디비파일명.dmp',

         p_directory_name => 'DATA_PUMP_DIR')

         AS TASK_ID FROM DUAL;

 

공식 메뉴얼에 잘 설명되어 있지만

포인트만 뽑으면

S3생성할때 만든 버켓이름과

디비파일명을 잘 챙겨서 쿼리를 날리면 파일이 업로드 된다.

 

SQL> SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

이 명령 쿼리로 잘 올라갔나 확인해 보자

 

잘못올라가면 로그파일로 오류가 표시되니 확인할것

 

 

6. 데이터 IMPORT하기

공식 메뉴얼에 나온거 그대로 쓰면 된다.

 

DECLARE
  v_hdnl NUMBER;
BEGIN
  v_hdnl := DBMS_DATAPUMP.OPEN( 
    operation => 'IMPORT', 
    job_mode  => 'SCHEMA', 
    job_name  => null);
  DBMS_DATAPUMP.ADD_FILE( 
    handle    => v_hdnl, 
    filename  => '디비파일명.dmp', 
    directory => 'DATA_PUMP_DIR', 
    filetype  => dbms_datapump.ku$_file_type_dump_file);
  DBMS_DATAPUMP.ADD_FILE( 
    handle    => v_hdnl, 
    filename  => '로그파일명.log', 
    directory => 'DATA_PUMP_DIR', 
    filetype  => dbms_datapump.ku$_file_type_log_file);
  DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''스키마명'')');
  DBMS_DATAPUMP.START_JOB(v_hdnl);
END;
/

SQLDEVELOPER등으로 실행해 주면 된다

정상적으로 데이터가 올라가면

 

"PL/SQL 프로시저가 성공적으로 완료되었습니다."

 

메세지 받고 끝

728x90
반응형

'aws' 카테고리의 다른 글

AWS 패키지 설치하기  (0) 2021.04.15
오라클 RDS 파라미터 설정  (0) 2021.03.10