Azure VM에서 Oracle 데이터베이스 만들기

적용 대상: ✔️ Linux VM

이 문서에서는 Azure CLI를 사용하여 Oracle Marketplace 갤러리 이미지에서 Azure VM(가상 머신)을 배포하여 Oracle Database 19c 데이터베이스를 만드는 방법을 설명합니다. 서버를 배포한 후 SSH를 통해 서버를 연결하여 Oracle 데이터베이스를 구성합니다.

필수 조건

  • Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

  • Azure Cloud Shell 또는 Azure CLI.

    이 빠른 시작의 Azure CLI 명령을 Azure Cloud Shell에서 대화형으로 실행할 수 있습니다. Cloud Shell에서 명령을 실행하려면 코드 블록의 오른쪽 위 모서리에서 Cloudshell 열기를 선택합니다. 복사를 선택하여 코드를 복사하고 Cloud Shell에 붙여넣어 실행합니다. Azure Portal 내에서 Cloud Shell을 실행할 수 있습니다. Cloud Shell은 항상 최신 버전의 Azure CLI를 사용합니다.

    또는 Azure CLI를 로컬로 설치 하여 명령을 실행할 수 있습니다. 이 문서의 단계에는 Azure CLI 버전 2.0.4 이상이 필요합니다. az version을 실행하여 설치된 버전과 종속 라이브러리를 확인하고 az upgrade를 실행하여 업그레이드합니다. 로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure에 로그인합니다.

리소스 그룹 만들기

az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.

다음 예에서는 eastus 위치에 rg-oracle이라는 리소스 그룹을 만듭니다.

az group create --name rg-oracle --location eastus

참고 항목

이 빠른 시작에서는 미국 동부 지역에 Standard_DS2_v2 SKU VM을 만듭니다. 지역별로 지원되는 SKU 목록을 보려면 az vm list-skus 명령을 사용합니다.

가상 머신 만들기

az vm create 명령을 사용하여 VM(가상 머신)을 만듭니다.

다음 예제에서는 vmoracle19c라는 VM을 만듭니다. 또한 기본 키 위치에 SSH 키가 없는 경우 이 키를 만듭니다. 특정 키 세트를 사용하려면 명령과 함께 --ssh-key-value 옵션을 사용하면 됩니다.

az vm create \
    --name vmoracle19c \
    --resource-group rg-oracle \
    --image Oracle:oracle-database-19-3:oracle-database-19-0904:latest \
    --size Standard_DS2_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --public-ip-address-allocation static \
    --public-ip-address-dns-name vmoracle19c

VM을 만든 후 Azure CLI는 다음 예제와 비슷한 정보를 표시합니다. publicIpAddress 속성의 값을 기록해 둡니다. 이 IP 주소를 사용하여 VM에 액세스합니다.

{
  "fqdns": "",
  "id": "/subscriptions/{snip}/resourceGroups/rg-oracle/providers/Microsoft.Compute/virtualMachines/vmoracle19c",
  "location": "eastus",
  "macAddress": "00-0D-3A-36-2F-56",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.64.104.241",
  "resourceGroup": "rg-oracle"
}

Oracle 데이터 파일용 디스크 만들기

az vm disk attach 명령을 사용하여 Oracle 데이터 파일 및 FRA(빠른 복구 영역)에 대한 새 디스크를 만들고 연결합니다.

다음 예제에서는 oradata01이라는 디스크를 만듭니다.

az vm disk attach \
    --name oradata01 --new \
    --resource-group rg-oracle \
    --size-gb 64 --sku StandardSSD_LRS \
    --vm-name vmoracle19c

연결을 위한 포트 열기

이 작업에서는 VM을 보호하는 Azure NSG(네트워크 보안 그룹)를 설정하여 데이터베이스 수신기에서 사용할 일부 외부 엔드포인트를 구성해야 합니다.

  1. az network nsg create 명령을 사용하여 VM에 대한 NSG를 만듭니다. 이 명령은 VM에 대한 액세스를 제어하는 규칙에 대한 vmoracle19cNSG NSG를 만듭니다.

    az network nsg create --resource-group rg-oracle --name vmoracle19cNSG
    
  2. az network nsg rule create 명령을 사용하여 NSG 규칙을 만듭니다. 이 명령은 Oracle 데이터베이스에 대한 원격 액세스를 위한 엔드포인트를 여는 allow-oracle NSG 규칙을 만듭니다.

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-oracle \
        --protocol tcp \
        --priority 1001 \
        --destination-port-range 1521
    
  3. Oracle에 대한 원격 액세스를 위한 엔드포인트를 여는 두 번째 NSG 규칙을 만듭니다. 이 명령은 allow-oracle-EM NSG 규칙을 만듭니다.

    az network nsg rule create \
        --resource-group rg-oracle \
        --nsg-name vmoracle19cNSG \
        --name allow-oracle-EM \
        --protocol tcp \
        --priority 1002 \
        --destination-port-range 5502
    
  4. 필요에 따라 az network public-ip show 명령을 사용하여 VM의 공용 IP 주소를 가져옵니다.

    az network public-ip show \
        --resource-group rg-oracle \
        --name vmoracle19cPublicIP \
        --query "ipAddress" \
        --output tsv
    

VM 환경 준비

  1. VM을 사용하여 SSH 세션을 만듭니다. <publicIPAddress> 부분을 VM의 공용 IP 주소 값(예: 10.200.300.4)으로 바꿉니다.

    ssh azureuser@<publicIPAddress>
    
  2. 루트 사용자로 전환합니다.

    sudo su -
    
  3. Oracle 데이터 파일을 보관하도록 서식을 지정할 가장 최근에 만든 디스크 디바이스를 찾습니다.

    ls -alt /dev/sd*|head -1
    

    출력은 다음 예제와 유사합니다.

    brw-rw----. 1 root disk 8, 16 Dec  8 22:57 /dev/sdc
    
  4. 루트 사용자로서, parted 명령을 사용하여 디바이스의 형식을 지정합니다.

    1. 먼저 디스크 레이블을 만듭니다.

      parted /dev/sdc mklabel gpt
      
    2. 다음으로, 전체 디스크에 걸쳐 있는 기본 파티션을 만듭니다.

      parted -a optimal /dev/sdc mkpart primary 0GB 64GB	
      
    3. 마지막으로 메타데이터를 인쇄하여 디바이스 세부 정보를 확인합니다.

      parted /dev/sdc print
      

      출력은 다음 예제와 유사합니다.

      Model: Msft Virtual Disk (scsi)
      Disk /dev/sdc: 68.7GB
      Sector size (logical/physical): 512B/4096B
      Partition Table: gpt
      Disk Flags:
      Number   Start    End      Size     File system   Name     Flags
      1        1049kB   64.0GB   64.0GB   ext4          primary
      
  5. 디바이스 파티션에 파일 시스템 만듭니다.

    mkfs -t ext4 /dev/sdc1
    

    출력은 다음 예제와 유사합니다.

    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done                            
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    3907584 inodes, 15624704 blocks
    781235 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2164260864
    477 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks: 
         32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
         4096000, 7962624, 11239424
     Allocating group tables: done                            
     Writing inode tables: done                            
     Creating journal (32768 blocks): done
     Writing superblocks and filesystem accounting information: done   
    
  6. 탑재 지점을 만듭니다.

    mkdir /u02
    
  7. 디스크를 탑재합니다.

    mount /dev/sdc1 /u02
    
  8. 탑재 지점에 대한 권한을 변경합니다.

    chmod 777 /u02
    
  9. /etc/fstab 파일에 탑재를 추가합니다.

    echo "/dev/sdc1               /u02                    ext4    defaults        0 0" >> /etc/fstab
    

    Important

    이 명령은 특정 UUID 없이 /etc/fstab 파일을 탑재하므로 디스크를 성공적으로 다시 부팅하지 못할 수 있습니다. 디스크를 다시 부팅하기 전에 탑재 지점에 대한 UUID를 포함하도록 /etc/fstab 항목을 업데이트합니다.

  10. 공용 IP 주소와 주소 호스트 이름으로 /etc/hosts 파일을 업데이트합니다. 실제 값을 반영하도록 <Public IP>와 두 <VMname> 부분을 변경합니다.

    echo "<Public IP> <VMname>.eastus.cloudapp.azure.com <VMname>" >> /etc/hosts
    
  11. VM의 도메인 이름을 /etc/hostname 파일에 추가합니다. 다음 명령은 리소스 그룹과 VM이 eastus 지역에 생성된다고 가정합니다.

    sed -i 's/$/\.eastus\.cloudapp\.azure\.com &/' /etc/hostname
    
  12. 방화벽 포트를 엽니다.

    SELinux는 Marketplace 이미지에서 기본적으로 사용되기 때문에 데이터베이스 수신 포트 1521 및 Enterprise Manager Express 포트 5502에 대한 트래픽에 방화벽을 열어야 합니다. 루트 사용자로 다음 명령을 실행합니다.

    firewall-cmd --zone=public --add-port=1521/tcp --permanent
    firewall-cmd --zone=public --add-port=5502/tcp --permanent
    firewall-cmd --reload
    

데이터베이스 생성

Oracle 소프트웨어는 이미 Marketplace 이미지에 설치되어 있습니다. 다음과 같이 샘플 데이터베이스를 만듭니다.

  1. oracle 사용자로 전환합니다.

    sudo su - oracle
    
  2. 데이터베이스 수신기를 시작합니다.

    lsnrctl start
    

    다음 예제와 유사하게 출력됩니다.

    LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 20-OCT-2020 01:58:18
    
    Copyright (c) 1991, 2019, Oracle.  All rights reserved.
    
    Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait...
    
    TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Log messages written to /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521)))
    
    Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
    Start Date                20-OCT-2020 01:58:18
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Log File         /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521)))
    The listener supports no services
    The command completed successfully
    
  3. Oracle 데이터 파일용 데이터 디렉터리 만들기

    mkdir /u02/oradata
    
  4. 데이터베이스 생성 도우미를 실행합니다.

    dbca -silent \
        -createDatabase \
        -templateName General_Purpose.dbc \
        -gdbname oratest1 \
        -sid oratest1 \
        -responseFile NO_VALUE \
        -characterSet AL32UTF8 \
        -sysPassword OraPasswd1 \
        -systemPassword OraPasswd1 \
        -createAsContainerDatabase false \
        -databaseType MULTIPURPOSE \
        -automaticMemoryManagement false \
        -storageType FS \
        -datafileDestination "/u02/oradata/" \
        -ignorePreReqs
    

    데이터베이스를 만드는 데 몇 분이 걸립니다.

    다음 예제와 유사하게 출력됩니다.

         Prepare for db operation
        10% complete
        Copying database files
        40% complete
        Creating and starting Oracle instance
        42% complete
        46% complete
        50% complete
        54% complete
        60% complete
        Completing Database Creation
        66% complete
        69% complete
        70% complete
        Executing Post Configuration Actions
        100% complete
        Database creation complete. For details check the logfiles at: /u01/app/oracle/cfgtoollogs/dbca/oratest1.
        Database Information:
        Global Database Name:oratest1
        System Identifier(SID):oratest1
        Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/oratest1/oratest1.log" for further details.
    
  5. Oracle 변수를 설정합니다.

    연결하기 전에 환경 변수 ORACLE_SID를 설정해야 합니다.

    export ORACLE_SID=oratest1
    

    또한 다음 명령을 사용하여 향후 로그인을 위해 ORACLE_SID 변수를 oracle 사용자 .bashrc 파일에 추가해야 합니다.

    echo "export ORACLE_SID=oratest1" >> ~oracle/.bashrc
    

데이터베이스 시작 및 종료 자동화

Oracle 데이터베이스는 기본적으로 VM을 다시 시작할 때 자동으로 시작되지 않습니다. Oracle 데이터베이스가 자동으로 시작되도록 설정하려면 먼저 루트로 로그인합니다. 그런 다음 일부 시스템 파일을 만들고 업데이트합니다.

  1. 루트 사용자로 로그온합니다.

    sudo su -
    
  2. /etc/oratab 파일에서 자동화된 시작 플래그를 N에서 Y로 변경합니다.

    sed -i 's/:N/:Y/' /etc/oratab
    
  3. /etc/init.d/dbora라는 파일을 만들고 다음 bash 명령을 파일에 추가합니다.

    #!/bin/sh
    # chkconfig: 345 99 10
    # Description: Oracle auto start-stop script.
    #
    # Set ORA_HOME to be equivalent to $ORACLE_HOME.
    ORA_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
    ORA_OWNER=oracle
    
    case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        # Remove "&" if you don't want startup as a background process.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
        touch /var/lock/subsys/dbora
        ;;
    
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME" &
        rm -f /var/lock/subsys/dbora
        ;;
    esac
    
  4. chmod 명령을 사용하여 파일에 대한 권한을 변경합니다.

    chgrp dba /etc/init.d/dbora
    chmod 750 /etc/init.d/dbora
    
  5. 시작 및 종료에 대한 기호 링크를 만듭니다.

    ln -s /etc/init.d/dbora /etc/rc.d/rc0.d/K01dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
    
  6. 변경 내용을 테스트하려면 VM을 다시 시작합니다.

    reboot
    

리소스 정리

Azure에서 첫 번째 Oracle 데이터베이스 탐색을 마친 후 VM이 더 이상 필요하지 않은 경우 az group delete 명령을 사용하여 리소스 그룹, VM 및 모든 관련 리소스를 제거할 수 있습니다.

az group delete --name rg-oracle

다음 단계