강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

파티셔닝 이용하기

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

파티셔닝 이용하기


하나의 테이블이 여러개의 테이블스페이스를 사용하여 경합(?하하)을 줄이기 위해 사용할 겁니다.
자세한건 매뉴얼을 찾아보세요..
다음은 제가 실습해 본 겁니다.



sys로 로그인
3개의 테이블스페이스를 생성합니다. 
후에 하나의 테이블이 여기서 생성된 3개의 테이블스페이스를 사용합니다.

SQL> create tablespace ts1 
2 datafile 'e:oracle_tablespace s1.dbf'
3 size 5m;


테이블 영역이 생성되었습니다.

SQL> create tablespace ts2
2 datafile 'e:oracle_tablespace s2.dbf'
3 size 5m;


테이블 영역이 생성되었습니다.

SQL> create tablespace ts3
2 datafile 'e:oracle_tablespace s3.dbf'
3 size 5m;


테이블 영역이 생성되었습니다.


kang으로 로그인
실습하기 편하라고 일부로 SQL프롬프트를 제거했습니다. 정말일까?
CREATE TABLE stock_xactions(
stock_symbol CHAR(5),
stock_series CHAR(1),
num_shares NUMBER(10),
price NUMBER(5,2),
trade_date DATE
)
STORAGE (INITIAL 100K NEXT 50K) LOGGING
PARTITION BY RANGE (trade_date)
(
PARTITION sx1992 VALUES LESS THAN (TO_DATE('01-JAN-1993', 'DD-MON-YYYY' )) TABLESPACE ts1 NOLOGGING,
PARTITION sx1993 VALUES LESS THAN (TO_DATE('01-JAN-1994', 'DD-MON-YYYY' )) TABLESPACE ts2,
PARTITION sx1994 VALUES LESS THAN (TO_DATE('01-JAN-1995', 'DD-MON-YYYY' )) TABLESPACE ts3
)
/

insert into stock_xactions(stock_symbol, trade_date) values ('00001', TO_DATE('02-JAN-1992', 'DD-MON-YYYY' ) );
insert into stock_xactions(stock_symbol, trade_date) values ('00001', TO_DATE('03-JAN-1993', 'DD-MON-YYYY' ) );
insert into stock_xactions(stock_symbol, trade_date) values ('00001', TO_DATE('04-JAN-1994', 'DD-MON-YYYY' ) );



음.. 제대로 들어갔군..
SQL> select * from stock_xactions;

STOCK S NUM_SHARES PRICE TRADE_DA
----- - ---------- ---------- --------
00001 92/01/02
00001 93/01/03
00001 94/01/04


sys로 로그인하여 ts1테이블스페이스를 사용못하게 해보자..
SQL> connect sys/xxxxxx
연결되었습니다.
SQL> alter tablespace ts1 offline;

테이블 영역이 변경되었습니다.

SQL> connect kang/kang
연결되었습니다.

당연히 select를 못한다. ts1을 offline상태로 변경했기 때문에
SQL> select * from stock_xactions;
select * from stock_xactions
*
1행에 오류:
ORA-00376: 현재 파일 7를 읽을 수 없습니다
ORA-01110: 7 데이터 파일: 'E:ORACLE_TABLESPACETS1.DBF'

해당 테이블스페이스에 없는 row를 검색하면 select된다. 하하 좋군..
SQL> select * from stock_xactions where trade_date = TO_DATE('03-JAN-1993', 'DD-MON-YYYY' );

STOCK S NUM_SHARES PRICE TRADE_DA
----- - ---------- ---------- --------
00001 93/01/03

다시 ts1 테이블스페이스를 사용가능하게 online으로 변경하자.
SQL> connect sys/xxxxxx
연결되었습니다.
SQL> alter tablespace ts1 online;

테이블 영역이 변경되었습니다.

SQL> connect kang/kang
연결되었습니다.

이제 모든 데이터가 검색된다..
SQL> select * from stock_xactions;

STOCK S NUM_SHARES PRICE TRADE_DA
----- - ---------- ---------- --------
00001 92/01/02
00001 93/01/03
00001 94/01/04

질의가 좀 복잡죠?
쩝.. 실제 데이터가 해당 테이블스페이스를 사용하는가 보고자 하는 겁니다.
금방 사용되는지 알 수 있겠죠?
SQL> l
1 select FILE_NAME as Filename,
2 d.TABLESPACE_NAME as Tablespace,
3 d.BYTES as "Datafile Size",
4 nvl(sum(e.BYTES),0) as "Bytes Used",
5 round(nvl(sum(e.BYTES),0) / (d.BYTES), 4) * 100 as "Percent Used",
6 d.BYTES - nvl(sum(e.BYTES),0) as "Bytes Free"
7 from DBA_EXTENTS e, DBA_DATA_FILES d
8 where d.FILE_ID = e.FILE_ID (+)
9 group by FILE_NAME, d.TABLESPACE_NAME, d.FILE_ID, d.BYTES, STATUS
10* order by d.TABLESPACE_NAME, d.FILE_ID
SQL> /

			

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,798 개
  • 현재 접속자 :  153 명