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
프로시저에는 다음과 같은 파라미터가 있습니다.
파라미터 이름 | 데이터 형식 | 기본값 | 필수 | 설명 |
---|---|---|---|---|
|
VARCHAR2 |
– |
필수 |
파일을 업로드할 Amazon S3 버킷의 이름입니다. |
|
VARCHAR2 |
– |
필수 |
파일을 업로드할 Oracle 디렉터리 객체의 이름입니다. 이 디렉터리는 사용자가 생성한 디렉터리 객체 또는 Data Pump 디렉터리(예: 참고지정된 디렉터리의 파일만 업로드할 수 있습니다. 지정된 디렉터리의 하위 디렉터리에서는 파일을 업로드할 수 없습니다. |
|
VARCHAR2 |
– |
필수 |
파일이 업로드되는 Amazon S3 파일 이름 접두사입니다. 빈 접두사는 모든 파일을 지정된 Amazon S3 버킷의 최상위 레벨에 업로드하며, 접두사를 파일 이름에 추가하지 않습니다. 예를 들어 접두사가 |
|
VARCHAR2 |
– |
필수 |
업로드되기 위해 파일 이름과 일치해야 하는 파일 이름 접두사입니다. 빈 접두사는 지정된 디렉터리의 모든 파일을 업로드합니다. |
|
NUMBER |
|
선택 사항 |
GZIP 압축 수준입니다. 사용할 수 있는 값은
|
|
VARCHAR2 |
– |
선택 사항 |
버킷에 대한 액세스 제어 설정입니다. 유일하게 유효한 값은 null과 |
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
이라는 이름의 Amazon S3 버킷에 업로드합니다. Amazon RDS는 파일에 최고 수준의 GZIP 압축을 적용합니다.amzn-s3-demo-bucket
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
이라는 이름의 Amazon S3 버킷에 업로드합니다. 파일은 amzn-s3-demo-bucket
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
이라는 이름의 Amazon S3 버킷에 업로드합니다. 파일은 amzn-s3-demo-bucket
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_s3
는
디렉터리의 모든 파일을 DATA_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'));
를 절차에서 반환된 작업 ID로 대체합니다.task-id
참고
작업은 비동기식으로 실행됩니다.
Amazon S3 버킷의 파일을 Oracle DB 인스턴스로 다운로드
RDS for Oracle 인스턴스로 Amazon S3 버킷의 파일을 다운로드하려면 Amazon RDS 프로시저 rdsadmin.rdsadmin_s3_tasks.download_from_s3
를 사용하십시오.
download_from_s3
프로시저에는 다음과 같은 파라미터가 있습니다.
파라미터 이름 | 데이터 형식 | 기본값 | 필수 | 설명 |
---|---|---|---|---|
|
VARCHAR2 |
– |
필수 |
파일을 다운로드할 수 있는 Amazon S3 버킷의 이름입니다. |
|
VARCHAR2 |
– |
필수 |
파일을 다운로드할 Oracle 디렉터리 객체의 이름입니다. 이 디렉터리는 사용자가 생성한 디렉터리 객체 또는 Data Pump 디렉터리(예: |
|
VARCHAR2 |
FALSE |
선택 사항 |
Amazon S3 버킷에 접두사와 일치하는 객체가 없을 때 작업에서 오류가 발생하는지 여부를 결정하는 플래그입니다. 이 파라미터가 설정되지 않았거나 FALSE(기본값)로 설정된 경우 작업은 객체를 찾을 수 없다는 메시지를 인쇄하지만 예외를 발생시키거나 실패하지는 않습니다. 이 파라미터가 TRUE이면 작업에서 예외가 발생하고 실패합니다. 일치 테스트에 실패할 수 있는 접두사 사양의 예로는 |
|
VARCHAR2 |
– |
필수 |
다운로드되기 위해 파일 이름과 일치해야 하는 파일 이름 접두사입니다. 빈 접두사는 지정된 Amazon S3 버킷에 모든 상위 수준 파일을 다운로드하고, 버킷의 폴더에는 파일을 다운로드하지 않습니다. 이 프로시저는 접두사와 일치하는 첫 레벨 폴더에서만 Amazon S3개 객체를 다운로드합니다. 지정된 접두사와 일치하는 중첩된 디렉터리 구조는 다운로드되지 않습니다. 예를 들어 Amazon S3 버킷에 대신에 |
|
VARCHAR2 |
– |
선택 사항 |
압축 형식입니다. 유효 값은 압축 해제 미적용 시 |
rdsadmin.rdsadmin_s3_tasks.download_from_s3
프로시저의 반환 값이 작업 ID입니다.
다음 예에서는
라는 Amazon S3 버킷의 모든 파일을 amzn-s3-demo-bucket
디렉터리로 다운로드합니다. 파일은 압축되지 않으므로 압축 해제가 적용되지 않습니다.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;
다음 예제에서는
이라는 Amazon S3 버킷에서 접두사가 db
인 모든 파일을 amzn-s3-demo-bucket
디렉터리로 다운로드합니다. 파일이 GZIP으로 압축되므로 압축 해제가 적용됩니다. 파라미터 DATA_PUMP_DIR
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;
다음 예제에서는
이라는 Amazon S3 버킷의 myfolder/
폴더에 있는 모든 파일을 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;
다음 예에서는
이라는 Amazon S3 버킷의 amzn-s3-demo-bucket
파일을 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'));
를 절차에서 반환된 작업 ID로 대체합니다.task-id
참고
작업은 비동기식으로 실행됩니다.
UTL_FILE.FREMOVE
Oracle 프로시저를 사용하여 디렉터리에서 파일을 제거할 수 있습니다. 자세한 내용은 Oracle 설명서의 FREMOVE 프로시저
파일 전송 상태 모니터링
파일 전송 작업은 Amazon RDS 이벤트가 시작되고 완료될 때 이벤트를 게시합니다. 이벤트 메시지에 파일 전송을 위한 작업 ID가 포함됩니다. 이벤트 보기에 대한 자세한 내용은 Amazon RDS 이벤트 보기 단원을 참조하십시오.
진행 중인 작업의 상태를 bdump 파일에서 볼 수 있습니다. 이 bdump 파일은 /rdsdbdata/log/trace
디렉터리에 위치합니다. 각 bdump 파일 이름은 다음 형식으로 되어 있습니다.
dbtask-
task-id
.log
를 모니터링하고자 하는 작업의 ID로 바꾸십시오.task-id
참고
작업은 비동기식으로 실행됩니다.
rdsadmin.rds_file_util.read_text_file
저장 프로시저를 사용하여 bdump 파일의 내용을 볼 수 있습니다. 예를 들어, 다음 쿼리는
bdump 파일의 내용을 반환합니다.dbtask-1234567890123-1234.log
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 nameamzn-s3-demo-bucket
and key sample.dmp. 2023-04-17 18:21:34.189 UTC [INFO ] The task failed.