3.1 개념
오라클 사에서 개발한 ORDBMS(Object–relational database) 제품으로 2016 년도 기준으로 41.6 % 의 점유율을 가지고 있다.
그 외 유사한 DBMS 으로는 RDBMS, OODBMS 가 있다.
구분 | 관계형 데이타베이스(RDBMS) | 객체지향 데이타베이스(OODBMS) | 객체 관계형 데이타베이스(ORDBMS) |
데이터 모델 | 문자, 숫자, 날짜의 단순한 정보 타입만 지원 | 사용자 정의 타입 및 비정형 복합 정보 타입 지원 | 사용자 정의 타입 및 비정형 복합 정보 타입 지원 |
주된 질의 언어 | SQL | OQL | SQL 확장 |
대규모 정보 처리 능력 | 좋음 | 보통 | 좋음 |
시스템 안정성 | 좋음 | 보통 | 좋음 |
장점 |
|
|
|
단점 |
|
|
|
개인적인 생각으로는 국내 스타트업에서는 Postgres 을 더 많이 사용하는 것 같다. 한번 평균치를 찾아보고 공부하면 이직할 때 도움이 될 것 같다.
3.1.1 사용자
데이터베이스를 생성하면 관리자 계정이 생성된다. 관리자 계정은 DBA 가 사용하는 것이 일반적이고, 개발자 및 Application 에서는 일반 계정을 생성하여 사용하는 것이 일반적이다. 개발자 및 Application 에게는 계정을 탈취당할 수 있기 때문에 적절한 권한을 줘야 한다.
3.1.2 오브젝트
오브젝트(Object)는 논리적인 데이터 구조이다. 오브젝트는 사용자(User)에 종속될 수 있다.
사용자에 종속된 오브젝트의 논리적 집합을 스키마(Schema) 라고 한다. 스키마는 오브젝트를 소유한 사용자와 동일한 이름을 가진다.
-> 적절한 예시, 데이터베이스 구조 등을 추가하면 이해하기 좋을 것 같다.
사용자에게 종속된 오브젝트의 집합을 스키마 오브젝트, 그렇지 않은 것이 비 스키마 오브젝트라고 한다.
구분 | 오브젝트 |
스키마 오브젝트 | 테이블, 클러스터, 인덱스, 뷰, 시퀀스, 시노님, 오브젝트 타입 |
비 스키마 오브젝트 | 사용자, 롤, 디렉터리 |
오브젝트는 데이터 저장 여부에 따라 세그먼트 오브젝트와 비 세그먼트 오브젝트로 구분할 수 있다. 저장 공간이 필요한 오브젝트를 세그먼트라고 한다.
구분 | 오브젝트 |
세그먼트 오브젝트 | 테이블, 클러스터, 인덱스 |
비 세그먼트 오브젝트 | 뷰, 시퀀스, 시노님, 오브젝트 타입, 사용자, 롤, 디렉터리 |
3.1.3 테이블
테이블(Table)은 데이터를 구성하는 기본 단위이다. 행(row)과 열(clumn)로 구성된다.
3.1.4 데이터 타입
열은 데이터 타입(Data Type)을 지정할 수 있다. 데이터 타입은 20장에서 자세히 나옴 (링크 추가 필요)
유형 | 데이터 타입 |
문자 | CHAR, VARCHAR2, CLOB, LOGN, NCHR, NVARCHAR2, NCLOB |
숫자 | NUMBER, BINARY_FLOAT, BINARY_DOUBLE |
날짜 | DATE, TIMESTAMP, INTERVAL |
이진 | BLOB, BFILE, LONG RAW, RAW |
기타 | ROWID, UROWID |
3.1.5 데이터 무결성
데이터 무결성(Data Integrity)은 데이터의 정확성과 일관성이 유지되고 있는 상태를 의미한다.
데이터 무결성은 4가지로 구분할 수 있다. 데이터 무결성은 DBMS가 제공하는 기능을 통해 보장할 수 있다.
무결성 | 설명 | DBMS 기능 |
개체 무결성 (Entity integrity) | 모든 테이블이 기본 키 (primary key)로 선택된 필드 (column)를 가져야 한다. 기본 키로 선택된 필드는 고유한 값을 가져야 하며, 빈 값은 허용하지 않는다. | PK 제약 조건, UNIQUE 제약 조건, NOT NULL 제약 조건 |
참조 무결성 (Referential integrity)숫자 | 자식 엔터티의 외래 식별자가 부모 엔터티의 기본 식별자에 존재야 한다. 즉 관계형 데이터베이스 모델에서 참조 무결성은 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지되는 것을 말한다 |
FK 제약 조건, 트리거 |
범위 무결성 (Domain integrity) | 도메인 무결성은 테이블에 존재하는 필드의 무결성을 보장하기 위한 것으로 필드의 타입, NULL값의 허용 등에 대한 사항을 정의하고, 올바른 데이터의 입력 되었는지를 확인하는 것이다. 예를 들어, 주민등록번호 필드에 알파벳이 입력되는 경우는 도메인 무결성이 깨지는 경우라고 볼 수 있다. DBMS의 기본값 설정, NOT NULL 옵션 등의 제약 사항으로 도메인 무결성을 보장할 수 있다. | 데이터 타입, 기본값, CHECK 제약 조건 |
사용자 무결성 규칙 (User Integrity rule) | 데이터베이스에서 무결성 규칙은 데이터의 무결성을 지키기 위한 모든 제약 사항들을 말한다. 비즈니스 규칙 (business rule)은 데이터베이스를 이용하는 각각의 유저에 따라 서로 다르게 적용되지만, 무결성 규칙은 데이터베이스 전체에 공통적으로 적용되는 규칙이다. | 트리거 |
3.1.6 트렌젝션
트랜젝션(transaction)은 함계 수행해야 하는 작업의 논리적 단위이다. 계좌이체 트랜젝션은 출금과 입금을 하나의 단위로 수행해야 한다.
블록체인의 transaction 과는 약간 다르다.
트랜젝션은 ACID 라는 네가지 특징을 가지고 있다. (반면 NoSQL 은 BASE 의 특징을 가지고 있다.)
특징 | 설명 |
원자성(Atomicity) | 트랜잭션에 속한 각각의 문(데이터를 읽기, 쓰기, 업데이트, 삭제)을 하나의 단위로 취급한다. 쿼리문 전체를 실행하거나 어떤 부분도 실행하지 않거나 둘 중 하나이다. 이 속성이 있으면 스트리밍 데이터 소스가 스트리밍 중에 갑자기 오류를 일으키더라도 데이터 손실과 손상이 방지된다. |
일관성(Consistency) | 트랜잭션이 테이블에 변경 사항을 적용할 때 미리 정의된, 예측할 수 있는 방식만 실행한다. 트랜잭션 일관성이 확보되면 데이터 손상이나 오류 때문에 테이블 무결성에 의도치 않은 결과가 생기지 않는다. |
격리-독립성(Isolation) | 여러 사용자가 같은 테이블에서 모두 동시에 읽고 쓰기 작업을 할 때, 각각의 트랜잭션을 격리하면 동시 트랜잭션이 서로 방해하거나 영향을 미치지 않는다. 각각의 요청이 실제로는 모두 동시에 발생하더라도, 마치 하나씩 발생하는 것처럼 발생할 수 있다. |
영속성-지속성(Durability) | 트랜잭션에 속한 각각의 문(데이터를 읽기, 쓰기, 업데이트, 삭제)을 하나의 단트랜잭션 실행으로 인해 데이터에 적용된 변경 사항이 저장되도록 보장한다. 시스템 오류가 발생해도 마찬가지이다. |
3.1.7 정적 데이터 딕셔너리 뷰
정적 데이터 딕셔너리 뷰(Static Data Dictionary View)는 데이터베이스와 메타데이터(Metadata)를 조회할 수 있는 읽기 전용 뷰다.
정적 데이터 딕셔너리 뷰와 뷰의 기본 테이블은 SYS 사용자가 소유하고 있다. 기본 테이블은 SYSTEM 테이블스페이스에 저장된다.
- 읽기 전용 뷰: 정적 데이터 딕셔너리 뷰는 데이터베이스 구조와 메타데이터를 확인하는 데 사용되며, 데이터를 수정할 수 없다.
- SYS 사용자가 소유: 이 뷰와 관련된 기본 테이블은 SYS 사용자에 의해 소유된다. SYS 사용자는 DBMS에서 가장 높은 권한을 가진 사용자로, 시스템 테이블과 뷰를 관리한다.
- SYSTEM 테이블스페이스에 저장: 기본 테이블은 SYSTEM 테이블스페이스에 저장된다. SYSTEM 테이블스페이스는 데이터베이스의 필수 구성 요소로, 데이터 사전과 기타 시스템 관련 데이터를 저장한다.
접두어 | 사용 | 오브젝트 |
DBA_ | 데이터베이스 관리자 | 모든 오브젝트 |
ALL_ | 모든 사용자 | 사용자에게 권한이 있는 오브젝트 |
USER_ | 모든 사용자 | 사용자가 소유한 오브젝트 |
3.1.8 동적 성능 뷰
동적 성능 뷰(Dynamic Performance View)는 데이터베이스의 동적 정보를 조회할 수 있는 읽기 전용 뷰다. 동적 성능 뷰는 V$로 시작하며 X$로 시작하는 동적 성능 테이블을 사용한다. V$ 뷰는 V_$로 시작하는 뷰의 시너님이다.
동적 성능 뷰는 V$로 시작하는 X$로 시작하는 동적 성능 테이블을 사용한다. 동적 성능 테이블은 SYS 사용자가 소유하고 있다. RAC의 경우 GV$로 시작하는 뷰에서 인스턴스 별로 정보를 조회할 수 있다.
뷰 | 설명 |
DICTIONARY | 정적 데이터 딕셔너리 뷰에 대한 정보를 제공 |
V$FIXED_TABLE | 동적 성능 뷰와 동적 성능 테이블에 대한 정보를 제공 |
3.2 구조
오라클 데이터베이스는 운영체제에서 구동되는 응용 프로그램이다. 구조가 다른 데이터베이스에 비해 조금 복잡할 뿐 다른 으용 프로그램과는 크게 다르지 않다.
항목 | 오라클 데이터베이스 | 엑셀 |
파일 | Data file, Control FIle, Online Redo Log | Excel File |
메모리 | SGA, PGA | Cache |
프로세스 | Background Preocess, Server Process | Process, Thread |
프로그램 | Oracle Database | Office |
운영체제 | Unix, Linux, Windows | Windows |
1. 파일
- Data File: 데이터베이스에서 실제 데이터를 저장하는 파일이다. 테이블, 인덱스, 트리거 등 모든 데이터가 저장된다.
- Control File: 데이터베이스의 상태와 구조를 정의하는 파일로, 데이터베이스 이름, 데이터 파일 및 로그 파일의 위치, SCN(System Change Number) 등의 정보를 포함한다. 데이터베이스를 시작하거나 복구할 때 중요한 역할을 한다.
- Online Redo Log: 데이터베이스 변경 사항을 기록하는 로그 파일이다. 시스템 장애가 발생했을 때 데이터 복구를 위해 사용된다. 데이터가 커밋되기 전에 발생한 모든 변경 사항이 기록된다.
2. 메모리
- SGA (System Global Area): 오라클 데이터베이스 서버에서 공유 메모리 영역으로, 데이터베이스의 모든 사용자 세션을 공유한다. 데이터 캐시, SQL 명령 캐시, 로그 버퍼 등이 포함되어 있으며, 성능 향상을 위해 자주 사용된다.
- PGA (Program Global Area): 서버 프로세스에 의해 사용되는 비공유 메모리 영역으로, 특정 사용자 프로세스에 대한 데이터 및 제어 정보를 저장한다. 정렬 작업이나 데이터 필터링 등의 작업에 사용된다.
3. 프로세스
- Background Process: 데이터베이스의 백그라운드에서 실행되는 프로세스들로, DBMS의 다양한 기능을 지원한다. 예를 들어, 데이터 파일 쓰기(DBWn), 로그 기록(LGWR), 복구 관리(ARCn) 등이 있다.
- Server Process: 사용자의 요청을 처리하는 프로세스로, SQL 문을 실행하고 결과를 반환한다. 사용자 세션마다 하나씩 생성된다.
4. 프로그램
- Oracle Database: 오라클이 제공하는 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터를 저장하고 관리하는 데 사용된다. 대규모 데이터베이스 환경에서 고성능, 고가용성, 보안 기능을 제공한다.
5. 운영체제
- Unix, Linux, Windows: 오라클 데이터베이스가 설치되고 실행될 수 있는 운영체제 이다. 각 운영체제는 오라클 데이터베이스의 설치 및 관리에 필요한 다양한 도구와 기능을 제공한다.
3.2.1 데이터베이스와 인스턴스
오라클 데이터베이스는 하나의 데이터베이스와 하나 이상의 인스턴스로 구성된다.데이터베이스는 데이터를 저장하는 파일의 모음이다. "인스턴스는 SGA (System Global Area)와 백그라운드 프로세스로 구성된다."
오라클 데이터베이스의 단계적 기동 상태이다.
순서 | 상태 | 설명 | 관편 파일 |
1 | SHUTDOWN | 인스턴스가 없음 | |
2 | NOMOUNT | 인스턴스가 시작됨 | Parameter File |
3 | MOUNT | 데이터베이스의 상태를 검사 | Control File |
4 | Open | 데이터베이스가 열림 | Data File, Online Redo Log |
1:1 관계의 데이터베이스와 인스턴스로 구성된 오라클 데이터베이스를 Single 서버라고 하며, 고가용성(High Availability, HA)과 성능 향상을 위해 오라클 데이터베이스를 RAC(Real Application Clusters로 구성할 수 있다. RAC 는 1:N 관계의 데이터베이스와 인스턴스로 구성되어 있다.
SQL 쿼리를 사용하여 Single 서버인지, RAC 서버인지 확인이 가능하다.
-- V$DATABASE 뷰에서 데이터베이스에 대한 정보를 조회
SELECT dbid, name, created, platform_name FROM v$database;
-- V$INSTANCE 뷰에서 인스턴스에 대한 정보를 조회. 인스턴스가 1개이면 Single 서버이고 2개이면 RAC 이다.
SELECT instance_number, instance_name, version, stratup_time, status FROM v$instance;
-- V$OPTION 뷰에서도 RAC 여부를 확인할 수 있다.
SELECT value FROM v$option WHERE parameter = 'Read Application Clusters';
3.2.2 프로세스 구조
오라클 데이터베이스와 프로세스는 백그라운드 프로세스와 서버 프로세스로 구분된다.
- 백그라운드 프로세스(Background Process)는 인스턴스가 시작될 때 생성된다.
- 서버 프로세스(Server Process)는 사용자가 데이터베이스 서버에 접속할 때 생성된다.
데이터베이스 운영에 필요한 백그라운드 작업은 백그라운드 프로세스가 처리한다.
백그라운드 프로세스 | 설명 |
PMON(Process Monitor) | PMON(Process Monitor) 프로세스는 비정상적으로 종료된 사용자 프로세스를 감지하고, 해당 프로세스의 리소스를 정리한다. 리소스 정리에는 세션 정보 제거, 잠금 해제, 메모리 정리 등이 포함된다. 또한, 비정상 종료된 프로세스가 사용하던 서버 프로세스를 재활용할 수 있도록 준비한다. |
SMON(System Monitor) | SMON(System Monitor) 프로세스는 데이터베이스 복구를 담당한다. 비정상 종료 후 데이터베이스를 다시 시작할 때 SMON은 인스턴스 복구를 수행한다. SMON은 또한 불필요한 공간(temporary segments)을 정리하고, 테이블스페이스의 병합(coalescing)을 수행하여 공간을 효율적으로 관리한다. |
CKPT(CheckPoint) | CKPT(CheckPoint) 프로세스는 체크포인트 이벤트를 트리거하고, 데이터 파일과 제어 파일의 체크포인트 정보를 기록한다. CKPT(CheckPoint)는 특정 시점까지의 데이터 변경 사항이 모두 디스크에 기록되었음을 나타낸다. 이를 통해 데이터 복구 시간을 단축할 수 있다. |
DBWn(database Writer) | 데이터베이스 라이터 프로세스는 버퍼 캐시에 있는 변경된 데이터를 데이터 파일에 기록한다. 여러 개의 DBWn 프로세스가 동시에 실행될 수 있으며, 메모리의 데이터를 디스크로 쓰는 작업을 효율적으로 수행하여 I/O 성능을 최적화한다. |
LGWR(Log Writer) | LGWR(Log Writer) 프로세스는 로그 버퍼에 있는 변경 사항을 Online Redo Log 파일에 기록한다. 사용자가 트랜잭션을 커밋하면, LGWR은 커밋된 데이터를 디스크에 기록하여 데이터 일관성을 보장한다. |
ARCh(archiver) | ARCh(archiver) 프로세스는 Online Redo Log 파일이 가득 차면 이를 ARCHIVE LOG 파일로 복사한다. ARCHIVE LOG 파일은 데이터 복구를 위한 백업 자료로 사용된다. ARCh는 데이터베이스의 ARCHIVE MODE 에서만 작동하며, 데이터 손실 방지에 중요한 역할을 한다. |
3.2.3 메모리 구조
오라클 데이터베이스의 메모리 구조는 데이터베이스의 성능과 효율적인 작업 처리를 위해 SGA(System Global Area)와 PGA (Program Global Area)로 나뉜다. 각 메모리 영역은 데이터베이스 작업을 지원하는 데 있어 중요한 역할을 하며, 서로 다른 프로세스와 작업을 위해 설계되었다.
SGA (System Global Area)
- 정의: SGA는 오라클 데이터베이스 인스턴스의 공유 메모리 영역이다. 데이터베이스 인스턴스가 시작될 때 할당되고, 데이터베이스 인스턴스가 종료될 때 해제된다. 이 메모리 영역은 데이터베이스 서버의 모든 사용자 프로세스와 백그라운드 프로세스가 공유한다.
- 구성 요소
- Database Buffer Cache: 디스크 I/O를 줄이기 위해 자주 사용되는 데이터 블록을 캐시한다. 사용자가 데이터를 요청할 때 디스크에서 직접 읽는 대신 버퍼 캐시에서 데이터를 제공하여 성능을 향상시킨다.
- Redo Log Buffer: 트랜잭션 변경 사항을 임시로 저장하는 메모리 영역이다. 이 변경 사항은 LGWR (Log Writer) 프로세스에 의해 Online Redo Log 파일로 기록된다. 커밋된 트랜잭션이 데이터베이스 장애 시 복구될 수 있도록 보장한다.
- Shared Pool: 파싱된 SQL 문과 PL/SQL 프로그램의 실행 계획을 캐시하여 중복된 파싱을 줄이고 성능을 최적화한다. 데이터 딕셔너리 캐시도 포함되어 있으며, 이는 데이터베이스 메타데이터에 대한 정보를 저장한다.
- Libaray Cache: SQL 문과 PL/SQL 코드의 실행 계획을 저장하고 재사용하여, 동일한 쿼리가 다시 실행될 때 재파싱을 방지하며 SQL 실행 속도 향상, CPU 사용량 절감한다.
- Data Dictionary Cache: 데이터베이스 객체(테이블, 인덱스, 사용자 등)에 대한 메타데이터를 캐싱하여, 빠른 조회를 지원하며 메타데이터 접근 속도 향상, 디스크 I/O 감소에 좋은 영향을 준다.
- Large Pool: 대규모 메모리 작업을 지원하기 위한 비필수 구성 요소로, RMAN 백업 및 복구, 세션 메모리 할당 등에 사용된다.
- Java Pool: Java 가상 머신이 사용하는 메모리 공간으로, Java 애플리케이션이 오라클 데이터베이스 내에서 실행될 때 필요하다.
- Streams Pool: 오라클 스트림스 기능을 지원하는 메모리 영역으로, 데이터 복제 및 데이터베이스 변경사항 캡처에 사용된다.
- 특징
- 공유 메모리: 모든 사용자와 백그라운드 프로세스가 공유하여 사용한다.
- 할당 및 해제: 데이터베이스 인스턴스가 시작될 때 할당되고 종료될 때 해제된다.
- 목적: 자주 사용되는 데이터를 메모리에 유지하여 디스크 I/O를 최소화하고, 성능을 최적화한다.
PGA (Program Global Area)
- 정의: PGA는 각 서버 프로세스에 대한 전용 메모리 영역이다. 서버 프로세스가 시작될 때 할당되며, 프로세스가 종료될 때 해제된다. 이 메모리 영역은 각 사용자 세션마다 독립적으로 사용되며 공유되지 않는다.
- 구성 요소
- Session Memory: 사용자의 세션 정보와 상태를 유지한다. 예를 들어, 사용자가 데이터베이스에 접속한 시간, 활성 세션 수 등 세션별로 유지해야 할 정보를 저장한다.
- Private SQL Area: 실행 중인 SQL 문의 정보를 저장하는 영역으로, 각 사용자 프로세스가 해당 SQL 문을 수행하는 동안 필요한 정보를 한다. 쿼리의 실행 상태, 바인드 변수 등의 정보가 포함되어 있다.
- Sort Area: 정렬, 집합 연산, 해시 조인 등과 같은 작업을 수행할 때 사용되는 메모리이다. 작업의 규모에 따라 메모리 내에서 처리되거나, 메모리 부족 시 디스크로 스왑될 수 있다.
- 특징
- 비공유 메모리: 특정 서버 프로세스만 사용할 수 있으며, 다른 프로세스와 공유되지 않는다.
- 할당 및 해제: 각 서버 프로세스가 생성될 때 할당되고, 프로세스가 종료되면 해제된다.
- 목적: 사용자 세션별로 필요한 메모리를 할당하여 작업을 처리하고, 필요한 자원을 독립적으로 괸리한다.
SGA vs. PGA 비교
- SGA는 다중 사용자와 프로세스가 공유하는 메모리로, 데이터베이스 인스턴스 전반의 작업에 사용된다.
- PGA는 각 사용자 세션마다 독립적으로 사용되는 메모리로, 세션별로 필요한 작업을 수행하는 데 사용된다.
3.2.4 저장 구조
오라클 데이터베이스는 물레 저장 구조와 논리 저장 구조가 분리되어 있다. 물리 구조를 변경해도 논리 구조에 영향을 주지 않는다는 점은 Postgres 와 MySQL 도 동일하다.
3.2.4.1 물리 저장 구조
물리 저장 구조
3.2.4.2 논리 저장 구조
논리 저장 구조
3.2.5 네트워크 구조
논리 저장 구조
3.2.6 어플리케이션 구조
논리 저장 구조
'도서 > 불친절한 SQL 프로그래밍' 카테고리의 다른 글
불친절한 SQL 프로그래밍 - 4부 관리 구문 - 18장 DML 문 (0) | 2025.02.18 |
---|