==============================
2019.11.13 추가
본 글은 작업이 가능한 오라클을 구성(설치) 하는 개념이며
프로젝트의 오라클 개발DB와 동일한 환경을 구성하기 위해서는 본 글을 훓어보고 아래의 링크의 글을 읽어보길 권한다.
링크 - [Docker] 개발DB Oracle 환경을 로컬에 그대로 구축하는 방법
==============================
오라클 로컬 서버가 필요해져서 도커로 설치하는 방법을 알아보았다.
도커를 처음해보다보니 시간이 걸리긴 했지만 알고나니 금방 할 수 있는 작업이었다.
전제조건
도커허브(https://hub.docker.com/)에서 도커를 다운로드 받아 설치 및 로그인이 되어있다는 가정하에 작업을 하겠다.
작업 방법
1. Docker - Oracle Database Enterprise Edition 사이트에서 체크아웃을 진행한다.
- 링크: https://hub.docker.com/_/oracle-database-enterprise-edition?tab=resources
정보를 입력 후 아래와 같은 화면이 나오며 이미지를 checkout 받을 수 있는 링크가 보여진다.
- docker pull store/oracle/database-enterprise:12.2.0.1
스크롤을 마지막까지 내리면 몇개의 기능이 빠진 slim 버전을 제공하는데 나는 이 버전으로 테스트를 진행을 했다.
2. 커맨드 창에서 도커 이미지 체크아웃/구동 후 Oracle 접속 계정을 생성한다.
아래에도 나오겠지만 설치되는 오라클의 기본정보는 다음과 같다.
USER = sys / Oradoc_db1
DB_SID=ORCLCDB
DB_PDB=ORCLPDB1
DB_MEMORY=2GB
DB_DOMAIN=localdomain
DB_SID=ORCLCDB
DB_PDB=ORCLPDB1
DB_MEMORY=2GB
DB_DOMAIN=localdomain
(c) 2019 Microsoft Corporation. All rights reserved.
C:\Users\1004lucifer>
# 현재 사용중인 도커 버전
C:\Users\1004lucifer>docker --version
Docker version 19.03.1, build 74b1e89
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 도커 로그인이 되어있어야 한다.
C:\Users\1004lucifer>docker login
Authenticating with existing credentials...
Login Succeeded
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 이미지 체크아웃
C:\Users\1004lucifer>docker pull store/oracle/database-enterprise:12.2.0.1-slim
12.2.0.1-slim: Pulling from store/oracle/database-enterprise
4ce27fe12c04: Pull complete
9d3556e8e792: Pull complete
fc60a1a28025: Pull complete
0c32e4ed872e: Pull complete
be0a1f1e8dfd: Pull complete
Digest: sha256:dbd87ae4cc3425dea7ba3d3f34e062cbd0afa89aed2c3f3d47ceb5213cc0359a
Status: Downloaded newer image for store/oracle/database-enterprise:12.2.0.1-slim
docker.io/store/oracle/database-enterprise:12.2.0.1-slim
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 이미지가 정상적으로 받아졌는지 확인
C:\Users\1004lucifer>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
store/oracle/database-enterprise 12.2.0.1-slim 27c9559d36ec 2 years ago 2.08GB
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 해당 이미지를 컨테이너로 구동
C:\Users\1004lucifer>docker run -dit --name local_db -p 1521:1521 store/oracle/database-enterprise:12.2.0.1-slim
048cd97b8e0f2c8b8131a0b3c6addf24761e276a85b1ab92cac482b6ce009d63
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 컨테이너가 정상적으로 구동되었는지 확인
C:\Users\1004lucifer>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
048cd97b8e0f store/oracle/database-enterprise:12.2.0.1-slim "/bin/sh -c '/bin/ba…" 4 minutes ago Up 4 minutes (healthy) 0.0.0.0:1521->1521/tcp, 5500/tcp local_db
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 컨테이너의 로그 확인
C:\Users\1004lucifer>docker logs -f local_db
Setup Oracle Database
Oracle Database 12.2.0.1 Setup
Mon Nov 4 14:23:45 UTC 2019
Check parameters ......
log file is : /home/oracle/setup/log/paramChk.log
paramChk.sh is done at 0 sec
untar DB bits ......
log file is : /home/oracle/setup/log/untarDB.log
untarDB.sh is done at 78 sec
config DB ......
log file is : /home/oracle/setup/log/configDB.log
Mon Nov 4 14:25:03 UTC 2019
Start Docker DB configuration
Call configDBora.sh to configure database
Mon Nov 4 14:25:03 UTC 2019
Configure DB as oracle user
Setup Database directories ...
SQL*Plus: Release 12.2.0.1.0 Production on Mon Nov 4 14:25:04 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
File created.
SQL> ORACLE instance started.
Total System Global Area 1342177280 bytes
Fixed Size 8792536 bytes
Variable Size 352323112 bytes
Database Buffers 973078528 bytes
Redo Buffers 7983104 bytes
Database mounted.
Database opened.
SQL>
Database altered.
... 생략 ...
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
DONE!
Remove password info
Docker DB configuration is complete !
configDB.sh is done at 122 sec
Done ! The database is ready for use . <= 이부분이 나오면 정상
... 생략 ...
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# Oracle 접속 계정 생성
C:\Users\1004lucifer>docker exec -it local_db bash -c "source /home/oracle/.bashrc; sqlplus sys/Oradoc_db1@ORCLCDB as sysdba"
SQL*Plus: Release 12.2.0.1.0 Production on Mon Nov 4 14:42:37 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> # Oracle 12C 에서 사용자 생성 시 기존과 같은 방법으로 만들기 위해 사용
SQL> alter session set "_ORACLE_SCRIPT"=true;
Session altered.
SQL> # 사용자 생성 (lucifer / 1234)
SQL> create user lucifer identified by 1234;
User created.
SQL> # 권한 할당
SQL> grant connect, resource, dba to lucifer;
Grant succeeded.
SQL>
위와같이 작업을 해주면 로컬에 DB접속이 가능하다.
하지만 다음과 같은 문제가 있다.
1. SYSDATE 사용 시 현재시간과 맞지 않는다.
2. 한글을 정상적으로 사용할 수 없다.
3. 시간을 맞추고 한글을 정상적으로 이용할 수 있도록 작업한다.
# 기존 .bashrc 파일의 내용을 확인한다.
C:\Users\1004lucifer>docker exec -it local_db bash -c "cat /home/oracle/.bashrc"
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export OH=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/u01/app/oracle/product/12.2.0/dbhome_1/bin
export TNS_ADMIN=/u01/app/oracle/product/12.2.0/dbhome_1/admin/ORCLCDB
export ORACLE_SID=ORCLCDB;
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 타임존 설정을 추가한다.
C:\Users\1004lucifer>docker exec -it local_db bash -c "echo \"export TZ='Asia/Seoul'\" >> /home/oracle/.bashrc"
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 설정이 추가되었는지 확인
C:\Users\1004lucifer>docker exec -it local_db bash -c "cat /home/oracle/.bashrc"
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export OH=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/u01/app/oracle/product/12.2.0/dbhome_1/bin
export TNS_ADMIN=/u01/app/oracle/product/12.2.0/dbhome_1/admin/ORCLCDB
export ORACLE_SID=ORCLCDB;
export TZ='Asia/Seoul'
C:\Users\1004lucifer>
C:\Users\1004lucifer>
C:\Users\1004lucifer>
C:\Users\1004lucifer>
C:\Users\1004lucifer>
# 한글 사용을 위해 작업해준다.
C:\Users\1004lucifer>docker exec -it local_db bash -c "source /home/oracle/.bashrc; sqlplus sys/Oradoc_db1@ORCLCDB as sysdba"
SQL*Plus: Release 12.2.0.1.0 Production on Tue Nov 5 00:46:46 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Mon Nov 04 2019 23:42:37 +09:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL>
SQL> update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE';
1 row updated.
SQL> update sys.props$ set value$='UTF8' where name='NLS_CHARACTERSET';
1 row updated.
SQL> update sys.props$ set value$='UTF8' where name='NLS_NCHAR_CHARACTERSET';
1 row updated.
# 위의 UTF-8을 사용시 한글 1글자에 3byte가 사용되며 2byte사용을 원하는경우 아래의 쿼리로 업데이트를 해줘야 한다.
update sys.props$ set value$='KO16MSWIN949' where name='NLS_CHARACTERSET';
update sys.props$ set value$='KO16MSWIN949' where name='NLS_NCHAR_CHARACTERSET';
update sys.props$ set value$='AMERICAN_AMERICA.KO16MSWIN949' where name='NLS_LANGUAGE';
# 참고: https://blog.naver.com/ssarmang/20209683055
SQL> commit;
Commit complete.
SQL>
Database closed.
Database dismounted.
ORACLE instance shut down.
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
Warning: You are no longer connected to ORACLE.
SQL>
SQL> startup;
SP2-0640: Not connected
SQL>
SQL> conn / as sysdba
Connected to an idle instance.
SQL>
SQL> startup;
ORACLE instance started.
Total System Global Area 1342177280 bytes
Fixed Size 8792536 bytes
Variable Size 369100328 bytes
Database Buffers 956301312 bytes
Redo Buffers 7983104 bytes
Database mounted.
Database opened.
SQL>
SQL>
PS.
작업 중 shutdown; 시간이 너무 오래걸려 SQL Developer의 세션을 끊었는데 shutdown이 바로 완료가 되었다.
찾아보니 아마 shutdown immediate; 명령어를 사용하지 않아서 연결되어있는 세션때문에 종료되지 않은듯 추측이 된다.
위와같이 작업 후 시간, 한글 이슈가 해결된 것을 확인할 수 있다.
참고
- http://open-but-closed.com/install-oracle-database-with-docker-on-google-cloud-platform/
- https://keichee.tistory.com/m/23?category=834899
좋은정보 감사합니다~
답글삭제도움이 된것 같아서 기분이 좋네요 ;)
삭제도움이 많이되었습니다. 정말감사합니다. 다만 타임존부분에서 저는 'Asia/Seoul' 로는 적용이 안되고 ''를 빼야적용되네요 ㅎㅎ
답글삭제같은 이미지로 방법이 다르다니 이상하지만 잘 되었다고 하시니 다행입니다. ㅎㅎ
삭제좋은 참고글 감사합니다.
답글삭제처음부터 끝까지 정리를 아주 잘해놓으셨네요.
힘이되는 댓글이네요. 고맙습니다. ^^
삭제감사합니다. 정말 알기 쉽게 정리해주셨네요. 덕분에 많은 도움이 되었습니다.
답글삭제도움이 되었다고 하니 기분이 좋네요. 감사합니다. ^^
삭제