Oracle 19c Installation Using Docker on M1
Page content
개요
- Docker 활용해서 Oracle 설치하기 on M1
- SQL Developer 활용해서 접속 및 테스트하기
사전조건
- Docker가 이미 설치가 되어 있다고 가정한다.
Oracle Database 설치 순서
Step 01 : 도커 이미지 가져오기
- Clone Oracle’s Docker Images Repository, Open your terminal and run
git clone https://github.com/oracle/docker-images
Step 02 : Oracle Database 19c 파일 다운로드
- Download Oracle Database 19c for Linux ARM
- 링크 : https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html (회원가입 필요)
- 다운로드, LINUX.ARM64_1919000_db_home.zip
- 해당 파일을
docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0
디렉토리에 위치 시킴
Step 03 : 도커 이미지 빌드
- Build the Docker Image, Navigate to the dockerfiles directory
- 터미널로 경로 이동한다.
cd docker-images/OracleDatabase/SingleInstance/dockerfiles/
- 스크립트 실행하기
- This command builds the Oracle 19c Enterprise Edition Docker image.
./buildContainerImage.sh -v 19.3.0 -e
Step 04 : Oracle Docker 컨테이너 실행
- Once the image is built, start a container
- 코드 해석
-d
: 컨테이너를 백그라운드에서 실행 (Detached mode)--name oracledb2
: 컨테이너 이름을oracledb2
로 지정-p 1521:1521
: 호스트의 1521번 포트를 컨테이너의 1521번 포트와 매핑 (Oracle 기본 포트)-p 5500:5500
: 호스트의 5500번 포트를 컨테이너의 5500번 포트와 매핑 (Oracle Enterprise Manager 사용 시 필요)- 환경변수
-e ORACLE_SID=XE
: CDB (Container Database) 이름을XE
로 설정-e ORACLE_PDB=XE_PDB
: PDB (Pluggable Database) 이름을XE_PDB
로 설정-e ORACLE_PWD=Secret123
: 관리자 계정(SYS
,SYSTEM
)의 기본 비밀번호를Secret123
으로 설정-e ORACLE_CHARACTERSET=AL32UTF8
: 데이터베이스 문자 인코딩을AL32UTF8
(UTF-8)로 설정
oracle/database:19.3.0-ee
: Oracle 19c Enterprise Edition (EE) Docker 이미지
$ docker container run -d --name oracledb2 \
> -p 1521:1521 -p 5500:5500 \
> -e ORACLE_SID=XE \
> -e ORACLE_PDB=XE_PDB \
> -e ORACLE_PWD=Secret123 \
> -e ORACLE_CHARACTERSET=AL32UTF8 \
> oracle/database:19.3.0-ee
537d13cc65676b098a784ba1386e864d359cb5e2722e1f0d3a5f369f345081f0
- 실제 실행이 되는지 확인
- 메시지에서 중간에
DATABASE IS READY TO USE!
있으면 성공적으로 컨테이너 설치가 완료된 상태
- 메시지에서 중간에
$ docker logs -f oracledb2
ORACLE EDITION: ENTERPRISE
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-MAR-2025 02:20:38
...(생략)...
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCLCDB/control01.ctl' SCOPE=SPFILE;
2025-03-15T02:27:57.418659+00:00
ALTER SYSTEM SET local_listener='' SCOPE=BOTH;
ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
2025-03-15T02:27:57.851458+00:00
ORCLPDB1(3):Opening pdb with no Resource Manager plan active
ORCLPDB1(3):joxcsys_required_dirobj_exists: directory object exists with required path /opt/oracle/product/19c/dbhome_1/javavm/admin/, pid 2967 cid 3
Pluggable database ORCLPDB1 opened read write
Completed: alter pluggable database "ORCLPDB1" open
Completed: ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Step 05 : 리스너 확인
- 리스너가 정상적으로 실행되었는지 확인
- 현재 리스너는 정상적으로 실행되고 있지만,데이터베이스 서비스가
RESTRICTED
상태로 등록되어 있다. - 이는 일반적인 사용자 접속이 제한된 상태 이며, SQL Developer 또는 SQL*Plus에서 정상적으로 연결되지 않을 가능성이 크다.
- 일반적으로
READY
상태여야 정상 접속 가능
- 현재 리스너는 정상적으로 실행되고 있지만,데이터베이스 서비스가
$ docker exec -it oracledb2 lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-MAR-2025 02:52:31
Copyright (c) 1991, 2023, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 15-MAR-2025 02:49:19
Uptime 0 days 0 hr. 3 min. 12 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/537d13cc6567/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Services Summary...
Service "XE" has 1 instance(s).
Instance "XE", status RESTRICTED, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "XE", status RESTRICTED, has 1 handler(s) for this service...
The command completed successfully
- 아래와 같이
READY
가 확인되면 계정 만들기
$ docker exec -it oracledb2 lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-MAR-2025 03:00:24
Copyright (c) 1991, 2023, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 15-MAR-2025 02:49:19
Uptime 0 days 0 hr. 11 min. 4 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/537d13cc6567/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=537d13cc6567)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/XE/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "3059ba5e667c0bfae063020011ac84c7" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "XE" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
Service "xe_pdb" has 1 instance(s).
Instance "XE", status READY, has 1 handler(s) for this service...
The command completed successfully
You have new mail in /var/mail/evan
Step 06 : 계정생성
- 컨테이너 접속
$ docker exec -it oracledb2 sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Mar 15 03:01:00 2025
Version 19.19.0.0.0
Copyright (c) 1982, 2023, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
- PDB(Pluggable Database) 상태 확인
- 만약
XE_PDB
가MOUNTED
상태라면, 반드시OPEN
해야 함
- 만약
SQL> SHOW PDBS;
CON_ID CON_NAME OPEN MODE RESTRICTED
------ --------- -------- ----------
2 PDB$SEED READ ONLY NO
3 XE_PDB MOUNTED NO
- PDB로 전환 후 계정 생성
SQL> ALTER PLUGGABLE DATABASE XE_PDB OPEN;
SQL> ALTER SESSION SET CONTAINER=XE_PDB;
Session altered.
- 새로운 계정 생성
- 새로운 사용자
admin_user
를 생성하고, 비밀번호를AdminPass123
으로 설정 - 새로운 사용자에게 필수적인 권한을 부여
GRANT CONNECT
: DB에 로그인 가능하도록 설정GRANT RESOURCE
: 테이블, 인덱스, 뷰 등을 생성할 수 있도록 권한 부여GRANT DBA
: 데이터베이스 관리자(DBA) 권한 부여 (모든 관리 기능 허용), 일반적으로 DBA 권한 부여하면 슈퍼 유저가 됨
- 사용자가 데이터를 저장할 수 있도록 테이블스페이스 할당량을 무제한으로 설정
- 새로운 사용자
CREATE USER admin_user IDENTIFIED BY AdminPass123;
GRANT CONNECT, RESOURCE, DBA TO admin_user;
ALTER USER admin_user QUOTA UNLIMITED ON USERS;
CDB와 PDB 차이점
-
CDB(Container Database)
는 하나 이상의 PDB(플러그어블 데이터베이스)를 포함하는 컨테이너 역할을 한다.- CDB는 데이터베이스의 “껍데기”(Container) 역할을 하며, 여러 개의 PDB(Pluggable Database)를 포함할 수 있음.
- CDB 자체는 사용자 데이터를 저장하지 않으며, 주로 데이터베이스 인스턴스 및 공통 시스템 데이터 관리 기능을 제공.
- Oracle에서 시스템 수준의 관리를 수행하는 최상위 데이터베이스.
- 구조 (예시)
CDB (Container Database) ├── Root Container (CDB$ROOT) -> 공통 시스템 데이터 저장 ├── Seed PDB (PDB$SEED) -> 새로운 PDB 생성 템플릿 ├── PDB1 (User Database) -> 실제 사용자 데이터 저장 ├── PDB2 (User Database) -> 다른 사용자 데이터 저장
-
PDB(Pluggable Database)
는 CDB 내부에 존재하는 독립적인 데이터베이스이다.- PDB는 사용자 데이터 및 애플리케이션 데이터를 저장하는 실제 데이터베이스
- 각각의 PDB는 개별적으로 백업, 복구, 클론(복제) 가능.
- 여러 개의 PDB를 하나의 CDB 아래에서 실행할 수 있어, 리소스 관리가 효율적.
- DBA는 CDB를 유지하면서 개별적인 PDB를 추가하거나 제거할 수 있음.
- PDB의 특징
- 독립적인 데이터베이스처럼 동작하지만, CDB의 리소스를 공유.
- PDB 내부에서 사용자 계정, 테이블, 인덱스, 데이터 저장 가능.
- 각각의 PDB는 자체적인 테이블스페이스를 가짐.
SQL Developer 통한 접속 테스트
- SQL Developer 다운로드 페이지에서 다운로드 받기
- Mac ARM64 with JDK 17 included 클릭해서 다운로드 받기
- 압축파일 풀기
- 실행하기
- 접속하기
- 테스트
CREATE TABLE employees (
id NUMBER PRIMARY KEY,
name VARCHAR2(50),
department VARCHAR2(50),
salary NUMBER
);
INSERT INTO employees VALUES (1, 'Alice', 'HR', 60000);
INSERT INTO employees VALUES (2, 'Bob', 'IT', 75000);
INSERT INTO employees VALUES (3, 'Charlie', 'Finance', 80000);
COMMIT;
SELECT * FROM employees;