DB/DB Basic

[DB] Oracle의 구조

IT록흐 2021. 6. 24. 13:15
반응형

 

지난 포스팅까지는 관계대수, 관계해석에 대해서 알아보았다.

 

관계대수와 관계해석은 사용자가 테이블을 얻는 과정을 '수학적으로' 표현한 관계질의어다.

 

그렇다면 관계대수와 관계해석이 어떻게 실제 환경에서 구현되는지 알아보자. DBMS로는 Oracle을 선택하였다. Oracle은 표준질의어는 SQL의 확장판인 PL/SQL이다. SQL이 가지는 편리함에 더하여 제어문과 반복문 같은 구조적 프로그래밍도 가능하다. 관계대수와 관계해석은 실제 프로그램 환경인 Oracle에서 PL/SQL로 구현된다.

 

그럼 Oracle의 구조부터 간단히 살펴보자.

 

테이블스페이스(Tablespace)

 

DBMS가 Disk와 대화하며 데이터의 입출력을 담당할 것 같지만 사실 그렇지 않다. 데이터의 입출력이 실제로 이루어지는 곳은 OS의 파일시스템이다. '파일'단위로 Disk로부터 입출력이 발생하므로 파일시스템이라 부른다.

 

 

 

DBMS는 그러므로 데이터의 입출력을 '논리적'으로 다루는 프로그램일 뿐이다. 그럼 DBMS는 데이터를 어떤 논리적 구조로 다룰까? 관계형 DBMS는 데이터를 테이블로 다룬다. 그럼 여러 테이블을 관리할 컨테이너가 필요하다. Oracle에서는 '테이블스페이스(TableSpace)'가 그 역할을 한다. 실제 데이터는 데이터파일(datafile) 형태로 저장되지만 DBMS에서 데이터베이스 관리자가 다루는 데이터 단위는 '테이블스페이스(TableSpace)'이다.

 

테이블스페이스(TableSpace) : 세그먼트가 모여 테이블스페이스를 만든다. 논리적 데이터 단위의 최상위 단위이다.

 

세그먼트(Segment) : 우리가 흔히 말하는 '테이블'이다. 인덱스 정보도 세그먼트에 포함된다. 익스텐트가 모여 세그먼트를 만든다.

데이터 세그먼트 : 테이블 저장

인덱스 세그먼트 : 인덱스 정보 저장

 

익스텐트 (extent) : 연속된 데이터 블록이 모인 저장공간, 테이블(세그먼트)는 가변적으로 변화되므로, 익스텐트들은 디스크상에 연속적으로 저자오디어 있지 않다.

 

데이터블록(DataBlock) : 데이터가 저장되는 가장 작은 단위, 데이터블록의 표준 크기는 db_block_size라는 설정값에 저장

 

물리적 구성요소

 

정리하면, Oracle DBMS 관련 데이터들을 데이터파일(DataFile) 형태로 Disk상에 저장되어 있다. 데이터 파일 외에도, DBMS가 운영되는데 필요한 각종 데이터는 파일 형식으로 저장된다.

 

Redo 로그 파일 : 데이터베이스의 변경 내역을 저장하는 파일, 장애 발생 대비를 위한 백업 파일

 

설정 파일(Parameter File) : 데이터베이스와 데이터베이스 서버와 관련된 설정 정보들이 저장

 

alert/trace 로그 파일 : 오라클 서버 내부에서 오류 발생 시, 오류 메시지와 정보를 저장하는 파일

 

컨트롤 파일(control file) : DB의 물리적구조 및 이름 및 생성시간, Redo 로그파일 위치정보, 로그번호, 체크포인트 등등 DB 컨트롤에 필요한 데이터를 저장한다.

 

이렇게 다양한 데이터 파일들이 저장되어 DBMS가 운영될 수 있도록 도와준다. 그럼 이런 체계속에서 DB 프로그램을 사람이 사용하려면, 사람이 이해할 수 있는 논리적인 방식으로 데이터를 표현해야한다.

 

그러므로 Oracle 사용자는 데이터 파일을 담기 위한 테이블 스페이스를 생성해야한다. 생성하지 않으면 기본으로 제공되는 테이블 스페이스를 사용한다. 테이블 스페이스를 생성하려면 관리자 권한이 있어야한다. sys as sysdba로 DB접속을 해준다.

 

테이블스페이스를 생성하는 SQL은 이렇다.

 

CREATE TABLESPACE <테이블스페이스 이름> DATAFILE '<데이터파일 경로명>' SIZE <데이터파일 크기>

 

 

테이블 스페이스는 논리적인 표현일 뿐이므로 물리적인 데이터 파일의 저장경로와 크기를 지정해주어야한다. 이렇게 테이블스페이스를 생성한 후, 해당 폴더에 가보자.

 

 

이렇게 데이터 파일이 생성되었음을 알 수 있다. 앞으로 my_space 테이블스페이스에서 만들어지는 테이블들은 이제 MY_SPACE.DBF 파일에 저장되어 DISK에 저장될 것이다.

 

수정시 ALTER, 삭제시 DROP 명령어를 사용한다. 테이블 스페이스는 ALTER 명령어를 통해 데이터파일을 추가적으로 ADD 할 수 있다. 테이블스페이스 정보는 dba_data_files 테이블에 저장된다. 그러므로 테이블스페이스 정보를 확인하려면 SELECT 명령어를 사용한다.

 

 

사용자 계정 생성

 

데이터베이스 관리자가 테이블스페이스를 만들었으면 DB 사용자들에게 테이블 스페이스를 할당해야한다. 사용자 계정을 생성할 때, 테이블 스페이스가 할당된다.

 

CREATE USER <사용자계정>

IDENTIFIED BY <비밀번호>

DEFAULT TABLESPACE <사용할 테이블 스페이스 이름>

QUOTA <용량> ON <사용할 테이블스페이스 이름>

 

 

 

처음에 계정생성 할 때, 오류가 났다. XEPDB 이야기를 하는 것 보니, PDB와 관련된 문제인거 같은데, 아직 내 수준에서는 정확한 문제 원인은 잘 모르겠다.

 

ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;

 

이와 같은, SQL을 넣어주니 계정이 잘 생성되었다.

 

권한부여

 

 

생성된 계정으로 DB에 접속을 시도하면 이와 같이 막힌다. DB 접속에도 권한이 있어야 한다. 그리고 테이블같은 객체 생성에도 권한이 필요하다. 그러므로 데이터 베이스 관리자가 사용자에게 해당 권한을 부여해야한다.

 

DB접속권한 : CONNECT

테이블 객체생성 권한 : RESOURCE

 

SYS AS SYSDBA로 접속해보자.

 

 

권한을 부여하는 명령어는 GRANT이다. KANG계정에 권한부여를 완료했다. 다시 해당 계정으로 접속해보자.

 

 

접속이 완료되었다. 그럼 테이블도 생성해보자.

 

 

테이블도 생성이 잘 되었다. 이렇게 오라클의 간단한 논리적 구조를 통해, 테이블을 생성하는 과정까지 알아보았다.

 

 

 

 


참고자료

 

Understanding of Database

저자 : 이상구, 장재영, 김한준, 정재헌

출판 : 이한미디어발매2012.08.20.

 

 

 

반응형

'DB > DB Basic' 카테고리의 다른 글

[DB] SQL2 (Oracle)  (0) 2021.06.25
[DB] SQL1 (Oracle)  (0) 2021.06.25
[DB] 관계해석(Relational Calculus)  (0) 2021.06.24
[DB] 관계형 데이터 모델  (0) 2021.06.24
[DB] 파일시스템  (0) 2021.06.24