강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
파티셔닝 이용하기
조회 : 2,824  


파티셔닝 이용하기


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



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> /


FILENAME                                 TABLESPACE                     Datafile Size Bytes Used Percent Used Bytes Free
 
---------------------------------------- ------------------------------ ------------- ---------- ---
 
C:ORANTORADATAKANGINDX01.DBF         INDX                                60817408          0            0   60817408
 
C:ORANTORADATAKANGRBS01.DBF          RBS                                545259520   29360128         5.38  515899392
 
C:ORANTORADATAKANGSYSTEM01.DBF       SYSTEM                              88997888   88793088        99.77     204800
 
C:ORANTORADATAKANGTEMP01.DBF         TEMP                                75497472          0            0   75497472
 
C:ORANTORADATAKANGTOOLS01.DBF        TOOLS                               12582912          0            0   12582912
 
E:ORACLE_TABLESPACETS1.DBF             TS1                                  5242880     122880         2.34    5120000
 
E:ORACLE_TABLESPACETS2.DBF             TS2                                  5242880     122880         2.34    5120000
 
E:ORACLE_TABLESPACETS3.DBF             TS3                                  5242880     122880         2.34    5120000
 
C:ORANTORADATAKANGUSERS01.DBF        USERS                              113246208    1441792         1.27  111804416
 

 
9 개의 행이 선택되었습니다.
 
Copyleft(C) 명규의 오라클OCP All rights free

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=738


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
강명규
홈페이지 : http://dbakorea.pe.kr/

e-mail : myunggyu골뺑이orgio.net