노력과 삽질 퇴적물
도커로 여러 DB 세팅 - 오라클, MS, MariaDB 등등 본문
![]() [이미지 출처: gruntwork.io] |
|
▷ 1. 오라클
|
|
▷ 2. MS SQL
|
|
▷ 3. MariaDB
|
|
① 개인적인 노트정리입니다. myBatis처럼 쿼리를 직접 쓰는 일이 적은 터라 DB별 차이점 가늠에 가까운 요약 위주.
// 💬 이 주석은 자체적인 언어(?)로 해석/재구성한 메모다.
② 해당 포스팅에서 도커에 연동&세팅할 DB들의 기본 포트는
1433 MS-SQL
1521 오라클
3306 MariaDB (MySQL과 동일한 포트)
5432 PostgreSQL
③ DB 연습용 네트워크 하나, 토이 프로젝트(스프링부트 기반)용 네트워크 하나
PS> docker network create nw-data_poolPS> docker network create nw-springboot
nw-data_pool에 붙는 도커 이미지는 db-xxx
nw-springboot에 붙는 도커 이미지는 springboot-xxx
④ DB툴은 DBeaver 24.1.5.202408181605기준. 단순히 컨테이너 구동+CUI를 통한 접속 확인에서 끝내는게 아니라, DB툴 접속 및 권한 분리한 계정 발급까지는 진행된 가이드로.
▼ 1. 오라클 |
① 이미지 설치
* Docker Hub에 검색X
PS> docker pull container-registry.oracle.com/database/free:latest
→ 무료버전은 오라클 공식 페이지에서 찾아야 하는데, 다른 포스팅의 캡쳐상 네비게이션으로는 살짝 헤매게 되서 링크를 마저 [🔗Oracle Database Free 시작하기]
→ 다른 DB 이미지에 비해 설치 시간이 긴 편.
② 컨테이너 실행
PS> docker run -d --name db-oracle-23 -p 1521:1521 -p 5500:5500 --network nw-data_pool --env ORACLE_CHARACTERSET=UTF-8 container-registry.oracle.com/database/free:latest
→ 이 단계에서 SID, CDB 지정이 가능하지만 버전에 따른 차이가 꽤 큰 옵션같아서 최소한의 옵션으로 실행후, 쉘이랑 SQL로 마저 수정하는 방식.
v옵션으로 볼륨은 따로 안 했고, CDB(Container DB)는 오라클12C부터 적용이라서 이보다 오래된 레거시 버전은 안 맞을것으로 추정되서 기본 구동후 터미널 접속으로 추가 세팅하는식으로
→ "한국에서만 사용하는 시스템이라면 KO16MSWIN949를 선택" (RastaLion, 2019)
오라클 문서에 따르면 UTF-8 지원 되고, 제 경우는 패스워드 이후에 참조할 도커 이미지명(이미지 설치 참조)이 가도록 배치.
③ DB툴 세팅
sh-4.4$ ./setPassword.sh 0123456789sh-4.4$ sqlplus system/0123456789 as sysdba
SQL> SELECT NAME, DB_UNIQUE_NAME FROM V$DATABASE;
SQL> ALTER USER SYSTEM ACCOUNT UNLOCK;ALTER USER SYSTEM IDENTIFIED BY 0123456789
→ 로그상 SYS, SYSTEM, PDBADMIN에 초기비번으로 지정됐는데 docker run에서
[--env ORACLE_PWD=0123456789]를 써도 같은 로그다.
[--env ORACLE_PWD=0123456789]를 써도 같은 로그다.
→ SQL커맨드에서 확인된 데이타 베이스명은 FREE이고 계정 해제했으니 이제 DB툴로 가자.
→ 기본 데이터베이스/스키마: FREE
→ 기본 유저명: SYSTEM④ 계정발급 및 관리
→ 오라클DB는 생성한 계정명으로 스키마도 생성. //쿼리문등에서 스키마.테이블명으로 명시해야?
-- 12c부터 계정명에 c##붙여야 하는 옵션을 끄려면 바로 아래 쿼리문.
ALTER SESSION SET "_ORACLE_SCRIPT"=true;
CREATE USER DEV_API IDENTIFIED BY 0123456789;
-- GRANT INSERT, UPDATE, DELETE ON 테이블명 TO c##DEV_API;
CREATE USER DEV_TOOL IDENTIFIED BY 0123456789;GRANT DBA TO DEV_TOOL;
-- dba는 8i부터 없어졌지만, 호환성때문에 존재한다고.
-- DROP USER DEV_API cascade;
-- DROP USER DEV_TOOL cascade;
COMMIT;
⑤ 쿼리문법
[Oracle]Oracle grammar.. (오라클 기본 정리) //작성 일자상, 2025-04
→ 불친절한 요약. //기억상 다른 DB하고 다른 부분만 추리는.
자료형 및 함수 | NUMBER(1) 2byte BFILE 저장되는 파일명&위치 SELECT SYSDATE FROM DUAL 등에서 함수 출력용 임시테이블(DUAL) 존재. 문자열 붙여쓸때, concat대신 '||' ORDER BY 정렬시, 기본은 ASC / Null이 가장 큰값 DELETE로 레코드 지워도 용량감소 X. 삭제해도 되돌리기 가능. 자료형 변환
|
트랜젝션 | -- DML쿼리 실행시 암묵적으로 트랜잭션 시작. ... ... ... SAVEPOINT tmp_포인트1; ... ... ... COMMIT; -- ROLLBACK; |
오류 메시지 처리 | -- 오류 번호 (-20000 ~ -20999. 사용자 정의 오류 번호) RAISE_APPLICATION_ERROR(-20000 ~ -20999, '...'); |
기타 | - |
PS> docker pull mcr.microsoft.com/mssql/server:2022-latest
② 컨테이너 실행
PS> docker run -d --name db-mssql-2022 --hostname db-mssql-2022 -p 1433:1433 --network nw-data_pool --env "ACCEPT_EULA=Y" --env "MSSQL_SA_PASSWORD=abc0123456789ABC" -d mcr.microsoft.com/mssql/server:2022-latestPS> docker exec -it db-mssql-2022 /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P abc0123456789ABC -C
→ MS의 [🔗암호 정책]상 8자 이상/대소문자와 숫자 혼합을 강제화.
→ docker run 상태로 (도커의 로그탭) 로그에서 한참후, docker exec(C옵션 적용) 작동한걸 보면, 컨테이너 실행후 DB구동완료까지의 시간이 좀 있는걸로 추정.
SQL Server 2022 will run as non-root by default.
This container is running as user mssql.
To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
③ DB툴 세팅
④ 계정발급 및 관리
USE master;
-- 개발/관리용 계정: DEV_TOOL
IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'DEV_TOOL')
BEGIN
CREATE LOGIN DEV_TOOL WITH PASSWORD = 'abc0123456789ABC';
END;
ALTER SERVER ROLE sysadmin DROP MEMBER DEV_TOOL;
ALTER SERVER ROLE sysadmin ADD MEMBER DEV_TOOL;
-- API서버용
IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'DEV_API')
BEGIN
CREATE LOGIN DEV_TOOL WITH PASSWORD = 'abc0123456789ABC';
END;
-- GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.테이블명 TO DEV_API;
⑤ 쿼리문법
→ 불친절한 요약. //기억상 다른 DB하고 다른 부분만 추리는.
자료형 및 함수 | 자료형 변환
|
트랜젝션 | BEGIN TRAN; ... ... ... SAVE TRAN tmp_포인트1; ... ... ... COMMIT TRAN; -- ROLLBACK TRAN; |
오류 메시지 처리 | -- 오류 번호, 오류 메시지, 상태 (임의의 정수) THROW error_number, '...', state; |
기타 | - |
docker pull mariadb:latest
② 컨테이너 실행
PS> docker run -p 3306:3306 --network nw-springboot --detach --name spring-mariadb --env MARIADB_ROOT_PASSWORD=0123456789 mariadb
③ DB툴 세팅
→ 기본 유저명: root
→ 오라클/MS에 비해 굉장히 간편한 후속세대 DB④ 계정발급 및 관리
CREATE USER 'DEV_TOOL'@'%' IDENTIFIED BY '0123456789';
GRANT ALL PRIVILEGES ON *.* TO 'DEV_TOOL'@'%' WITH GRANT OPTION;
-- 변경 사항 적용
FLUSH PRIVILEGES;
CREATE USER 'DEV_API'@'%' IDENTIFIED BY '0123456789';
-- GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.테이블명 TO 'DEV_API'@'%';
-- 변경 사항 적용
-- FLUSH PRIVILEGES;
⑤ 쿼리문법
→ 불친절한 요약. //기억상 다른 DB하고 다른 부분만 추리는.
자료형 및 함수 | - |
트랜젝션 | START TRANSACTION; ... ... ... SAVEPOINT tmp_포인트1; ... ... ... COMMIT; -- ROLLBACK; |
오류 메시지 처리 | SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '...'; |
기타 | - |
▼ 기타. 참조자료 |
1) 개인 블로그 |
[DB] 유명 DB 기본 포트 및 JDBC 문법 총 정리 (접속: 2025-05-09)
Oracle 12c 이후 버전 CDB, PDB에 대해서 (접속: 2025-05-09)
1-2) 블로거
오라클12c의 신개념 CDB PDB에 대하여 (접속: 2025-05-09)
1-3) velog
[Oracle] 묻따말 오라클 23c 사용해보기 - 1. 설치 (접속: 2025-05-09)
1-4) 네이버
2) 웹사이트 |
dev.to, "🚀 Easily Run Oracle Database in Docker - DEV Community" (접속: 2025-05-11), https://dev.to/francotel/easily-run-oracle-database-in-docker-898.
docker.com, "Microsoft SQL Server - Ubuntu based images" (접속: 2025-05-11), https://hub.docker.com/r/microsoft/mssql-server.
learn.microsoft.com, "빠른 시작: Docker에서 SQL Server linux 컨테이너 이미지 실행" (접속: 2025-05-11), https://learn.microsoft.com/ko-kr/sql/linux/quickstart-install-connect-docker?view=sql-server-ver16&tabs=cli&pivots=cs1-powershell.
oracle.com, "A Supported Character Sets" (접속: 2025-05-08), https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_charsets.htm#CIHEIJFG.
▼ 기타. 변경 내력 |
일자
|
변경 내력 |
2025-05-11 | 초안 및 일반 공개. [🔗blogger] [🔗티스토리]. 포스팅 신규 양식 적용(ver.202408) |
'📂게임개발 note > 클라우드 & 서버' 카테고리의 다른 글
AWS경험으로 MS Azure(애저) 적응 연습 (1) | 2025.02.04 |
---|---|
토이프로젝트 로컬 환경용 도커 -스프링부트 기준- (0) | 2025.01.08 |
스프링부트: 기초 및 입문 (2) (0) | 2023.04.09 |
스프링부트: 기초 및 입문 (1) (0) | 2023.03.16 |
우분투: 레드마인 설치 (0) | 2019.06.30 |