본문 바로가기

IT관련

오라클 Virtual Column-Based Partitioning (가상컬럼을 파티션키로)

Oracle Table 에 가상컬럼(Virtual Column)을 만들 수 있습니다.

기존에 있는 테이블의 컬럼들을 가지고 가상의 컬럼(Pseudo Column)을 만드는 것이죠.

가상컬럼이기 때문에 실제로 데이터가 들어있지는 않고, 매번 조회할 때마다 기존 컬럼들에 지정된 연산을 해서 데이터를 가져오는 방식이죠~

 

사용자 입장에서는 해당 컬럼에 데이터가 있는 것처럼 보이지만, 실제로는 물리적으로 공간을 차지하지 않는 형태입니다.

 

Oracle 11g DBMS 부터는 가상컬럼을 파티션키로 사용할 수 있습니다.

 


create table SALES (
  sales_no       number,
  sale_date      date,
  customer_name  varchar2(30),
  customer_init  as (substr(customer_name,1,1)),
  price          number
)
partition by range (customer_init)
(
  partition SALES_P1 values less than ('G'),
  partition SALES_P2 values less than ('P'),
  partition SALES_P3 values less than (maxvalue)
);

 

위 SQL 구문에서 customer_init 컬럼은 customer_name 컬럼에서 substr() 함수 연산을 통해 만들어지는 가상컬럼입니다.

이 가상컬럼을 Range 파티션의 파티션 키로 사용했습니다.

 

 

가상컬럼이 있는 테이블에 데이터를 넣는 경우는 아래와 같이 컬럼명을 일일이 열거해줘야 합니다.

가상컬럼인 customer_init 에는 데이터를 넣으면 안되기 때문이죠~

 


insert into SALES (sales_no, sale_date, customer_name, price) values (1, to_date('20190302','yyyymmdd'), 'Sophia', 65000);
insert into SALES (sales_no, sale_date, customer_name, price) values (2, to_date('20190402','yyyymmdd'), 'Emily',  23000);
insert into SALES (sales_no, sale_date, customer_name, price) values (3, to_date('20190405','yyyymmdd'), 'Olivia', 34000);
insert into SALES (sales_no, sale_date, customer_name, price) values (4, to_date('20190512','yyyymmdd'), 'Amelia', 12000);
insert into SALES (sales_no, sale_date, customer_name, price) values (5, to_date('20190513','yyyymmdd'), 'Chloe',  55000);

 

위와 같이 입력하면, customer_init 의 데이터는 customer_name 에 의해 자동으로 정해지고,

이 customer_init 값에 의해 적절한 파티션을 찾아서 데이터가 입력되게 됩니다.

 

'Sophia' 의 경우는 customer_init 값이 'S' 이기 때문에 SALES_P3 파티션으로 들어가게 되고,

'Emily' 의 경우는 customer_init 값이 'E' 이기 때문에 SALES_P1 파티션으로 들어가게 됩니다.

 

 

 

▶ 오라클 파티션 종합 페이지 바로가기