[ADB] Autonomous DB / Data Pump - Export(expdp) to Object Storage

Tech.Note·2023년 1월 5일
0

Database Platform

목록 보기
2/2

오라클 데이터베이스에서 Data Pump를 이용해서 마이그레이션이나 백업 같은 데이터 관리를 많이 진행하셨을텐데요.

Data Pump는 10g부터 활용되는 Data Pump는 많은 DBA분들이 활용하는 범용적인 툴입니다.

다만 OCI의 Autonomous DB인 경우 Serverless 서비스이기 때문에 기존의 서버환경에서처럼 파일시스템 마운트를 사용하지 않습니다.

따라서 Object Storage를 활용하여 Data Pump를 진행하는 내용에 대해 알아보고자 합니다.

Export 방법은 크게 두 가지입니다.

첫째, ADB에서 제공해주는 Directiory로 export를 먼저 수행하고 생성된 dump file을 원하는 Object Storage로 이동시키는 방법

둘째, ADB에서 사전 생성한 Object Storage로 바로 Export를 수행하는 방법, 이 경우 expdp 의 버전에 따라 CREDENTIAL parameter를 활용가능. (19.6이상)

또한 사용환경에 따라 오라클 클라이언트를 통해 expdp program을 수행(전통적인 방법)도 가능하고, DB에서 datapump api를 수행해서 직접 수행도 가능합니다.

첫 번째 방법인 경우 생성된 dump file을 다시 object storage로 이관해야하는 추가작업이 필요하므로 두번째 방법으로 테스트를 해보겠습니다.

1. 샘플데이터 및 오브젝트 스토리지 버킷 준비

DB에 접속하여 간단하게 테스트용도로 테이블 하나를 생성해줍니다.

create user test01 IDENTIFIED by "APIG4dfW12##" ;
alter user test01 quota unlimited on data ;
grant create session to test01;
grant dwrole to test01 ;

create table test01.t1 as select * from dba_objects;

OCI 콘솔에서 테스트용 버킷을 하나 생성해줍니다. 표준으로 바로 생성했습니다.

버킷 이름은 체크를 해둡니다.

2. Cloud Object Storage Credential 생성

Object Storage 접근을 위해 사전에 DB에 접속해서 Credential 을 생성해줍니다.

DBMS_CLOUD.CREATE_CREDENTIAL을 이용하여 생성하면 되고, 샘플코드는 아래와 같습니다.

BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DEF_CRED_NAME',
username => 'user1@example.com',
password => 'password'
);
END;
/

여기서 Username은 OCI의 계정이름이고, Password는 계정의 Auth Token입니다.

아래 메뉴에서 확인합니다. ( Identity --> Users --> User Details )

User 상세 메뉴로 이동하여 좌측에 있는 Auth Tokens 메뉴에서 Token 을 생성합니다.

한번 생성한 토큰은 추후에 다시 확인이 불가능하기 때문에 기록을 별도로 해두시거나 재생성을 해서 사용합니다.

3. 오라클 클라이언트에서 Data Pump 수행

오라클 클라이언트에서 아래 명령어를 수행하여 export를 수행합니다.기본적인 명령어 구조는 기존 환경에서 수행하던 것과 큰 차이가 없습니다.

다만, credential parameter가 추가되고(19.6이상)되고 dumpfile parameter에 object storage의 URL을 명시해줘야합니다.

Database 19.6이하 버전에서는 default_credential 을 지정해줘야합니다. 아래 URL 참고하시기 바랍니다.

https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/export-data-object-store-dp.html#GUID-9D1768A7-9FDE-448D-9925-C85FD48383E6

<expdp 명령어 예시>
expdp admin/password@db2022adb_high \
schemas=test01
filesize=5GB \
credential=def_cred_name \
dumpfile=https://objectstorage.us-ashburn-1.oraclecloud.com/n/namespace-string/b/bucketname/o/exp%U.dmp \
parallel=16 \
encryption_pwd_prompt=yes \
logfile=export.log \
directory=data_pump_dir

4. 로그 및 덤프파일 적재 확인

일부 정보는 **** 처리하였습니다.

[oracle@instance-20230103-1253-dev ~]$ expdp admin/****@adw01high schemas=test01 filesize=5GB credential=PUMP_CRED_NAME dumpfile=https://objectstorage.ap-seoul-1.oraclecloud.com/n/********/b/bucket-datapump/o/exp_schema_test01%U.dmp parallel=2 encryption_pwd_prompt=yes logfile=export_test01.log directory=data_pump_dir
Export: Release 21.0.0.0.0 - Production on Wed Jan 4 06:34:24 2023
Version 21.6.0.0.0

<object list 조회>
[oracle@instance-20230103-1253-dev ~]$ oci os object list --bucket-name bucket-datapump
{
"data": [
{
"archival-state": null,
"etag": "5c417e29-37a5-44d9-a759-3d9811d6954b",
"md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
"name": "exp_schema_test01_01.dmp",
"size": 0,
"storage-tier": "Standard",
"time-created": "2023-01-04T06:34:31.064000+00:00",
"time-modified": "2023-01-04T06:34:31.064000+00:00"
},
{
"archival-state": null,
"etag": "1a964d27-4407-4fb7-8576-46729dc7be34",
"md5": "1DrHLrNKCG7v6FVgbTEC4A==",
"name": "exp_schema_test01_01.dmp_segments/aaaaaa",
"size": 77824,
"storage-tier": "Standard",
"time-created": "2023-01-04T06:34:31.004000+00:00",
"time-modified": "2023-01-04T06:35:06.205000+00:00"
},
{
"archival-state": null,
"etag": "8b68d326-3223-41f6-bdf3-7f3137acf49a",
"md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
"name": "exp_schema_test01_02.dmp",
"size": 0,
"storage-tier": "Standard",
"time-created": "2023-01-04T06:34:49.404000+00:00",
"time-modified": "2023-01-04T06:34:49.404000+00:00"
},
{
"archival-state": null,
"etag": "438b7eb8-247a-4147-a142-b6a3786f6c16",
"md5": "tlWSqFwMfd3wgy7W4diKnQ==",
"name": "exp_schema_test01_02.dmp_segments/aaaaaa",
"size": 9916416,
"storage-tier": "Standard",
"time-created": "2023-01-04T06:34:49.361000+00:00",
"time-modified": "2023-01-04T06:35:07.973000+00:00"
},
{
"archival-state": null,
"etag": "791bacb6-9569-42a2-9d9c-9c4bfabc68e6",
"md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
"name": "exp_test_01.dmp",
"size": 0,
"storage-tier": "Standard",
"time-created": "2023-01-03T07:51:39.099000+00:00",
"time-modified": "2023-01-03T07:51:39.099000+00:00"
},
{
"archival-state": null,
"etag": "5fcfcc3f-4ca9-4a06-a1a1-8b471e00ccbd",
"md5": "eTsI8CVsI3XovA6NwBXUhg==",
"name": "exp_test_01.dmp_segments/aaaaaa",
"size": 61440,
"storage-tier": "Standard",
"time-created": "2023-01-03T07:51:39.037000+00:00",
"time-modified": "2023-01-03T07:52:22.787000+00:00"
},
{
"archival-state": null,
"etag": "56c56e24-90b8-42f2-b4d3-6f94e73e4bc3",
"md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
"name": "exp_test_02.dmp",
"size": 0,
"storage-tier": "Standard",
"time-created": "2023-01-03T07:52:06.675000+00:00",
"time-modified": "2023-01-03T07:52:06.675000+00:00"
},
{
"archival-state": null,
"etag": "ea8b0627-1b5d-4679-9f80-210fee847a3d",
"md5": "LQL0Dsq/ZzAQ34dJix8yuA==",
"name": "exp_test_02.dmp_segments/aaaaaa",
"size": 393216,
"stor

0개의 댓글