반응형
  • 한 서버에 여러 개의 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가 설치되어 있을 때 효율적으로 관리가 가능함!

반응형

+ Recent posts