데이터베이스 분류
List Partitioning
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 7,574 조회
- 0 추천
- 목록
본문
List Partitioning
range파티셔닝은 지정한 범위에 있는 값만 해당 파티션에 할당할 수 있고, hash파티셔닝은 어느 파티션에 row를 할당할지 사용자가 컨트롤할 수 없다 list파티셔닝은 row를 지정된 파티션에 명시적으로 할당하는 것이 가능하고, 관련이 없는 데이터집합에 대해서 자연스럽게 그룹화와 조직화가 가능하다. list파티셔닝은 multi컬럼 파티셔닝을 지원하지 않는다. 즉, 파티셔닝키는 단지 하나의 컬럼으로만 구성될 수 있다. (range, hash에서는 가능하다.) * 필자의 생각 아직도 파티셔닝키에 어떠한 조작을 못하는게 아쉽다. 예를 들어, substring한 컬럼값 선두 몇자리만 비교하여 해당 파티션에 할당할 수 없다. list파티셔닝은 다른 파티션에 비해 제약이 많은것 같다. CREATE TABLE sales_by_region ( deptno number, deptname varchar2(20), quarterly_sales number(10, 2), state varchar2(2) ) PARTITION BY LIST (state) ( PARTITION q1_northwest VALUES ('OR', 'WA'), PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'), PARTITION q1_northeast VALUES ('NY', 'VM', 'NJ'), PARTITION q1_southeast VALUES ('FL', 'GA'), PARTITION q1_northcentral VALUES ('SD', 'WI'), PARTITION q1_southcentral VALUES ('OK', 'TX') ); (10, 'accounting', 100, 'WA') q1_northwest파티션에 매핑 (20, 'R&D', 150, 'OR') q1_northwest파티션에 매핑 (30, 'sales', 100, 'FL') q1_southeast파티션에 매핑 (40, 'HR', 10, 'TX') q1_southwest파티션에 매핑 (50, 'systems engineering', 10, 'CA') 어느 파티션에도 매핑되지 않음 CREATE TABLE sales_by_region ( item# INTEGER, qty INTEGER, store_name VARCHAR(30), state_code VARCHAR(2), sale_date DATE ) STORAGE(INITIAL 10K NEXT 20K) TABLESPACE tbs5 PARTITION BY LIST (state_code) ( PARTITION region_east VALUES ('MA','NY','CT','NH','ME','MD','VA','PA','NJ')
STORAGE (INITIAL 20K NEXT 40K PCTINCREASE 50) TABLESPACE tbs8, PARTITION region_west VALUES ('CA','AZ','NM','OR','WA','UT','NV','CO') PCTFREE 25 NOLOGGING, PARTITION region_south VALUES ('TX','KY','TN','LA','MS','AR','AL','GA'), PARTITION region_central VALUES ('OH','ND','SD','MO','IL','MI', null, 'IA') ); 실제 테이블생성해보자. 작성일: 2001-11-16 Oracle 9i EE(9.0.1.0.1) Windows 2000 Advanced Server Petium III 1Gz, 512MB SQL> connect system/xxxxx 연결되었습니다. -- 4개의 테이블스페이스를 생성 SQL> create tablespace ts_kyungsang 2 datafile 'd: s_kyungsang01.dbf' size 10m; 테이블 영역이 생성되었습니다. SQL> create tablespace ts_junna 2 datafile 'd: s_junna01.dbf' size 10m; 테이블 영역이 생성되었습니다. SQL> create tablespace ts_choongchung 2 datafile 'e: s_choongchung01.dbf' size 10m; 테이블 영역이 생성되었습니다. SQL> create tablespace ts_kyungki 2 datafile 'e: s_kyungki01.dbf' size 10m; 테이블 영역이 생성되었습니다. SQL> connect kang/xxxxxx 연결되었습니다. SQL> CREATE TABLE member 2 ( 3 id varchar(15), 4 name varchar(20), 5 birth date, 6 cellular varchar(13), 7 mail varchar(50), 8 city varchar(10) 9 ) storage( initial 5m next 1m pctincrease 0 ) tablespace users 10 partition by list(city) 11 ( 12 partition kyung_sang_do values ('ULSAN', 'BUSAN', 'DAEGU') tablespace ts_kyungsang, 13 partition kyung_ki_do values ('SEOUL', 'INCHUN', 'KOYANG', 'SUNGNAM') tablespace ts_kyungki, 14 partition choong_chung_do values ('DAEJUN') tablespace ts_choongchung, 15 partition jun_na_do values ('GWANGJU') tablespace ts_junna 16 ); 테이블이 생성되었습니다. SQL> insert into member values 2 ('maddog', '강명규', to_date('19740509', 'YYYYMMDD'), '011830xxxx', 'kang@dbakorea.pe.kr', 'ULSAN'); 1 개의 행이 만들어졌습니다. SQL> insert into member values 2 ('maddog1', '아무개1', to_date('19740510', 'YYYYMMDD'), '011830xxx1', 'kang1@dbakorea.pe.kr', 'SEOUL'); 1 개의 행이 만들어졌습니다. SQL> insert into member values 2 ('maddog2', '아무개2', to_date('19740511', 'YYYYMMDD'), '011830xxx2', 'kang2@dbakorea.pe.kr', 'DAEJUN'); 1 개의 행이 만들어졌습니다. SQL> insert into member values 2 ('maddog3', '아무개3', to_date('19740512', 'YYYYMMDD'), '011830xxx3', 'kang3@dbakorea.pe.kr', 'GWANGJU'); 1 개의 행이 만들어졌습니다. -- 파티션키에 매칭되는 데이터가 아니면 에러 발생함 SQL> insert into member values 2 ('maddog4', '아무개4', to_date('19740513', 'YYYYMMDD'), '011830xxx4', 'kang4@dbakorea.pe.kr', 'NEWYORK'); insert into member values * 1행에 오류: ORA-14400: 삽입된 분할 영역 키와 매핑되는 분할 영역이 없음 SQL> connect system/xxxxxx 연결되었습니다. SQL> col id format a10 SQL> col name format a10 SQL> col mail format a20 SQL> select * from kang.member; ID NAME BIRTH CELLULAR MAIL CITY ---------- ---------- -------- ------------- -------------------- ---------- maddog 강명규 74/05/09 011830xxxx kang@dbakorea.pe.kr ULSAN maddog1 아무개1 74/05/10 011830xxx1 kang1@dbakorea.pe.kr SEOUL maddog2 아무개2 74/05/11 011830xxx2 kang2@dbakorea.pe.kr DAEJUN maddog3 아무개3 74/05/12 011830xxx3 kang3@dbakorea.pe.kr GWANGJU SQL> alter tablespace ts_kyungki offline; 테이블 영역이 변경되었습니다. SQL> select * from kang.member; ERROR: ORA-00376: 현재 파일 12를 읽을 수 없습니다 ORA-01110: 12 데이터 파일: 'E:TS_KYUNGKI01.DBF' -- 해당파티션에 존재하지 않는 데이터들은 select 가능하다. SQL> select * from kang.member where city in('ULSAN','DAEJUN','GWANGJU'); ID NAME BIRTH CELLULAR MAIL CITY ---------- ---------- -------- ------------- -------------------- ---------- maddog 강명규 74/05/09 011830xxxx kang@dbakorea.pe.kr ULSAN maddog2 아무개2 74/05/11 011830xxx2 kang2@dbakorea.pe.kr DAEJUN maddog3 아무개3 74/05/12 011830xxx3 kang3@dbakorea.pe.kr GWANGJU SQL> select * from kang.member where city ='ULSAN'; ID NAME BIRTH CELLULAR MAIL CITY ---------- ---------- -------- ------------- -------------------- ---------- maddog 강명규 74/05/09 011830xxxx kang@dbakorea.pe.kr ULSAN SQL> alter tablespace ts_kyungki online; 테이블 영역이 변경되었습니다. -- 연습을 위해 생성된 것들을 삭제 SQL> connect kang/xxxxxx 연결되었습니다. SQL> drop table member; 테이블이 삭제되었습니다. SQL> connect system/xxxxxx 연결되었습니다. SQL> drop tablespace ts_kyungki; 테이블 영역이 삭제되었습니다. SQL> drop tablespace ts_kyungsang; 테이블 영역이 삭제되었습니다. SQL> drop tablespace ts_junna; 테이블 영역이 삭제되었습니다. SQL> drop tablespace ts_choongchung; 테이블 영역이 삭제되었습니다. 오라클이 테이블스페이스에 할당된 데이터 파일들을 지워주지 않으므로 OS상에서 해당 데이터파일들을 삭제한다.
"무단배포금지: 클라우드포털(www.linux.co.kr)의 모든 강좌는 저작권에 의해 보호되는 콘텐츠입니다. 무단으로 복제하여 배포하는 행위는 금지되어 있습니다."
관련자료
-
이전
-
다음
댓글 0
등록된 댓글이 없습니다.