들어가기 전에
책을 보며 실습하기 위해 Oracle Database 설치가 필요해졌습니다. 해당 책은 windows PC를 기준으로 하고 있어, mac에서 수행 가능한 oracle database 설치 및 실행 방법에 대해 정리해보고자 합니다.
macOS와 Oracle Database
Oracle database는 mySQL과 다르게 macOS에서 바로 설치하여 사용할 수 없습니다(windows OS는 가능). 따라서, Docker를 이용하여 Oracle Database 환경을 설정해야 합니다.
아래 글은 macOS에 Docker가 설치되어 있다고 가정하고 진행하기 때문에, Docker가 깔려있지 않다면 하단 URL을 통해 Docker를 설치한 후에 봐주시면 됩니다.
Oracle Database 버전
기본적으로 Oracle Database는 유료입니다. 따라서, Database에 큰 돈을 들일 수 없는 소규모 프로젝트나 교육용으로 사용하기 어렵습니다. 이런 문제점을 보완하여 나온 것이 Oracle XE(Express Edition)입니다.
Oracle XE에는 Oracle Database 11g Express Edition과 Oracle Database 18c Express Edition가 있습니다. 아무래도, Oracle Database 18c Express Edition이 좀 더 최신 버전이기 때문에 지원 범위가 좀 더 넓습니다. 따라서, 이번 글에서는 18c 버전을 설치하고자 합니다.
Oracle Database 11g Express Edition | Oracle Database 18c Express Edition | |
---|---|---|
User Data | 4GB | 12GB |
Memory | 1GB | 2GB |
CPU thread | 1CPU | 2CPU |
Oracle Database 18c XE (18.4.0) 설치하기
먼저, Oracle Database 설치 공식 페이지에 접근하여, quick start를 클릭하면 아래와 같이 설치할 때 필요한 파일을 어디서 받을 수 있는지를 확인합니다.
https://www.oracle.com/kr/database/technologies/appdev/xe.html
Docker를 통해 Oracle Database XE를 설치하기 위한 파일은 아래 사진에 나와있는 것처럼 https://github.com/oracle/docker-images 에서 다운로드 할 수 있습니다.
위 github에서 다운로드 할 수 있는 항목 중, oracle database를 설치해야 하므로 https://github.com/oracle/docker-images/tree/main/OracleDatabase 로 접근하면 됩니다.
필자는 그 중에서도 SingleInstance로 사용할 것이라 SingleInstance를 클릭하여 README에 나와있는 것처럼, 각 Database 버전별로 Dockerfiles 예시를 참고하여 해당 Dockerfiles에 적힌 대로 진행해보았습니다.
- 아래 오른쪽 사진에서 확인할 수 있듯이 oracle에서 제공하는 18c XE 버전은 18.4.0 버전입니다.
Oracle Database 18c XE 설치를 위해 dockerfiles/18.4.0의 Dockerfile을 확인해보면 다음과 같이 설치 방법이 나와있습니다.
- Oracle Database 18c XE를 build하기 위해 필요한 파일은 따로 없고, 아래 명령어를 입력하면 실행이 가능하다고 보면 됩니다.
# LICENSE UPL 1.0
#
# Copyright (c) 2018, 2020 Oracle and/or its affiliates.
#
# ORACLE DOCKERFILES PROJECT
# --------------------------
# This is the Dockerfile for Oracle Database 18c Express Edition
#
# REQUIRED FILES TO BUILD THIS IMAGE
# ----------------------------------
# None
#
# HOW TO BUILD THIS IMAGE
# -----------------------
# Run:
# $ docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .
Docker에 설치를 하기 위해 dockerfiles/18.4.0 내의 내용을 로컬에 다운로드합니다. 다운로드 경로는 따로 지정된 바 없고, 편한 곳에 지정하면 됩니다. 필자의 경우, Documents 내에 개발 관련 내용을 모으고 있어 해당 폴더에 git clone했습니다.
특정 directory만 git clone하는 방법에 대해 궁금한 경우, 아래 URL에 방법을 작성해두었으니 해당 내용을 확인해보시면 됩니다.
clone한 폴더 내에서 Run 명령어를 입력하기 전, Dokcerfile.xe에서 vi를 설치하는 명령어를 추가로 세팅해주었습니다.
- Run 명령어는 Dockerfile.xe 내의 Run:에 적힌 명령어(
docker build -t oracle/database:18.4.0-ex -f Dockerfile.xe .
)를 clone된 파일들이 있는 디렉토리에서 수행하면 됩니다.
설치가 완료된 후, docker images
명령어로 docker 리스트를 확인하면 아래와 같이 oracle database가 설치되어 있음을 확인할 수 있습니다.
Oracle Database 실행 및 Sqlplus 시작해보기
Oracle DB 도커 container로 실행하기
위 과정까지 진행이 완료되면, docker images 생성이 완료된 것입니다. 이제 해당 이미지를 이용해서 docker container를 띄워볼 수 있습니다. 위에서 생성한 docker image를 이용하여 oracle 컨테이너를 띄워보도록 하겠습니다.
먼저 terminal을 열어 아래와 같이 작성해줍니다.
docker run --name [container명] \
> -d \
> -p 51521:1521 \
> -p 55500:5500 \
> -e ORACLE_PWD=[비밀번호] \
> -e ORACLE_CHARACTERSET=AL32UTF8 \
> [REPOSITORY명]:[TAG]
-name [container명]
: 컨테이너의 이름을 작성하는 부분입니다(작성하지 않아도 되지만, 그렇게 되면 임의값이 들어갑니다).-detach
,-d
: 컨테이너를 백그라운드로 구동합니다.-p [호스트OS 포트]:[container 포트]
: 호스트OS 포트를 container 포트에 매핑하는 것입니다.- Oracle DB의 default TCP포트가 1521이므로, 위에서 container 포트로는 1521을 작성하였고, 앞에 5를 붙인 값을 호스트OS포트로 작성하였습니다. 이에 따라, 호스트OS 51521 포트는 container의 1521 포트에 매핑된다고 볼 수 있습니다.
- 5500 포트는 EM Express라는 무료 DB 관리 도구의 default 포트로, 미리 매핑해두었으며 EM Express 포트 역시 호스트OS포트는 앞에 5를 더 붙여서 설정했습니다.
-e ORACLE_PWD=[비밀번호], -e ORACLE_CHARACTERSET=AL32UTF8
: 환경 변수들로 비밀번호는 관리자 비밀번호로 간단하게 1234로 설정했으며 characterset에는 DB의 표준 설정을 넣어두었습니다.
위와 같이 설정하여 container를 생성하면, 아래와 같이 docker 실행 시 컨테이너가 RUNNING 중임을 확인할 수 있습니다.
위에서 생성한 컨테이너가 어떠한 상태로 실행중인지는 아래와 같이 docker ps
명령어를 terminal에 실행하여 확인할 수 있습니다.
sqlplus 실행하기 (ORA-12547 에러 해결책 포함)
이렇게 oracle DB 도커 container를 실행한 상태에서 아래 명령어를 사용하면 sqlplus를 실행할 수 있습니다.
docker exec -it --user=oracle oracle_db sqlplus
sqlplus 실행 시, --user=oracle
을 넣지 않으면, 아래와 같이 ORA-12547: TNS: lost contact
에러가 발생합니다. 꼭 --user=oracle
을 넣고 진행이 필요합니다.
- 위와 같이 명령어를 친 뒤 user-name에는 system(또는 SYSTEM)을 입력합니다.
- password란에는 기존에 oracle db 컨테이너를 생성할 때 지정한 password를 입력하면 됩니다.
- sqlplus를 종료는
exit
명령어를 사용하여 진행할 수 있으며,control(⌃) + d
를 통해서도 나갈 수 있습니다.
TIP: Docker 명령어
# 버전 확인
$ docker -v
# 이미지 다운로드
$ docker pull [이미지 명]
# 다운로드된 이미지 목록
$ docker images
# 컨테이너 생성
$ docker create [옵션] [이미지 명]
# 컨테이너 생성 및 실행
$ docker run [옵션] [이미지 명]
# 컨테이너 실행
$ docker start [컨테이너명]
# 컨테이너 재실행
$ docker restart [컨테이너명]
# 컨테이너 접속
$ docker attach [컨테이너명]
# 컨테이너 정지
$ docker stop [컨테이너명]
# 실행중인 컨테이너 목록
$ docker ps
# 정지된 컨테이너 목록
$ docker ps -a
# 컨테이너 명 변경
$ docker rename [기존 컨테이너명] [새로운 컨테이너명]
# 컨테이너 삭제
$ docker rm [컨테이너명]
'DB > Oracle' 카테고리의 다른 글
[Oracle] Oracle Function(오라클 함수) - 문자 함수 (0) | 2022.05.07 |
---|---|
[Oracle] Oracle Database에서 사용되는 연산자 종류 알아보기 (0) | 2022.05.06 |
[Oracle] SELECT에 대해 알아보기 (0) | 2022.05.06 |
[Oracle, macOS] Docker를 이용한 Oracle Database 11gR2 XE 설치 및 실행하기(SQLPlus, DataGrip 접속 및 SCOTT 계정 생성) (1) | 2022.05.05 |
[Oracle] 데이터베이스 기본 개념 및 관계형 데이터베이스 알아보기 (0) | 2022.05.05 |