DB

[Oracle] 오라클 아키텍처 : 데이터베이스와 인스턴스

지과쌤 2023. 5. 6.
반응형

목차

오라클 소프트웨어

 

 

ORACLE_HOME과 ORACLE_BASE

 

ORACLE_HOME : 오라클 소프트웨어를 설치할 디렉터리

ORACLE_BASE : 오라클에 관한 여러가지 파일을 배치하는 거점이 될 디렉터리

oracle_base는 oracle_home으로 지정한 디렉터리의 상위 디렉터리에 설정함

ORACLE_HOME의 중요한 디렉터리

 

database : 윈도우 버전 오라클의 서버 파라미터 파일이나 패스워드 파일이 존재

dbs : 유닉스/리눅스 버전 오라클의 서버 파라미터 파일이나 패스워드 파일이 존재

network/admin : 네트워크 접속과 관련된 설정 파일이 존재

bin : SQL*Plus 등 오라클 관련 프로그램과 오라클을 운영하고 관리하는 데 유용한 프로그램들이 존재하는데, 셸이나 명령어 프롬프트에서 바로 실행할 수 있도록 환경변수에 PATH를 설정해 놓으면 유용

sqlplus : SQL*Plus 관련 파일이 존재

rdbms/admin : 오라클 관련 SQL 파일이 존재

inventory : 설치한 도구들에 관한 정보나 ORACLE_HOME에 관련된 정보가 존재

DBCA와 SID

 

DBCA : 데이터베이스 생성용 도구

DB 생성시 Global Database Name(전역 데이터베이스 이름)과 SID를 지정해야 한다.

 

전역 데이터베이스 이름은 네트워크 내에서 데이터베이스를 특정하기 위한 명칭이다.

DB_NAME과 DB_DOMAIN으로 구성되며, 아래 서식과 같은 형태로 설정된다.

DB_DOMAIN이 지정되지 않을 때는 데이터베이스 이름과 같은 값으로 설정된다.

<DB_NAME>.<DB_DOMAIN>

전역 데이터베이스 이름은 네트워크 내에서 같은 DB_NAME을 가진 복수의 데이터베이스가 존재할 때 유용하다.

데이터베이스의 DB_DOMAIN을 다르게 설정하면 같은 DB_NAME을 가진 데이터베이스를 식별할 수 있게 된다.

 

SID(시스템 식별자, System Identifier)는 인스턴스의 식별자이다.

일반적으로 SID는 해당 데이터베이스의 DB_NAME과 같은 값으로 설정한다.

한 서버에 여러 개의 인스턴스를 사용하고자 할 때는 인스턴스마다 다른 SID를 지정할 필요가 있다.

데이터베이스와 인스턴스

 

데이터베이스는 데이터를 저장하는 데이터 파일과 컨트롤 파일 등으로 구성되며, 인스턴스는 SGA(System Global Area)라고 불리는 메모리 영역과 백그라운드 프로세스라 불리는 프로세스들로 구성된다.

일반적인 오라클의 구성에서 데이터베이스와 인스턴스는 아래 그림과 같이 1:1로 대응된다(싱글 구성)

단, RAC(Real Application Cluster)라 불리는 클러스터 구성에서는 한개의 데이터베이스에 여러 인스턴스를 접속할 수 있다.

 

데이터베이스

 

데이터베이스는 한개 이상의 데이터 파일과 두개 이상의 REDO 로그 파일, 한개 이상의 컨트롤 파일로 구성된다.

 

데이터베이스를 구성하는 파일

 

파일 종류 저장되는 데이터 파일 크기
데이터 파일 테이블, 인덱스, UNDO 데이터, 임시(temp)  데이터 수mb ~ 수tb. 저장되는 데이터의 크기에 따라 파일의 크기가 다르다
REDO 로그 파일 변경 이력 일반적으로 수십mb ~ 수백mb 정도이며, 데이터 변경량이 많을 때는 큰 파일 크기를 사용한다.
컨트롤 파일 제어 정보 수백kb ~ 수mb

 

오라클은 위 표의 파일 세종류로 데이터베이스를 구성해 퍼포먼스를 확보하고 관리를 편하게 구현하고 있다.

유닉스라면 ls 명령어, 윈도우라면 파일 탐색기 등을 이용해 실제 파일을 확인할 수 있다.

데이터 파일

 

데이터 파일에는 사용자가 생성한 테이블이나 인덱스 등의 데이터가 보관된다.

데이터베이스의 역할은 데이터를 유지하는 것이므로 데이터 파일은 데이터베이스의 핵심이라고 할 수 있다.

데이터베이스에 저장되는 데이터가 많아질수록 데이터 파일도 커진다. 또한 테이블이나 인덱스 외에도 과거의 데이터인 UNDO데이터, 작업할 때 임시로 사용하는 임시데이터, 시스템 관리용 데이터도 보관된다.

REDO 로그 파일

 

데이터베이스의 변경 이력은 REDO 로그 파일에 순차적으로 기록된다.

오라클은 여러 개의 REDO 로그 파일을 로테이션해 가며 변경 이력을 기록하므로 하나의 데이터베이스에 최소 두개 이상의 REDO 로그 파일이 필요하다.

 

예를 들어, 두개의 REDO 로그 파일을 사용한다고 가정하면, REDO 로그 파일 한개를 다 쓰고 나면, 나머지 한 개의 REDO 로그 파일에 변경 이력을 기록한다.

그리고 두 번째 REDO 로그 파일의 공간도 다 쓰고 나면 원래의 REDO 로그 파일로 되돌아가 변경 이력을 기록한다.

이때 이전에 기록했던 변경 이력은 덮어씌워진다.

컨트롤 파일

 

컨트롤 파일에는 데이터 파일이나 REDO 로그 파일의 보관 장소(디렉터리)나 각 파일의 최종 변경 시간 등과 같은 제어 정보가 들어 있다.

컨트롤 파일의 크기는 별로 크지 않으며, 시스템 환경마다 조금씩 다르지만, 작게는 몇백KB에서 몇백MB정도이다.

 

컨트롤 파일은 한 개만 있어도 운영하는데는 문제가 없지만, 중요한 정보들이 보관돼 있으므로 다중화할 필요가 있다.

인스턴스

 

“인스턴스가 기동하지 않은 상태에서는 오라클을 이용할 수 없다.”

 

인스턴스는 SGA(System Global Area)라 불리는 메모리 영역과 백그라운드 프로세스들로 구성된다.

인스턴스는 프로세스와 메모리 영역으로 구성되므로 데이터베이스가 정지돼 있을 때는 존재하지 않는다.

 

SGA

SGA는 데이터베이스 버퍼 캐시, REDO로그 버퍼, 공유 풀(Shared Pool), 라지 풀(Large Pool), 자바 풀(Java Pool) 등으로 구성돼 있으며, 프로세스 간에 공유하는 메모리 영역이다.

인스턴스를 기동하면 오라클은 초기화 파라미터 라는 설정값에 설정된 만큼의 SGA 공간을 확보한다.

백그라운드 프로세스

백그라운드 프로세스는 인스턴스의 기동에 맞춰 시작한다.

이 프로세스들은 사용자의 요구에 따라 처리하는 것이 아니라 프로세스를 감시하거나 데이터를 파일에 기록하는 등의 작업을 백그라운드에서 수행한다.

SID와 ORACLE_SID 환경변수

클라이언트 어플리케이션(SQL*Plus 등)이 오라클을 사용할 때는 우선 인스턴스에 접속해야 한다.

인스턴스는 SID라 불리는 식별자로 식별되므로 ORACLE_SID 환경변수에 인스턴스의 SID를 설정하고, 접속할 인스턴스를 지정한다.(로컬 접속일 경우 / 로컬 접속은 클라이)

 

예를 들어, 같은 서버에 ORCL과 PROD라는 이름으로 데이터베이스가 두개 존재하고 있다면, 서버 안에 ORCL과 PROD라는 이름을 가진 두 개의 인스턴스가 존재한다는 이야기가 된다.

 

 

위 그림을 보면, SQL*Plus로 ORCL 인스턴스에 접속하기 위해 환경 변수 ORACLE_SID에 ‘ORCL’을 지정했고, PROD 인스턴스에 접속할 때는 환경 변수 ‘PROD’를 지정했다.

데이터베이스 확인

데이터베이스를 구성하는 파일은 OS의 파일 시스템상에 존재한다.

DBCA가 기본 설정인 상태로 데이터베이스를 생성하면, 데이터베이스를 구성하는 파일은 ‘/oradata//’에 위치한다.

(버전에 따라서 컨트롤 파일의 복제가 ‘FRA(Fast Recovery Area)’라 불리는 공간에 보관되는 경우도 있다.)

데이터베이스를 구성하는 파일들

분류 파일명
컨트롤 파일 CONTROL01.CTL
CONTROL02.CTL
CONTROL03.CTL
로그 파일 REDO01.LOG
REDO02.LOG
REDO03.LOG
데이터 파일 SYSTEM01.DBF
SYSAUX01.DBF
UNDOTBS01.DBF
TEMP01.DBF
USERS01.DBF

인스턴스 기동과 정지

인스턴스 기동

인스턴스를 기동할 때는 SYS계정으로 SYSDBA 권한을 지정한 후에 접속해 STARTUP 명령어를 수행해야 한다.

##SYS 계정으로 SYSDBA 권한을 지정해 접속(SQL*Plus)
connect / as sysdba

##인스턴스의 기동(SQL*Plus)
STARTUP

SQL*Plus를 사용해 유닉스/리눅스 환경에서 인스턴스를 기동하는 예를 보자.

우선 오라클에 접속한 후 인스턴스를 기동한다. 윈도우 환경에서는 백그라운드 프로세스가 스레드(Thread)로 실행되므로 ps 명령어로는 백그라운드 프로세스를 확인할 수 없다.

SQL*Plus로 인스턴스에 접속

$ export ORACLE_SID=ORCL    ##접속할 인스턴스의 SID를 환경변수 ORACLE_SID에 저장
$ sqlplus /nolog    ##SQL*Plus 기동

SQL> connect / as sysdba    ##SYSDBA 권한으로 데이터베이스에 접속
SQL> host ps -ef |grep ora_ |grep -v grep    ##host 명령어를 이용해 'ora_' 가 포함된 OS 프로세스를 조회하는 명령어 사용
SQL>

유닉스/리눅스 환경에서는 백그라운드 프로세스의 프로세스명에 ‘ora_’가 포함되므로 백그라운드 프로세스가 기동돼 있다면 ps 명령어로 확인할 수 있다.

(’grep -v grep’ 은 목록에 자신이 수행한 grep 명령어 자체가 출력되는 것을 제외하는 명령어이다.)

 

 

위 명령어를 실행했을 때, 아무것도 나타나지 않은것으로 보아 백그라운드 프로세스가 기동되지 않았다는 것을 알 수 있다.

이 상태의 오라클은 위 그림에 나타난 것처럼 인스턴스가 기동돼 있지 않기 때문에 SQL*Plus로 데이터베이스에 접근할 수 없다.

 

인스턴스가 기동돼 있지 않은 상태에서는 SQL을 실행하거나 데이터베이스에 접속할 수 없으므로 에러가 발생하게 된다.

 

데이터베이스에서 데이터를 가져오기 위해서는 인스턴스를 기동할 필요가 있으며, 인스턴스를 기동할 때는 오라클에 접속해 STARTUP 명령어를 수행해야 한다.

인스턴스 기동

 

  1. STARTUP 명령어를 이용해 인스턴스를 기동한다
  2. Total System Global Area가 출력되는데, 내용을 보면 400MB의 SGA가 확보되었다.
  3. 메시지를 통해 데이터베이스를 구성하는 데이터 파일, REDO 로그 파일, 컨트롤 파일이 잘 오픈됐다는것을 알 수 있다.
  4. ps 명령어를 실행해본 결과, 백그라운드 프로세스가 잘 기동하는것을 확인할 수 있다.

SHOW SGA 출력

SGA의 정보는 SQL*Plus의 SHOW SGA 명령어로 확인할 수 있다.

표시 항목 설명
Total System Global Area SGA의 전체 크기
Fixed Size SGA의 관리 정보가 저장된 고정 영역의 크기
Variable Size 공유 풀, 라지 풀, 자바 풀, 스트림 풀을 합친 크기
Database Buffers 데이터베이스 버퍼 캐시의 크기
Redo Buffers REDO 로그 버퍼의 크기

 

인스턴스 정지

인스턴스를 IMMEDIATE로 정지하기 위해서는 SYS계정에 SYSDBA 권한을 지정하여 접속한 후, SHUTDOWN IMMEDIATE 명령어를 실행하면 된다.

##인스턴스 정지
SHUTDOWN IMMEDIATE

##백그라운드 프로세스 확인
SQL > host ps -ef | grep ora_ | grep -v grep

##인스턴스 종료
SQL > SHUTDOWN IMMEDIATE

##인스턴스 체크
SQL > SHOW SGA

인스턴스가 정지되면 SGA가 사용하던 메모리는 해제되고, 백그라운드 프로세스도 정지된다.

RAC(Real Application Clusters)

클러스터 구성의 한 종류.

 

 

RAC는 여러 대의 서버에 각각 인스턴스를 가동시킨 후, 여러 대의 인스턴스를 이용해 공유 디스크 장치에 보관된 데이터베이스를 공유한다. 그리고 RAC 환경에서는 각 인스턴스가 각 서버에서 동작하므로 특정 서버와 인스턴스에 장애가 발생하더라도 다른 인스턴스가 서비스를 계속할 수 있으므로 가용성이 향상된다.

트랜잭션이 증가해 서버의 처리 부하가 높아졌을 때도 서버와 인스턴스를 추가함에 따라 RAC 전체의 처리 성능을 향상시킬 수 있다.

싱글 구성에서는 인스턴스와 데이터베이스가 1대1의 관계이지만, RAC에서는 인스턴스와 데이터베이스가 N대1 관계이다.

정리

오라클 구축

  • 오라클 설치 디렉토리는 ‘ORACLE_HOME’
  • 데이터베이스는 오라클 소프트웨어에 포함된 DBCA를 실행해 구축한다.

데이터베이스와 인스턴스

  • 오라클은 데이터베이스와 인스턴스로 구성된다.
  • 데이터베이스는 데이터 파일, REDO 로그 파일, 컨트롤 파일로 구성된다.
  • 데이터베이스는 전역 데이터베이스 이름으로 식별된다.
  • 인스턴스는 SGA와 백그라운드 프로세스로 구성된다.
  • 인스턴스는 SID로 식별한다.
  • 환경 변수 ORACLE_SID는 인스턴스의 SID를 설정하고 접속할 인스턴스를 지정한다.

인스턴스의 기동과 정지

  • 인스턴스는 SQL * PLUS의 STARTUP 명령어로 기동할 수 있다.
  • 인스턴스가 기동돼 있지 않으면 오라클을 이용할 수 없다.
  • 인스턴스는 SHUTDOWN IMMEDIATE 명령어로 정지할 수 있다.
  • 인스턴스가 정지되면 SGA가 사용하던 메모리는 해제되고, 백그라운드 프로세스도 정지된다.
반응형

'DB' 카테고리의 다른 글

[Tibero] 티베로 아키텍쳐  (0) 2023.05.03
[DB] 데이터 정규화란?  (0) 2023.02.02
[MSSQL] SQL Server 튜닝 - 조인  (0) 2023.01.04
[MSSQL] SQL Server 튜닝 - 실행 계획  (0) 2022.12.27
[MSSQL] SQL Server 튜닝 - 인덱스  (0) 2022.12.20

댓글

💲 추천 글