- 한 서버에 여러 개의 DB를 설치한 경우 oracle user로 로그인 시 어떤 DB(Instance)로 접속할 것인지 선택하게 할 수 있는 방법
1. 테스트 환경
OS : Oracle Linux Server 7.9 (Linux rdb01d 5.4.17-2102.201.3.el7uek.x86_64)
DB : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production (Version 19.26.0.0.0)
Configuration : Oracle Restart Sever Single
Host : tdb01t(192.168.0.51)
--> 해당 서버에 여러 개의 DB가 설치되어 있는 상황
2. 현재 상황 조회
[ORA19R:oracle@tdb01t][/home/oracle]$ crsctl status resource -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
ONLINE ONLINE tdb01t STABLE
ora.FRA1.dg
ONLINE ONLINE tdb01t STABLE
ora.LISTENER_CDB1.lsnr
ONLINE ONLINE tdb01t STABLE
ora.LISTENER_CDB2.lsnr
ONLINE ONLINE tdb01t STABLE
ora.LISTENER_ORA19R.lsnr
ONLINE ONLINE tdb01t STABLE
ora.LISTENER_ORCL.lsnr
ONLINE ONLINE tdb01t STABLE
ora.LISTENER_ORCL2.lsnr
ONLINE ONLINE tdb01t STABLE
ora.asm
ONLINE ONLINE tdb01t Started,STABLE
ora.ons
OFFLINE OFFLINE tdb01t STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cdb1.db
1 OFFLINE OFFLINE Instance Shutdown,ST
ABLE
ora.cdb2.db
1 OFFLINE OFFLINE Instance Shutdown,ST
ABLE
ora.cssd
1 ONLINE ONLINE tdb01t STABLE
ora.diskmon
1 OFFLINE OFFLINE STABLE
ora.evmd
1 ONLINE ONLINE tdb01t STABLE
ora.ora19r.db
1 ONLINE ONLINE tdb01t Open,HOME=/u01/app/o
racle/product/19c/db
_1,STABLE
ora.orcl.db
1 OFFLINE OFFLINE Instance Shutdown,ST
ABLE
ora.orcl2.db
1 OFFLINE OFFLINE Instance Shutdown,ST
ABLE
--------------------------------------------------------------------------------
현재 한 대의 서버에 cdb1, cdb2, orcl, orcl2, orac19r 이라는 Database가 존재하는 상황임
3. oracle os user의 .bash_profile 파일 수정
/home/oracle/.bash_profile에 아래와 같은 내용을 추가
stty erase $(tput kbs)
. /home/oracle/os_scripts/oenv.sh
stty erase에서 "$(tput kbs)" 은 무엇인지 궁금하실 분들이 분명 있을 것임
- tput kbs를 치면, 터미널에서 **백스페이스 키를 누를 때 실제로 입력되는 제어 코드(보통 ^H 또는 ^?)**를 출력함.
- ^H(Ctrl+H, 0x08)일 수도 있고,
- ^?(DEL, 0x7f)일 수도 있음.
- 터미널/OS/SSH 클라이언트마다 백스페이스에 해당하는 키코드가 다를 수 있으니,
- stty erase $(tput kbs)라고 해두면 알아서 내 터미널 환경에 맞는 erase 문자로 맞춰줌.
- oenv.sh 쉘을 실행 시 백스페이스가 씹히는(?) 것을 방지하기 위해 설정한 것임
4. oenv.sh 파일 생성
[ORA19R:oracle@tdb01t][/home/oracle]$ mkdir -p /home/oracle/os_scripts/
[ORA19R:oracle@tdb01t][/home/oracle]$ vi /home/oracle/os_scripts/oenv.sh
[ORA19R:oracle@tdb01t][/home/oracle]$ cat /home/oracle/os_scripts/oenv.sh
#!/bin/bash
echo "접속할 데이터베이스를 선택하세요:"
echo "1) ORCL"
echo "2) CDB1"
echo "3) CDB2"
echo "4) ORCL2"
echo "5) ORA19R"
if [ "$#" -eq 0 ]; then
read -e -r -p "번호를 입력하세요 (1,2,3,4,5): " choice
else
choice="$1"
fi
case "$choice" in
1) SID="ORCL" ;;
2) SID="CDB1" ;;
3) SID="CDB2" ;;
4) SID="ORCL2" ;;
5) SID="ORA19R" ;;
*)
echo "잘못된 입력입니다. ORCL로 적용합니다."
SID="ORCL"
;;
esac
export ORACLE_SID="$SID"
echo "현재 ORACLE_SID: $ORACLE_SID"
if [ -z "$ORACLE_SID" ]; then
echo "ORACLE_SID 환경변수가 설정되어 있지 않습니다. (예: export ORACLE_SID=ORCL)"
exit 1
fi
case "$ORACLE_SID" in
ORCL)
echo "ORCL 환경 설정 적용 중..."
export ORACLE_HOME=/u01/app/oracle/product/19c/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_UNQNAME=ORCL
export ORACLE_UNQNAME_LOWER=orcl
export ORACLE_DBNAME=ORCL
export ORACLE_DBNAME_LOWER=orcl
export ORACLE_SID=ORCL
export ORACLE_SID_LOWER=orcl
;;
CDB1)
echo "CDB1 환경 설정 적용 중..."
export ORACLE_HOME=/u01/app/oracle/product/19c/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_UNQNAME=CDB1
export ORACLE_UNQNAME_LOWER=cdb1
export ORACLE_DBNAME=CDB1
export ORACLE_DBNAME_LOWER=cdb1
export ORACLE_SID=CDB1
export ORACLE_SID_LOWER=cdb1
;;
CDB2)
echo "CDB2 환경 설정 적용 중..."
export ORACLE_HOME=/u01/app/oracle/product/19c/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_UNQNAME=CDB2
export ORACLE_UNQNAME_LOWER=cdb2
export ORACLE_DBNAME=CDB2
export ORACLE_DBNAME_LOWER=cdb2
export ORACLE_SID=CDB2
export ORACLE_SID_LOWER=cdb2
;;
ORCL2)
echo "ORCL2 환경 설정 적용 중..."
export ORACLE_HOME=/u01/app/oracle/product/19c/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_UNQNAME=ORCL2
export ORACLE_UNQNAME_LOWER=orcl2
export ORACLE_DBNAME=ORCL2
export ORACLE_DBNAME_LOWER=orcl2
export ORACLE_SID=ORCL2
export ORACLE_SID_LOWER=orcl2
;;
ORA19R)
echo "ORA19R 환경 설정 적용 중..."
export ORACLE_HOME=/u01/app/oracle/product/19c/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_UNQNAME=ORA19R
export ORACLE_UNQNAME_LOWER=ora19r
export ORACLE_DBNAME=ORA19R
export ORACLE_DBNAME_LOWER=ora19r
export ORACLE_SID=ORA19R
export ORACLE_SID_LOWER=ora19r
;;
*)
echo "알 수 없는 ORACLE_SID: $ORACLE_SID"
exit 1
;;
esac
echo "환경 설정 완료 : 현재 ORACLE_SID = $ORACLE_SID"
ORACLE_SID, ORACLE_DBNAME, ORACLE_UNQNAME, ORACLE_HOME 등의 변수를 지정함
해당 파일 저장 후
[ORA19R:oracle@tdb01t][/home/oracle]$ chmod 755 /home/oracle/os_scripts/oenv.sh
실행 권한을 줌
5. oracle os user로 ssh 접속
┌──────────────────────────────────────────────────────────────────────┐
│ • MobaXterm Professional Edition v22.2 • │
│ (SSH client, X server and network tools) │
│ │
│ ⮞ SSH session to oracle@192.168.0.51 │
│ • Direct SSH : ✓ │
│ • SSH compression : ✓ │
│ • SSH-browser : ✓ │
│ • X11-forwarding : ✓ (remote display is forwarded through SSH) │
│ │
│ ⮞ For more info, ctrl+click on help or visit our website. │
└──────────────────────────────────────────────────────────────────────┘
Last login: Sun Jun 15 22:41:06 2025 from 192.168.0.2
접속할 데이터베이스를 선택하세요:
1) ORCL
2) CDB1
3) CDB2
4) ORCL2
5) ORA19R
번호를 입력하세요 (1,2,3,4,5): 5
현재 ORACLE_SID: ORA19R
ORA19R 환경 설정 적용 중...
환경 설정 완료 : 현재 ORACLE_SID = ORA19R
[ORA19R:oracle@tdb01t][/home/oracle]$ sqlplus "/as sysdba"
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Jun 15 22:59:14 2025
Version 19.26.0.0.0
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.26.0.0.0
[2025-06-15:22:59:14][tdb01t]<ORA19R@SYS> select name from v$database;
NAME
---------------------------
ORA19R
1 row selected.
Elapsed: 00:00:00.00
ssh 접속 시 마다 어떤 DB로 붙을 것인지 물어보게됨, 번호를 선택하면 해당 DB로 붙을 수 있음
또한 아래와 같이 oracle alert로그도 바로 접근 가능
[ORA19R:oracle@tdb01t][/home/oracle]$ tail -f $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME_LOWER/$ORACLE_SID/trace/alert_$ORACLE_SID.log
Patch Apply Time: 2025-02-23T13:26:54+09:00
Patch Type: Release Update
===========================================================
2025-06-15T22:45:44.973936+09:00
Errors in file /u01/app/oracle/diag/rdbms/ora19r/ORA19R/trace/ORA19R_mz00_1776.trc:
ORA-01110: data file 7: '/u01/app/oracle/product/19c/db_1/dbs/MISSING00007'
ORA-01565: error in identifying file '/u01/app/oracle/product/19c/db_1/dbs/MISSING00007'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
oracle alert 로그가 "/u01/app/oracle/diag/rdbms/ora19r/ORA19R/trace/alert_ORA19R.log" 에 남고 있음
해당 Tip을 잘 사용하면 한 서버에 여러 개의 DB가 설치되어 있을 때 효율적으로 관리가 가능함!