애플리케이션 데이터베이스 이전

Oracle Autonomous Transaction Processing는 데이터베이스 호스트 및 소프트웨어를 유지 관리, 패치 및 최적화할 필요가 없으므로 데이터베이스의 스키마 레벨에 대한 액세스만 제공합니다. 따라서 온-프레미스 데이터베이스를 Autonomous Transaction Processing으로 이전하는 데 사용할 수 있는 이전 툴은 Oracle Database에 포함된 스키마 레벨 이전 툴인 데이터 펌프를 기반으로 합니다.

애플리케이션 데이터베이스 마이그레이션 정보

데이터베이스 이전 프로세스는 소스 데이터베이스에서 데이터베이스 스키마 덤프를 생성하여 OCI(Oracle Cloud Infrastructure) 의 객체 저장 영역으로 업로드하고, 객체 저장 영역에서 임포트하도록 자율운영 트랜잭션 처리 데이터베이스를 구성하고, Oracle Cloud Infrastructure Object Storage에서 데이터베이스 스키마 덤프를 임포트하는 작업으로 구성됩니다.

다음은 프로세스에 대한 개요입니다:

  1. 데이터베이스 스키마를 로컬 덤프 파일로 익스포트합니다.
  2. OCI CLI를 사용하여 덤프 파일을 오브젝트 스토리지로 이동합니다.
  3. 자율운영 데이터베이스의 OCID를 가져옵니다.
  4. 소스 데이터베이스(또는 일부 대체 호스트) 에서 자율운영 데이터베이스에 액세스하기 위한 전자 지갑을 가져옵니다.
  5. 구성을 위해 자율운영 데이터베이스에 대한 로컬 터널을 만듭니다.
  6. Oracle Cloud Infrastructure Object Storage에 액세스하기 위한 자율운영 데이터베이스에 대한 OCI 인증 토큰을 가져옵니다.
  7. 자율운영 데이터베이스 액세스 인증서를 구성합니다.
  8. Oracle Cloud Infrastructure Object Storage에서 자율운영 데이터베이스로 덤프 파일을 임포트합니다.

데이터베이스 스키마 및 데이터 익스포트

데이터베이스 스키마 및 데이터를 단일 덤프 파일로 익스포트합니다.

  1. 덤프 파일에 대한 export 폴더를 생성합니다.
    특정 상황에서 매우 클 수 있는 단일 파일 덤프를 생성하는 중입니다. 데이터 펌프를 사용하여 다중 부품 파일을 작성하기 위한 다른 옵션을 참고하십시오.
    EXPORT_DB_DIRNAME=export
    mkdir /home/oracle/${ DIRNAME}
    # drop directory if it exists
    echo "DROP DIRECTORY ${EXPORT_DB_DIRNAME};" | sqlplus system/PASSWORD@$HOST:PORT/SERVICE
    # create a directory object in the DB for export with datapump, pointing to the folder created above
    echo "CREATE DIRECTORY ${EXPORT_DB_DIRNAME} AS '/home/oracle/export/';" | sqlplus 
    system/PASSWORD@$HOST:PORT/SERVICE
    # export the schema 
    expdp system/PASSWORD@$HOST:PORT/SERVICE schemas=SCHEMA_NAME 
    DIRECTORY=${EXPORT_DB_DIRNAME}
  2. OCI(Oracle Cloud Infrastructure) 명령행 인터페이스를 사용하여 이전에 생성한 Oracle Cloud Infrastructure Object Storage 버킷으로 덤프 파일을 이동합니다.
    oci os object put \
    -bn bucket-name \
    --file /home/oracle/export/expdat.dmp \
    --name expdat.dmp

Autonomous Database의 OCID 가져오기

Oracle Autonomous Transaction Processing 데이터베이스의 OCID, 전용 끝점 IP 및 전용 끝점 URL을 가져옵니다.

  1. Oracle Cloud Infrastructure 콘솔에서 Oracle Database, Autonomous Transaction Processing 순으로 선택합니다.
  2. 페이지 왼쪽에 있는 구획 목록에서 구획을 선택합니다.
    구획은 리소스를 배치한 위치입니다.
  3. 세부정보를 보려면 이전에 프로비전한 데이터베이스를 누르십시오.
  4. OCID, 전용 끝점 IP 및 전용 끝점 URL(호스트 이름) 을 복사하고 나중에 사용할 수 있도록 메모장에 저장합니다.

데이터베이스 전자 지갑 파일 가져오기

Oracle Autonomous Transaction Processing 데이터베이스 전자 지갑 파일을 가져오고 sqlnet.ora 파일의 전자 지갑 위치를 가리키도록 디렉토리를 설정하여 위치를 업데이트합니다.

  1. OCI(Oracle Cloud Infrastructure) 명령행 인터페이스에서 OCID 및 비밀번호를 사용하여 Autonomous Transaction Processing 데이터베이스 전자 지갑 파일을 가져올 수 있습니다.
    oci db autonomous-database generate-wallet --autonomous-database-
    id your ATP OCID --file wallet.zip --password your-password
  2. 전자 지갑의 압축을 해제합니다.
    unzip wallet.zip
  3. sqlnet.ora 파일을 편집하고 압축을 푼 전자 지갑 파일의 위치와 일치하도록 디렉토리 값을 바꿉니다.
    WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = 
    (DIRECTORY="/home/oracle/ ")))
    SSL_SERVER_DN_MATCH=yes
  4. 전자 지갑의 압축이 해제된 폴더와 일치하도록 TNS_ADMIN 환경 변수를 설정합니다.
    export TNS_ADMIN=$(pwd)

배스천 호스트를 통해 Autonomous Database에 대한 로컬 터널 만들기

배스천 호스트의 공용 IP 주소를 구성하여 터널을 만듭니다.

  1. terraform 출력에서 배스천 호스트의 공용 IP를 가져옵니다.
    Apache Tomcat 서버가 공용 서브넷에 배포된 경우 Tomcat 서버의 공용 IP를 사용하거나 배스천 호스트 공용 IP 주소를 사용할 수 있습니다.
  2. 터널을 만들 배스천 IP를 정의합니다.
    export BASTION_IP=Public IP of the bastion
  3. 명령을 실행하여 Autonomous Transaction Processing 데이터베이스 및 SSH에 대한 전용 끝점 IP 주소를 사용하여 DB 호스트를 데이터베이스 호스트로 익스포트합니다.
    DB_HOST는 앞에서 수집한 전용 끝점 IP입니다.
    export DB_HOST=10.0.2.2
    ssh -4 -M -S socket -fnNT -L 1522:${DB_HOST}:1522 opc@${BASTION_IP} cat -
    프롬프트가 나타나면 yes를 입력하여 새 호스트를 확인합니다.
  4. 자율운영 데이터베이스의 전용 끝점 호스트를 가리키도록/etc/hosts 파일을 127.0.0.1 (localhost) 로 편집합니다.
    그러면 tnsnames.ora 파일에서 전용 끝점 호스트를 조회합니다.
    ATP_HOSTNAME=$(sed 's|.*(host=\([a-z0-9.-]*\)).*|\1|;' 
    tnsnames.ora | head -n1)
    sudo su -c "printf \"127.0.0.1  ${ATP_HOSTNAME}\n\"  >> 
    /etc/hosts"
  5. 끝점이 올바른지 확인하십시오.
    cat /etc/hosts
    다음과 유사한 출력이 나타나야 합니다:
    127.0.0.1    localhost
    ::1    localhost ip6-localhost ip6-loopback
    fe00::0    ip6-localnet
    ff00::0    ip6-mcastprefix
    ff02::1    ip6-allnodes
    ff02::2    ip6-allrouters
    172.19.0.3    58aa534ef636
    127.0.0.1  jrhdeexg.adb.region

인증 토큰 생성

데이터를 Oracle Cloud Infrastructure Object Storage 및 Oracle Autonomous Transaction Processing 데이터베이스로 이동할 때 사용할 토큰을 생성합니다. 인증 토큰 문자열은 생성 시에만 표시되므로 인증 토큰을 보안 위치에 즉시 복사해야 합니다.
  1. Oracle Cloud Infrastructure 콘솔에 로그인
  2. 사용자 아이콘을 눌러 프로파일 메뉴를 열고 사용자 설정 을 누릅니다.
    전체 사용자 이름(전자 메일 또는 사용하는 Single Sign-On 서비스가 접두어로 붙은 전자 메일일 수 있음) 을 기록해 둡니다(활성화된 경우).
  3. 인증 토큰 을 누른 다음 토큰 생성 을 누릅니다.
  4. 인증 토큰에 대해 의미 있는 설명을 제공하고 토큰 생성 을 누릅니다.
  5. 나중에 검색할 수 있도록 토큰을 복사하여 저장합니다.
    토큰은 한 번만 표시됩니다. 대화상자를 닫으면 콘솔에서 토큰을 다시 볼 수 없습니다.
  6. 닫기 를 누릅니다.

Autonomous Database에서 클라우드 인증서 구성

OCI(Oracle Cloud Infrastructure) 사용자 이름 및 인증 토큰 비밀번호를 Oracle Autonomous Transaction Processing 데이터베이스에 대한 기본 인증서로 추가합니다.

  1. SQLPLus Instant Client를 사용하여 이전에 생성된 터널을 통해 원격 Autonomous Transaction Processing 데이터베이스에 접속합니다.
    sqlplus admin@atp_db_name_high
  2. 프롬프트에서 Autonomous Transaction Processing 데이터베이스에 대한 관리자 비밀번호를 입력합니다.
    terraform.tfvars 파일에 구성된 atp_admin_password 입니다.
  3. SQLPlus 프롬프트에 로그인되어 있는지 확인합니다.
    SQL>
  4. OCI 사용자 이름 및 OCI 인증 토큰 비밀번호와 함께 다음 명령을 사용하여 Autonomous Transaction Processing 데이터베이스에 OCI 클라우드 인증서를 생성합니다.
    SET DEFINE OFF
    BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'DEF_CRED_NAME',
        username => 'oci username',
        password => 'oci auth token'
    );
    END;
    /
  5. 인증서를 기본 인증서로 설정합니다.
    ALTER DATABASE PROPERTY SET DEFAULT_CREDENTIAL = 
    'ADMIN.DEF_CRED_NAME';
  6. SQLPlus를 종료합니다.
    SQL> exit

덤프 파일을 Autonomous Database로 임포트합니다.

데이터 펌프를 사용하여 데이터 덤프를 Autonomous Transaction Processing 데이터베이스로 임포트합니다.

  1. 영역(예: us-ashburn-1), 네임스페이스, 버킷, 파일 이름, Autonomous Transaction Processing 데이터베이스 이름(예: atpdb) 및 Autonomous Transaction Processing 관리 비밀번호에 대한 환경 변수를 정의합니다.
    export REGION=your-OCI-region
    export NAMESPACE=your namespace
    export BUCKET=atp-upload
    export FILENAME=expdat.dmp
    export ATP_DB_NAME=your ATP DB name
    export ATP_PASSWORD=atp_admin_password
  2. 다음 명령을 실행합니다.
    impdp admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low 
    directory=data_pump_dir 
    dumpfile=default_credential:https://objectstorage.${REGION}.oracl
    ecloud.com/n/${NAMESPACE}/b/${BUCKET}/o/${FILENAME} parallel=16 
    exclude=cluster,db_link 

    첫번째 시도는 ORA-01950: no privileges on tablespace 'DATA' 오류와 함께 실패합니다. 다음 단계로 이동하여 데이터베이스 스키마에서 생성된 사용자에게 할당량을 부여합니다.

  3. 사용자에게 무제한 테이블스페이스를 부여합니다.
    echo "GRANT UNLIMITED TABLESPACE TO USER;" | sqlplus 
    admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low
    다음 출력이 나타나야 합니다.
    Grant Succeeded
  4. 다음 실행 시 데이터를 생성할 수 있도록 단계 2에서 생성한 테이블을 삭제합니다.
    echo "DROP TABLE TABLE_NAME;" | sqlplus 
    admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low
  5. 다음 명령을 실행하여 사용자가 적합한 할당량을 가지고 있는 데이터를 임포트하십시오.
    impdp admin/${ATP_PASSWORD}@${ATP_DB_NAME}_low 
    directory=data_pump_dir 
    dumpfile=default_credential:https://objectstorage.${REGION}.oracl
    ecloud.com/n/${NAMESPACE}/b/${BUCKET}/o/${FILENAME} parallel=16 
    exclude=cluster,db_link 
    기존 사용자와 관련된 오류가 표시됩니다. 2단계에서 처음 명령을 실행할 때 객체가 생성되었기 때문에 이는 정상입니다.
데이터베이스가 마이그레이션됩니다.