2021년 12월 22일 수요일

오라클 논리적/물리적구조, 블록, 익스텐트, 세그먼트, 테이블스페이스, 데이터/리두로그/컨트롤/파라미터 파일, 자바학원, 오라클학원, 자바교육, 오라클교육

 

오라클 논리적/물리적구조, 블록, 익스텐트, 세그먼트, 테이블스페이스, 데이터/리두로그/컨트롤/파라미터 파일, 자바학원, 오라클학원, 자바교육, 오라클교육


https://www.youtube.com/watch?v=EVlC_vLPWq8&list=PLxU-iZCqT52CE6piTNJMXGGUvDvKw46_T&index=1











오라클 논리적/물리적구조, 블록, 익스텐트, 세그먼트, 테이블스페이스, 데이터/리두로그/컨트롤/파라미터 파일 




오라클 논리/물리적 구조 





블록, 익스텐트, 세그먼트, 테이블스페이스

데이터/리두로그/컨트롤/파라미터 파일

실습




ORACLE 19C





오라클의 논리적 구성요소


논리적 구성 요소는 데이터 블록data blocks, 확장 영역extents, 세그먼트segments, 테이블스페이스tablespace로 이루어 집니다. 


데이터 블록(Data Block)은 데이터를 저장하는 최소 논리적 단위, IO단위로서, 논리 블록logical block, 페이지page등으로 불립니다. 오라클 DB의 데이터는 물리적으로 운영 체제 블록(OS 블록)으로 구성된 디스크의 데이터 파일에 저장됩니다.

오라클 데이터베이스에 데이터를 쓰고, 읽는 동작의 최소 단위 이며, 데이터 블록 크기는 운영체제 블록 크기의 배수로 해야 불필요한 I/O를 방지할 수 있습니다. 




데이터 블록의 크기는 db_block_size 파라미터 값으로 확인 할 수 있습니다.


[오라클19C DB_BLOCK_SIZE]


확장 영역(Extents)은 논리적으로 연속적인 데이터 블록 집합입니다. 

dictionary managed tablespaces에서 초기 확장영역은 5개의 블록으로 이루어 지고 기본적으로 그 크기가 다 다릅니다. 최소값은 1이고 최대값은 OS에 따라 다릅니다. 


세그먼트에 할당된 초기 익스텐트가 꽈차서 더 많은 공간이 필요한 경우 오라클은 자동으로 해당 세그먼트에 대한 증분 익스텐트를 할당하는데, 증분 익스텐트는 해당 세그먼트의 이전 익스텐트와 같거나 더 큰 사이즈의 익스텐트입니다. 만약 테이블스페이스 생성시 익스텐트 사이즈를 똑같이 하려면 'UNIFORM SIZE 5M'와 같이 해주면 익스텐트를 해당 크기로 동일하게 맞추어 줍니다.


우리가 테이블을 생성하면 처음부터 한개의 큰 공간이 할당되는 것이 아니라 처음에는 익스텐트안에 몇개의 블록정도 공간이 할당되고 데이터가 입력되어 이 공간이 모두 사용되면 또 다시 익스텐트를 할당 받아 연속적으로 데이터를 저장합니다.


세그먼트(Segments)는 하나이상의 확장 영역으로 이루어 집니다.  테이블은 데이터 세그먼트data segments이고, 인덱스는 인덱스 세그먼트index segments입니다. 




사원emp 테이블의 실제 데이터는 데이터 세그먼트에 저장되는 반면, 인덱스는 인덱스 세그먼트에 저장됩니다. 물리적으로 다른 곳에 저장되죠,


이러한 세그먼트가 여러 개 모여서 테이블스페이스를 이루고 이들이 모여서 데이터베이스를 논리적으로 구성하게 됩니다. SQL 개발자 관점에서 데이터의 입/출력은 테이블을 기준으로 이루어 지고 이 테이블은 반드시 하나의 테이블스페이스에 속하게 됩니다.




다시 정리하면 데이터베이스는 테이블스페이스라고 하는 논리적인 스토리지 단위로 나뉘어 지고 테이블 스페이스는 세그먼트 라고하는 논리적 단위로 나뉘며, 확장 영역으로 더 나뉩니다. 확장 영역은 연속 된 블록의 모음입니다.


각 세그먼트(테이블, 인덱스)는 하나의 테이블스페이스에만 속합니다. 예를들면 사원테이블은 USERS 테이블스페이스에만 속합니다. 그러므로 세그먼트의 모든 익스텐트 역시 동일한 테이블스페이스에 저장됩니다. 


테이블스페이스 내에서 세그먼트(테이블, 인덱스)는 물리적으로 여러 데이터 파일에 포함될 수 있습니다. 예를 들어, 세그먼트의 한 익스텐트는 users01.dbf에 저장되고 다른 익스텐트는 users02.dbf에 저장될 수 있습니다. 사원테이블의 데이터가 일부는 users01.dbf에 저장되고 또 일부는 users02.dbf에도 저장될 수 있다는 이야기 입니다.




즉 테이블스페이스는 하나 또는 그 이상의 물리적인 오라클 데이터 파일로 이루어 집니다.


논리적 저장공간의 관리


데이터베이스 테이블가 같은 객체가 익스텐트를 요구할 때 오라클 입장에서 새 익스텐트를 찾아서 제공하는 방법이 있어야 합니다. 유사하게, 테이블에 데이터가 삭제되어 더 이상 익스텐트를 필요로 하지 않을 때 데이터베이스는 이를 반환하여 익스텐트를 사용 가능하게 만드는 방법이 있어야 합니다.

Locally managed tablespaces (default) : 테이블스페이스 자체의 비트맵을 사용하여 익스텐트를 관리하며, ASSM(자동 세그먼트 공간 관리) 또는 MSSM(수동 세그먼트 공간 관리)으로 세그먼트를 관리할 수 있습니다.

Dictionary-managed tablespaces : 데이터 딕셔너리의 정보를 이용하여 익스텐트를 관리합니다.



오라클의 물리적 구성요소


오라클을 비롯한 RDBMS의 특징은 테이블, 뷰 및 인덱스와 같은 논리적 데이터 구조가 물리적인 저장 구조로부터 독립된다는 것입니다. 물리적 구조와 논리적 구조가 분리되어 있으므로 논리적 구조에 대한 액세스에 영향을 주지 않고 데이터의 물리적 스토리지를 관리할 수 있습니다. 예를들면 오라클 데이터베이스의 Datafile 파일의 이름을 바꿔도 그 안에 저장된 테이블의 이름은 바뀌지 않습니다.


오라클 데이터베이스의 물리적 구성 요소로 프로세스, 메모리구조, 파일등이 있습니다. 오라클의 파일은 실제 데이터가 저장되는 데이터 파일data file(데이터파일의 데이터는 운영체제 블록에 저장 됩니다), 장애가 발생했을 때 복구용으로 활용하는 리두 로그 파일redo log file, 데이터 파일과 리두 로그 파일의 위치를 가지고 있는 컨트롤 파일control file, 데이터베이스 파라미터를 저장하는 파라미터 파일parameter file 등이 있습니다.



다음은 논리적 구성 요소와 데이터 파일의 관계입니다.



다음그림은 사원 테이블이 데이터 파일 2개에 나뉘어져 있고, 두 데이터 파일에는 확장 영역이 각각 1개가 있고, 좌측 데이터파일의 확장 영역에는 데이터 블록 12개가 들어 있으며, 우측 데이터파일의 확장 영역에는 데이터 블록 24개가 들어가 있으며, 데이터 블록 크기를 8이라고 가정했을 때의 그림입니다.



논리적, 물리적 구조를 확인하기 위한 실습


실습을 하기전에 자주 출현하는 오라클의 데이터딕셔너리에 대해 간단히 설명 드리겠습니다.


오라클의 데이터딕셔너리data dictionary는 모든 데이터베이스의  정보(사용자, 권한, 스키마 개체, 무결성 제약조건, DB구조, DB 성능정보 등)를 담고 있는 시스템 테이블 및 뷰 입니다. 


오라클이 사용하는 영역이므로 SYSTEM 테이블스페이스에 위치해 있으며 사용자들에게 DB의 모든 정보를 제공 합니다. DBA_로 시작하는 뷰는 DBA 권한을 가진 사용자만 볼 수 있는 뷰 인데 오라클의 모든 개체의 정보를 볼 수 있으며,  ALL_로 시작되는 뷰는 특정 사용자가 접근 가능한 객체 정보를 , USER_로 시작되는 뷰는 특정 사용자에게 종속되어 있고 그 사용자가 소유한 객체에 대한 정보를 조회 할 수 있습니다.


실습에서 사용하는 사용자  SCOTT은 이미 DBA 권한을 가지고 있습니다. 


실습


USER_DATA_FILES 또는 DBA_DATA_FILES 딕셔너리뷰는 실제 데이터가 들어있는 오라클의 물리적 구성요소인 데이터파일data file에 대해 정보를 제공하는 뷰입니다. 파일이름, 테이블스페이스 이름, 데이터파일의 크기, 가용한지 등의 상태 정보를 제공합니다.


현재 데이터베이스에서 사용중인  테이블스페이스와 이를 구성하는, 데이터 파일을 DBA_DATA_FILES 딕셔너리뷰를 통해 조회 합시다. 


SELECT TABLESPACE_NAME
             , BYTES/1024/1024 MB
             , FILE_NAME
FROM    DBA_DATA_FILES;


<실행결과>

 
TABLESPACE_NAME
MB
FILE_NAME
1
USERS
    5
C:\APP\ORADATA\ORCL\USERS01.DBF
2
UNDOTBS1
  55
C:\APP\ORADATA\ORCL\UNDOTBS01.DBF
3
SYSTEM
910
C:\APP\ORADATA\ORCL\SYSTEM01.DBF
4
SYSAUX
730
C:\APP\ORADATA\ORCL\SYSAUX01.DBF


현재 데이터베이스에는 4개의 테이블스페이스가 있고 각 테이블스페이스를 구성하는 데이터파일의 경로 및 파일명을 보여 줍니다.


실습


현재 접속한 사용자의 사용자명, 기본 테이블스페이스, 생성일자, 최종로그인일시를 확인하는 쿼리를 작성합시다.


SELECT USERNAME
             , DEFAULT_TABLESPACE
             , CREATED
             , LAST_LOGIN
FROM    DBA_USERS
WHERE USERNAME =  ❶USER ;


<실행결과>

 
USERNAME
DEFAULT_TABLESPACE
CREATED
LAST_LOGIN
1
SCOTT
USERS
20/11/03
20/12/06 14:25:44.000000000 ASIA/SEOUL


 ❶ USER 함수는 현재 세션의 사용자의 이름을 VARCHAR2 형식으로 돌려줍니다. 쿼리 결과를 보았을 때 SCOTT 사용자로 접속된 상태라는 것을 알 수 있습니다. USER 함수는 CHECK 제약조건에서는 사용할 수 없습니다.

실습


USER_TABLES 딕셔너리뷰를 통해  현재 사용자가 소유(작성)한 테이블의 목록을 확인 할 수 있습니다.


현재 사용자의 테이블 목록을 조회하면서 테이블스페이스명도 같이 조회합시다.


SELECT TABLESPACE_NAME
             , TABLE_NAME
FROM     USER_TABLES;


<실행결과>

 
TABLESPACE_NAME
TABLE_NAME
1
USERS
DEPT
2
USERS
EMP
3
USERS
BONUS
4
USERS
SALGRADE
5
USERS
CUSTOMER
6
USERS
SALES


현재 SCOTT 계정에는 6개의 테이블이 만들어 졌음을 알 수 있습니다.


실습


테이블의 크기가 얼마일까? 궁금할 때가 가끔 있습니다. 아래 실습에서 확인하세요.


사원emp 테이블의 데이터 블록data block 수와 몇 데이터 크기kb를 쿼리하세요. 


SELECT BLOCKS
         , BYTES/1024 AS KB
FROM   USER_SEGMENTS
WHERE  SEGMENT_NAME = 'EMP';


<실행결과>

 
BLOCKS
      KB
1
          8
        64



실습


EMP(14건) 테이블과, MYEMP1(2000만건) 테이블이 몇개의 EXTENTS로 구성되었는지 확인하세요.


SELECT * FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'MYEMP1';
SELECT * FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'EMP';






#오라클, #데이터블록, #익스텐트, #세그먼트, #테이블스페이스, #데이터파일, #리두로그파일, #오라클교육, #오라클학원, #오라클동영상, #ORACLE교육, #ORACLE학원, #ORACLE동영상, 오라클, 데이터블록, 익스텐트, 세그먼트, 테이블스페이스, 데이터파일, 리두로그파일, 오라클교육, 오라클학원, 오라클동영상, ORACLE교육, ORACLE학원, ORACLE동영상,  



댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...