| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- name=springapplication
- 오름차순
- SpringApplication
- dbeaver
- 디비서버활성화
- javax.management.instancenotfoundexception: org.springframework.boot:type=admin
- Decapsulation
- 배열복사
- wan
- 배열빈도수
- 모래시계출력
- 도커권한설정
- 리눅스계열
- 백준
- 도커
- 배열최소값최대값
- 디비버
- 우분투
- jmx
- 백준1946
- 페이로드
- 유니캐스트
- 포트포워딩 안될때
- ubuntu
- 리눅스환경
- 오라클멀티테넌트
- docker
- springboot
- instancenotfoundexception
- 네트워크모델
- Today
- Total
다잘하고싶어
오라클 멀티테넌트 환경 본문
기술지원 요청이 들어오면 상황 재현을 위해 본사에 항상 서비스를 띄워놓는 서버가 있다.
최근 관련 기술지원 문의가 들어와서 해당 서버에 접속하려 했는데, 갑자기 접속이 안됐다.
로컬pc에 있는 소스로 급한 불부터 끄려고 했으나 해당 서버에 디비도 연결되어 있어서 로컬서비스조차 구동되지 않았다.
여기서 나를 더 막막하게 만든 상황은 아래와 같다.
1. 누가 어떤 방식으로 서버를 구성해두었는지 알 지 못한다.
2. 서버를 관리하던 담당자는 퇴사했다.
3. 담당자 퇴사 후 1달 동안은 문제 없이 사용했고, 그 사이 서버에 변경 사항은 없었다.
일단 1차 확인사항은 다음과 같다.
1. 톰캣 재기동 → 동일 증상
2. 스프링 프로젝트 구동 실패 → DB커넥션 풀 denied
이쯤되니 해당 서버에 올라가 있는 디비가 죽었을 것 같다는 의심이 들었다.
root 16500 13328 0 11:27 pts/0 00:00:00 grep --color=auto ora_
oracle 31233 1 0 Aug01 ? 00:00:11 ora_pmon_ORCLCDB
oracle 31235 1 0 Aug01 ? 00:00:06 ora_clmn_ORCLCDB
oracle 31237 1 0 Aug01 ? 00:00:32 ora_psp0_ORCLCDB
oracle 31240 1 0 Aug01 ? 00:01:09 ora_vktm_ORCLCDB
oracle 31244 1 0 Aug01 ? 00:00:09 ora_gen0_ORCLCDB
oracle 31246 1 0 Aug01 ? 00:00:06 ora_mman_ORCLCDB
oracle 31250 1 0 Aug01 ? 00:00:19 ora_gen1_ORCLCDB
oracle 31253 1 0 Aug01 ? 00:00:13 ora_diag_ORCLCDB
oracle 31255 1 0 Aug01 ? 00:00:07 ora_ofsd_ORCLCDB
oracle 31258 1 0 Aug01 ? 00:01:25 ora_dbrm_ORCLCDB
oracle 31260 1 0 Aug01 ? 00:00:03 ora_vkrm_ORCLCDB
oracle 31262 1 0 Aug01 ? 00:00:13 ora_svcb_ORCLCDB
oracle 31264 1 0 Aug01 ? 00:00:21 ora_pman_ORCLCDB
oracle 31266 1 0 Aug01 ? 00:02:52 ora_dia0_ORCLCDB
oracle 31268 1 0 Aug01 ? 00:00:07 ora_dbw0_ORCLCDB
oracle 31270 1 0 Aug01 ? 00:00:06 ora_lgwr_ORCLCDB
.....
그래서 오라클을 확인했으나 정상 동작중이었고, LISTENER 도 정상 작동하고 있었다.
이 과정에서 여러번 오라클을 내렸다가 재기동하다보니 에러메세지가 바꼈다.

오라클 인스턴스가 아직 완전히 기동되지 않았거나, 종료 중이라서 JDBC 연결이 실패하는 상황 발생.
1. DB상태 확인
sqlplus / as sysdba
SELECT status FROM v$instance;
결과 : MOUNTED ( 데이터베이스 구조는 읽었지만, 데이터 파일을 아직 OPEN하지 않은 상태)

데이터베이스 복구 과정에서 특정 데이터파일이 없어서
mounted단계에서 머물러 있는 상태였고, ( DB 인스턴스는 켜져 있지만 아직 OPEN 상태가 아님)
그렇기 때문에 ava/HikariCP에서 연결 시도 했을때 ORA-01033 발생한 것이었다.
JDBC 연결은 데이터베이스가 OPEN 상태여야 가능하기 때문에 서비스 구동 자체가 이루어지지 않음.
해당 데이터베이스의 백업파일은 없었고,
리셋하여 강제로 디비 인스턴스를 open하거나, 데이터 무결성을 위해 다른 방법을 찾아야했다.
백업파일이 없는 상태에서 무작정 디비를 리셋할 수는 없었고, 문제가 된다는 데이터 파일 경로를 확인했으나 파일은 존재하지 않았다.
결국 새로운 디비를 생성해서 연결해보고 테스트해보기로 결정했고,
그 전에 마지막으로 데이터베이스 전체를 완전히 종료( shutdown)했다가 다시 기동(startup)해보기로 했다.
shutdown immediate;
shutdown abort;
startup;
ORA-01109: database not open
완전히 종료하려고 하니, 현재 데이터베이스가 이미 open상태가 아니라는 에러 발생.
강제 종료를 한 후, 다시 기동했다.
그러자 갑자기 새로운 에러가 나타났다.
ORA-65093: multitenant container database not set up properly
Oracle 멀티테넌트(CDB/PDB) 아키텍처가 제대로 설정되지 않았거나 손상됐다는 뜻.
멀티테넌트 개념부터 잡고가야할 것 같았다.
멀티테넌트(멀티테넌시, Multi-tenant)
멀티 테넌트 소프트웨어 아키텍처에서 소프트웨어 애플리케이션(및 해당하는 기본 데이터베이스와 하드웨어)의 단일 인스턴스는 여러 테넌트(또는 사용자 계정)를 수용한다. 각 테넌트의 데이터는 애플리케이션 인스턴스를 공유하는 다른 테넌트와 격리되어 보이지 않으므로 모든 테넌트에 대한 데이터 보안 및 개인정보 보호가 보장된다.
쉽게말해, DB안에 여러 DB들이 들어가있는 구조라는 것이다.
다시 $ORACLE_HOME/network/admin 하위에 있는 listener.ora 확인해보니,
두 개의 솔루션에 해당하는 db가 각각 할당되어 있었다.
혹시나 하는 마음에 SHOW PARAMETER enable_pluggable_database 를 확인하니, FALSE로 되어있었다.
(멀티테넌트 아키텍처가 제대로 설정되어 있는지 확인)

enable_pluggable_database 파라미터가 비활성화 상태였고, 해당 설정을 TRUE 로 바꿔줬다.
ALTER SYSTEM SET enable_pluggable_database=TRUE SCOPE=SPFILE;
//ORCLPDB1 플러그러블 데이터베이스로 전환해서 사용
//이 명령을 실행하면 해당 세션이 ORCLPDB1 PDB로 전환
ALTER SESSION SET CONTAINER = ${사용을 원하는 DB명};
//결과가 ${사용을 원하는 DB명}인지 확인
SHOW CON_NAME;
//PDB를 OPEN 상태로 바꿈
ALTER PLUGGABLE TADABASE ${사용을 원하는 DB명} OPEN;
이렇게 하니 서비스가 정상적으로 구동되고 서버에도 접속이 가능했다.
간단한 문제였지만, 서버 구조도 알지못하고, 데이터베이스 백업파일도 없는 상태에서 발생했던 문제라 막막했던 이슈였다.
위의 내용을 잘 정리하고, 에러 해결 과정에서 파악한 서버구조도 정리하여 문서로 정리해두었다.
문제 요약 및 원인
- 멀티테넌트 아키텍처 (CDB/PDB) 환경
Oracle이 멀티테넌트 구조로 설치되어, 실제 데이터베이스는 여러 PDB(플러거블 데이터베이스) 중 하나임 - 현재 접속한 컨테이너는 CDB 루트 (CDB$ROOT)
SHOW CON_NAME; 결과가 CDB$ROOT였고, 실제 데이터 작업은 PDB인 ${사용을원하는디비명}에서 해야 했음 - PDB가 MOUNTED 상태
PDB가 완전히 OPEN 되지 않아 데이터 접근 불가 상태였음 (v$pdbs 조회 결과 확인) - ORA-65093: multitenant container database not set up properly 오류
초기에는 멀티테넌트 환경 세팅 관련 오류도 있었고, enable_pluggable_database 파라미터 점검 필요
해결 과정
- DB 인스턴스 강제 종료 및 재기동
- shutdown abort; → startup; 명령어를 통해 DB를 정상적으로 재기동
- PDB 상태 점검
- SELECT name, open_mode FROM v$pdbs; 로 플러거블 DB 상태 확인
- ${사용할DB명} PDB가 MOUNTED 상태임을 확인
- PDB 완전 OPEN 작업 수행
- 일부 경고가 있었지만, PDB가 정상적으로 OPEN 상태로 전환됨
-
ALTER PLUGGABLE DATABASE ${사용할DB명} OPEN;
- 사용 세션 컨테이너 전환
- 실제 서비스가 연결되어야 할 PDB 컨테이너로 세션 전환
-
ALTER SESSION SET CONTAINER = ${사용할DB명} ;
- 서비스 정상화 확인
- 애플리케이션 연결 및 쿼리 정상 수행 확인
핵심 포인트
1. 멀티테넌트 DB 환경에서 PDB가 OPEN 안 됨 → PDB 상태 확인 후 ALTER PLUGGABLE DATABASE OPEN 수행
2. 올바른 세션으로 연결 → ALTER SESSION SET CONTAINER = <pdb명> 으로 PDB 전환</pdb명>
3. enable_pluggable_database 파라미터 확인 및 활성화
참고
'에러' 카테고리의 다른 글
| pc <-> pc SSH연결하기 (0) | 2025.09.24 |
|---|---|
| IE에서 특정 함수가 작동되지 않는 에러 (0) | 2024.12.09 |
| javax.management.InstanceNotFoundException 에러 (1) | 2024.11.29 |