[Oracle] docker로 oracle 실행하기 (with colima)
Oracle 설치 (with Colima)
Apple Silicon에서는 아키텍처가 바뀌어서 orcale 데이터베이스를 띄울 수 없었다.
관련 정보를 찾아가며 시도 해봤지만 sqlplus 접속 시 사용자 이름과 password를 입력하는 단계에서 계속
ORA-01034: ORACLE not available
, ORA-27101: shared memory realm does not exist
라는 오류를 만났다.
몇 시간의 삽질 끝에 방법을 찾았다..!
오픈 소스 컨테이너 런타임인 Colima를 사용해 oci-oracle-xe 이미지를 x86/64 환경으로 띄운다면,
M1 맥북에서도 오라클 데이터베이스를 띄울 수 있다고 한다!
맥북에서 Docker로 oracle DB 설치 (colima 사용)
docker가 아직 설치되어 있지 않다면 설치하고,
기존에 이미 설치되어있다면 실행중인 Docker desktop을 종료만 하고 아래의 Colima 실행으로 넘어가자.
(나는 이미 설치되어 있었기 때문에 아래 사진처럼 Docker desktop만 Quit 했다.)
# colima 설치
$ brew install colima
# colima를 x86_64 환경으로 실행 (Colima를 사용하지 않고 Docker Desktop 환경에서는 oci-oracle-xe 이미지로 컨테이너를 띄웠을 때 아키텍처가 달라 문제가 되었었는데, 그걸 Colima가 해결 해 줍니다.)
$ colima start --memory 4 --arch x86_64
# 오라클 컨테이너 구동 (비밀번호는 원하는걸로 설정)
# $ docker run --restart unless-stopped --name oracle -e ORACLE_PASSWORD=pass -p 1521:1521 -d jaspeen/oracle-xe-11g
# 위에 커맨드로 하니까 sql developer에서 password를 oracle로 해야지 성공한다...
$ docker run --restart unless-stopped --name oracle -e ORACLE_PASSWORD=pass -p 1521:1521 -d gvenzl/oracle-xe
# 실행 결과 및 로그 확인
$ docker ps -a
$ docker logs -f oracle
실행중
성공 화면
Trouble Shooting
원래는 colima를 이용하지 않고 docker compose만 이용해 구동하려 했다. (결론적으로는 실패했다..!ㅜ)
docker-compose.yml
version: '2'
services:
database:
container_name: oracle
platform: linux/amd64
# shm_size: 1G
image: jaspeen/oracle-xe-11g
# image: oracle/database:11.2.0.2-xe
# environment:
# - ORACLE_SID=xe
# - ORACLE_PDB=test
# - ORACLE_PWD=test
# volumes:
# - ./oracle/oradata:/opt/oracle/oradata # persistent oracle database data.
# - ./data-bridge:/data-bridge # just to have someplace to put data into the running container if needed
# - ./initscripts:/u01/app/oracle/scripts/startup # please here init scripts
ports:
- 1521:1521
- 8080:8080
# - 5500:5500
networks:
- dev
networks:
dev:
driver: bridge
그리고 아래 커맨드를 순서대로 실행했다.
$ docker-compose up -d
$ docker ps -a # 여기까지는 oracle 컨테이너 정상 구동
$ docker exec -it oracle sqlplus # 에러 발생
하지만 계속해서 위와 같은 에러가 발생했다..
에러를 해결하기 위해서 startup을 하면 된다고 해서 아래처럼 시도해보았다.
$ docker exec -it oracle bin/bash
root@c3acdb41c5f6:/# sqlplus /nolog
SQL> conn sys/ as sysdba # Enter password가 나오면 oracle 입력
SQL> startup
하지만 startup
을 입력하니 ORA-00443: background process "PMON" did not start
라는 또다른 에러가 발생하여 다른 방법을 찾기로 했다ㅜ
SQL Developer 설치
SQL Developer란?
SQL Developer는 Oracle에서 무료로 제공하는 GUI툴이다.
(콘솔에서 직접 데이터베이스를 관리하는 것이 아닌 프로그램을 통해서 쉽게 데이터베이스를 관리할 수 있도록 하는 것이다.)
설치
홈페이지에서 OS에 맞는 오라클을 다운로드한다.
연결테스트
위에서 설치한 SQL Developer를 실행한 뒤 연결을 테스트해보자.
- Name은 원하는 이름
- 사용자 이름은
system
- 비밀번호는
pass
(아까 위에서 옵션으로 준 값) - SID는
xe
테스트 버튼을 누르면 성공
이라고 뜬다!
그리고 접속 버튼을 누르면 아래처럼 실행된다.
샘플 데이터 수동 설치 - HR Schema
이 글을 참고했다.
현재 오라클을 docker로 구동중이다.
sql plus를 실행하여 샘플 데이터를 설치하자.
$ docker exec -it oracle sqlplus # oracle 자리에는 컨테이넝 이름
# user-name은 sys as sysdba, password는 그냥 엔터 (user-name은 system, password는 pass 도 가능하다!)
# 유저 생성 가능 (강의 14:00)
SQL> alter session set "_ORACLE_SCRIPT"=true;
SQL> @?/demo/schema/human_resources/hr_main.sql
# 1의 값: hr
# 2의 값: users
# 3의 값: temp
# 4의 값: /product/21c/dbhomeXE/demo/schema/log/
=====
docker compose 이용
docker exec -it oracle /bin/bash
product/21c/dbhomeXE/demo/schema/ -> 이 안에 log 존재
하지만 human_resoures
가 없다!!
이를 해결하기 위해 로컬에서 샘플 코드를 따로 다운받은 후,
Dockerfile을 통해 컨테이너 내부로 옮기고자 했다.
전체 디렉터리 구조는 아래와 같다.
docker-files
⎿ oracle
⎿ docker-compose.yml
⎿ Dockerfile
⎿ db-sample-schemas-19.2
docker-compose.yml
version: '2'
services:
database:
build:
context: ./oracle/
dockerfile: Dockerfile
container_name: oracle
platform: linux/amd64
# image: gvenzl/oracle-xe
restart: always
environment:
- ORACLE_PASSWORD=pass
ports:
- 1521:1521
networks:
- dev
networks:
dev:
driver: bridge
Dockerfile
FROM gvenzl/oracle-xe
ADD db-sample-schemas-19.2/human_resources $HOME/product/21c/dbhomeXE/demo/schema/human_resources
db-sample-schemas-19.2
는 샘플 데이터들이 담긴 디렉토리이다.
샘플 데이터는 여기서 받을 수 있다.
💛 개인 공부 기록용 블로그입니다. 👻