ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB(Database) 구성요소
    Search: Db Db 2022. 8. 11. 14:30

    DB(Database) 구성요소 구조와 명칭

     

    오라클 데이터베이스의 논리적 구조에 대한 설명

    크게 논리적 구조와 물리적 구조로 나누어 구성되어 있다

     

    데이터베이스

    일반적으로 사용자들이 말하는 Database는 논리적 개념에서 사용되는 용어에 해당된다

    오라클 서버에서 데이터베이스는, 여러 개의 테이블스페이스(Tablespace)라는 논리적 구조가 모여서 하나의 데이터베이스를 구성하게 된다.

     

    [데이터베이스] 구성요소 계층 - [테이블스페이스] - [세그멘트] - [익스텐트] - [블록]

    [테이블스페이스]
    - 세그멘트 ...
    - 컨트롤파일
    - 데이터파일

     

    테이블스페이스

    테이블스페이스(Tablespace): 하나의 데이터베이스를 구성하는 여러 개의 논리적 구조들이다.

    오라클의 유니버셜 인스톨러(Universal Installer)에 의해 기본적으로 테이블스페이스가 3개(SYSTEM , UNDOTBS, TEMP 테이블스페이스) 생성되며 사용자에 의해 추가적으로 여러 개의 테이블스페이스가 생성될 수 있다.

    오라클은 테이블스페이스마다 최대 공간관리를 한다. 자주 발생하는 증상으로, 특정 테이블에 입력, 수정, 삭제작업을 수행하다 보면 테이블이 저장되어 있는 테이블스페이스의 공간이 부족한 경우에 에러(에러코드 ORA-01653)가 발생한다.
    데이터파일의 용량을 늘리거나 새로운 데이터파일을 추가할 수 있다.

     

    SYSTEM 테이블스페이스

    서버에 의해 생성되며 관리된다. 데이터베이스의 모든 상태정보가 저장되어 있는 공간이다.

    데이터베이스 내에 생성되어 있는 모든 객체들에 대한 정보 뿐만 아니라 데이터베이스의 상태값들을 가진다.

    데이터베이스에 자료사전(Data Dictionary) 테이블이 있다.

     

    UNDOTBS 테이블스페이스

    사용자의 ROLLBACK 데이터가 ROLLBACK 문장이 수행될 때까지 잠시 저장되어 있는 임시 공간이다.

    컬럼 값을 변경하고 UPDATE문을 실행한 후 SELECT문을 수행하면 컬럼 값이 변경되어 있는 것을 확인할 수 있다. 하지만, ROLLBACK문을 수행한 후 다시 SELECT문을 실행하면 UPDATE문을 실행하기 이전 상태로 돌아가 있는 것을 확인할 수 있다.
    UNDOTBS는 변경 전의 값이 잠시 저장되어 있는 곳이다. 사용자의 ROLLBACK 데이터가 ROLLBACK 문장이 수행될 때까지 잠시 저장되어 있는 임시 공간이다.

    TEMPORARY 테이블스페이스

    이 공간은 사용자의 SQL문이 분류작업을 요구하는 경우 잠시 사용하는 임시 공간이다.

    기본적인 테이블 구조들은 데이터를 입력했을 때 입력하는 순으로 저장되기 때문에 테이블의 정보를 SELECT 해 보면 그 결과를 쉽게 참조할 수 없는 단점을 가지고 있다. 데이터 분류작업(Sorting) 하기 위해서는 별도의 임시공간이 필요하게 되는데, 바로 이 공간이 TEMP 테이블스페이스다.

     

    만약, TEMP테이블스페이스의 데이터파일이 손상되었거나 완전히 없어졌을 경우에도 오라클을 가동시작하면 정상가동된다. 더 이상 읽기, 쓰기 작업을 수행할 수 없지만 오라클 서버는 정상적으로 오픈된다. TEMP 테이블스페이스는 사용자의 데이터가 저장되는 공간이 아니라 SQL문을 실행할 때 발생하는 SORTING 데이터가 잠시 저장되는 임시 공간이기 때문에 직접적인 복구가 요구되지 않으며 정상 오픈 상태가 된다.

     

    데이터 파일

    .DBF확장자를 가지는 물리적 구조의 파일.

    위에 소개된 테이블스페이스의 파일 Ex.
    SYSTEM테이블스페이스는 SYSTEM01.DBF
    UNDOTBS테이블스페이스는 UNDO01.DBF
    TEMPORARY 테이블스페이스는 TEMP01.DBF

     

    DBF파일이 사라져도 테이블스페이스의 데이터 사전 테이블에 저장되어 있는 정보는 살아 있다. 하지만 DROP문을 실행하면 컨트롤 파일 내에 존재하는 테이블스페이스에 대한 정보와 데이터 사전 테이블에 저장되어 있는 정보가 모두 삭제됩니다.

     

    세그멘트

    데이터베이스 내에 생성되는 모든 객체( 테이블, 인덱스, 뷰, 시퀀스, 시노늄 등)들을 세그멘트(Segment) 라 한다.

    하나의 테이블스페이스에 다수의 세그멘트가 구성될 수 있다.

     

    익스텐트

    하나의 테이블을 생성하면 처음부터 아주 큰 하나의 저장공간이 할당되는 것이 아니라, 처음에는 익스텐트라는 공간이 할당되고, 이 공간이 모두 사용되면 다시 익스텐트를 할당 받아 연속적으로 데이터를 저장하게 된다.
    그래서 하나의 테이블은 하나의 연속적인 공간으로 생성되는 것이 아니라 익스텐트라는 작은 구성요소로 생성되어 있다.

    하나의 세그멘트에 다수의 익스텐트가 구성될  수 있다.

     

    블록

    오라클 데이터베이스의 가장 작은 저장구조를 블록(Block)이라 한다.
    오라클에서 읽고쓰는 단위다.

    익스텐트도 사실은 하나의 연속적인 공간이 아니라 블록구조가 여러 개 모여 만들어지는 하나의 공간이다. 결국, 여러 개의 블록이 모여 하나의 익스텐트를 만들게 된다.

    하나의 익스텐트를 하나의 연속적인 공간으로 만들었다면 테이블의 데이터를 읽을 때 한번에 많은 데이터를 읽어야 하기 때문에 시간이 많이 소요될 뿐만 아니라 한번에 많은 데이터를 저장해야 하기 때문에 효과적인 저장과 관리가 용이하지 않게된다.

     

    컨트롤 파일

    컨트롤파일에는 모든 상태 정보를 저장하게 된다(파일명과 경로, 시스템 변경번호, 로그-시퀀스 번호, 데이터베이스 명, 설치날자, Characterset 등).

    사용자가 임의로 생성하지 않고, 데이터베이스 생성 시에만(CREATE DATABASE ~ 문법) 자동 생성된다.

    기본적으로 1개의 원본 컨트롤파일만 생성된다(WINDOWS 환경에서 유니버설 인스톨러에 의해 오라클 데이터베이스를 설치하면 기본적으로 3개의 컨트롤 파일이 생성된다). 컨트롤 파일은 데이터베이스를 사용하면서 없어서는 안될 가장 중요한 파일 중에 하나이기 때문에 무엇보다도 잘 관리해야 만 오라클 데이터베이스의 안정성이 보장될 수 있다. 그래서 init.ora 파일에 3개의 컨트롤 파일에 대한 정보를 정의하였다면, 생성 후 하나의 원본 컨트롤 파일과 2개의 미러링 컨트롤 파일의 구조로 작동된다. 이러한 구조를 다중 컨트롤 파일 시스템(Multipled Control File System) 이라고 한다.

    사용자들이 DML문을 실행한 후 COMMIT문을 실행할 때 데이터베이스의 상태정보를 기록해 둔다. 만약, 이 파일을 읽기, 쓰기 할 수 없다면 더 이상 사용자들은 DML문을 실행할 수 없게 된다.

    리두로그 파일

    리두로그 파일은 오라클 데이터베이스에 장애가 발생한 경우 복구작업을 수행하기 위해서는 반드시 필요한 백업 데이터를 저장하고 있다

    사용자가 생성한 테이블에 대해 DML문을 실행할 때 모든 데이터가 리두로그 버퍼에 백업된다.
    사용자의 SQL문에 대해 COMMIT문을 실행하면 SQL*PLUS 화면에 "커밋이 성공적이다"라는 메시지를 확인할 수 있다. 이 는 커밋 되었던 모든 행 데이터(변경 전 데이터와 변경 후 데이터)를 리두로그 버퍼 영역에 백업하고 이어 LGWR 백그라운드 프로세스가 일시적으로 저장되는 리두로그 버퍼 영역의 모든 데이터를 영구히 저장할 수 있는 리두로그 파일로 저장했다는 의미다. 리두로그 버퍼와 리두로그 파일에 모든 변경정보를 저장하는 이유는 갑작스런 시스템의 다운(DOWN) 또는 갑작스런 데이터베이스의 다운 시 처리하고 있던 모든 작업 내용이 테이블에 미쳐 저장되기 전이라면 데이터의 유실이 발생할 수 있기 때문에 백업해 둔 데이터를 통해 데이터베이스를 복구하기 위해서 이다.

     

    테이블을 생성할 때, LOGGING/NOLOGGIN을 지정해 적용할지 여부를 결정할 수 있다(기본값 LOGGING)

     

    'Db' 카테고리의 다른 글

    MariaDb(MySql) zip 설치  (0) 2022.09.28
    FK(Foreign Key)  (0) 2022.09.26
    Db 기본키 생성 전략  (0) 2022.09.26

    댓글