파티셔닝 이용하기
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 7,127 조회
- 0 추천
- 목록
본문
파티셔닝 이용하기
하나의 테이블이 여러개의 테이블스페이스를 사용하여 경합(?하하)을 줄이기 위해 사용할 겁니다.
자세한건 매뉴얼을 찾아보세요..
다음은 제가 실습해 본 겁니다.
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> /
관련자료
-
이전
-
다음