ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Admin 실습 01: 인스턴스 기동 & 파라미터 파일
    DB 스터디/01_Admin 2026. 2. 21. 20:23

    실습 스크립트 전체 보기: https://github.com/nsylove97/Seongryeol-OracleDB-Portfolio

    실습 환경
    OS Oracle Linux 7.9 (VMware Virtual Machine)
    DB Oracle Database 19c
    접속 툴 SQL*Plus, MobaXterm(SSH)

     

    1. SQL*Plus 접속 방식 — 로컬 vs 클라이언트
    -- 로컬 접속 (서버 내부에서 직접)
    sqlplus hr/hr
    
    -- 클라이언트 방식 (@가 붙음, 네트워크를 통한 원격 접속)
    sqlplus hr/hr@oel7vr:1521/orcl
    -- 형식: sqlplus 계정/비번@호스트:포트/서비스명

     

    • @ 기호가 붙으면 네트워크를 통해 리스너를 경유하는 클라이언트 접속.
    • 인스턴스 1개는 반드시 DB 1개와만 연결됨.

    hr/hr 접속 모습
    클라이언트 방식 접속시, 리스너가 없으면 ORA-12541 오류 발생
    lsnrctl start로 리스너 작동 시작

     

    클라리언트 접속 성공


    2. Alert Log 모니터링 실습

     

    Alert Log는 장애 발생 시 가장 먼저 확인하는 파일.

    1. 로그 경로 확인: diagnostic_dest 파라미터 확인

    -- SQL*Plus에서 경로 확인
    show parameter diagnostic_dest

    sysdba 계정으로 diagnostic_dest 파라미터 확인

     

    Alert Log 기본 경로: <diagnostic_dest>/diag/rdbms/<db_name>/<db_unique_name>/trace/alert_<SID>.log

    *Virtual Machine에서 경로: /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log

    orcl DB의 Alert Log 파일 확인

     

    2. 로그 확인 명령어

    -- 전체 출력
    cat alert_orcl.log
    
    -- 실시간 모니터링 (Ctrl+C로 종료)
    tail -f alert_orcl.log

    Alert 로그 출력 예시 (Deadlock 테스트한 내용 기록됨)

     

    Alert 로그에 기록되는 정보

    • 인스턴스 시작/종료 상태 변화
    • DDL 관련 구조적 변경
    • 에러 및 경고 (예: ORA-600 internal error)

    3. 인스턴스 기동 4단계 실습

     

    인스턴스는 Shutdown → Nomount → Mount → Open 순서로 기동

    SHUTDOWN ──► NOMOUNT ──► MOUNT ──► OPEN

     

    SHUTDOWN

    DB가 꺼진 상태에서도 OS 레벨에서는 아래 작업이 가능함.

    -- 파일 복사/이동
    cp users01.dbf /home/oracle
    
    -- 권한 변경
    chown oracle:oinstall users01.dbf
    chmod 640 users01.dbf

    DB를 shutdown 상태로 전환
    파일 복사
    권한 변경

    NOMOUNT

    파라미터 파일(pfile/spfile)을 읽어 인스턴스(메모리+프로세스)만 기동하는 단계.

    -- nomount 단계로 진입
    STARTUP NOMOUNT;

    nomount로 들어갈 때의 Alert log 기록
    파라미터 파일에서 읽은 non-default 파라미터 값도 출력됨
    이후 background process 동작 시작

     

    파라미터 파일 종류 비교

    구분 pfile spfile
    형식 텍스트 파일 바이너리 파일
    수정 방법 vi 편집기 직접 수정 ALTER SYSTEM 명령으로만 수정
    위치 $ORACLE_HOME/dbs/initorcl.ora $ORACLE_HOME/dbs/spfileorcl.ora
    반영 시점 DB 재시작 후 동적 파라미터는 즉시, 정적은 재시작 필요
    우선순위 spfile 없을 때 사용 spfile이 있으면 우선 적용

     

    pfile ↔ spfile 상호 변환

    -- pfile로부터 spfile 생성
    CREATE SPFILE FROM PFILE;
    
    -- spfile로부터 pfile 생성
    CREATE PFILE FROM SPFILE;

    spfile만 있는 상태

     

    sys계정으로 spfile로부터 pfile 생성, initorcl.ora (pfile) 확인 가능

     

    NOMOUNT 단계에서 할 수 있는 작업

    -- 1. 컨트롤 파일 재생성
    -- 컨트롤 파일이 손상되어 새로 만들어야 할 때
    
    ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/home/oracle/ctltrace.sql';  
    -- 재생성 스크립트 추출 (open 단계에서)
    
    -- 컨트롤 파일 재생성 sql파일
    STARTUP NOMOUNT
    CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 '/u01/app/oracle/oradata/ORCL/redo01.log'  SIZE 50M BLOCKSIZE 512,
      GROUP 2 '/u01/app/oracle/oradata/ORCL/redo02.log'  SIZE 50M BLOCKSIZE 512,
      GROUP 3 '/u01/app/oracle/oradata/ORCL/redo03.log'  SIZE 50M BLOCKSIZE 512
    -- STANDBY LOGFILE
    DATAFILE
      '/u01/app/oracle/oradata/ORCL/system01.dbf',
      '/u01/app/oracle/oradata/ORCL/sysaux01.dbf',
      '/u01/app/oracle/oradata/ORCL/undotbs01.dbf',
      '/u01/app/oracle/oradata/ORCL/users01.dbf'
    CHARACTER SET AL32UTF8
    ;
    
    -- 2. 데이터베이스 신규 생성
    -- 완전히 새로운 DB를 만들 때
    CREATE DATABASE newdb
      USER SYS IDENTIFIED BY oracle
      USER SYSTEM IDENTIFIED BY oracle
      LOGFILE GROUP 1 ('/oradata/orcl/redo01.log') SIZE 50M,
              GROUP 2 ('/oradata/orcl/redo02.log') SIZE 50M,
              GROUP 3 ('/oradata/orcl/redo03.log') SIZE 50M
      MAXLOGFILES 5
      MAXLOGMEMBERS 5
      MAXDATAFILES 100
      MAXINSTANCES 1
      DATAFILE '/oradata/orcl/system01.dbf' SIZE 500M REUSE
      SYSAUX DATAFILE '/oradata/orcl/sysaux01.dbf' SIZE 500M REUSE
      DEFAULT TABLESPACE users
        DATAFILE '/oradata/orcl/users01.dbf' SIZE 200M REUSE
      DEFAULT TEMPORARY TABLESPACE temp
        TEMPFILE '/oradata/orcl/temp01.dbf' SIZE 100M REUSE
      UNDO TABLESPACE undotbs1
        DATAFILE '/oradata/orcl/undotbs01.dbf' SIZE 200M REUSE
      CHARACTER SET AL32UTF8
      NATIONAL CHARACTER SET AL16UTF16;

     

    컨트롤파일 재생성 스크립트 추출 후 확인
    nomount 단게에서 resetlogs로 컨트롤 파일 재생성
    일반 open은 안 되고, resetlogs로 open

    MOUNT 단계

    컨트롤 파일을 열어 DB의 물리적 구조를 인식하는 단계.

    -- mount 단계로 진입
    ALTER DATABASE MOUNT;

     

    MOUNT 단계에서만 가능한 작업들

    -- 아카이브 로그 모드 전환
    ALTER DATABASE ARCHIVELOG;
    
    -- 데이터파일 경로 변경
    ALTER DATABASE RENAME FILE '/old/path/data01.dbf' TO '/new/path/data01.dbf';
    
    -- 데이터베이스 복구 수행
    RECOVER DATABASE;

     

    아카이브 로그 모드 전환

    노 아카이브 모드인 것 확인

    archive log list 명령어로 현재 아카이브 모드 확인 (Open 상태)

    아카이브 모드로 전환

     

    DB 종료 후 MOUNT 단계로 진입.

    alter database archivelog 명령어로 아카이브 모드로 전환.

    다시 아카이브 모드 확인. (No Archive Mode --> Archive Mode로 전환됨)

    open 상태에서도 아카이브 모드 확인
    db_recovery_file_dest 파라미터 값 확인

    log_archive_dest 파라미터 값을 따로 주지 않았기 때문에 db_recovery_file_dest 파라미터 값에 나온 경로로 저장됨.

    archivelog 폴더 확인

    db_recovery_file_dest 파라미터 값에 나온 경로에서 archivelog 폴더 확인 가능.

    log switch 발생 후, archive log 파일 생성된 것 확인

    테스트를 위해 log switch를 실행한 뒤, 생성된 아카이브 로그 파일 확인 가능.

    아카이브 로그 파일명 형식 확인

    생성된 아카이브 로그 파일은 log_archive_format 파라미터 값에 따라 이름이 자동 부여됨.

    %t: redo thread number

    %s: log sequence number

    %r: resetlogs ID

     

    데이터파일 경로 변경

    변경 전 데이터파일 경로 확인
    DB 종료 후, users 데이터 파일을 홈 디렉토리로 복사
    mount 상태에서 데이터 파일 경로 변경, DB 오픈
    변경된 데이터파일 경로 확인 가능

    OPEN 

    사용자가 실제로 DB를 사용할 수 있는 최종 단계.

    -- open 단계로 진입
    ALTER DATABASE OPEN;
    
    -- 처음부터 한 번에 OPEN까지
    STARTUP;

     

    OPEN 시 내부 동작

    1. Control File에서 데이터파일과 Redo Log 파일 경로 확인
    2. SMON 프로세스가 데이터 일관성 검사
    3. 비정상 종료 이력이 있으면 Instance Recovery(Crash Recovery) 자동 수행
      • Roll Forward: Redo Log를 읽어 미반영 변경사항을 데이터 파일에 적용
      • Roll Back: 미완료 트랜잭션을 Undo로 취소

    4. 강제 재시작 & 백그라운드 프로세스 확인
    -- DB 강제 종료 후 재시작 (장애 상황에서 사용)
    SHUTDOWN ABORT;
    STARTUP;

     

    SHUTDOWN ABORT 후 재시작 — 인스턴스 리커버리 확인

    실습 전 인스턴스 상태 확인 후, test계정으로 접속
    update 작업 후 커밋 안 함. (미완료 트랜잭션)
    다른 세션에서 shut abort로 DB 강제 종료 후 다시 startup, 이후 인스턴스 작동 확인
    Alert Log에서 DB가 오픈된 후 crash recovery(인스턴스 리커버리) 진행된 것 확인 가능.
    test 계정에서 커밋 안 한 트랜젝션은 rollback

     

    백그라운드 프로세스 확인 및 강제 종료 실습

    -- orcl 인스턴스의 백그라운드 프로세스 목록 확인
    ps -ef | grep orcl
    
    -- 출력 예시
    oracle   29938     1  0 19:54 ?        00:00:00 ora_pmon_orcl
    --여기서 29938이 PID
    
    -- 특정 프로세스 강제 종료
    kill -9 [PID]

    ps 명령어로 출력한 orcl 인스턴스 백그라운드 프로세스 목록

     

    주요 백그라운드 프로세스 역할 정리

    • ora_pmon_orcl: 비정상 종료된 프로세스 정리, 리스너에 인스턴스 등록
    • ora_smon_orcl: 인스턴스 리커버리 수행, 임시 세그먼트 정리
    • ora_dbw0_orcl: 더티 버퍼를 데이터파일에 기록 (DB 라이터)
    • ora_lgwr_orcl: 리두 로그 버퍼를 리두 로그 파일에 기록 (로그 라이터)
    • ora_ckpt_orcl: 체크포인트 발생 시 컨트롤 파일과 데이터파일 헤더 업데이트

    lgwr PID 확인 후 강제 종료, ps 명령어로 백그라운드 프로세스 모두 사라진 것 확인
    alert log에도 기록
    DB 재시작, 인스턴스 상태 확인
    Alert log에 crash recovery(인스턴스 리커버리) 진행된 것 기록됨

    5. SCOPE 옵션으로 파라미터 변경 범위 제어
    -- 메모리에만 적용 (재시작하면 원상태로 복구, 동적 파라미터만 가능)
    ALTER SYSTEM SET [파라미터] = [값] SCOPE=MEMORY;
    
    -- spfile에만 기록 (재시작 후 적용, 정적 파라미터 수정 시 필수)
    ALTER SYSTEM SET [파라미터] = [값] SCOPE=SPFILE;
    
    -- 즉시 적용 + spfile에도 기록 (동적 파라미터만 가능)
    ALTER SYSTEM SET [파라미터] = [값] SCOPE=BOTH;

    실습 전 파라미터 값 확인

    job_que_processes는 80, processes는 320.

     

    SCOPE=MEMORY

    값 바뀐 것 확인

    alter system 명령어로 job_que_processes를 5로 변경하고, scope=memory.

    show parameter로 변경된 값 확인 가능.

    DB 재시작 후 복구된 값 확인

    DB 재시작하고 확인하면 원래 값인 80으로 복구됨.

     

    SCOPE=SPFILE

    아직 바뀌지 않은 값 확인.

     

    이번엔 scope=spfile로 processes 파라미터 값 변경.

    show parameter로 확인해도 아직 바뀌지 않음.

    DB 재시작 후 변경된 값 확인 가능.

     

    DB 재시작하고 확인하면 변경된 값인 200 확인 가능.

     

    SCOPE=BOTH

    scope=both를 주면, 바로 적용되고 DB 재시작 후에도 유지됨

    변경된 즉시, 재부팅 후에도 유지되는 것 확인 가능.

     

    정적 파라미터에 SCOPE=BOTH 하면 에러 발생

    -- processes는 정적 파라미터 → SCOPE=BOTH 하면 에러 발생
    ALTER SYSTEM SET processes=300 SCOPE=BOTH;
    -- ORA-02095: specified initialization parameter cannot be modified

    정적 파라미터 processes는 scope=spfile일 때만 변경 가능


    실습 핵심 요약

    주제 핵심 포인트
    접속 방식 @ 유무로 로컬/클라이언트 구분
    Alert Log tail -f로 실시간 모니터링
    기동 단계 SHUTDOWN → NOMOUNT → MOUNT → OPEN
    NOMOUNT 단계 컨트롤 파일 재생성, DB 신규 생성
    MOUNT 단계 아카이브 로그 모드 전환, 파일 경로 변경 가능
    인스턴스 리커버리 SMON이 Roll Forward + Roll Back 자동 수행
    파라미터 파일 spfile 우선 적용, pfile은 vi 수정 가능
    SCOPE 옵션 정적 파라미터는 SCOPE=SPFILE만 가능

     

Designed by Tistory.