DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

테이블스페이스

DBMS 2
DB2 가이드
DB2 사용자 가이드
테이블스페이스
작성자
admin
작성일
2021-02-19 13:43
조회
2045

테이블스페이스

테이블스페이스

①테이블스페이스는 한 개 이상의 컨테이너 묶음에 대한 논리적인 이름입니다. 컨테이너는 디렉토 리, 파일, 논리적 파티션 중의 한 가지입니다.

db2

②데이터베이스를 생성하면 3개의 기본 테이블스페이스가 자동으로 생성됩니다.

db2

③테이블스페이스는 관리 주체에 따라 2가지의 방식으로 구분됩니다.

db2

④테이블스페이스는 용도에 의해 4가지의 유형으로 구분됩니다.

db2


기본 테이블스페이스

①(인스턴스 사용자)로 로그인합니다.


$ login (인스턴스 사용자명)

②create database 문에서 특별한 옵션을 지정하지 않으면, 3개의 기본 테이블스페이스는 SMS 유형으로 기본 디렉토리에 생성됩니다. SYSCATSPACE 는 시스템 카탈로그 테이블을 저장하며, TEMPSPACE1은 SQL문의 처리시에 정렬 또는 조인 작업을 위해 엔진이 사용하는 임시 공간입니다. USERSPACE1은 사용자의 테이블이 저장될 수 있는 공간입니다.


$ db2 create db (데이터베이스명) 
$ db2 connect to (데이터베이스명)
$ db2 list tablespaces 또는 db2 “select * from table(mon_get_tablespace(‘’,-2)) as t”
$ db2 list tablespace containers for 0 또는 db2 “select * from table(mon_get_container(‘’,-2)) as t”

③create database 문에서 3개의 기본 테이블스페이스의 유형 및 컨테이너에 대한 정보를 사용자가 지정할 수 있습니다.


$ vi <임의의 파일명> create db (데이터베이스명) CATALOG TABLESPACE (테이블스페이스 옵션) USER TABLESPACE (테이블스페이스 옵션) TEMP TABLESPACE (테이블스페이스 옵션); 
$ db2 ?svtf (임의의 파일명)

db2


SMS 테이블스페이스

①(인스턴스 사용자)로 로그인합니다.


$ login (인스턴스 사용자명)

②테이블스페이스를 생성하려면 데이터베이스에 대한 접속이 필요합니다.


$ db2 connect to (데이터베이스명)

③create tablespace 문에서 MANAGED BY SYSTEM 옵션을 이용하여 SMS 방식의 테이블스페이스를 생성합니다. USING 옵션으로 한 개 이상의 디렉토리명을 나열합니다.


$ db2 “create tablespace (테이블스페이스명) managed by system using (‘(디렉토리명)')” 
$ db2 “create tablespace (테이블스페이스명) managed by system using (‘(디렉토리명 1)’, ‘(디렉토리명 2)')”

④ls 명령어를 이용하여 컨테이너로 사용되는 디렉토리를 확인할 수 있습니다. 컨테이너로 사용되 는 디렉토리 또는 OS가 관리하는 파일이 손상되면 데이터베이스가 손상됩니다.


$ ls ?lia (디렉토리명)

⑤시스템 임시 테이블스페이스와 사용자 임시 테이블스페이스에 저장되는 데이터는 한시적이므로 가능한 SMS 방식으로 생성하도록 합니다.

db2


DMS 테이블스페이스

①(인스턴스 사용자)로 로그인합니다.


$ login (인스턴스 사용자명)

②테이블스페이스를 생성하려면 데이터베이스에 대한 접속이 필요합니다.


$ db2 connect to (데이터베이스명)

③create tablespace 문에서 MANAGED BY DATABASE 옵션을 이용하여 DMS 방 식의 테이블스페이스를 생성합니다.


$ db2 “create tablespace (테이블스페이스명) managed by database using (file ‘(파일명)' (크기)) “ 
$ db2 “create tablespace (테이블스페이스명) managed by database using (device ‘(디바이스파일명)' (크기)) “

④ls 명령어로 컨테이너로 사용되는 파일과 논리적 볼륨에 대응되는 디바이스 파일을 확인할 수 있 습니다. 파일 또는 논리적 볼륨이 손상되면 데이터베이스가 손상됩니다.


$ ls ?lia (파일명) 
$ ls ?lia (디바이스파일명)
$ lslv ?l (논리적파티션명)

db2


LARGE 테이블스페이스

①(인스턴스 사용자)로 로그인하여 데이터베이스에 접속합니다.


$ login (인스턴스 사용자명) 
$ db2 connect to (데이터베이스명)

②create tablespace 문에서 DMS 방식의 LARGE 유형으로 테이블스페이스를 생성합니 다.


$ db2 “create tablespace (테이블스페이스명) managed by database using (file ‘(파일명)’ (크기))” 
$ db2 “create tablespace (테이블스페이스명) managed by database using (device ‘(디바이스파일명)' (크기)) “

③SYSCAT.TABLESPACES의 DATATYPE 컬럼의 값은 ‘L’ 로 표시됩니다.


$ db2 "select substr(tbspace,1,20) tbspace, datatype, tbspaceid, tbspacetype from syscat.tablespaces"

db2


SYSTEM TEMPORARY 테이블스페이스

①(인스턴스 사용자)로 로그인하여 데이터베이스에 접속합니다.


$ login (인스턴스 사용자명) 
$ db2 connect to (데이터베이스명)

②create tablespace 문에서 SYSTEM TEMPORARY 옵션을 이용하여 SMS 방식의 SYSTEM TEMPORARY 유형으로 테이블스페이스를 생성합니다.


$ db2 “create system temporary tablespace (테이블스페이스명) managed by system using (‘(디렉토리명)’)”

③create tablespace 문에서 SYSTEM TEMPORARY 옵션을 이용하여 DMS 방식의 SYSTEM TEMPORARY 유형으로 테이블스페이스를 생성합니다.


$ db2 “create system temporary tablespace (테이블스페이스명) managed by database using (file ‘(파일명)’ (크기)”
$ db2 “create system temporary tablespace (테이블스페이스명) managed by database using (device ‘(디바이스파일명)' (크기))“

④SYSCAT.TABLESPACES의 DATATYPE 컬럼의 값은 ‘T’ 로 표시됩니다.


$ db2 "select substr(tbspace,1,20) tbspace, datatype, tbspaceid, tbspacetype from syscat.tablespaces"

db2


USER TEMPORARY 테이블스페이스

①(인스턴스 사용자)로 로그인하여 데이터베이스에 접속합니다.


$ login (인스턴스 사용자명) 
$ db2 connect to (데이터베이스명)

②create tablespace 문에서 USER TEMPORARY 옵션을 이용하여 SMS 방식의 USER TEMPORARY 유형으로 테이블스페이스를 생성합니다.


$ db2 “create user temporary tablespace (테이블스페이스명) managed by system using (‘(디렉토리명)’)”

③create tablespace 문에서 USER TEMPORARY 옵션을 이용하여 DMS 방식의 USER TEMPORARY 유형으로 테이블스페이스를 생성합니다.


$ db2 “create user temporary tablespace (테이블스페이스명) managed by database using (file ‘(파일명)’ (크기))” 
$ db2 “create user temporary tablespace (테이블스페이스명) managed by database using (device ‘(디바이스파일명)'(크기))“

④SYSCAT.TABLESPACES의 DATATYPE 컬럼의 값은 ‘U’ 로 표시됩니다.


$ db2 "select substr(tbspace,1,20) tbspace, datatype, tbspaceid, tbspacetype from syscat.tablespaces"

db2


디렉토리 컨테이너

①(인스턴스 사용자)로 로그인하여 데이터베이스에 접속합니다.


$ login (인스턴스 사용자명) 
$ db2 connect to (데이터베이스명)

②create tablespace 문의 USING 옵션에서 디렉토리명을 지정합니다. (디렉토리명)은 <절대 경로명> 또는 (상대 경로명)으로 지정할 수 있습니다.


$ db2 “create tablespace (테이블스페이스명) managed by system using (‘(디렉토리명)')” 
$ db2 “create tablespace (테이블스페이스명) managed by system using (‘(디렉토리명 1)’, ‘(디렉토리명 2)')”

③컨테이너로 지정된 디렉토리는 자동으로 생성됩니다.


$ ls ?lia (디렉토리명)

④테이블스페이스와 컨테이너의 연관 정보는 데이터베이스 내부의 제어 파일에 저장됩니다. list tablespaces 명령어를 이용하여 (테이블스페이스 ID)를 확인하고, list tablespace containers 명령어로 (컨테이너 유형) 항목이 ‘경로’ 인 것을 확인합니다.


$ db2 list tablespaces show detail 또는 db2 “select * from table(mon_get_tablespace(‘’,-2)) as t” 
$ db2 list tablespace containers for (테이블스페이스 ID) show detail 또는 db2 “select * from table(mon_get_container(‘’,-2)) as t”

db2


파일 컨테이너

①(인스턴스 사용자)로 로그인하여 데이터베이스에 접속합니다.


$ login (인스턴스 사용자명) 
$ db2 connect to (데이터베이스명)

②create tablespace 문의 USING 옵션에서 컨테이너의 유형을 file 이라고 지정하고, 컨 테이너로 사용될 파일명과 크기를 지정합니다. (파일명)은 (절대 경로명) 또는 (상대 경로 명)을 이용하여 지정할 수 있습니다. (크기)는 테이블스페이스의 페이지 단위로 지정합니다. K, M, G 단위를 이용한 지정도 가능합니다.


$ db2 “create tablespace (테이블스페이스명) managed by database using (file ‘(파일명1)’ (크기), file ‘(파일명2)’ (크기))”

③컨테이너로 지정된 파일이 자동으로 생성됩니다.


$ ls ?lia (파일명)

④테이블스페이스와 컨테이너의 연관 정보는 데이터베이스 내부의 제어 파일에 저장됩니다. list tablespaces 명령어를 이용하여 (테이블스페이스 ID)를 확인하고, list tablespace containers 명령어로 (컨테이너 유형) 항목이 ‘파일’ 인 것을 확인합니다.


$ db2 list tablespaces show detail 또는 db2 “select * from table(mon_get_tablespace(‘’,-2)) as t” 
$ db2 list tablespace containers for (테이블스페이스 ID) show detail 또는 db2 “select * from table(mon_get_container(‘’,-2)) as t”

db2


디바이스 컨테이너

①root 사용자가 컨테이너로 사용될 논리적 볼륨을 정의합니다. 논리적 볼륨에 대한 디바이스파일 의 소유자를 인스턴스 사용자로 변경합니다.


$ login root 
$ mklv -y'(논리적파티션명)' (볼륨그룹명) (논리파티션개수)
$ chown (인스턴스의 사용자명).(인스턴스의 그룹명) (디바이스파일명) $ ls ?lia (디바이스파일명)

②(인스턴스 사용자)로 로그인하고, 데이터베이스에 접속합니다.


$ login (DB2 사용자) 
$ db2 connect to (데이터베이스명)

③create tablespace 문의 USING 옵션에서 컨테이너의 유형을 device 라고 지정하고, 컨테이너로 사용될 디바이스파일명과 크기를 지정합니다. <크기>는 테이블스페이스의 페이지 단위로 지정합니다. K, M, G 단위를 이용한 지정도 가능합니다.


$ db2 “create tablespace (테이블스페이스명) managed by database using (device ‘(디바이스파일명)’ (크기))"

④테이블스페이스와 컨테이너의 연관 정보는 데이터베이스 내부의 제어 파일에 저장됩니다. list tablespaces 명령어를 이용하여 (테이블스페이스 ID)를 확인하고, list tablespace containers 명령어로 (컨테이너 유형) 항목이 ‘디스크’인 것을 확인합니다.


$ db2 list tablespaces show detail 또는 db2 “select * from table(mon_get_tablespace(‘’,-2)) as t” 
$ db2 list tablespace containers for (테이블스페이스 ID) show detail 또는 db2 “select * from table(mon_get_container(‘’,-2)) as t”

db2


페이지

①(인스턴스 사용자)로 로그인하여 데이터베이스에 접속합니다.


$ login (인스턴스 사용자명) 
$ db2 connect to (데이터베이스명)

②create tablespace 문의 PAGESIZE 옵션으로 페이지의 크기를 지정합니다. (크기)는 바이트 또는 K 단위를 이용하여 지정합니다.


$ db2 “create tablespace (테이블스페이스명) PAGESIZE (크기) managed by system using (‘(디렉토리명)’)”

③db2look 유틸리티를 이용하여 테이블스페이스에 대한 DDL을 확인하면, PAGESIZE 옵션에 서 페이지 크기를 바이트 단위로 확인할 수 있습니다.


$ db2look ?d (데이터베이스명) -l | grep ?p ?i (테이블스페이스명)

④시스템 카탈로그를 조회하여 PAGESIZE 항목을 확인합니다.


$ db2 "select substr(tbspace,1,20) tbspace, tbspaceid, pagesize from syscat.tablespaces"

⑤list tablespaces 명령어로 테이블스페이스의 정보를 확인합니다. <페이지 크기> 항목에서 페이지의 크기를 바이트 단위로 확인할 수 있습니다.


$ db2 list tablespaces show detail 또는 db2 “select * from table(mon_get_tablespace(‘’,-2)) as t” 
$ db2 list tablespace containers for (테이블스페이스 ID) show detail 또는 db2 “select * from table(mon_get_container(‘’,-2)) as t”

db2

⑥http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm .db2.luw.admin.dbobj.doc/doc/c0052318.html 에서 페이지의 크기 별 제약사항 을 확인합니다.


익스텐트

①(인스턴스 사용자)로 로그인하여 데이터베이스에 접속합니다.


$ login (인스턴스 사용자명) 
$ db2 connect to (데이터베이스명)

②create tablespace 문의 EXTENTSIZE 옵션으로 페이지의 크기를 지정합니다. <크기> 는 테이블스페이스의 페이지 단위로 지정합니다. K, M, G 단위를 이용한 지정도 가능합니다.


$ db2 “create tablespace (테이블스페이스명) managed by system using (‘(디렉토리명)’) EXTENTSIZE (크기) ”

③db2look 유틸리티를 이용하여 테이블스페이스에 대한 DDL을 확인하면, EXTENTSIZE 옵션 에서 익스텐트의 크기를 페이지 단위로 확인할 수 있습니다.


$ db2look ?d (데이터베이스명) -l | grep ?p ?i (테이블스페이스명)

④시스템 카탈로그를 조회하여 EXTENTSIZE 항목을 확인합니다.


$ db2 "select substr(tbspace,1,20) tbspace, tbspaceid, pagesize, extentsize from syscat.tablespaces"

⑤list tablespaces 명령어로 테이블스페이스의 정보를 확인합니다.?항목에서 익스텐트의 크기를 페이지 단위로 확인할 수 있습니다.


$ db2 list tablespace containers for (테이블스페이스 ID) show detail 또는 db2 “select * from table(mon_get_container(‘’,-2)) as t”

db2


페이지 클리너

①(인스턴스 사용자)로 로그인하여 데이터베이스 구성 변수인 NUM_IOCLEANERS를 이용하 여 페이지 클리너용 프로세스의 개수를 숫자로 지정합니다.


$ login (인스턴스 사용자명) 
$ db2 update db cfg for (데이터베이스) using NUM_IOCLEANERS<값>

②데이터베이스를 재 활성화합니다.


$ db2 deactivate db (데이터베이스명) 
$ db2 activate db (데이터베이스명)

③db2pd 명령어를 이용하여 페이지 클리너를 담당하는 프로세스인 db2pclnr 를 확인합니다.


$ db2pd -d sample -edu | grep -i db2pclnr

④페이지 클리너용 프로세스는 데이터베이스 구성 변수인 CHNGPGS_THRESH 와 SOFTMAX 값에 의해 비동기적으로 활동 시점이 결정됩니다.


$ db2 get db cfg for (데이터베이스명) | grep CHNGPGS_THRESH 
$ db2 get db cfg for (데이터베이스명) | grep SOFTMAX

db2


페이지 프리페처

①(인스턴스 사용자)로 로그인하여 데이터베이스 구성 변수인 NUM_IOSERVERS 를 이용하여 페이지 프리페처용 프로세스의 개수를 숫자로 지정하고, 데이터베이스를 재 활성화합니다


$ login (인스턴스 사용자명) 
$ db2 update db cfg for (데이터베이스) using NUM_IOSERVERS (값) $ db2 deactivate db (데이터베이스명) $ db2 activate db (데이터베이스명)

②ps 명령어를 이용하여 I/O 프리페치를 담당하는 프로세스인 db2pfchr를 확인합니다.


$ db2pd -d sample -edu | grep -i db2pfchr

③테이블스페이스의 프리페치의 크기는 create tablespace문 또는 alter tablespace 문의 PREFETCHSZ 옵션으로 설정합니다. 익스텐트 크기의 배수로 설정하는 것이 좋습니다.


$ db2 “create tablespace (테이블스페이스명) managed by system using (‘(디렉토리명)’) PREFETCHSZ (크기) ” 
$ db2 alter tablespace (테이블스페이스명) PREFETCHSZ (크기)

④프리페치의 유형은 다음과 같이 구분됩니다.

db2


테이블스페이스 생성

①create tablespace 문의 형식은 다음과 같습니다.

db2

②create tablespace 문에서 사용되는 주요 옵션은 다음과 같습니다.

db2


테이블스페이스 특성 변경

①alter tablespace 문의 형식은 다음과 같습니다.

db2

②alter tablespace 문에서 사용되는 주요 옵션은 다음과 같습니다.

db2

③alter tablespace 문에서 PREFETCHSIZE 옵션으로 테이블스페이스의 프리페치 크기를 변경합니다.


$ db2 “alter tablespace (테이블스페이스명) PREFETCHSIZE (크기)”

④alter tablespace 문에서 PREFETCHSIZE 옵션으로 AUTOMATIC을 지정하면 테이블 스페이스의 컨테이너 수가 변경될 때마다 DB2 엔진이 프리페치 크기를 자동으로 갱신합니다. 갱신된 프리페치 크기는 데이터베이스가 재활성화될 때 적용됩니다. PREFETCHSIZE 절에 숫 자 값을 지정하면 자동 갱신 모드는 해제됩니다.


$ db2 “alter tablespace (테이블스페이스명) PREFETCHSIZE AUTOMATIC"

⑤alter tablespace 문에서 BUFFERPOOL 옵션으로 테이블스페이스가 사용하는 버퍼풀명 을 변경합니다.


$ db2 “alter tablespace (테이블스페이스명) BUFFERPOOL (버퍼풀명)”
테이블스페이스 컨테이너 변경

①alter tablespace 문을 이용하여 DMS 유형의 테이블스페이스의 특성을 변경합니다.

db2

②alter tablespace 문의 ADD, DROP, EXTEND, REDUCE, RESIZE 옵션으로 DMS 테이블스페이스의 컨테이너를 변경합니다.


$ db2 “alter tablespace (테이블스페이스명) ADD (컨테이너 정의)" 
$ db2 “alter tablespace (테이블스페이스명) EXTEND (컨테이너 정의)" $ db2 “alter tablespace (테이블스페이스명) REDUCE (컨테이너 정의)"
$ db2 “alter tablespace (테이블스페이스명) RESIZE (컨테이너 정의)" $ db2 “alter tablespace (테이블스페이스명) DROP (컨테이너 정의)“
$ db2 “alter tablespace (테이블스페이스명) AUTORESIZE YES”

db2


High Water Mark 조정

①Automatic storage table space 인 경우 HWM 사이즈 및 tablespace 사이즈를 줄일 수 있습니다.


ALTER TABLESPACE (tsname) REDUCE --+-----------------------------+--- 
'-- (size) --+-------------+--+--'
| +----- K -----+ |
| +----- M -----+ |
| +----- G -----+ |
| '-- PERCENT --' |
'--- MAX ---------------------'
'--- STOP --------------------'

②DMS table space 인 경우 다음 명령어로 HWM을 줄일 수 있습니다.


ALTER TABLESPACE (tsname) LOWER HIGH WATER MARK --+----------+--- '-- STOP --'

db2

③테이블 오브젝트 삭제 후 HWM 조정 도식을 설명합니다.

db2


테이블스페이스 제거

①drop tablespace 문의 형식은 다음과 같습니다.

db2

②drop tablespace 문으로 특정한 테이블스페이스를 제거합니다.


$ db2 “drop tablespace (테이블스페이스명)”

③한 테이블이 여러 테이블스페이스에 분리되어 정의된 경우에는 관련된 테이블스페이스를 한 개 의 drop tablespace 문으로 함께 제거합니다. 일부 테이블스페이스만 제거하려고 하면 SQL0282N 오류가 반환됩니다.


$ db2look ?d (데이터베이스명) -e ?t (테이블명) 
$ db2 “drop tablespace (테이블스페이스명 1), (테이블스페이스명 2)”

④SMS 테이블스페이스를 제거하면, 디렉토리에 생성된 데이터 파일은 제거됩니다. 디렉토리와 제 어 파일은 제거되지 않으므로 rm 명령어로 제거합니다.


$ ls ?lia (디렉토리명)
$ rm -Rf (디렉토리명)

⑤DMS 테이블스페이스를 제거하면, 컨테이너로 사용된 파일은 제거됩니다.


$ ls -lia (파일명)

⑥DMS 테이블스페이스를 제거하면 컨테이너로 사용된 논리적 파티션은 다른 테이블스페이스의 컨테이너로 사용될 수 있습니다. 사용자가 생성한 논리적 파티션은 자동으로 제거되지 않으므로 필요시에는 rmlv 명령어로 제거합니다.


$ ls -lia (디바이스파일명)
$ rmlv ?f '(논리적파티션명)'

⑦테이블스페이스를 제거하면 컨테이너에 저장된 태그 정보도 자동으로 제거되므로, 해당 컨테이 너는 다른 테이블스페이스에서 사용될 수 있습니다. 비정상적인 방법으로 테이블스페이스를 제 거하면 엔진이 생성한 태그 정보가 남게 되므로 db2untag 명령어를 이용하여 강제로 태그 정 보를 제거하여 다른 테이블스페이스가 사용할 수 있도록 합니다.


$ db2untag ?f (파일명)
$ db2untag ?f (디바이스파일명)
SYSCAT.TABLESPACES 뷰

①describe table 명령어로 SYSCAT.TABLESPACES 뷰의 컬럼에 대한 정보를 확인합니다.


$ login (인스턴스 사용자명) 
$ db2 conect to (데이터베이스명)
$ db2 describe table SYSCAT.TABLESPACES

②SYSCAT.TABLESPACES 뷰의 주요 컬럼에 대한 설명은 다음과 같습니다.

db2

③select 문을 이용하여 특정한 테이블스페이스에 대한 정보를 확인합니다.


$ db2 "select * from syscat.tablespaces"

db2