OCI GoldenGate 데이터 변환 검색

OCI GoldenGate 데이터 복제와 데이터 변환 배치를 함께 사용하여 두 자율운영 데이터베이스 간에 데이터를 로드하고 변환하는 방법에 대해 알아봅니다.

시작하기 전에

이 빠른 시작을 성공적으로 완료하려면 다음이 필요합니다.

  • 샘플 데이터가 로드되고 보완 로깅이 사용으로 설정된 소스 Autonomous Database입니다.

    참고:

    작업할 샘플 데이터가 필요한 경우 OCI GoldenGate 샘플 데이터를 다운로드할 수 있습니다.
    • Autonomous Database의 Database actions SQL 도구를 사용하여 두 스크립트를 실행하여 사용자 스키마 및 테이블을 생성합니다.
    • SQL 툴을 사용하여 보완 로깅을 활성화합니다.
    자세한 내용은 실습 1, 태스크 3: ATP 스키마 로드의 단계를 따르십시오.
  • 소스 Autonomous Database 인스턴스에서 GGADMIN 사용자 잠금 해제
    1. [Autonomous Database 세부 정보] 페이지의 데이터베이스 작업 메뉴에서 데이터베이스 사용자를 선택합니다.

      참고:

      로그인할 인스턴스를 생성할 때 제공된 Autonomous Database 관리자 인증서를 프롬프트가 표시되면 사용합니다.
    2. GGADMIN 사용자를 찾은 다음 줄임표(점 3개) 메뉴에서 Edit를 선택합니다.
    3. Edit User(사용자 편집) 패널에서 암호를 입력하고 암호를 확인한 다음 Account is Locked의 선택을 해제합니다.
    4. 변경 사항 적용을 누릅니다.

작업 1: 환경 설정

  1. 데이터 복제 배치를 생성합니다.
  2. 소스 Oracle Autonomous Transaction Processing(ATP) 접속을 생성합니다.
  3. 대상 ADW(Autonomous Data Warehouse) 접속을 생성합니다.
  4. 배포에 연결을 지정합니다.
  5. Autonomous Database SQL 툴을 사용하여 보완 로깅을 활성화합니다.
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
  6. SQL 도구에서 다음 질의를 실행하여 소스 데이터베이스의 모든 테이블에 대해 support_mode=FULL을 확인합니다.
    
    select * from DBA_GOLDENGATE_SUPPORT_MODE where owner = 'SRC_OCIGGLL';

작업 2: 통합 Extract 생성

통합 추출은 소스 데이터베이스에 대한 지속적인 변경사항을 캡처합니다.

  1. 배치 세부정보 페이지에서 콘솔 실행을 누릅니다.
  2. 필요한 경우 사용자 이름으로 oggadmin을 입력하고 배치를 생성할 때 사용한 비밀번호를 입력한 다음 사인인을 누릅니다.
  3. 트랜잭션 데이터 및 체크포인트 테이블 추가:
    1. 탐색 메뉴를 열고 DB 접속을 누릅니다.
    2. 데이터베이스에 접속 SourceATP을 누릅니다.
    3. 탐색 메뉴에서 Trandata를 누른 다음 Trandata 추가(더하기 아이콘)를 누릅니다.
    4. 스키마 이름에 대해 SRC_OCIGGLL을 입력한 다음 제출을 누릅니다.
    5. 확인하려면 [검색] 필드에 SRC_OCIGGLL을 입력하고 검색을 누릅니다.
    6. 탐색 메뉴를 열고 DB 접속을 누릅니다.
    7. 데이터베이스에 접속 TargetADW을 누릅니다.
    8. 탐색 메뉴에서 체크포인트를 누른 다음 체크포인트 추가(더하기 아이콘)를 누릅니다.
    9. 체크포인트 테이블에 대해 "SRCMIRROR_OCIGGLL"."CHECKTABLE"을 입력한 다음 제출을 누릅니다.
  4. 추출 추가.

    주:

    소스 테이블을 지정하는 데 사용할 수 있는 매개변수에 대한 자세한 내용은 추가 추출 매개변수 옵션을 참조하십시오.
    [매개변수 추출] 페이지에서 EXTTRAIL <trail-name> 아래에 다음 행을 추가합니다.
    -- Capture DDL operations for listed schema tables
    ddl include mapped
    
    -- Add step-by-step history of 
    -- to the report file. Very useful when troubleshooting.
    ddloptions report 
    
    -- Write capture stats per table to the report file daily.
    report at 00:01 
    
    -- Rollover the report file weekly. Useful when IE runs
    -- without being stopped/started for long periods of time to
    -- keep the report files from becoming too large.
    reportrollover at 00:01 on Sunday 
    
    -- Report total operations captured, and operations per second
    -- every 10 minutes.
    reportcount every 10 minutes, rate 
    
    -- Table list for capture
    table SRC_OCIGGLL.*;
  5. 장기 실행 중인 트랜잭션을 확인합니다. 소스 데이터베이스에서 다음 스크립트를 실행합니다.
    select start_scn, start_time from gv$transaction where start_scn < (select max(start_scn) from dba_capture);

    query에서 행을 반환하면 트랜잭션의 SCN을 찾은 다음 트랜잭션을 커밋하거나 롤백해야 합니다.

작업 3: Oracle Data Pump를 사용하여 데이터 엑스포트(ExpDP)

Oracle Data Pump(ExpDP)를 사용하여 소스 데이터베이스에서 Oracle Object Store로 데이터를 익스포트할 수 있습니다.

  1. Oracle Object Store 버킷을 생성합니다.

    Export 및 Import 스크립트에 사용할 네임스페이스와 버킷 이름을 기록해 둡니다.

  2. 인증 토큰을 생성한 다음 나중에 사용할 수 있도록 토큰 문자열을 복사하여 텍스트 편집기에 붙여 넣습니다.
  3. 소스 데이터베이스에 인증서를 생성하고 <user-name><token>를 이전 단계에서 생성한 Oracle Cloud 계정 사용자 이름 및 토큰 문자열로 바꿉니다.
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'ADB_OBJECTSTORE', 
        username => '<user-name>',
        password => '<token>'
      );
    END;
  4. 소스 데이터베이스에서 다음 스크립트를 실행하여 데이터 익스포트 작업을 생성합니다. 객체 저장소 URI의 <region>, <namespace><bucket-name>를 적절히 바꿔야 합니다. SRC_OCIGGLL.dmp은 이 스크립트가 실행될 때 생성되는 파일입니다.
    DECLARE
    ind NUMBER;              -- Loop index
    h1 NUMBER;               -- Data Pump job handle
    percent_done NUMBER;     -- Percentage of job complete
    job_state VARCHAR2(30);  -- To keep track of job state
    le ku$_LogEntry;         -- For WIP and error messages
    js ku$_JobStatus;        -- The job status from get_status
    jd ku$_JobDesc;          -- The job description from get_status
    sts ku$_Status;          -- The status object returned by get_status
    
    BEGIN
    -- Create a (user-named) Data Pump job to do a schema export.
    h1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'SRC_OCIGGLL_EXPORT','LATEST');
    
    -- Specify a single dump file for the job (using the handle just returned
    -- and a directory object, which must already be defined and accessible
    -- to the user running this procedure.
    DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE','100MB',DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE,1);
    
    -- A metadata filter is used to specify the schema that will be exported.
    DBMS_DATAPUMP.METADATA_FILTER(h1,'SCHEMA_EXPR','IN (''SRC_OCIGGLL'')');
    
    -- Start the job. An exception will be generated if something is not set up properly.
    DBMS_DATAPUMP.START_JOB(h1);
    
    -- The export job should now be running. In the following loop, the job
    -- is monitored until it completes. In the meantime, progress information is displayed.
    percent_done := 0;
    job_state := 'UNDEFINED';
    while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
      dbms_datapump.get_status(h1,dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,sts);
      js := sts.job_status;
    
    -- If the percentage done changed, display the new value.
    if js.percent_done != percent_done
    then
      dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_done));
      percent_done := js.percent_done;
    end if;
    
    -- If any work-in-progress (WIP) or error messages were received for the job, display them.
    if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
    then
      le := sts.wip;
    else
      if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
      then
        le := sts.error;
      else
        le := null;
      end if;
    end if;
    if le is not null
    then
      ind := le.FIRST;
      while ind is not null loop
        dbms_output.put_line(le(ind).LogText);
        ind := le.NEXT(ind);
      end loop;
    end if;
      end loop;
    
      -- Indicate that the job finished and detach from it.
      dbms_output.put_line('Job has completed');
      dbms_output.put_line('Final job state = ' || job_state);
      dbms_datapump.detach(h1);
    END;

작업 4: Oracle Data Pump(ImpDP)를 사용하여 Target Database 인스턴스화

Oracle Data Pump(ImpDP)를 사용하여 소스 데이터베이스에서 익스포트된 SRC_OCIGGLL.dmp에서 대상 데이터베이스로 데이터를 임포트합니다.

  1. 이전 섹션의 동일한 정보를 사용하여 Oracle Object Store에 액세스할 수 있도록 Target Database에 인증서를 생성합니다.
    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL( 
        credential_name => 'ADB_OBJECTSTORE',
        username => '<user-name>',
        password => '<token>'
      );
    END;
  2. 대상 데이터베이스에서 다음 스크립트를 실행하여 SRC_OCIGGLL.dmp에서 데이터를 임포트합니다. 객체 저장소 URI의 <region>, <namespace><bucket-name>를 적절하게 바꿔야 합니다.
    DECLARE
    ind NUMBER;  -- Loop index
    h1 NUMBER;  -- Data Pump job handle
    percent_done NUMBER;  -- Percentage of job complete
    job_state VARCHAR2(30);  -- To keep track of job state
    le ku$_LogEntry;  -- For WIP and error messages
    js ku$_JobStatus;  -- The job status from get_status
    jd ku$_JobDesc;  -- The job description from get_status
    sts ku$_Status;  -- The status object returned by get_status
    BEGIN
    
    -- Create a (user-named) Data Pump job to do a "full" import (everything
    -- in the dump file without filtering).
    h1 := DBMS_DATAPUMP.OPEN('IMPORT','FULL',NULL,'SRCMIRROR_OCIGGLL_IMPORT');
    
    -- Specify the single dump file for the job (using the handle just returned)
    -- and directory object, which must already be defined and accessible
    -- to the user running this procedure. This is the dump file created by
    -- the export operation in the first example.
    
    DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE',null,DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE);
    
    
    -- A metadata remap will map all schema objects from SRC_OCIGGLL to SRCMIRROR_OCIGGLL.
    DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_SCHEMA','SRC_OCIGGLL','SRCMIRROR_OCIGGLL');
    
    -- If a table already exists in the destination schema, skip it (leave
    -- the preexisting table alone). This is the default, but it does not hurt
    -- to specify it explicitly.
    DBMS_DATAPUMP.SET_PARAMETER(h1,'TABLE_EXISTS_ACTION','SKIP');
    
    -- Start the job. An exception is returned if something is not set up properly.
    DBMS_DATAPUMP.START_JOB(h1);
    
    -- The import job should now be running. In the following loop, the job is
    -- monitored until it completes. In the meantime, progress information is
    -- displayed. Note: this is identical to the export example.
    percent_done := 0;
    job_state := 'UNDEFINED';
    while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
      dbms_datapump.get_status(h1,
        dbms_datapump.ku$_status_job_error +
        dbms_datapump.ku$_status_job_status +
        dbms_datapump.ku$_status_wip,-1,job_state,sts);
        js := sts.job_status;
    
      -- If the percentage done changed, display the new value.
      if js.percent_done != percent_done
      then
        dbms_output.put_line('*** Job percent done = ' ||
        to_char(js.percent_done));
        percent_done := js.percent_done;
      end if;
    
      -- If any work-in-progress (WIP) or Error messages were received for the job, display them.
      if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
      then
        le := sts.wip;
      else
        if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
        then
          le := sts.error;
        else
          le := null;
        end if;
      end if;
      if le is not null
      then
        ind := le.FIRST;
        while ind is not null loop
          dbms_output.put_line(le(ind).LogText);
          ind := le.NEXT(ind);
        end loop;
      end if;
    end loop;
    
    -- Indicate that the job finished and gracefully detach from it.
    dbms_output.put_line('Job has completed');
    dbms_output.put_line('Final job state = ' || job_state);
    dbms_datapump.detach(h1);
    END;

작업 5: 통합되지 않은 Replicat 추가 및 실행

  1. 복제 추가 및 실행.
    Parameter File 화면에서 MAP *.*, TARGET *.*;을 다음 스크립트로 바꿉니다.
    -- Capture DDL operations for listed schema tables
    --
    ddl include mapped
    --
    -- Add step-by-step history of ddl operations captured
    -- to the report file. Very useful when troubleshooting.
    --
    ddloptions report
    --
    -- Write capture stats per table to the report file daily.
    --
    report at 00:01
    --
    -- Rollover the report file weekly. Useful when PR runs
    -- without being stopped/started for long periods of time to
    -- keep the report files from becoming too large.
    --
    reportrollover at 00:01 on Sunday
    --
    -- Report total operations captured, and operations per second
    -- every 10 minutes.
    --
    reportcount every 10 minutes, rate
    --
    -- Table map list for apply
    --
    DBOPTIONS ENABLE_INSTANTIATION_FILTERING;
    MAP SRC_OCIGGLL.*, TARGET SRCMIRROR_OCIGGLL.*;

    주:

    DBOPTIONS ENABLE_INSTATIATION_FILTERING는 Oracle Data Pump를 사용하여 임포트된 테이블에 대해 CSN 필터링을 사용으로 설정합니다. 자세한 내용은 DBOPTIONS Reference를 참조하십시오.
  2. 원본 데이터베이스에 삽입 수행:
    1. Oracle Cloud 콘솔로 돌아가서 탐색 메뉴를 사용하여 Oracle Database, Autonomous Transaction Processing, SourceATP으로 돌아갑니다.
    2. 소스 ATP 세부정보 페이지에서 데이터베이스 작업, SQL 순으로 누릅니다.
    3. 다음 삽입을 입력한 후 스크립트 실행을 누릅니다.
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1000,'Houston',20,743113);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1001,'Dallas',20,822416);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1002,'San Francisco',21,157574);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1003,'Los Angeles',21,743878);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1004,'San Diego',21,840689);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1005,'Chicago',23,616472);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1006,'Memphis',23,580075);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1007,'New York City',22,124434);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1008,'Boston',22,275581);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1009,'Washington D.C.',22,688002);
    4. OCI GoldenGate 배치 콘솔에서 추출 이름(UAEXT)을 누른 다음 통계를 누릅니다. SRC_OCIGGLL.SRC_CITY가 10개의 삽입과 함께 나열되는지 확인합니다.
    5. 개요 화면으로 돌아가서 복제 이름(REP)을 누른 다음 통계를 누릅니다. SRCMIRROR_OCIGGLL.SRC_CITY가 10개의 삽입과 함께 나열되는지 확인합니다.

작업 6: 데이터 생성 리소스 변환

  1. 데이터 변환 배포를 생성합니다.
  2. 일반 연결을 생성합니다.

    주:

    예를 들어, 미국 동부(애슈번)의 자율운영 데이터베이스의 경우 다음 값을 사용합니다.
    • 호스트adb.us-ashburn-1.oraclecloud.com:1522를 입력합니다.
    • 서브넷의 경우 드롭다운에서 배포와 동일한 서브넷을 선택합니다.
  3. 배포에 일반 연결을 지정합니다.
  4. ADW(Autonomous Data Warehouse) 인스턴스에서 SRCMIRROR_OCIGGLL에 TRG_CUSTOMER를 생성합니다.
    1. Oracle Cloud 콘솔에서 탐색 메뉴를 열고 Oracle Database로 이동한 다음 Autonomous Data Warehouse를 선택합니다.
    2. 자율운영 데이터베이스 페이지에서 ADW 인스턴스를 누릅니다.
    3. ADW Autonomous Database 세부정보 페이지의 데이터베이스 작업을 누른 후 드롭다운에서 SQL을 선택합니다. Database actions(데이터베이스 작업) 메뉴를 로드하는 데 시간이 너무 오래 걸리는 경우 Database actions(데이터베이스 작업)를 직접 누른 다음 Database actions(데이터베이스 작업) 페이지에서 SQL을 선택합니다.
    4. 워크시트에 다음을 입력한 다음 명세서 실행을 누릅니다.
      create table SRCMIRROR_OCIGGLL.TRG_CUSTOMER (
         CUST_ID              NUMBER(10,0)     not null,
         DEAR                 VARCHAR2(4 BYTE),
         CUST_NAME            VARCHAR2(50 BYTE),
         ADDRESS              VARCHAR2(100 BYTE),
         CITY_ID              NUMBER(10,0),
         PHONE                VARCHAR2(50 BYTE),
         AGE                  NUMBER(3,0),
         AGE_RANGE            VARCHAR2(50 BYTE),
         SALES_PERS           VARCHAR2(50 BYTE),
         CRE_DATE             DATE,
         UPD_DATE             DATE,
         constraint PK_TRG_CUSTOMER primary key (CUST_ID)
      );
  5. Data Transforms 배치 콘솔을 실행합니다.
    1. Deployments 페이지로 다시 이동한 다음 Task 6에서 생성한 배치를 선택합니다.
    2. 배치 세부정보 페이지에서 콘솔 실행을 누릅니다.
    3. Data Transforms 배포 콘솔에 로그인합니다.
  6. ADW 접속 생성:
    1. 탐색 메뉴를 열고 접속, 접속 생성 순으로 누릅니다.
    2. 유형 선택 페이지의 데이터베이스 아래에서 Oracle을 선택한 후 다음을 누릅니다.
    3. 접속 세부정보 페이지에서 다음과 같이 폼 필드에 정보를 입력한 후 생성을 누릅니다.
      1. Name에 ADW_IAD를 입력합니다.
      2. 인증서 파일 사용을 선택합니다.
      3. 전자 지갑 파일의 경우 (ADW) 전자 지갑 파일을 업로드합니다.

        주:

        ADW 전자 지갑 파일을 다운로드하려면 ADW 세부정보 페이지에서 데이터베이스 접속을 누릅니다.
      4. 서비스 드롭다운에서 <name>_low를 선택합니다.
      5. 사용자에 대해 ADMIN을 입력합니다.
      6. 암호에 ADW 암호를 입력합니다.
  7. 데이터 개체 임포트:
    1. 탐색 메뉴를 열고 데이터 엔티티를 누른 다음 데이터 엔티티 임포트를 누릅니다.
    2. 접속의 경우 드롭다운에서 ADW_IAD을 선택합니다.
    3. 스키마의 경우 드롭다운에서 SRCMIRROR_OCIGGLL을 선택합니다.
    4. 시작을 누릅니다.
  8. 프로젝트 생성:
    1. 탐색 메뉴를 열고 프로젝트를 누릅니다.
    2. 프로젝트 페이지에서 프로젝트 생성을 누릅니다.
    3. [프로젝트 생성] 대화상자의 [이름]에 데모 파이프라인을 입력한 다음 생성을 누릅니다.

작업 7: 워크플로우 생성 및 실행

  1. 데이터 흐름 생성:
    1. 프로젝트 이름을 선택합니다.
    2. [프로젝트 세부정보] 페이지의 [리소스]에서 데이터 플로우를 누른 다음 데이터 플로우 생성을 누릅니다.
    3. 데이터 플로우 생성 대화상자에서 이름에 대해 로드 TRG_CUSTOMER를 입력하고 선택적으로 설명을 입력합니다. 생성을 누릅니다. 디자인 캔버스가 열립니다.
    4. 스키마 추가 대화상자에서 다음과 같이 폼 필드에 정보를 입력한 후 확인을 누릅니다.
      1. 연결의 경우 드롭다운에서 ADW_IAD을 선택합니다.
      2. 스키마의 경우 드롭다운에서 SRCMIRROR_OCIGGLL을 선택합니다.
    5. 다음 데이터 엔티티 및 구성 요소를 설계 캔버스로 끌어옵니다.
      1. [데이터 엔티티] 패널에서 SRCMIRROR_OCIGGLL 스키마를 확장합니다. SRC_AGE_GROUP 데이터 엔티티를 디자인 캔버스로 끌어옵니다.
      2. [데이터 엔티티] 패널에서 SRCMIRROR_OCIGGLL 스키마를 확장합니다. SRC_SALES_PERSON 데이터 엔티티를 디자인 캔버스로 끌어옵니다.
      3. [데이터 변환] 도구 모음에서 룩업 구성요소를 디자인 캔버스로 끌어옵니다.
      4. 데이터 변환 도구 모음에서 조인 구성요소를 디자인 캔버스로 끌어옵니다.
      5. [데이터 엔티티] 패널의 SRCMIRROR_OCIGGLL에서 SRC_CUSTOMER 데이터 엔티티를 디자인 캔버스로 끌어옵니다.
    6. 룩업 구성요소에 다음 데이터 엔티티를 연결합니다.
      1. SRC_AGE_GROUP 커넥터 아이콘을 누르고 아이콘을 룩업 구성요소로 끌어옵니다.
      2. SRC_CUSTOMER 커넥터 아이콘을 누르고 아이콘을 룩업 구성요소로 끌어옵니다.
    7. 설계 캔버스에서 룩업을 눌러 [검색] 패널을 엽니다. [검색] 패널에서 속성 탭으로 전환한 후 다음 질의를 검색 조건에 붙여넣습니다.
      SRC_CUSTOMER.AGE between SRC_AGE_GROUP.AGE_MIN and SRC_AGE_GROUP.AGE_MAX
    8. Join 구성 요소에 다음 구성 요소를 연결합니다.
      1. SRC_SALES_PERSON 커넥터 아이콘을 누르고 아이콘을 조인 구성요소로 끌어옵니다.
      2. 조회 커넥터 아이콘을 누르고 아이콘을 조인 구성요소로 끌어옵니다.
    9. 설계 캔버스에서 조인을 눌러 [조인] 패널을 엽니다. [조인] 패널에서 속성 탭으로 전환한 후 다음 질의를 조인 조건에 붙여넣습니다.
      SRC_CUSTOMER.SALES_PERS_ID=SRC_SALES_PERSON.SALES_PERS_ID
    10. 다음 데이터 엔티티 및 구성 요소를 설계 캔버스로 끌어옵니다.
      1. [데이터 엔티티] 패널의 SRCMIRROR_OCIGGLL에서 TRG_CUSTOMER 데이터 엔티티를 디자인 캔버스로 끌어옵니다.
      2. 연결 커넥터 아이콘을 누르고 아이콘을 TRG_CUSTOMER 데이터 엔티티로 끌어옵니다.
      3. 디자인 캔버스에서 TRG_CUSTOMER을 누르고 데이터 엔티티를 확장합니다.
    11. 속성 탭에서 CUST_ID에 대해 키를 사용으로 설정하고 CRE_DATE에 대해 업데이트를 사용 안함으로 설정하고 UPD_DATE에 대해 삽입을 사용 안함으로 설정합니다.
    12. 열 매핑 탭에서 이름이 표현식과 일치하는지 확인합니다.
      1. CUST_ID
        SRC_CUSTOMER.CUSTID
      2. 친애하는
        CASE WHEN SRC_CUSTOMER.DEAR = 0 THEN 'Mr' WHEN SRC_CUSTOMER.DEAR = 1 THEN 'Mrs' ELSE 'Ms' END
      3. CUST_NAME
        SRC_CUSTOMER.FIRST_NAME || ' ' || UPPER(SRC_CUSTOMER.LAST_NAME)
      4. SALES_PERS
        SRC_SALES_PERSON.FIRST_NAME || ' ' ||UPPER(SRC_SALES_PERSON.LAST_NAME)
      5. CRE_DATE
        SYSDATE
      6. UPD_DATE
        SYSDATE
      7. 다른 매핑을 있는 그대로 사용합니다.
    13. 옵션 탭의 모드에 대해 드롭다운에서 증분 업데이트를 선택합니다.
    14. TRG_CUSTOMER를 축소합니다.
    15. 데이터 플로우 저장을 누릅니다.
  2. 워크플로우 생성:
    1. 프로젝트 이름을 선택하고 워크플로우를 선택한 다음 워크플로우 생성을 선택합니다.
    2. 이름에 데이터 웨어하우스 로드 조정을 입력합니다. 생성을 누릅니다.
    3. 디자인 캔버스에서 SQL 아이콘을 끌어옵니다.
    4. 편집기에서 SQL 단계를 두 번 눌러 단계 속성 페이지를 엽니다.
    5. 일반 사항 탭의 이름에 데이터 정리를 입력합니다.
    6. 속성 탭을 선택하고 접속에 대해 드롭다운에서 ADW_IAD을 선택합니다.
    7. SQL의 경우 다음 query를 복사합니다.
      delete from SRCMIRROR_OCIGGLL.TRG_CUSTOMER where CITY_ID > 110
    8. SQL 축소.
    9. 데이터 플로우 아래에서 TRG_CUSTOMER 데이터 플로우를 디자인 캔버스로 끌어옵니다.
    10. 데이터 정리 SQL 워크플로우 라인을 누르고 확인(녹색 화살표) 아이콘을 TRG_CUSTOMER 데이터 플로우로 끌어옵니다.
    11. 워크플로우 저장을 누른 다음 워크플로우 시작을 누릅니다.
  3. 작업 만들기 및 관리.