Listener, alertlog, startup, shutdown

YoonSeo Park ·2023년 12월 8일
0

Oracle Architecture

목록 보기
1/11
post-thumbnail

2023/12/08


■ DB 엔지니어 확인해야할것

▶ 1. listner 네트워크 상태 확인

  • LISTNER( HOST,PORT,SID,PROTOCOL )
    : remote(client)지역에서 정보를 가지고 server로 들어가는 길
    • SQL DEVELOPER는 remote 이므로 listner가 필요하다.
    • PUTTY는 서버로 직접 들어갔으니 listner가 필요가없다.
      (로컬에서 들어간 느낌)
  • listner 상태정보
[oracle@oracle ~]$ lsnrctl status
  • listner 중지
[oracle@oracle ~]$ lsnrctl stop

TNS-12541: TNS:no listener
: 리스너가 내려갔다.
  • network 오류

  • listner 시작
[oracle@oracle ~]$ lsnrctl start

▶ 2. 프로세스 확인

  • sql 접속

[oracle@oracle ~]$ sqlplus / as sysdba

  • Connected to an idle instance
    : DB가 내려갔다
  • Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
    : DB가 연결잘되어있다.
  • DB 띄우기 (DB가 내려가있을때)
    SQL> startup
  • 오라클이 사용하고 있는 프로세스 확인
    SQL> ! ps -ef | grep oracle

  • 인스턴스 상태정보 확인
    SQL> select * from v$instance;

        STATUS
        -----
        OPEN

  • 전에 썻던 sql문 vi로 보기
SQL> ed 
  • sqlplus 기본설정정보
SQL> define
DEFINE _DATE           = "07-DEC-23" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "ora11g" (CHAR)
DEFINE _USER           = "SYS" (CHAR)
DEFINE _PRIVILEGE      = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000400" (CHAR)
DEFINE _EDITOR         = "vi" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE      = "1102000400" (CHAR)
DEFINE _RC             = "0" (CHAR)
  • define_editor를 vi로 바꾸기
    SQL> define_editor="vi"

  • 전에 썻던거
    SQL> /
    select open from v$instance
    *
    ERROR at line 1:
    ORA-00904: "OPEN": invalid identifier

시멘틱 에러 : server process 에러

  • listner 상태 확인
    SQL> ed
    select status from v$instance
    SQL> /
    STATUS
    ------------
    OPEN
  • define_editor를 vi로 고정값으로 바꾸기
[oracle@oracle ~]$ cd $ORACLE_HOME/sqlplus/admin
[oracle@oracle admin]$ pwd
/u01/app/oracle/product/11.2.0.4/db_1/sqlplus/admin
[oracle@oracle admin]$ ls
glogin.sql  help  libsqlplus.def  plustrce.sql  pupbld.sql
[oracle@oracle admin]$ vi glogin.sql
[vi]
 define_editor="vi"
[oracle@oracle admin]$ cd
[oracle@oracle ~]$ pwd
/home/oracle

■ alert log file

  • 오라클이 운영되고 종료될때 까지 중요한 내용들을 저장하고 있는 파일
  • 오라클 서버에서 어떤 장애가 발생했거나 문제의 징후가 보일 경우 이 파일 내용을 자세히 분석해보면 해답을 찾을 수 있다.
  • dba는 항상 틀어놔야한다.

alert log file 창

[oracle@oracle ~]$ cd $ORACLE_BASE/diag/rdbms/ -- 이부분은 똑같다.
[oracle@oracle rdbms]$ ls -- 현장마다 SID가 다르다.
ora11g
[oracle@oracle rdbms]$ cd ora11g
[oracle@oracle ora11g]$ ls
i_1.mif  ora11g
[oracle@oracle ora11g]$ cd ora11g
[oracle@oracle ora11g]$ pwd
/u01/app/oracle/diag/rdbms/ora11g/ora11g
[oracle@oracle ora11g]$ ls
alert  hm        incpkg  lck       metadata_dgif  stage  trace
cdump  incident  ir      metadata  metadata_pv
[oracle@oracle ora11g]$ cd trace
[oracle@oracle trace]$ vi alert_ora11g.log
-- alert log 창
----------------------------------------------
- SID값만 바꿔주면 된다.
$ORACLE_BASE/oracle/diag/rdbms/SID/SID/trace
/u01/app/oracle/diag/rdbms/ora11g/ora11g/trace
----------------------------------------------

alert log 파일 위치 확인

SQL> SHOW PARAMETER USER_DUMP_DEST;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /u01/app/oracle/diag/rdbms/ora                                              11g/ora11g/trace

alert log file 창

  • tail -f : 실시간으로 보여준다.
    [oracle@oracle trace]$ tail -f alert_ora11g.log
    -- alert log 실시간으로 띄어준다. dba항상띄어논다.
SQL> shutdown immediate
Database closed.
Database dismounted. -- 디스크 종료
ORACLE instance shut down. -- 메모리 종료
SQL> startup
ORACLE instance started.

Total System Global Area  531476480 bytes
Fixed Size                  1365796 bytes
Variable Size             209717468 bytes
Database Buffers          314572800 bytes
Redo Buffers                5820416 bytes
Database mounted.
Database opened.

■ startup 단계

▶ 1. nomount 단계

1. nomount ?

: instance 시작 (sga 영역과 background process 생성)

  • 초기 파라미터 파일 (initialization parameter file) OPEN
    • spfile<SID>.ora , init<SID>.ora
      (server parameter file)
    • $ORACLE_HOME/dbs 안에 있다.
[oracle@oracle ~]$ cd $ORACLE_HOME/dbs
[oracle@oracle dbs]$ pwd
/u01/app/oracle/product/11.2.0.4/db_1/dbs
[oracle@oracle dbs]$ ls
hc_ora11g.dat  init.ora  lkORA11G  orapwora11g  spfileora11g.ora

2. 하는일

startup nomount 단계에서 제일 먼저 보는 파일이 spfile<SID>.ora를 찾는데 없으면 다음으로 init<SID>.ora를 찾는다. 둘다 없으면 오류 발생

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0
                                                 .4/db_1/dbs/spfileora11g.ora

3. nomount 단계에서 오라클 작업하는 일

alert<SID>.log ,trace file OPEN 하고 실행

  • db 생성
  • control 파일 재생성
  • 백업, 복구

▶ 2. mount 단계 (control)

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

control file open 하고 실행

  • 데이터 파일 이름 바꾸기
  • noarchivelog mode 를 archivelog mode 바꾸는 작업
  • full database recovery
  • rman을 이용해서 close backup 할때

▶ 3. open

data file, redo log file open

■ startup 시나리오

▶ 1. nomount 단계

SQL> startup nomount
ORACLE instance started.

Total System Global Area  531476480 bytes
Fixed Size                  1365796 bytes
Variable Size             209717468 bytes
Database Buffers          314572800 bytes
Redo Buffers                5820416 bytes
SQL> select status from v$instance;

STATUS
------------
STARTED  -- nomount까지 올라왔구나

▶ 2. mount 단계

SQL> alter database mount;

Database altered.

SQL> select status from v$instance;

STATUS
------------
MOUNTED

▶ 3. open 단계

SQL> alter database open;

Database altered.

SQL> select status from v$instance;

STATUS
------------
OPEN
  • 순서
    nomount -> mount -> open
    그냥 startup 하면 : 기본값 open이다.

■ db 읽기 모드

  • startup 기본모드 : READ WRITE
SQL> select open_mode from v$database;
  
OPEN_MODE
--------------------
READ WRITE
  • db 읽기 모드로 변경
SQL> shutdown immediate  -- 운영중에 못바꾸므로 shutdown 해줘야한다. 
SQL> startup open read only
  
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY

SQL> select salary from hr.employees where employee_id=100;

    SALARY
----------
     24000

SQL> update hr.employees set salary = 1000 where employee_id=100;
update hr.employees set salary = 1000 where employee_id=100
          *
ERROR at line 1:
ORA-16000: database open for read-only access
  • db 읽기,쓰기 모드로 변경
SQL> shutdown immediate
SQL> startup  
SQL> select open_mode from v$database;
  
OPEN_MODE
--------------------
READ WRITE

■ 오라클 종료

▶ 1. normal 모드

shutdown (normal)

  • normal 기본 종료모드
  • 새 연결을 생성할 수 없습니다. 새로운 session은 생성 할 수 없다.
  • 오라클 서버는 모든 유저가 연결을 끊을때까지 종료하지 않고 대기한다.
  • 데이터 버퍼 캐시 및 리두 버퍼가 디스크에 기록된다.
  • 백그라운드 프로세스가 종료되고 SGA 메모리에서 제건된다.
  • instance 종료하기 전에 데이터베이스(데이터파일, 리두로그파일) 닫고 마운트(컨트롤파일)를 해제한다.
  • 데이터베이스를 다시 시작할때 instance recovery 가 필요하지 않습니다.

▶ 2. tansactional 모드

shutdown transactional

  • 새 연결을 생성할 수 없습니다. 새로운 session은 생성 할 수 없다.
  • (DML 작업을) transaction 수행하는 유저는 계속 오라클에 접속을 나두고 접속은 했지만 아무 작업을 하지 않은 유저는 자동으로 session 종료 시킨다.
  • 모든 transaction 이 완료(commit,rollback) 되면 즉시 데이터베이스가 종료된다.
  • instance 종료하기 전에 데이터베이스(데이터파일, 리두로그파일) 닫고 마운트(컨트롤파일)를 해제한다.
  • 데이터베이스를 다시 시작할때 instance recovery 가 필요하지 않습니다.

▶ 3. immediate 모드

shutdown immediate

  • 새 연결을 생성할 수 없습니다. 새로운 session은 생성 할 수 없다.
  • 오라클 서버는 현재 연결하고 있는 유저를 자동으로 session 종료 시킨다.(kill)
  • 만약 현재 유저들 중에 DML 작업을 수행하고 있을 경우에 kill 시키는 순간 자동 rollback 된다.
  • instance 종료하기 전에 데이터베이스(데이터파일, 리두로그파일) 닫고 마운트(컨트롤파일)를 해제한다.
  • 데이터베이스를 다시 시작할때 instance recovery 가 필요하지 않습니다.
  • 데이터베이스 close backup 을 수행 할때 한다.

▶ 4. abort 모드

shutdown abort

  • 비 정상적인 종료
  • normal, transaction, immediate 작동되지 않을 경우 사용
  • 데이터버퍼 캐시 및 리두 버퍼가 디스크에 기록되지 않습니다.
  • commit 되지 않은 트랜잭션은 rollback되지 않았습니다.
  • 파일이 닫지 않은 상태로 instance 가 종료 된다.
  • 데이터베이스가 닫히거나 마운트 해제되지 않습니다.
  • 데이터베이스를 시작시 instance recovery 가 필요하며 이는 자동으로 수행된다.

주의!!
shutdown abort 수행한 후 데이터베이스 백업을 하지말자!!
alert log 창을 보고 어떤 모드로 종료되어있는지 볼수있다.


profile
DB 공부를 하고 있는 사람입니다. 글을 읽어주셔서 감사하고 더 좋은 글을 쓰기 위해 노력하겠습니다 :)

0개의 댓글