클라우드의 파일에 대한 대량 작업

PL/SQL 패키지 DBMS_CLOUD는 대량 파일 업로드, 다운로드, 복사 및 전송 작업에 대한 병렬 실행 지원을 제공하여 사용자 환경을 간소화하고 대량 파일 작업에 최적의 성능을 제공합니다.

DBMS_CLOUD 패키지는 다음 클라우드 서비스로 파일을 로드하고 언로드할 수 있도록 지원합니다.

  • Oracle Cloud Infrastructure Object Storage

  • Azure Blob Storage

  • Amazon S3

  • Google Cloud Storage

자세한 내용은 DBMS_CLOUD Package File URI Formats를 참조하십시오.

대량 파일 작업 정보

DBMS_CLOUD 대량 파일 작업은 동일한 객체 저장소 제공자 내 또는 객체 저장소 제공자 간 클라우드 객체 저장소에서 파일을 복사, 이동 및 삭제하는 기능을 포함하여 Autonomous Database에서 파일 다운로드 및 업로드를 지원합니다.

대량 파일 작업은 병렬화를 지원하며 파일 업로드, 다운로드, 복사 및 이동을 위한 최적의 성능을 제공합니다. 대량 파일 작업에 대한 병렬화는 작업의 우선 순위를 지정하여 처리됩니다. 지원되는 우선 순위는 다음과 같습니다.

  • HIGH: Autonomous Database 인스턴스 CPU 컴퓨트 수를 사용하여 처리된 병렬 파일 수를 결정합니다.
  • MEDIUM: 중간 서비스에 대한 동시성 제한을 사용하여 병렬화를 결정합니다.
  • LOW: 파일을 순차적으로 처리합니다(동시성 없음).

우선 순위가 높은 대량 작업을 실행하면 더 많은 데이터베이스 리소스가 사용되고 병렬화가 작업 속도를 높일 때 작업이 더 빨리 완료됩니다. 우선 순위가 낮을수록 데이터베이스 리소스가 적어지고 병렬 처리가 작업 속도를 높일 때 작업을 완료하는 데 시간이 더 오래 걸립니다. 대량 작업에 데이터가 거의 없는 적은 수의 파일이 포함된 경우 우선 순위를 높게 지정해도 성능이 변경되지 않을 수 있습니다.

대량 파일 작업에 대한 병렬화를 늘리려면 HIGH 우선 순위를 사용하고 Autonomous Database 인스턴스에 지정된 CPU 수를 늘립니다. 대량 파일 작업에 대해 지원되는 최대 동시 파일 작업은 64개로 제한됩니다.

기본 우선 순위는 MEDIUM이며, 대량 파일 작업에서 MEDIUM 소비자 그룹에 정의된 동시성 제한을 사용하도록 지정합니다.

format 매개변수를 사용하여 대량 파일 작업에 priority를 지정하는 방법에 대한 자세한 내용은 DBMS_CLOUD for Bulk File Management을 참조하십시오.

아래에 설명된 DBMS_CLOUD 하위 프로그램에서 credential_name, source_credential_name 또는 target_credential_name는 퍼블릭, 사전 인증 또는 사전 서명된 버킷 URI의 경우 NULL일 수 있습니다.

클라우드 객체 스토리지의 대량 복사 파일

DBMS_CLOUD.BULK_COPY 프로시저를 사용하여 한 객체 저장소 버킷 또는 폴더에서 다른 버킷 또는 폴더로 파일을 대량 복사할 수 있습니다.

  1. 소스 위치에 액세스할 인증서 객체를 생성합니다.

    source_credential_name 매개변수와 함께 지정된 소스 인증서 이름은 기본적으로 대상 위치에 대한 인증서로도 사용됩니다.

    자세한 내용은 CREATE_CREDENTIAL를 참조하십시오.

  2. 소스와 대상이 고유 객체 저장소에 있거나 동일한 클라우드 제공자를 사용하는 계정이 서로 다른 경우 대상 위치에 액세스하여 target_credential_name 매개변수를 포함하는 인증서를 생성합니다.
  3. DBMS_CLOUD.BULK_COPY 프로시저를 실행하여 한 객체 저장소 버킷 또는 폴더에서 클라우드 제공자, 계정 및 버킷에 있을 수 있는 다른 버킷 또는 폴더로 파일을 병렬로 복사합니다. 프로시저를 실행하려면 ADMIN 사용자로 로그인하거나 DBMS_CLOUD에 대한 EXECUTE 권한이 있어야 합니다.
    BEGIN 
    DBMS_CLOUD.BULK_COPY (
          source_credential_name => 'OCI_CRED',
          source_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/o',
          target_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
          format                 => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
    );
    END;
    /

    이 예에서는 한 Oracle Cloud Infrastructure Object Storage 버킷의 파일을 다른 버킷으로 대량 복사합니다.

    자세한 내용은 BULK_COPY Procedure를 참조하십시오.

    자세한 내용은 DBMS_CLOUD Package File Cloud Object Storage URI Formats를 참조하십시오.

예를 들어, DBMS_CLOUD.BULK_COPY를 사용하여 Amazon S3에서 Oracle Cloud Infrastructure Object Storage로 파일을 복사합니다.

BEGIN
DBMS_CLOUD.BULK_COPY(      
      source_credential_name  => 'AWS_CRED',
      source_location_uri     => 'https://bucketname.s3-us-west-2.amazonaws.com/',
      target_credential_name  => 'OCI_CRED',
      target_location_uri     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
      format                  =>  JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
);
END;
/

클라우드 객체 스토리지 간 대량 파일 이동

DBMS_CLOUD.BULK_MOVE 프로시저를 사용하여 한 클라우드 오브젝트 스토리지 위치에서 다른 위치로 파일을 대량 이동할 수 있습니다.

파일을 이동하는 첫 번째 단계는 대상 위치로 복사하는 것입니다. 해당 파일은 성공적으로 복사된 후 소스 위치에서 삭제됩니다.

객체 저장소가 소스 위치와 대상 위치 간의 이름 바꾸기 작업을 허용하는 경우 파일 이름이 복사되지 않고 이름이 바뀝니다.

  1. 소스 위치에 액세스할 인증서 객체를 생성합니다.

    source_credential_name 매개변수와 함께 지정된 소스 인증서 이름은 기본적으로 대상 위치에 대한 인증서로도 사용됩니다.

    자세한 내용은 CREATE_CREDENTIAL를 참조하십시오.

  2. 소스와 대상이 고유 객체 저장소에 있거나 동일한 클라우드 제공자를 사용하는 계정이 서로 다른 경우 대상 위치에 액세스하여 target_credential_name 매개변수를 포함하는 인증서를 생성합니다.
  3. DBMS_CLOUD.BULK_MOVE 프로시저를 실행하여 한 클라우드 오브젝트 스토리지 위치에서 다른 위치로 파일을 대량 이동합니다. 프로시저를 실행하려면 ADMIN 사용자로 로그인하거나 DBMS_CLOUD에 대한 EXECUTE 권한이 있어야 합니다.
    BEGIN 
    DBMS_CLOUD.BULK_MOVE (    
         source_credential_name => 'OCI_CRED',
         source_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/o',
         target_location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
         format                 => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKMOVE')
    );
    END;
    /

    이 예에서는 Oracle Cloud Infrastructure 오브젝트 스토리지 위치 간에 파일을 대량으로 이동합니다.

    자세한 내용은 BULK_MOVE Procedure를 참조하십시오.

    자세한 내용은 DBMS_CLOUD Package File Cloud Object Storage URI Formats를 참조하십시오.

예를 들어, DBMS_CLOUD.BULK_MOVE를 사용하여 Amazon S3에서 Oracle Cloud Infrastructure Object Storage로 파일을 이동합니다.

BEGIN
DBMS_CLOUD.BULK_MOVE(      
      source_credential_name  => 'AWS_CRED',
      source_location_uri     => 'https://bucketname.s3-us-west-2.amazonaws.com/',
      target_credential_name  => 'OCI_CRED',
      target_location_uri     => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname2/o',
      format                  =>  JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
);
END;
/

클라우드 객체 스토리지에서 파일 대량 다운로드

DBMS_CLOUD.BULK_DOWNLOAD 절차를 사용하여 클라우드 객체 저장소 위치의 파일을 Autonomous Database의 디렉토리 객체로 대량 다운로드합니다.

  1. 클라우드 객체 스토리지에 액세스하기 위한 인증서를 생성합니다.

    인증서 이름은 credential_name 매개변수로 지정됩니다.

    자세한 내용은 CREATE_CREDENTIAL를 참조하십시오.

  2. DBMS_CLOUD.BULK_DOWNLOAD 프로시저를 실행하여 Cloud Object Storage에서 Autonomous Database 디렉토리로 파일을 다운로드합니다. 프로시저를 실행하려면 ADMIN 사용자로 로그인하거나 DBMS_CLOUD에 대한 EXECUTE 권한이 있어야 합니다.
    BEGIN
    DBMS_CLOUD.BULK_DOWNLOAD (
         credential_name => 'OCI_CRED',
         location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
         directory_name  => 'BULK_TEST',
         format          => JSON_OBJECT ('logretention' value 7, 'logprefix' value 'BULKOP')
     );
    END;
    /

    이 예에서는 Oracle Cloud Infrastructure 객체 저장소 위치 URI의 파일을 Autonomous Database의 디렉토리 객체로 대량 다운로드합니다.

    주:

    대상 디렉토리 객체에 파일을 쓰려면 디렉토리 객체에 대한 WRITE 권한이 있어야 합니다.

    자세한 내용은 BULK_DOWNLOAD Procedure를 참조하십시오.

    자세한 내용은 DBMS_CLOUD Package File Cloud Object Storage URI Formats를 참조하십시오.

클라우드 객체 스토리지에 파일 대량 업로드

DBMS_CLOUD.BULK_UPLOAD 프로시저를 사용하여 데이터베이스의 디렉토리 객체에서 클라우드 객체 저장소 위치로 파일을 대량 업로드할 수 있습니다.

  1. 클라우드 객체 스토리지에 액세스하기 위한 인증서를 생성합니다.

    인증서 이름은 credential_name 매개변수로 지정됩니다.

    자세한 내용은 CREATE_CREDENTIAL를 참조하십시오.

  2. DBMS_CLOUD.BULK_UPLOAD 프로시저를 실행하여 Autonomous Database 인스턴스의 데이터베이스 디렉토리에서 Cloud Object Storage로 파일을 복사합니다. 프로시저를 실행하려면 ADMIN 사용자로 로그인하거나 DBMS_CLOUD에 대한 EXECUTE 권한이 있어야 합니다.
    BEGIN
    DBMS_CLOUD.BULK_UPLOAD (    
         credential_name => 'OCI_CRED',
         location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
         directory_name  => 'BULK_TEST',
         format          => JSON_OBJECT ('logretention' value 5, 'logprefix' value 'BULKUPLOAD')
     );
    END;
    /

    이 예에서는 directory_name 매개변수를 사용하여 지정된 대로 디렉토리 객체의 파일을 Oracle Cloud Infrastructure 객체 저장소 위치 URI로 대량 업로드합니다.

    주:

    디렉토리 객체의 소스 파일을 읽으려면 디렉토리 객체에 대한 READ 권한이 있어야 합니다.

    자세한 내용은 BULK_UPLOAD Procedure를 참조하십시오.

클라우드 객체 스토리지에서 파일 대량 삭제

DBMS_CLOUD.BULK_DELETE 프로시저를 사용하여 Cloud Object Storage에서 파일을 대량 삭제합니다.

  1. 클라우드 객체 스토리지에 액세스하기 위한 인증서를 생성합니다.

    인증서 이름은 credential_name 매개변수로 지정됩니다.

    credential_name는 퍼블릭 또는 사전 인증된 버킷 URI 또는 사전 서명된 버킷 URI의 경우 NULL일 수 있습니다.

    자세한 내용은 CREATE_CREDENTIAL를 참조하십시오.

  2. DBMS_CLOUD.BULK_DELETE 프로시저를 실행하여 클라우드 객체 저장소에서 파일을 삭제합니다. 프로시저를 실행하려면 ADMIN 사용자로 로그인하거나 DBMS_CLOUD에 대한 EXECUTE 권한이 있어야 합니다.
    BEGIN
    DBMS_CLOUD.BULK_DELETE (    
         credential_name => 'OCI_CRED',
         location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
         format          => JSON_OBJECT ('logretention' value 5, 'logprefix' value 'BULKDEL')
    );
    END;
    /

    이 예에서는 Oracle Cloud Infrastructure 객체 저장소에서 파일을 대량 삭제합니다.

    자세한 내용은 BULK_DELETE Procedure를 참조하십시오.

    자세한 내용은 DBMS_CLOUD Package File Cloud Object Storage URI Formats를 참조하십시오.

대량 파일 로드 모니터 및 문제 해결

모든 DBMS_CLOUD 데이터 로드 작업은 dba_load_operationsuser_load_operations 뷰에 기록됩니다.

다음 뷰를 사용하여 대량 파일 로드를 모니터하고 문제를 해결할 수 있습니다.

  • dba_load_operations: 모든 로드 작업을 보여줍니다.

  • user_load_operations: 스키마의 로드 작업을 보여줍니다.

이 뷰를 질의하여 진행 중인 대량 파일 작업 및 완료된 대량 파일 작업에 대한 정보를 확인합니다. 예를 들어, TYPEWHERE 절 술어가 있는 다음 SELECT 문은 DOWNLOAD 작업을 보여줍니다.


SELECT owner_name, type, status, start_time, update_time, status_table, rows_loaded 
   FROM user_load_operations WHERE type = 'DOWNLOAD';

OWNER_NAME TYPE     STATUS    START_TIME               UPDATE_TIME              STATUS_TABLE ROWS_LOADED 
---------- -------- --------- ------------------------ ------------------------ ------------ ----------- 
"ADMIN"    DOWNLOAD COMPLETED 2022-10-17T20:42:19.498Z 2022-10-17T20:42:21.054Z DWN$2_STATUS           4 
"ADMIN"    DOWNLOAD FAILED    2022-10-17T20:40:54.348Z 2022-10-17T20:40:55.679Z DWN$1_STATUS             

STATUS_TABLE 열에는 대량 다운로드 작업에 대한 자세한 로깅 정보를 보기 위해 질의할 수 있는 테이블의 이름이 표시됩니다. 예:

DESCRIBE DWN$2_STATUS
Name          Null?    Type                        
------------- -------- --------------------------- 
ID            NOT NULL NUMBER                      
NAME                   VARCHAR2(4000)              
BYTES                  NUMBER                      
CHECKSUM               VARCHAR2(128)               
LAST_MODIFIED          TIMESTAMP(6) WITH TIME ZONE 
STATUS                 VARCHAR2(30)                
ERROR_CODE             NUMBER                      
ERROR_MESSAGE          VARCHAR2(4000)              
START_TIME             TIMESTAMP(6) WITH TIME ZONE 
END_TIME               TIMESTAMP(6) WITH TIME ZONE 
SID                    NUMBER                      
SERIAL#                NUMBER                      
ROWS_LOADED            NUMBER                      

SELECT id, name, bytes, status, error_message, start_time, end_time FROM DWN$2_STATUS;
ID NAME       BYTES STATUS    ERROR_MESSAGE START_TIME               END_TIME                 
-- ---------- ----- --------- ------------- ------------------------ ------------------------ 
 1 trees.txt     58 COMPLETED               2022-10-17T20:42:19.998Z 2022-10-17T20:42:20.421Z 
 2 trees1.txt    58 COMPLETED               2022-10-17T20:42:20.425Z 2022-10-17T20:42:20.533Z 
 3 trees2.txt    58 COMPLETED               2022-10-17T20:42:20.535Z 2022-10-17T20:42:20.894Z 
 4 trees3.txt    58 COMPLETED               2022-10-17T20:42:20.896Z 2022-10-17T20:42:21.043Z

상태 테이블에는 각 파일 이름과 대량 작업의 상태가 표시됩니다.

관련 오류 번호 및 메시지는 특정 파일에 대한 작업이 실패할 경우 상태 테이블에 기록됩니다.

완료된 작업의 경우 보고된 START_TIMEEND_TIME 시간을 사용하여 각 작업에 필요한 시간을 계산할 수 있습니다.

파일 작업 STATUS 열은 다음 값 중 하나를 가질 수 있습니다.

파일 상태 설명

COMPLETED

파일 작업이 성공적으로 완료되었습니다.

FAILED

파일 작업을 실패했습니다. 재시도를 두 번 시도할 수 있습니다.

PENDING

파일 작업이 아직 시작되지 않았습니다.

RUNNING

파일 작업이 현재 진행 중입니다.

SKIPPED

파일 작업을 생략했습니다.

두 번의 재시도 후 파일 작업이 실패하면 대량 작업이 실패한 것으로 표시되고 오류가 발생합니다. 예:

ORA-20003: Operation failed, please query table DOWNLOAD$2_STATUS for error details

DBMS_CLOUD 대량 파일 작업을 사용할 때 상태 테이블을 제어하는 format 매개변수 옵션이 있습니다.

  • logretention: 상태 테이블이 보존되는 기간(일)을 결정하는 정수 값을 지정합니다. 기본값은 2일입니다.

  • logprefix: 대량 작업 상태 테이블의 이름 접두어를 결정하는 문자열 값을 지정합니다.

    각 대량 작업에는 logprefix 옵션에 대한 고유한 기본값이 있습니다.

    절차 logprefix의 기본값
    DBMS_CLOUD.BULK_COPY COPYOBJ
    DBMS_CLOUD.BULK_DELETE DELETE
    DBMS_CLOUD.BULK_DOWNLOAD DOWNLOAD
    DBMS_CLOUD.BULK_MOVE MOVE
    DBMS_CLOUD.BULK_UPLOAD UPLOAD

user_load_operations 테이블 지우기에 대한 자세한 내용은 DELETE_ALL_OPERATIONS Procedure를 참조하십시오.