[도커/오라클DB] 도커 컨테이너로 기동한 오라클DB 설정 변경하기

    728x90
    반응형

    세션

    What is Oracle Sessions?

    애플리케이션과 데이터베이스 간의 연결을 의미한다.
    출처: docs.oracle

     

    세션의 주요 역할

    1. 클라이언트와 데이터베이스 사이의 연결을 유지한다.
    2. SQL 실행 상태, 트랜잭션 상태 등을 관리한다.
    3. 세션에 대한 정보는 v$session 뷰에서 확인할 수 있다.
      SELECT * FROM v$session WHERE username = '사용자명'

     

    SELECT * FROM v$session WHERE username = '사용자명'

     

    SID SERIAL# USER# USERNAME STATUS OSUSER PROGRAM
    1 41 0 NULL ACTIVE oracle oracle@e150c35f568d (J001)
    2 445 61 imfra INACTIVE root JDBC Thin Client
    11 31 61 imfra INACTIVE root JDBC Thin Client
    12 15 55 developer INACTIVE root JDBC Thin Client

    프로세스

    What is Oracle Process?

    Oracle 데이터베이스에서 수행되는 실행 단위를 의미한다.
    출처: docs.oracle

     

    포어그라운드 프로세스

    1. 사용자 세션과 직접 연결된 프로세스
    2. SQL 쿼리를 실행하거나 데이터를 수정하는 작업을 처리
    3. 각 세션에 대해 하나의 포어그라운드 프로세스가 존재


    백그라운드 프로세스

    1. DB서버에서 주기적으로 실행되며 시스템 전체의 작업을 처리
    2. 사용자 세션과 직접 연결되지 않음
    3. 데이터베이스의 성능, 안정성, 복구 작업 등을 보장

    리소스 제한

    v$resource_limit 뷰의 역할

    DB 내에서 사용자나 세션에 대해 설정된 리소스 제한에 대한 상태 정보를 제공한다.

     

    #리소스 사용량 및 리미트값 확인
    SQL > SELECT * FROM v$resource_limit WHERE resource_name IN ('processes','sessions');

     

    RESOURCE_NAME

    CURRENT_UTILIZATION

    MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
    processes 92 139 300 300
    sessions 94 157 480 480

     

    RESOURCE_NAME 제한을 적용할 리소스의 이름
    CURRENT_UTILIZATION 현재 사용 중인 값
    현재까지 사용된 CPU 시간이나 연결된 세션 수가 표시됨
    MAX_UTILIZATION 최대 사용량
    리소스를 사용한 세션 중에서 최대 사용량을 기록한 값
    INITIAL_ALLOCATION 리소스 제한의 초기 설정 값
    LIMIT_VALUE 리소스에 대해 설정된 최대 허용 값
    최대 세션 수, 최대 CPU 시간 등이 설정될 수 있다.

     

    리소스 제한으로 발생하는 에러

    ORA-00018 LIMIT_VALUE를 초과하면 발생
    ORA-00020 최대 프로세스 수를 초과
    ORA-00037 최대 프로세스 수를 초과

    컨테이너 환경에서 리소스 제한 수정 방법

    docker-compose.yaml

    version: "3.8"
    
    services:
      oracle:
        image: wnameless/oracle-xe-11g-r2  # 이미지 이름
        container_name: oracledb-11g       # 컨테이너 이름
        restart: always
        ports:
          - "6521:1521"
        environment:
          ORACLE_SID: xe
          ORACLE_USERNAME: system
          ORACLE_PWD: oracle
          TZ: Asia/Seoul
          ORACLE_ALLOW_REMOTE: true
        volumes:
          - data:/u01/app/oracle/oradata
          - /home/bxuser/docker/oracle11g/backup:/oradata
        networks:
          - bridge
    
    volumes:
      data:
    
    networks:
      bridge:
        driver: bridge

     

    #오라클 컨테이너 Bash 실행
    [root@]$ docker exec -ti oracledb-11g bash

     

    #SQLPLUS 실행
    [root@oracledb-11g]$ sqlplus
    
    SQL*Plus: Release 11.2.0.2.0 Production on Wed Apr 2 08:41:15 2025
    
    Copyright (c) 1982, 2011, Oracle.  All rights reserved.
    
    #DBA 계정으로 로그인
    Enter user-name: sys@xe as sysdba

     

    #세션, 프로세스 LIMIT 수정
    Connected to:
    Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
    
    SQL>ALTER SYSTEM SET SESSIONS=300 SCOPE=spfile;
    SQL>ALTER SYSTEM SET PROCESSES=300 SCOPE=spfile;

     

    #컨테이너 bash를 종료시킨다
    #shutdown immediate 커맨드로 DB를 정지시키면 안된다
    SQL> exit
    Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
    root@e150c35f568d:/# exit
    exit
    
    [root@]$

     

    #docker-compose 명령어를 사용해 재기동한다
    [root@]$ docker-compose restart

    728x90
    반응형

    댓글