ex) 밤새 OS가 내려갔을 경우 (후행작업)
리스너 체크 → DB 체크 → 방화벽 체크
1) VirtualBox 실행 후 PUTTY 접속
2) oracle 유저로 접속
3) oracle 이름이 있는 프로세스(ps 명령어) 체크하기
▶ 디벨로퍼 실행해도 에러 메시지 뜬다.
4) listener 확인
5) listener 띄우기
6) DB 상태 확인
▶ idle instance : DB가 내려갔다는 뜻이다.
▶ DB가 내려갔기 때문에 SQL로 유저 접속이 안 되는 걸 볼 수 있다.
7) DB 띄우기 (startup)
8) listener 상태 확인
# 어떤 instance로 접속했는지 확인하는 법
# 누구 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;
- 현장 가서 모니터가 여러 개 필요한데 모니터에 크게 꼭 띄워놓아야 함!!
# 초기 파라미터 파일이 없을 경우 테스트해보기
▶ 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
▶ shutdown을 하게 되면 위에서 실시간으로 뜨는 걸 볼 수 있다.
2. mount
- control file 열기
1) 초기 파라미터 파일에 지정된 control file의 위치정보를 가지고 오픈한다.
# mount 단계에서 오라클 작업하는 일
- 데이터 파일 이름 바꾸기 (이관작업)
- noarchivelog mode를 archivelog mode로 바꾸는 작업
ex) 확인
- full database recovery
- rman을 이용해서 close backup 할 때
3. open
- data file, redo log file 열기
- 무조건 open하지 않고, DB의 일관성 검사를 한다.
- 필요한 경우 SMON Background process가 instance recovery를 시작한다.
■ startup 실습
▶ STARTED : 인스턴스 시작은 했지만 nomount까지 올라온 걸 알 수 있다.
▶ 바로 startup을 하면 에러가 발생한다. 수동으로 작업 시엔 단계별로 수행해야 한다.
▶alter database mount; 는 SQL문장이기 때문에 꼭 뒤에 세미클론(;) 표시
▶ mount까지 올린 작업이다.
▶ open까지 올려주고, 상태확인하면 정상적으로 올라간 걸 확인이 된다.
▶ 꼭 단계를 맞춰서 해줘야 한다.
▶ v$instance, v$database는 control file이 가지고 있다.
▶ 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가 필요하지 않다. (안정적으로 내려갔기 때문이다.)
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 백업은 절대 하면 안 된다.!!
'Linux' 카테고리의 다른 글
2025.01.15 oracle 19c 설치 및 환경설정 셋업과 listener 상태 정보 확인 및 reboot 시 복구 방법 (0) | 2025.01.15 |
---|---|
2025.01.14 vi 편집기에서 JAVA 코드 입력 및 수정, 출력, Shell 프로그램으로 코드 작성 (0) | 2025.01.14 |
2025.01.13 Linux 파일의 접근 권한 관리 및 부여, 삭제 등 사용자 환경 설정 파일 수정 (0) | 2025.01.13 |
2025.01.10 vi 환경 및 명령어, 유저 생성, group 생성, passwd 생성 및 삭제 및 변경 (2) | 2025.01.10 |
2025.01.09 Linux 명령어 및 디렉터리 이동,수정,복사,timezone 확인 및 변경 (0) | 2025.01.09 |