Vagrant 를 사용하면 복잡하게 Oracle XE 다운받고 설정할 필요없이 간단하게 설치가 가능합니다.

ChatGPT 에 사용한 프롬프트입니다

vagrant 로 virtualbox 에 rocky linux 9 에 oracle 개인 무료 버전 21c를 설치하고 
VM 의 IP 는 192.168.56.10 로 설정하고 
VM 이름은 oracle21c 으로 설치하는 방법을 단계별로 알려주세요. 
disksize 는 20GB 로 늘려주세요. 메모리는 4GB 로 할당해주세요.

전체적으로 다음과 같은 과정으로 진행이 됩니다.

- Vagrant plugin 설치

- Vagrant 프로젝트 폴더 만들기

- Vagrantfile 생성

- Vagrant 실행 (vagrant up)

1) Vagrant Plugin 설치

Vagrant 는 기본적으로 저장공간은 10GB 입니다.

Oracle 은 최소 20GB 를 필요로하기 때문에 disk size 를 20GB로 늘렸습니다.

Vagrant 에서 disk size 를 늘리기 위해 disksize plugin 이 필요합니다.

다음과 같이 plugin 을 설치합니다.

vagrant plugin install vagrant-disksize

 

2) Vagrant 프로젝트 폴더 만들기

프로젝터 폴더를 생성합니다.

폴더 이름은 본인이 원하는 이름을 사용해도 됩니다.

mkdir vagrant-rocky-oracle-xe
cd vagrant-rocky-oracle-xe
vagrant init generic/rocky9

generic/rocky9는 Rocky Linux 9을 기반으로 하는 Vagrant Box입니다.

Vagrantfile 을 아래와 같이 수정합니다.

4GB 메모리로 oracle 21c 설치하는 예제입니다.

아래 코드는 다음에서 다운로드가 가능합니다.

git clone git@github.com:jbpark/jbDeskExample.git
cd jbDeskExample/vagrant/ch1.2

Vagrantfile

Vagrant.configure("2") do |config|
  # ✅ Rocky Linux 9 사용
  config.vm.box = "rockylinux/9"
  config.disksize.size = '20GB'

  # VM 이름 설정
  config.vm.define "oracle21c" do |oracle|
    oracle.vm.hostname = "oracle21c"

    # 네트워크 설정 (고정 IP)
    oracle.vm.network "private_network", ip: "192.168.56.10"

    # VirtualBox 설정
    oracle.vm.provider "virtualbox" do |vb|
      vb.name = "oracle21c"
      vb.memory = "4096"
      vb.cpus = 2
    end

    config.vm.synced_folder ".", "/vagrant", disabled: true

    # 프로비저닝 (Oracle 21c XE 설치)
    oracle.vm.provision "shell", inline: <<-SHELL
      echo "=====[ 1. resize disk ]====="
      sudo yum clean all
      sudo yum -y update
      sudo yum install cloud-utils-growpart -y
      sudo growpart /dev/sda 4
      sudo xfs_growfs /
      echo "=====[ 2. 패키지 업데이트 및 필수 라이브러리 설치 ]====="
      sudo yum -y install wget
      sudo systemctl stop firewalld
      sudo systemctl disable firewalld
      sudo systemctl status firewalld

      # 의존 패키지 설치
      sudo wget https://dl.rockylinux.org/pub/rocky/8/AppStream/x86_64/os/Packages/c/compat-openssl10-1.0.2o-4.el8_6.x86_64.rpm
      sudo dnf -y localinstall compat-openssl10-1.0.2o-4.el8_6.x86_64.rpm

      echo "=====[ 3. Oracle 설치 ]====="
      # 사전 설치 파일 다운로드
      sudo curl -o oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/getPackage/oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm
	  sudo dnf -y localinstall oracle-database-preinstall-21c*

      # 설치 파일 실행
      # -L 옵션 : Redirect (301, 302)가 응답될 경우, redirect 된 링크로 가서, 파일을 다운로드 받음
      sudo curl -L -o oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm
      sudo dnf -y localinstall oracle-database-xe-21c*

      # rpm 파일 삭제
      sudo rm -rf compat-openssl10-1.0.2o-4.el8_6.x86_64.rpm
      sudo rm -rf oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm
      sudo rm -rf oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm

      export CV_ASSUME_DISTID=RHEL8
      export ORACLE_BASE=/opt/oracle
      export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE
      export ORACLE_SID=XE
      export PATH=/opt/oracle/product/21c/dbhomeXE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\$PATH

      sudo echo "========== Setting up environment variables =========="
      sudo echo "export CV_ASSUME_DISTID=RHEL8" | sudo tee -a /etc/environment
      sudo echo "export ORACLE_BASE=/opt/oracle" | sudo tee -a /etc/environment
      sudo echo "export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE" | sudo tee -a /etc/environment
      sudo echo "export PATH=/opt/oracle/product/21c/dbhomeXE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\$PATH" | sudo tee -a /etc/environment
      sudo echo "export ORACLE_SID=XE" | sudo tee -a /etc/environment
      source /etc/environment

      echo "========== Removing old listener config if exists =========="
      sudo rm -rf /opt/oracle/homes/OraDB21Home1/network/admin/listener.ora

      echo "Updating /etc/hosts..."
      sudo bash -c 'echo "192.168.56.10 oracle21c" >> /etc/hosts'

      echo "========== Configuring Oracle XE with auto password =========="
      printf "Oracle1234\nOracle1234\n" | sudo /etc/init.d/oracle-xe-21c configure

      echo "========== Updating listener.ora =========="
      cat <<EOL | sudo tee /opt/oracle/homes/OraDBHome21cXE/network/admin/listener.ora
DEFAULT_SERVICE_LISTENER = XE

LISTENER =
(DESCRIPTION_LIST =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  )
)
EOL

      sudo chown -R oracle:oinstall /opt/oracle
      sudo chmod -R 750 /opt/oracle
      sudo chmod 640 /opt/oracle/homes/OraDBHome21cXE/network/admin/listener.ora

      echo "========== Restarting Oracle Listener =========="
      sudo -u oracle $ORACLE_HOME/bin/lsnrctl stop
      sudo -u oracle $ORACLE_HOME/bin/lsnrctl start

      echo "========== Enabling and starting Oracle service =========="
      sudo systemctl enable oracle-xe-21c
      sudo systemctl restart oracle-xe-21c

      echo "========== Checking Oracle service status =========="
      sudo systemctl status oracle-xe-21c --no-pager

      echo "========== Oracle XE 21c Installation Completed! =========="

      # 사용자 설정
      ORACLE_USER="testuser"      # 생성할 계정명
      ORACLE_PASSWORD="test1234"  # 계정 비밀번호
      ORACLE_SID="XE"             # DB 서비스명 (XE 기본값)

      # SQL 실행 함수
      create_user_sql=$(cat <<EOF
ALTER SESSION SET CONTAINER = XEPDB1;
CREATE USER $ORACLE_USER IDENTIFIED BY "$ORACLE_PASSWORD";
GRANT CONNECT, RESOURCE TO $ORACLE_USER;
ALTER USER $ORACLE_USER QUOTA UNLIMITED ON USERS;
GRANT CREATE SESSION TO $ORACLE_USER;
ALTER PLUGGABLE DATABASE XEPDB1 OPEN;
ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE;
EXIT;
EOF
      )

      # SQL 실행 (sysdba 권한 필요)
      echo "Oracle 계정 생성 중: $ORACLE_USER"
      echo "$create_user_sql" | sudo -u oracle /opt/oracle/product/21c/dbhomeXE/bin/sqlplus -s / as sysdba

      echo "Oracle 계정 $ORACLE_USER 생성 완료!"
    SHELL
  end
end

 

 

 

3) Vagrant up

 

아래 명령으로 VM 생성을 합니다.

vagrant up

vagrant 생성 이나 삭제 시에는 vagrant 에서 VM 을 종료 시키거나 VM 파일을 삭제해야할 수 있습니다.

그래서 이러한 과정을 처리하는 스크립트를 만들었습니다.

VM 생성

create_vm.bat

@echo off
set VM_NAME=oracle21c
set VM_PATH=%USERPROFILE%\VirtualBox VMs\%VM_NAME%
set VDI_FILE=%VM_NAME%.vdi

:: VirtualBox의 전체 경로로 VBoxManage 실행
set VBOXMANAGE="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"

if exist "%VDI_FILE%" (
    %VBOXMANAGE% closemedium disk "%VDI_FILE%"
    del /f /q "%VDI_FILE%"
    echo %VDI_FILE% has been deleted.
) else (
    echo %VDI_FILE% does not exist.
)

if exist "%VM_PATH%" (
    echo %VM_NAME% already exists.
) else (
    echo %VM_NAME% does not exist. Starting Vagrant VM...
    vagrant halt
    vagrant up
)

 

VM 삭제

remove_vm.bat

@echo off
set VM_NAME=oracle21c
set VM_PATH=%USERPROFILE%\VirtualBox VMs\%VM_NAME%
set VDI_FILE=%VM_NAME%.vdi

:: VirtualBox의 전체 경로로 VBoxManage 실행
set VBOXMANAGE="C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"

:: VM이 실행 중인지 확인하고 종료
echo Checking if VM is running...
%VBOXMANAGE% showvminfo %VM_NAME% --machinereadable | findstr "VMState=" | findstr /i "running"
if %errorlevel%==0 (
    echo VM is running. Stopping the VM...
    vagrant halt %VM_NAME% --force

    :: 잠시 기다린 후 삭제 작업
    timeout /t 5 /nobreak
) else (
    echo VM is not running.
)

if exist "%VM_PATH%" (
    echo Deleting "%VM_PATH%"...
    vagrant destroy -f %VM_NAME%
    rmdir /s /q "%VM_PATH%"
    echo Deleted successfully. : "%VM_NAME%"
) else (
    echo Directory does not exist: "%VM_PATH%"
)

if exist "%VDI_FILE%" (
    %VBOXMANAGE% closemedium disk "%VDI_FILE%"
    del /f /q "%VDI_FILE%"
    echo %VDI_FILE% has been deleted.
) else (
    echo %VDI_FILE% does not exist.
)

4) vagrant 에러

DHCP 에러

이 오류는 VirtualBox에서 중복된 호스트 전용 네트워크(Host-Only Network) DHCP 설정이 충돌하여 발생하는 문제입니다.

VirtualBox에서 중복된 DHCP 설정을 비활성화하거나 삭제합니다.

Vagrant 1.1편-Vagrant설치 를 참고하세요.

https://javata.tistory.com/59

 

Vagrant 1.1편-Vagrant설치

가상환경을 구축하는 방법으로 Virtual Box, VMWare 등을 사용할 수 있습니다.Vagrant 를 사용하면 스크립트로 원하는  VM 을 쉽게 구축할 수 있습니다.또 여러개의  VM 도 쉽게 만들 수 있습니다.코딩을

javata.tistory.com

 

 

Oracle XE 다운로드 에러

Oracle XE 설치 파일은 2GB 정도 됩니다.

그래서 네크워크가 느린 환경에서는 다운로드 에러가 발생하기도 합니다.

이 경우 Oracle XE 를 직접 다운로드하여 winscp 나 ftp 같은 프로그램으로 VM 에 넣어야 할 수도 있습니다.

다음 URL 에 Oracle XE 를 다운로드 합니다.

https://www.oracle.com/database/technologies/xe-downloads.html

 

Oracle Database Express Edition (XE) Downloads

Support Oracle Database Express Edition (XE) is a community supported edition of the Oracle Database family. Please go to the Oracle Database XE Community Support Forum for help, feedback, and enhancement requests. Note: Oracle Support Services only provid

www.oracle.com

 

Rocky Linux 9 의 경우 OL8 을 다운로드합니다.

OL7 vs OL8 선택 기준


OS 다운로드할 버전
Rocky Linux 9, Oracle Linux 8, RHEL 8, CentOS 8 OL8 (올바른 선택)
Rocky Linux 8, Oracle Linux 7, RHEL 7, CentOS 7 OL7 (구버전)

5) SQL Developer 설치

정성적으로 Oracle 에 연결이 가능한지 테스트하기 위해서는 Oracle 에 연결가능한 tool 로 테스트해야 합니다.

Oracle SQLDevloper 로 테스트해보겠습니다.

다음 URL 에서 다운받아서 압축을 풀고 실행하면 됩니다.

https://www.oracle.com/database/sqldeveloper/technologies/download/

 

Oracle SQL Developer Downloads

This archive. will work on a 32 or 64 bit Windows OS. The bit level of the JDK you install will determine if it runs as a 32 or 64 bit application. This download does not include the required Oracle Java JDK. You will need to install it if it's not already

www.oracle.com

 

저는 아래 버전을 다운받았습니다.

6) Oracle 연결 테스트

SQL Developer 에서 새 접속을 클릭 후에 다음과 같이 입력합니다.

테스트를 클릭하여 상태에 성공이 나오면 됩니다.

'유틸리티 > Vagrant' 카테고리의 다른 글

Vagrant 1.3편-Rocky Linux 에 MariaDB 설치  (1) 2025.04.05
Vagrant 1.1편-Vagrant설치  (1) 2025.03.30
Posted by 제이브레인
,