ORACLE 테이블 이해를 위한 오라클 구조, 오라클 논리적, 물리적 구성 요소, 테이블스페이스, 데이터파일
10.1. 테이블 이해를 위한 오라클 구조
오라클 데이터베이스의 구조는 크게 논리적 구성 요소와 물리적 구성 요소로 나누어 볼 수 있습니다.
10.1.1 오라클 논리적 구성 요소
논리적 구성 요소는 데이터 블록data blocks, 확장 영역extents, 세그먼트segments, 테이블스페이스tablespace, 데이터베이스database로 나눌 수 있습니다.
데이터 블록은 데이터를 저장하는 최소 논리 단위로서, 논리 블록logical block, 페이지page등으로 불립니다. 즉 오라클 데이터베이스에 데이터를 쓰고, 읽는 동작의 최소 단위를 말합니다. 데이터 블록 크기는 운영체제 블록 크기의 배수로 해야 불필요한 I/O를 방지할 수 있습니다.
확장 영역은 특정 유형 정보를 저장하는 목적으로 할당된 논리적으로 연속적인 데이터 블록 세트(집합)입니다. 확장 영역 집합이 세그먼트가 되는데 테이블은 데이터 세그먼트data segments이고, 인덱스는 인덱스 세그먼트index segments입니다.
사원emp 테이블의 실제 데이터는 자체 데이터 세그먼트에 저장되는 반면, 인덱스는 인덱스 세그먼트에 저장됩니다. 물리적으로 다른 곳에 저장된다는 것 잊지 마세요.
이러한 세그먼트가 여러 개 모여서 테이블스페이스를 이루고 이들이 모여서 데이터베이스를 논리적으로 구성하게 됩니다. SQL 개발자 관점에서 데이터의 입/출력은 테이블 단위로 이루어 지고 이 테이블은 반드시 하나의 테이블스페이스에 속하게 됩니다.
데이터베이스는 테이블스페이스라고 하는 논리적인 스토리지 단위로 나뉘어 지고 테이블 스페이스는 세그먼트 라고하는 논리적 스토리지 단위로 나뉘며, 확장 영역으로 더 나뉩니다. 확장 영역은 연속 된 블록의 모음입니다.
테이블스페이스는 하나 이상의 물리적인 오라클 데이터 파일로 이루어 집니다.
10.1.2 오라클 물리적 구성 요소
오라클 데이터베이스의 물리적 구성 요소로 프로세스, 메모리, 파일이 있습니다. 오라클의 파일은 실제 데이터가 저장되는 데이터 파일data file, 장애가 발생했을 때 복구용으로 활용하는 리두 로그 파일redo log file, 데이터 파일과 리두 로그 파일의 위치를 가지고 있는 컨트롤 파일control file, 데이터베이스 파라미터를 저장하는 파라미터 파일parameter file 등이 있습니다.
이러한 논리적 구성 요소 및 물리적 구성 요소는 데이터베이스 관리자의 영역이므로 자세히 설명 드리지는 않겠습니다. 하지만 개발자 및 기본 SQL 사용자들도 테이블스페이스와 데이터 파일 정도는 알아두시면 좋습니다.
다음은 논리적 구성 요소와 데이터 파일의 관계입니다.
<그림/>
다음그림은 사원 테이블이 데이터 파일 2개에 나뉘어져 있고, 첫 번째 데이터 파일에는 확장 영역이 1개, 두 번째 데이터 파일에는 2개가 있고, 각 확장 영역에는 데이터 블록 12개가 들어 있으며, 데이터 블록 크기를 8이라고 가정했을 때의 그림입니다.
10.1.3 논리적/물리적 구조를 확인하기 위한 실습
실습을 하기전에 자주 출현하는 오라클의 데이터딕셔너리에 대해 간단히 설명 드리겠습니다.
오라클의 데이터딕셔너리data dictionary는 모든 데이터베이스의 정보(사용자, 권한, 스키마 개체, 무결성 제약조건, DB구조, DB 성능정보 등)를 담고 있는 시스템 테이블 및 뷰 입니다. 오라클이 사용하는 영역이므로 SYSTEM 테이블스페이스에 위치해 있으며 사용자들에게 DB의 모든 정보를 제공 합니다. DBA_로 시작하는 뷰는 DBA 권한을 가진 사용자만 볼 수 있는 뷰 인데 오라클의 모든 개체의 정보를 볼 수 있으며, ALL_로 시작되는 뷰는 특정 사용자가 접근 가능한 객체정보를 , USER_로 시작되는 뷰는 특정 사용자에게 종속되어 있고 그 사용자가 소유한 객체에 대한 정보를 조회 할 수 있습니다.
본서의 실습에서 사용하는 사용자 SCOTT은 이미 DBA 권한을 가지고 있습니다. 0. 환경설정 사용자생성 부분에서 확인하세요.
실습
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개의 테이블스페이스가 있고 각 테이블스페이스를 구성하는 데이터파일의 경로 및 파일명을 보여 줍니다.
실습
본 교재의 실습을 위한 사용자는 SCOTT입니다. 이 사용자는 0. 환경설정에서 사용자를 생성할 때 기본 테이블스페이스dafault tablespace를 별도로 지정하지 않았는데, 오라클 21C에서는 USERS 테이블스페이스로 설정합니다. 그래서 SCOTT 사용자에서 생성한 테이블은 USERS라는 테이블스페이스에 생성이 됩니다. 아래 실습을 통해 접속한 사용자의 기본 테이블스페이스와 관련된 정보를 확인해 보겠습니다.
현재 접속한 사용자의 사용자명, 기본 테이블스페이스, 생성일자, 최종로그인일시를 확인하는 쿼리를 작성합시다. |
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 |
❶ 테이블명은 오라클 딕셔너리에 대문자로 저장되어 있으므로 WHERE 절에서 문자 리터럴로 비교시 대문자로 작성해야 합니다.
#ORACLE, #테이블, #테이블스페이스,#데이터파일,#오라클구조
댓글 없음:
댓글 쓰기