본문 바로가기

Linux

2025.01.16 OS 다운 시 복구 및 Oracle startup 단계별 테스트, Oracle shutdown 4가지 테스트

ex) 밤새 OS가 내려갔을 경우 (후행작업)

     리스너 체크 → DB 체크 → 방화벽 체크 

  1) VirtualBox 실행 후 PUTTY 접속

 

  2) oracle 유저로 접속

 

  3) oracle 이름이 있는 프로세스(ps 명령어) 체크하기

떠있지 않은 상태

▶ 디벨로퍼 실행해도 에러 메시지 뜬다.

 

  4) listener 확인

listener가 내려가 있다.

 

  5) listener 띄우기

 

6) DB 상태 확인

idle instance : DB가 내려갔다는 뜻이다. 

 

▶ DB가 내려갔기 때문에 SQL로 유저 접속이 안 되는 걸 볼 수 있다.

 

7)  DB 띄우기 (startup)

DBA만 입력 가능
DB 정상 확인

 8) listener 상태 확인


  # 어떤 instance로 접속했는지 확인하는 법


# 누구 instance로 접속했는지 구분해서 입력하는 법

SQL 프롬프트 형식을 '유저명@instance명>'

SET SQLPROMPT '&_USER.@&_CONNECT_IDENTIFIER.> '

▶ 현장에 가서 꼭 프롬프트 이렇게 설정해 놓기 (그래야 다른 유저로 접속해도 유저가 뜨기 때문이다.)

 

▶ SQL 입력창이 뜨면 누구로 instance 접속했는지 알 수가 없다. 그래서 vi편집기를 통해 어떤 instance로 접속했는지 알기 위해 구분해 놓은 것이다. (꿀팁)

glogin.sql로 꼭 vi편집기 들어가서 설정하기

 

# 환경변수 셋업

  - 매번 셋업시키지말고 vi편집기 안에 추가해서 입력하면 된다.

 

 

■ 방화벽 (firewall)

  - 미리 정의된 보안 규칙에 기반해서 들어오고 나가는 네트워크 트래픽모니터링하고 제어하는 네트워크 보안 시스템

  - systemctl stop firewalld : 방화벽 정지

  - systemctl disable firewalld : 재부팅, 전원이 on/off 시 항상 firewalld 서비스가 실행되지 않도록 disable 설정

  - systemctl enable firewalld : 재부팅, 전원이 on/off 시 항상 firewalld 서비스가 실행되도록 enable 설정

해제되어있음

root 유저만 가능하기 때문이다.

 

현장에서 방화벽 체크도 꼭 하기

 

# 방화벽 열려있는 포트 번호 확인하는 방법

다 막혀있다.

 

#  특정 포트 번호 방화벽 확인

포트번호가 닫혀있다는 뜻이다. yes가 나오면 포트번호가 열려있기 때문에 접속이 가능하다는 뜻이다.

 

# 포트 번호 열기

▶ no가 뜨면 재적용 작업(firewqll-cmd --reload)을 해줘야 한다.

▶ 포트번호로 했는데 오류가 발생하면 디벨로퍼에서 접속할 때 호스트 이름을 192.168.~ 번호로 바꾸면 된다.

reload : 방화벽 설정을 변경한 뒤 다시 로딩을 통해 변경한 설정을 반영 (방화벽 자체를 끄지 않고 설정사항만 적용)

 

# 방화벽 확인

 

# 포트 번호 지우기

▶ 지워지지 않았다. 그 이유는 tcp 뒤에 --permanent를 작성하지 않았기 때문이다. --permanent : 영구적인 의미

 

지워졌다.

▶ 디벨로퍼로 접속하면 포트번호를 지웠기 때문에 에러 발생한다.

 

# 테스트 목적이니까 방화벽 중지하기

▶ 현장에선 이렇게 안 하고 enable, start 해놓고 특정 부분에서만 중지한다.

 

# root 유저가 뚫릴 시 itwill 유저한테 OS그룹과, 2차 그룹은 dba 주면 된다.


■ ORACLE DataBase 시작

   - ORACLE : INSTANCE(메모리 구조) + DATABASE(디스크)

그림으로 이해하기

 

■ startup 단계

이 위치를 제일 먼저 본다.

   

1. nomount : instance 시작(SGA : System Global Area 영역과 Background process 생성)

      - 초기 파라미터 파일(initialization parameter file) open 해야 한다.

      - 위치 : $ORACLE_HOME/dbs

      - 파일 : spfile<SID>.ora , init<SID>.ora 이런 이름으로 되어있어야 한다. (<> 그냥 표시한 거지 의미 없음)

                  SID : System IDentifier, instance_name(고유 식별자)

      - startup nomount 단계에서 제일 먼저 보는 파일은 $ORACLE_HOME/dbs 위치에서 spfile<SID>.ora를 찾고 없으면 init<SID>.ora를 찾는다. 만약에 둘 다 없으면 오류 발생

      - alert<SID>.log 열려있어야 하고, trace file open 되어있어야 한다.

 

  # nomount 단계에서 오라클 작업하는 일이 뭔지 물어본다.

    - DB 생성 

    - control file 재생성 (깨지면 nomount까지만 올라온다.)

    - 백업, 복구

 

alert<SID>.log 

   - Oracle이 운영되고 종료될 때까지 중요한 내용들은 저장하고 있는 파일

   - Oracle Server에서 어떤 장애가 발생했거나 문제의 징후가 보일 경우 이 파일 내용을 자세히 분석하면 해답 찾기 가능

   - select * from v$diag_info; 

   - 현장 가서 모니터가 여러 개 필요한데 모니터에 크게 꼭 띄워놓아야 함!!

select * from v$diag_info;
SGA 영역
Background Process들
instance 시작 시 메모리

 

# 초기 파라미터 파일이 없을 경우 테스트해보기

▶ exit 해서 shutdown immediate(DB 정상 종료) 해보기

▶ dbs 안에 초기 파라미터 파일이 있기 때문에 cd를 통해 들어간다.

▶ mv로 spfileora19c.orad이름을 spfileora19c.bak으로 rename 한 것

▶ oracle 갔다가 다시 sysdba로 접속해서 startup 해보면 가장 먼저 파라미터 파일이 없다고 에러가 발생한다. 

 

# 원위치 해보기

 

 

# 현재 어떤 초기 파라미터 파일을 가지고 띄웠는지 확인

 value 값이 있기 때문에 현재 DB는 spfileora19c로 시작한 것이다.

 

# spfile(spfileora19c.ora)을 가지고 pfile(initora19c.ora) 생성

▶ 주의할 점 : pfile은 아스키 값이고, spfile은 바이너리 파일이다. 

▶ 그래서 pfile은 직접 편집기로 수정해도 되지만, spfile은 명령어로 값을 변경하던지 pfile을 변경 후 spfile로 만들어야 함

 

 

# initfile 생성해서 보낼 때 (pfile 생성해서 보내달라고 현장에서 많이 함)

 

# 현재 DB 파일을 띄울 때 뭘로 띄웠는지 확인하기

▶ value 값이 null로 되어있으면 현재 initora19c로 시작한 걸 알 수 있다.

 

# pfile(initora19c.ora)을 가지고 spfile( spfileora19c.ora ) 생성

 

# 실시간으로 alert<SID>.log append 확인하기

  1) trace로 들어가기

[oracle@oracle19c trace]cd /u01/app/oracle/diag/rdbms/ora19c/ora19c/trace

 

before
after
언제 다운됐는지 알 수 있다.

▶ shutdown을 하게 되면 위에서 실시간으로 뜨는 걸 볼 수 있다.

 

2. mount 

   - control file 열기

     1) 초기 파라미터 파일에 지정된 control file의 위치정보를 가지고 오픈한다.

 

  # mount 단계에서 오라클 작업하는 일

    - 데이터 파일 이름 바꾸기 (이관작업)

    - noarchivelog mode를 archivelog mode로 바꾸는 작업

     ex) 확인

noarchivelog mode 확인

      - full database recovery

      - rman을 이용해서 close backup 할 때

 

  3. open

     - data file, redo log file 열기

     - 무조건 open하지 않고, DB의 일관성 검사를 한다.

     - 필요한 경우 SMON Background process가 instance recovery를 시작한다.

control file 안에 내용 확인

 

■ startup 실습

▶ STARTED :  인스턴스 시작은 했지만 nomount까지 올라온 걸 알 수 있다.

 

▶ 바로 startup을 하면 에러가 발생한다. 수동으로 작업 시엔  단계별로 수행해야 한다.

▶alter database mount; 는 SQL문장이기 때문에 꼭 뒤에 세미클론(;) 표시

▶ mount까지 올린 작업이다.

 

상태 확인

▶ open까지 올려주고, 상태확인하면 정상적으로 올라간 걸 확인이 된다.

▶ 꼭 단계를 맞춰서 해줘야 한다.

 

▶ v$instance, v$database는 control file이 가지고 있다.

▶ READ_WRITE : 읽고 쓸 수 있다.

READ_WRITE의 의미

▶ update 하면서 트랜잭션이 발생했기 때문에 rollback 하기

 

※ startup 기본모드 : startup [open] [read write]

 

■ 읽기 모드로 DB 운영해야 할 경우

▶꼭 DB를 정상 종료 후 작업하기

 

▶ read만 가능하기 때문에 update 수행 시 에러가 발생한다.

 

■ 읽기, 쓰기 모드로 DB 운영해야 할 경우

   - 기본모드이기 때문에 startup만 작성

 

■ Oracle 종료

명령어 새로운 세션
연결 허용
현재 세션이
종료할 때까지 대기
현재 트랜잭션이
종료할 때까지 대기
DB의 정상 종료
normal X O O O
transactional X X O O
immediate X X X O
abort X X X X

 

 1. shutdown [normal]

      - normal 기본 종료 모드

      - shutdown만 하게 되면 기본값은 normal이다.

      - 새 연결을 생성할 수 없다. 새로운 session은 생성할 수 없다.

      - Oracle Server는 모든 유저가 연결을 끊을 때까지 종료하지 않고 대기한다. (안정적임)

      - 데이터 버퍼 캐시 및 리루 버퍼 내용을 디스크에 기록한다.

      - instance 종료되기 전에 DB(data file, redo log file)를 닫고 mount(control file)을 해제한다.

      - 백그라운드 프로세스가 종료되고 SGA 메모리가 해제한다.

      - DB를 다시 시작할 때 instance recovery가 필요하지 않다. (안정적으로 내려갔기 때문이다.)

# 실습

 

2. shutdown transactional 

   - 새 연결을 생성할 수 없다. 새로운 session은 생성할 수 없다.

   - transaction 수행하는 유저는 계속 오라클에 접속을 놔두고 접속은 했지만 아무 작업을 하지 않은 유저는 자동으로 session 종료시킨다. (?)

   - transaction을 종료[commit, rollback]하게 되면 그 session은 자동으로 종료된다.

   - 데이터 버퍼 캐시 및 리루 버퍼 내용을 디스크에 기록한다.

   - instance 종료되기 전에 DB(data file, redo log file)를 닫고 mount(control file)을 해제한다.

   - 백그라운드 프로세스가 종료되고 SGA 메모리가 해제한다.

   - DB를 다시 시작할 때 instance recovery가 필요하지 않다. (안정적으로 내려갔기 때문이다.)

다른 세션에서 rollback이나 commit
아무것도 작업하지 않은 session에서도 조회가 되고 있다.

 

 

3. shutdown immediate

   - 새 연결을 생성할 수 없다. 새로운 session은 생성할 수 없다.

   - 오라클 서버는 현재 연결하고 있는 유저를 자동으로 session을 종료시킨다. (kill)

   - 유저들 중에 DML 작업을 수행하고 있는 경우 kill 시키는 순간 자동으로 rollback 작업이 수행된다. 이 작업은 PMON 백그라운드 프로세스가 작업을 수행한다.

   - 데이터 버퍼 캐시 및 리루 버퍼 내용을 디스크에 기록한다.

   - instance 종료되기 전에 DB(data file, redo log file)를 닫고 mount(control file)을 해제한다.

   - 백그라운드 프로세스가 종료되고 SGA 메모리가 해제한다.

   - DB를 다시 시작할 때 instance recovery가 필요하지 않다. (안정적으로 내려갔기 때문이다.)

 

 

4. shutdown abort

   - OS가 중단된 거랑 똑같다. 비정상적인 종료

   - 되는대로 startup 실행 후 잘 되면 startup immediate 실행

   - normal, transactional, immediate 작동되지 않을 경우 사용

   - 데이터 버퍼 캐시 및 리두 버퍼 내용이 디스크에 기록되지 않는다.

   - 유저들 중에 DML 작업을 수행하고 있는 경우 session이 종료가 되었지만 트랜잭션에 대해서는 rollback 되지 않는다.

   - 파일을 닫지 않은 상태로 instance 종료된다.

   - DB가 닫히거나 mount가 해제되지 않았다.

   - DB 시작 시 instace recovery가 필요하면 SMON 백그라운드 프로세스가 자동으로 수행한다.

 

주의할 점 : shutdown abort 수행 후 DB 백업은 절대 하면 안 된다.!!

DB 비정상적인 종료
조회가 둘 다 안 된다.