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(네트워크 보안 그룹)를 설정하여 데이터베이스 수신기에서 사용할 일부 외부 엔드포인트를 구성해야 합니다.
az network nsg create 명령을 사용하여 VM에 대한 NSG를 만듭니다. 이 명령은 VM에 대한 액세스를 제어하는 규칙에 대한 vmoracle19cNSG NSG를 만듭니다.
az network nsg create --resource-group rg-oracle --name vmoracle19cNSG
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
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
필요에 따라 az network public-ip show 명령을 사용하여 VM의 공용 IP 주소를 가져옵니다.
az network public-ip show \ --resource-group rg-oracle \ --name vmoracle19cPublicIP \ --query "ipAddress" \ --output tsv
VM 환경 준비
VM을 사용하여 SSH 세션을 만듭니다.
<publicIPAddress>
부분을 VM의 공용 IP 주소 값(예:10.200.300.4
)으로 바꿉니다.ssh azureuser@<publicIPAddress>
루트 사용자로 전환합니다.
sudo su -
Oracle 데이터 파일을 보관하도록 서식을 지정할 가장 최근에 만든 디스크 디바이스를 찾습니다.
ls -alt /dev/sd*|head -1
출력은 다음 예제와 유사합니다.
brw-rw----. 1 root disk 8, 16 Dec 8 22:57 /dev/sdc
루트 사용자로서,
parted
명령을 사용하여 디바이스의 형식을 지정합니다.먼저 디스크 레이블을 만듭니다.
parted /dev/sdc mklabel gpt
다음으로, 전체 디스크에 걸쳐 있는 기본 파티션을 만듭니다.
parted -a optimal /dev/sdc mkpart primary 0GB 64GB
마지막으로 메타데이터를 인쇄하여 디바이스 세부 정보를 확인합니다.
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
디바이스 파티션에 파일 시스템 만듭니다.
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
탑재 지점을 만듭니다.
mkdir /u02
디스크를 탑재합니다.
mount /dev/sdc1 /u02
탑재 지점에 대한 권한을 변경합니다.
chmod 777 /u02
/etc/fstab 파일에 탑재를 추가합니다.
echo "/dev/sdc1 /u02 ext4 defaults 0 0" >> /etc/fstab
Important
이 명령은 특정 UUID 없이 /etc/fstab 파일을 탑재하므로 디스크를 성공적으로 다시 부팅하지 못할 수 있습니다. 디스크를 다시 부팅하기 전에 탑재 지점에 대한 UUID를 포함하도록 /etc/fstab 항목을 업데이트합니다.
공용 IP 주소와 주소 호스트 이름으로 /etc/hosts 파일을 업데이트합니다. 실제 값을 반영하도록
<Public IP>
와 두<VMname>
부분을 변경합니다.echo "<Public IP> <VMname>.eastus.cloudapp.azure.com <VMname>" >> /etc/hosts
VM의 도메인 이름을 /etc/hostname 파일에 추가합니다. 다음 명령은 리소스 그룹과 VM이 eastus 지역에 생성된다고 가정합니다.
sed -i 's/$/\.eastus\.cloudapp\.azure\.com &/' /etc/hostname
방화벽 포트를 엽니다.
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 이미지에 설치되어 있습니다. 다음과 같이 샘플 데이터베이스를 만듭니다.
oracle 사용자로 전환합니다.
sudo su - oracle
데이터베이스 수신기를 시작합니다.
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
Oracle 데이터 파일용 데이터 디렉터리 만들기
mkdir /u02/oradata
데이터베이스 생성 도우미를 실행합니다.
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.
Oracle 변수를 설정합니다.
연결하기 전에 환경 변수
ORACLE_SID
를 설정해야 합니다.export ORACLE_SID=oratest1
또한 다음 명령을 사용하여 향후 로그인을 위해
ORACLE_SID
변수를oracle
사용자 .bashrc 파일에 추가해야 합니다.echo "export ORACLE_SID=oratest1" >> ~oracle/.bashrc
데이터베이스 시작 및 종료 자동화
Oracle 데이터베이스는 기본적으로 VM을 다시 시작할 때 자동으로 시작되지 않습니다. Oracle 데이터베이스가 자동으로 시작되도록 설정하려면 먼저 루트로 로그인합니다. 그런 다음 일부 시스템 파일을 만들고 업데이트합니다.
루트 사용자로 로그온합니다.
sudo su -
/etc/oratab 파일에서 자동화된 시작 플래그를
N
에서Y
로 변경합니다.sed -i 's/:N/:Y/' /etc/oratab
/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
chmod
명령을 사용하여 파일에 대한 권한을 변경합니다.chgrp dba /etc/init.d/dbora chmod 750 /etc/init.d/dbora
시작 및 종료에 대한 기호 링크를 만듭니다.
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
변경 내용을 테스트하려면 VM을 다시 시작합니다.
reboot
리소스 정리
Azure에서 첫 번째 Oracle 데이터베이스 탐색을 마친 후 VM이 더 이상 필요하지 않은 경우 az group delete 명령을 사용하여 리소스 그룹, VM 및 모든 관련 리소스를 제거할 수 있습니다.
az group delete --name rg-oracle
다음 단계
- Oracle 백업 전략을 사용하여 Azure에서 데이터베이스 보호
- Azure의 Oracle 솔루션 살펴보기
- Oracle Automated Storage Management 설치 및 구성