Oracle DB구조1 : Database

오라클 데이터베이스 구조

  • 오라클DB는 크게 인스턴스(SGA 메모리구조백그라운드 프로세스데이터베이스로 나뉜다.
  • 인스턴스: 메모리 안에 만들어진다. 오라클 시스템의 논리적인 구조(로지컬 스트럭쳐)
  • 데이터베이스: 하드드라이브 안에 만들어 진다. 오라클 시스템의 물리적인 구조이다.(피지컬스트럭쳐). 실제 오라클에 관련된 정보를 담고있는 파일을 칭함.
  • 인스턴스와 데이터베이스는 동적으로 연결되어 있다.
  • 필수파일들이 망가지는 경우 DB가 아예 작동하지 않는다. -> 백업, 복구작업진행해야함.

영어버전

InstanceSGA
(System Grobal Area)
메모리구조
Shared poolLibrary cache :
- 최근에 실행된 sql구문과 실행계획이 저장되는 공간
- LRU(Least Recently Used Algorithm) 알고리즘으로 관리됨.
- 대소문자, 공백까지 일치가 되어야 hit됨.
Data dictionary cache :
- 최근에 사용된 DB 정의정보가 저장된 공간
- 정의정보란 file, object, 권한, 제약조건 등
- LRU(Least Recently Used Algorithm) 알고리즘으로 관리됨.
DB buffer cache실제 실행 작업을 하는 메모리 구조
-최근에 사용된 Data block이 저장된 곳
-LRU 알고리즘으로 관리됨
Redo log buffer-DB에서 발생된 변경작업의 로그정보(Redo data)가 기록되는 곳
-순환형으로 관리됨
Background
Process
PMON- User proc fail시 진행하던 트랜잭션 롤백 및
선점하고 있던 자원과 lock을 해제함
SMON- Instance fail(= DB 비정삭적인 종료) 후 DB 재시작될 때
DB동기화를 시켜줌
DBWR- DB buffer cache의 Dirty block을 datafile로 기록함
- 체크포인트 발생시 기록함
LGWR- commit이 발생될 때 redo log buffer의 로그정보(= redo data)를
redo log file로 기록함
CKPT- 체크포인트 발생시 DBWR에게 알려줌.
- DBWR기록 후 datafiles 헤더와 controlfile에 마지막
체크포인트 번호를 갱신함
DatabaseDatabase 3대파일Data files실제 data가 저장되는 공간
data dictionary가 저장되는 공간
datafile 정보 조회 : v$datafile(영구data), v$tempfile(임시data)
Control fileDB의 무결성 유지/관리할 수 있는 모든 동기화정보가 기록된 공간
DB의 논리적/물리적 구조 정보, 마지막 작업번호 등이 저장
DB당 하나이상 존재 -> 최대8개까지 다중화기능제공
오라클 권장 3개
Control file 정보조회: v$controlfile
Redolog filesDB에서발생된 변경 작업의 로그정보(Redo data)가 기록된 공간
주목적 : Datafile recovery(복구)
DB당 최소 2개이상 존재
순환형 관리
Redo log Group(논리적 구조) : DB당 2개이상
Redo log Member(물리적 구조,file) : Redo log Group당 1개이상
오라클 권장사항 : Group 3개, Member 2개씩
Redolog files 정보조회 : v$log, v$logfile
Parameter fileInstance의 정의정보가 기록된 공간
SGA할당정보, B/G proc정보 등
DB의 여러 설정 정보가 기록된 공간
위치 : $ORACLE_HOME/dbs
이름 : spfileSID.ora 또는 initSID.ora
Password fileDB를 시작/종료할 수 있도록 인증해주는 공간.
위치 : $ORACLE_HOME/dbs
이름 : orapwSID
OptionalArchived log files- Redo log file의 오프라인 복사본
- 주목적 : Datafile Recovery
- log mode : Narchive log mode VS Archive log mode 중 선택
- log mode 정보 조회 : v$database




Database 5가지 필수물리적파일

datafiles

  • 실제 data가 저장되는 공간 => 따라서 관리를 잘해야한다.
  • data dictionary가 저장되는 공간
  • datafile 정보 조회 : v$datafile, v$tempfile
    • v$datafile : 영구데이터
    • v$tempfile : 임시데이터, DB를 끌때 같이 날라감.
  • v$datafile, v$tempfile 라이브러리를 사용하여 정보조회가 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// v$datafile : 영구데이터
desc v$datafile
select name, bytes from v$datafile;


NAME BYTES
--------------------------------------------------------------- ----------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_fwvn49fw_.dbf 838860800
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_fwvn5f1l_.dbf 545259520
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_fwvn66mp_.dbf 73400320
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_fwvn681o_.dbf 5242880


// v$tempfile : 임시데이터
desc v$tempfile
select name, bytes from v$tempfile;

NAME BYTES
------------------------------------------------------------ ----------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_temp_fwvnbgvk_.tmp 135266304




Control file

  • 데이터베이스의 무결성을 유지 관리할 수 있는 DB의 모든 동기화정보가 기록된 공간
  • DB의 논리적/물리적 구조 정보, 마지막 작업번호 등이 저장되어있음
  • DB당 하나만 존재하면 됨.
    • 컨트롤파일이 날라갔다 = DB가 날라갔다, 컨트롤파일이 과거로 되돌아가는 것 = DB가 과거로 되돌아 가는 것
    • 이렇듯 너무나 중요한 Control file은 백업으로는 역부족하여 데이터손실이 날 수 있으므로 Control file다중화를 통해서 동시 운영하는 것을 권장.
  • Control file다중화
    • 최대8개까지 다중화기능제공되고 오라클 3개권장
    • 다중화가 많을 수록 안정성, 성능↓ (3개든5개든 다중화 갯수만큼 동시에 기록해야해서 성능떨어짐)
    • 다중화가 적을 수록 안정성↓, 성능
    • 다중화시킬때는 경로를 나눠서 운영해야함. 예를 들어 c드라이브와 d드라이브에 하나씩.
  • Control file 정보조회 : v$controlfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//컨트롤파일 정보 조회
SQL> desc v$controlfile;
Name Null? Type
-------------------------- -------- ---------------
STATUS VARCHAR2(7)
NAME VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)
BLOCK_SIZE NUMBER
FILE_SIZE_BLKS NUMBER
CON_ID NUMBER

SQL> select name from v$controlfile;

NAME
------------------------------------------------------------
/u01/app/oracle/oradata/ORCL/controlfile/o1_mf_fwvn95xm_.ctl
/u01/app/oracle/fast_recovery_area/orcl/ORCL/controlfile/o1_
mf_fwvn96cd_.ctl
  • 조회결과를 보면 .ctl컨트롤 파일이 2개이다. 따라서 다중화 개수도 2개이다.




(online) Redo log files

  • DB에서발생된 변경 작업의 로그정보(Redo data)가 기록된 공간
    • DB에서발생된 변경 작업이란 DML 후 COMMIT, 오토커밋까지 한 작업
  • 이미 변경작업이 완료된 정보를 왜 로그 남길까? 주목적 : Datafile recovery(복구)
  • DB당 최소 2개이상존재해야함
  • 순환형으로 관리되는 파일 -> 순환하면서 로그를 덮어쓴다.
  • 다중화기능 제공. 다중화 개수 제한 없음. 다중화가 많을 수록 안정성, 성능↓
  • 기본 구조:
    • Redo log Group(논리적 구조) : DB당 Redo log Group이 2개이상 존재해야함
    • Redo log Member(물리적 구조, 실질적인 file) : Redo log Group당 1개이상 존재해야함
  • 오라클 권장사항 : Group 3개, Member 2개씩

https://myalpaca.tistory.com/15

  • Redolog files 정보조회 : v$log, v$logfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//v$log 조회
SQL> desc v$log;
Name Null? Type
---------------------------------- -------- ----------------
GROUP# NUMBER
THREAD# NUMBER
SEQUENCE# NUMBER
BYTES NUMBER
BLOCKSIZE NUMBER
MEMBERS NUMBER
ARCHIVED VARCHAR2(3)
STATUS VARCHAR2(16)
FIRST_CHANGE# NUMBER
FIRST_TIME DATE
NEXT_CHANGE# NUMBER
NEXT_TIME DATE
CON_ID NUMBER

SQL> select group#, members, status from v$log;

GROUP# MEMBERS STATUS
---------- ---------- --------------------------------
1 2 INACTIVE
2 2 CURRENT
3 2 INACTIVE
  • 조회결과를 보면 group은 3개와 각 group별 멤버 2개씩 있는 것을 확인 가능
  • current로 현재 사용중인 로그파일을 확인 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//v$logfile조회
SQL> desc v$logfile;
Name Null? Type
----------------------------------------- -------- ----------------------------
GROUP# NUMBER
STATUS VARCHAR2(7)
TYPE VARCHAR2(7)
MEMBER VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)
CON_ID NUMBER

SQL> select group#, member from v$logfile order by group#;
GROUP# MEMBER
---------- ------------------------------------------------------------
1 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_1_fwvn9ddb_.log
1 /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlinelog/o1_mf
_1_fwvn9o6v_.log

2 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_2_fwvn9ddv_.log
2 /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlinelog/o1_mf
_2_fwvn9l85_.log

3 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_3_fwvn9t6z_.log
3 /u01/app/oracle/fast_recovery_area/orcl/ORCL/onlinelog/o1_mf
_3_fwvn9xf6_.log




Parameter file

  • Instance의 정의정보(SGA할당정보, B/G proc정보 등)이 기록된 공간
  • DB의 여러 설정 정보가 기록된 공간
  • DB의 켜졌는지 유무는 instance를 보고 말함 -> 인스턴스가 없으면 DB가 꺼져있는 것
  • 위치 : $ORACLE_HOME/dbs
    • 어느 기업의 DB든간에 위치가 정해져있다.
  • 이름 : spfileSID.ora 또는 initSID.ora
    • SID에는 DB명이 들어감. DB명은 DBA가 DB생성할 때 정함.
    • 파일을 절대 일반적인 편집기로 열면 안됨. 바로 파일이 망가짐
    • 파일을 열고 싶으면 오라클에게 따로 보여달라는 명령어를 내려야함. 추후 학습예정.
1
2
3
4
5
6
7
8
9
10
//존재하는 지만 체크. 절대 열면 안됨.

SQL> ! //sql에서눅스로 나가야함

[oracle@localhost ~]$ echo $ORACLE_HOME //$ORACLE_HOME이 어디있는지 알려달라는 명령어
/u01/app/oracle/product/12.2.0/dbhome_1
[oracle@localhost ~]$ cd /u01/app/oracle/product/12.2.0/dbhome_1/
[oracle@localhost dbhome_1]$ cd dbs
[oracle@localhost dbs]$ ls
hc_orcl.dat hc_resp.dat init.ora lkORCL orapworcl spfileorcl.ora
  • spfileorcl.ora파일이 존재하는 것을 확인할 수 있다.




Password file

  • DB를 시작/종료할 수 있도록 인증해주는 공간.
  • 위치 : $ORACLE_HOME/dbs
    • 어느 기업의 DB든간에 위치가 정해져있다.
  • 이름 : orapwSID
    • SID에는 DB명이 들어감. DB명은 DBA가 DB생성할 때 정함.
1
2
3
4
5
6
//존재하는 지 체크 `orapworcl`
[oracle@localhost ~]$ echo $ORACLE_HOME //$ORACLE_HOME이 어디있는지 알려달라는 명령어
/u01/app/oracle/product/12.2.0/dbhome_1
[oracle@localhost ~]$ cd /u01/app/oracle/product/12.2.0/dbhome_1/
[oracle@localhost dbs]$ ls
hc_orcl.dat hc_resp.dat init.ora lkORCL orapworcl spfileorcl.ora




Archived log files (option)

  • 수많은 옵션 데이터 베이스 중에서 알아둬야할 물리적파일이다.
  • Redo log file의 오프라인 복사본이라고 생각하면 된다.
  • 주목적 : Datafile Recovery
  • log mode : Narchive log mode VS Archive log mode(권장) 중 선택
  • log mode 정보 조회 : v$database 안의 log_mode
1
2
3
4
5
6
SQL> desc v$database //구조를 조회해서 필요한 컬럼만 출력한다.
SQL> select name, log_mode from v$database;

NAME LOG_MODE
------------------ ------------------------
ORCL NOARCHIVELOG