Amazon RDS for Oracle와 Amazon S3 버킷 사이의 파일 전송 - Amazon Relational Database Service

Amazon RDS for Oracle와 Amazon S3 버킷 사이의 파일 전송

RDS for Oracle DB 인스턴스와 Amazon S3 버킷 간에 파일을 전송하려면 Amazon RDS 패키지 rdsadmin_s3_tasks를 사용하면 됩니다. 파일을 업로드할 때 GZIP으로 파일을 압축하고 다운로드 시 압축을 풀 수 있습니다.

파일 전송 요구 사항 및 제한 사항

DB 인스턴스와 Amazon S3 버킷 사이에서 파일을 전송하기 전에 다음에 유의하세요.

  • rdsadmin_s3_tasks 패키지는 단일 디렉터리에서 파일을 전송합니다. 전송에 하위 디렉터리를 포함시킬 수 없습니다.

  • Amazon S3 버킷의 최대 객체 크기는 5TB입니다.

  • rdsadmin_s3_tasks에서 생성한 작업은 비동기적으로 실행됩니다.

  • Data Pump 디렉터리(예: DATA_PUMP_DIR 또는 사용자 생성 디렉터리)에서 파일을 업로드할 수 있습니다. Oracle 백그라운드 프로세스에서 사용하는 디렉터리(예: adump, bdump, 또는 trace 디렉터리)에서는 파일을 업로드할 수 없습니다.

  • 다운로드 제한은 download_from_s3의 프로시저 직접 호출당 파일 2,000개입니다. Amazon S3에서 2,000개 이상의 파일을 다운로드해야 하는 경우 프로시저 호출당 2,000개 이하의 파일로 다운로드를 개별 작업으로 분할하세요.

  • 다운로드 폴더에 파일이 있고 같은 이름의 파일을 다운로드하려고 하면 download_from_s3를 통해 다운로드를 건너뜁니다. 다운로드 디렉터리에서 파일을 제거하려면 PL/SQL 프로시저 UTL_FILE.FREMOVE를 사용하세요.

RDS for Oracle DB 인스턴스에서 Amazon S3 버킷으로 파일 업로드

DB 인스턴스에서 Amazon S3 버킷으로 파일을 업로드하려면 절차 rdsadmin.rdsadmin_s3_tasks.upload_to_s3를 참조하면 됩니다. 예를 들어 Oracle Recovery Manager(RMAN) 백업 파일 또는 Oracle Data Pump 파일을 업로드할 수 있습니다. 객체 작업에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서를 참조하세요. RMAN 백업 수행에 대한 자세한 내용은 Oracle DB 인스턴스에 대한 공통 RMAN 작업 수행 단원을 참조하세요.

rdsadmin.rdsadmin_s3_tasks.upload_to_s3 프로시저에는 다음과 같은 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

p_bucket_name

VARCHAR2

필수

파일을 업로드할 Amazon S3 버킷의 이름입니다.

p_directory_name

VARCHAR2

필수

파일을 업로드할 Oracle 디렉터리 객체의 이름입니다. 이 디렉터리는 사용자가 생성한 디렉터리 객체 또는 Data Pump 디렉터리(예: DATA_PUMP_DIR)일 수 있습니다. 백그라운드 프로세스에서 사용하는 디렉터리(예: adump, bdump, 또는 trace 디렉터리)에서는 파일을 업로드할 수 없습니다.

참고

지정된 디렉터리의 파일만 업로드할 수 있습니다. 지정된 디렉터리의 하위 디렉터리에서는 파일을 업로드할 수 없습니다.

p_s3_prefix

VARCHAR2

필수

파일이 업로드되는 Amazon S3 파일 이름 접두사입니다. 빈 접두사는 모든 파일을 지정된 Amazon S3 버킷의 최상위 레벨에 업로드하며, 접두사를 파일 이름에 추가하지 않습니다.

예를 들어 접두사가 folder_1/oradb이면 파일이 folder_1에 업로드됩니다. 이 경우 oradb 접두사가 각 파일에 추가됩니다.

p_prefix

VARCHAR2

필수

업로드되기 위해 파일 이름과 일치해야 하는 파일 이름 접두사입니다. 빈 접두사는 지정된 디렉터리의 모든 파일을 업로드합니다.

p_compression_level

NUMBER

0

선택 사항

GZIP 압축 수준입니다. 사용할 수 있는 값은 0~9입니다.

  • 0 - 압축 없음

  • 1 - 가장 빠른 압축

  • 9 - 최고 수준의 압축

p_bucket_owner_full_control

VARCHAR2

선택 사항

버킷에 대한 액세스 제어 설정입니다. 유일하게 유효한 값은 null과 FULL_CONTROL입니다. 이 설정은 한 계정(계정 A)의 파일을 다른 계정(계정 B)에서 소유한 버킷으로 업로드하고 계정 B가 해당 파일을 완전히 제어해야 하는 경우에만 필요합니다.

rdsadmin.rdsadmin_s3_tasks.upload_to_s3 프로시저의 반환 값이 작업 ID입니다.

다음 예제에서는 DATA_PUMP_DIR 디렉터리에 있는 모든 파일을 amzn-s3-demo-bucket이라는 이름의 Amazon S3 버킷에 업로드합니다. 파일이 압축되지 않습니다.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

다음 예제에서는 db 디렉터리에 있는 DATA_PUMP_DIR 접두사의 모든 파일을 amzn-s3-demo-bucket이라는 이름의 Amazon S3 버킷에 업로드합니다. Amazon RDS는 파일에 최고 수준의 GZIP 압축을 적용합니다.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => 'db', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR', p_compression_level => 9) AS TASK_ID FROM DUAL;

다음 예제에서는 DATA_PUMP_DIR 디렉터리에 있는 모든 파일을 amzn-s3-demo-bucket이라는 이름의 Amazon S3 버킷에 업로드합니다. 파일은 dbfiles 폴더에 업로드됩니다. 이 예제에서 GZIP 압축 수준은 가장 빠른 압축 수준인 1입니다.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => '', p_s3_prefix => 'dbfiles/', p_directory_name => 'DATA_PUMP_DIR', p_compression_level => 1) AS TASK_ID FROM DUAL;

다음 예제에서는 DATA_PUMP_DIR 디렉터리에 있는 모든 파일을 amzn-s3-demo-bucket이라는 이름의 Amazon S3 버킷에 업로드합니다. 파일은 dbfiles 폴더에 업로드되고 ora는 각 파일 이름의 시작 부분에 추가됩니다. 압축이 적용되지 않습니다.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_prefix => '', p_s3_prefix => 'dbfiles/ora', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

다음 예제에서는 명령이 계정 A에서 실행되지만, 계정 B에서 버킷 콘텐츠를 완전히 제어해야 한다고 가정합니다. 명령 rdsadmin_s3_tasks.upload_to_s3DATA_PUMP_DIR 디렉터리의 모든 파일을 s3bucketOwnedByAccountB라는 이름의 버킷으로 전송합니다. 액세스 제어가 FULL_CONTROL로 설정되어 계정 B가 버킷의 파일에 액세스할 수 있습니다. GZIP 압축 수준은 속도 및 파일 크기가 균형을 이루는 6입니다.

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 's3bucketOwnedByAccountB', p_prefix => '', p_s3_prefix => '', p_directory_name => 'DATA_PUMP_DIR', p_bucket_owner_full_control => 'FULL_CONTROL', p_compression_level => 6) AS TASK_ID FROM DUAL;

각 예에서, SELECT 문은 VARCHAR2 데이터 형식으로 작업 ID를 반환합니다.

작업의 출력 파일을 표시하여 결과를 볼 수 있습니다.

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));

task-id를 절차에서 반환된 작업 ID로 대체합니다.

참고

작업은 비동기식으로 실행됩니다.

Amazon S3 버킷의 파일을 Oracle DB 인스턴스로 다운로드

RDS for Oracle 인스턴스로 Amazon S3 버킷의 파일을 다운로드하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_s3_tasks.download_from_s3를 사용하십시오.

download_from_s3 프로시저에는 다음과 같은 파라미터가 있습니다.

파라미터 이름 데이터 형식 기본값 필수 설명

p_bucket_name

VARCHAR2

필수

파일을 다운로드할 수 있는 Amazon S3 버킷의 이름입니다.

p_directory_name

VARCHAR2

필수

파일을 다운로드할 Oracle 디렉터리 객체의 이름입니다. 이 디렉터리는 사용자가 생성한 디렉터리 객체 또는 Data Pump 디렉터리(예: DATA_PUMP_DIR)일 수 있습니다.

p_error_on_zero_downloads

VARCHAR2

FALSE

선택 사항

Amazon S3 버킷에 접두사와 일치하는 객체가 없을 때 작업에서 오류가 발생하는지 여부를 결정하는 플래그입니다. 이 파라미터가 설정되지 않았거나 FALSE(기본값)로 설정된 경우 작업은 객체를 찾을 수 없다는 메시지를 인쇄하지만 예외를 발생시키거나 실패하지는 않습니다. 이 파라미터가 TRUE이면 작업에서 예외가 발생하고 실패합니다.

일치 테스트에 실패할 수 있는 접두사 사양의 예로는 ' import/test9.log'와 같은 접두사의 공백과 test9.logtest9.LOG와 같은 대/소문자 불일치가 있습니다.

p_s3_prefix

VARCHAR2

필수

다운로드되기 위해 파일 이름과 일치해야 하는 파일 이름 접두사입니다. 빈 접두사는 지정된 Amazon S3 버킷에 모든 상위 수준 파일을 다운로드하고, 버킷의 폴더에는 파일을 다운로드하지 않습니다.

이 프로시저는 접두사와 일치하는 첫 레벨 폴더에서만 Amazon S3개 객체를 다운로드합니다. 지정된 접두사와 일치하는 중첩된 디렉터리 구조는 다운로드되지 않습니다.

예를 들어 Amazon S3 버킷에 folder_1/folder_2/folder_3 폴더 구조가 있다고 가정합니다. 'folder_1/folder_2/' 접두사를 지정합니다. 이 경우 folder_2의 파일만 다운로드되고 folder_1 또는 folder_3의 파일은 다운로드되지 않습니다.

대신에 'folder_1/folder_2' 접두사를 지정하는 경우에는 folder_1 접두사와 일치하는 'folder_2'의 모든 파일들이 다운로드되고, folder_2의 파일들은 다운로드되지 않습니다.

p_decompression_format

VARCHAR2

선택 사항

압축 형식입니다. 유효 값은 압축 해제 미적용 시 NONE, 압축 해제 적용 시 GZIP입니다.

rdsadmin.rdsadmin_s3_tasks.download_from_s3 프로시저의 반환 값이 작업 ID입니다.

다음 예에서는 amzn-s3-demo-bucket라는 Amazon S3 버킷의 모든 파일을 DATA_PUMP_DIR 디렉터리로 다운로드합니다. 파일은 압축되지 않으므로 압축 해제가 적용되지 않습니다.

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

다음 예제에서는 db이라는 Amazon S3 버킷에서 접두사가 amzn-s3-demo-bucket인 모든 파일을 DATA_PUMP_DIR 디렉터리로 다운로드합니다. 파일이 GZIP으로 압축되므로 압축 해제가 적용됩니다. 파라미터 p_error_on_zero_downloads는 접두사 오류 검사를 켜므로 접두사가 버킷의 파일과 일치하지 않으면 작업이 예외를 발생시키고 실패합니다.

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_s3_prefix => 'db', p_directory_name => 'DATA_PUMP_DIR', p_decompression_format => 'GZIP', p_error_on_zero_downloads => 'TRUE') AS TASK_ID FROM DUAL;

다음 예제에서는 myfolder/이라는 Amazon S3 버킷의 amzn-s3-demo-bucket 폴더에 있는 모든 파일을 DATA_PUMP_DIR 디렉터리로 다운로드합니다. p_s3_prefix 파라미터를 사용하여 Amazon S3 폴더를 지정합니다. 업로드된 파일은 GZIP으로 압축되지만, 다운로드 중에는 압축이 풀리지 않습니다.

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_s3_prefix => 'myfolder/', p_directory_name => 'DATA_PUMP_DIR', p_decompression_format => 'NONE') AS TASK_ID FROM DUAL;

다음 예에서는 amzn-s3-demo-bucket이라는 Amazon S3 버킷의 mydumpfile.dmp 파일을 DATA_PUMP_DIR 디렉터리로 다운로드합니다. 압축 해제가 적용되지 않습니다.

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-bucket', p_s3_prefix => 'mydumpfile.dmp', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

각 예에서, SELECT 문은 VARCHAR2 데이터 형식으로 작업 ID를 반환합니다.

작업의 출력 파일을 표시하여 결과를 볼 수 있습니다.

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));

task-id를 절차에서 반환된 작업 ID로 대체합니다.

참고

작업은 비동기식으로 실행됩니다.

UTL_FILE.FREMOVE Oracle 프로시저를 사용하여 디렉터리에서 파일을 제거할 수 있습니다. 자세한 내용은 Oracle 설명서의 FREMOVE 프로시저를 참조하십시오.

파일 전송 상태 모니터링

파일 전송 작업은 Amazon RDS 이벤트가 시작되고 완료될 때 이벤트를 게시합니다. 이벤트 메시지에 파일 전송을 위한 작업 ID가 포함됩니다. 이벤트 보기에 대한 자세한 내용은 Amazon RDS 이벤트 보기 단원을 참조하십시오.

진행 중인 작업의 상태를 bdump 파일에서 볼 수 있습니다. 이 bdump 파일은 /rdsdbdata/log/trace 디렉터리에 위치합니다. 각 bdump 파일 이름은 다음 형식으로 되어 있습니다.

dbtask-task-id.log

task-id를 모니터링하고자 하는 작업의 ID로 바꾸십시오.

참고

작업은 비동기식으로 실행됩니다.

rdsadmin.rds_file_util.read_text_file 저장 프로시저를 사용하여 bdump 파일의 내용을 볼 수 있습니다. 예를 들어, 다음 쿼리는 dbtask-1234567890123-1234.log bdump 파일의 내용을 반환합니다.

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1234567890123-1234.log'));

다음 샘플에서는 전송 실패에 대한 로그 파일을 보여줍니다.

TASK_ID -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1234567890123-1234 TEXT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2023-04-17 18:21:33.993 UTC [INFO ] File #1: Uploading the file /rdsdbdata/datapump/A123B4CDEF567890G1234567890H1234/sample.dmp to Amazon S3 with bucket name amzn-s3-demo-bucket and key sample.dmp. 2023-04-17 18:21:34.188 UTC [ERROR] RDS doesn't have permission to write to Amazon S3 bucket name amzn-s3-demo-bucket and key sample.dmp. 2023-04-17 18:21:34.189 UTC [INFO ] The task failed.