실무개발자를위한 실무교육 전문교육센터학원
www.oraclejava.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.
TableSpace 관리
1. 다중 TableSpace관리
- Data Dictionary Data와 사용자 Data의 분리
- 서로다른 응용프로그램끼리 TableSpace의 분리
- I/O 경합을 줄이기 위해 다른 TableSpace의 DataFile을 다른 디스크에 저장
- 사용자 Data와 RollBack Segment의 분리
2. TableSpace의 생성
- RBS라는 TableSpace를 생성해보자
Create tablespace RBS
Datafile ‘/usr/oradata/rbs01.dbf’ size 50M
Default storage (
Initial 100k
Next 100k
Minextents 2
Maxextents 50
Pctincrease 0)
Offline;
이름이 RBS이며 초기영역은 50M이고 실제파일은 rbs01.dbf라는 이름으로
생기게 된다.
파일의 경로를 지정하지 않으면 서버의 현재 디렉토리에 생성된다.
또한 Object가 처음 만들어 질 때 최초 확장영역은 2개가되며,
50개의 확장영역이 Max라는 의미임
Default Storage의 경우 만약 create table명령으로 Table을
만들때 storage구를 주지 않았다고 했을때는 의에서 정한 해당
TableSpace의 default storage구에 있는 설정 값을 이용하게
된다. 웬만하면 주는게 낫죠.
3. 임시 TableSpace의 생성
- 다중 정렬작업의 동시 수행을 개선하거나 오버헤드등을 감소하고자
할 때 임시 TableSpace를 생성한다.
- 임시 TableSpace에는 영구적인 개체를 저장할수 없다.
- 임시 TableSpace의 저장영역 할당 및 해제에 관한 사항은
v$sort_segment를 통해 확인할수 있다
- 생성:create tablespace tmp temporary;
- 기존 TableSpace를 임시 TableSpace로 변경 :
alter tablespace myTS temporary;
4. TableSpace의 Storage Parameter 변경
- alter tablespace RBS
default storage (
initial 10k
next 50k
minextents 3
maxextents 121
pctincrease 50);
5. 빈영역의 통합
- TableSpace의 Segment에 관한 영역은 확장영역으로 관리하며 확장영역은
특정수의 연속적인 Data Block으로 이루어져 있다., TableSpace의
Segment에 새 확장영역을 할당하는 경우 필요한 확장영역 크기에 가장
근사한 빈 확장영역을 사용한다, 따라서 커다란 빈확장영역이 단편화
되거나 작은 연속적인 빈 확장영역이 하나의 큰확장영역으로 병합된다.
그러나 빈 영역의 연속적인 할당 및 할당해제는 TableSpace를 단편화하며
큰 확장영역을 훨씬 어렵게 할당도록 만든다. 기본적으로 SMON(시스템모니터)
프로세스는 백그라운드에서 TableSpace의 빈확장영역을 계속병합한다.
원한다면 SMON의 병합기능을 사용하지 않을수도 있다.
영역의 단편화가 심하면 빈 영역을 단일영역 Transaction으로 병합할수 있다.
아래의 명령을 사용하여 모든 사용가능한 빈 확장영역을 더큰 연속적
확장영역으로 병합할수 있다.
Alter tablespace users coalesce;
또한 이명령을 사용하면 SMON의 확장영역 할당 병합을 보조함으로서 영역할당
성능을 향상 시킬수 있다. 이명령을 실행하더라도 동일한 TableSpace에
엑세스하는 다른 사용자는 영향을 받지않는다.
- TableSpace에서 병합가능한 확장영역에 대한 통계를 나타내려면
DBA_FREE_SPACE_COALESCED View를 질의해보면 된다.
View의 각 항목은 아래와 같다.
----------------------------------------------------------------------------------
Column Name Null? Type
------------------------------ -------- ----------------------------------------------------
TABLESPACE_NAME NOT NULL VARCHAR2(30)
TOTAL_EXTENTS NUMBER
EXTENTS_COALESCED NUMBER
PERCENT_EXTENTS_COALESCED NUMBER
TOTAL_BYTES NUMBER
BYTES_COALESCED NUMBER
TOTAL_BLOCKS NUMBER
BLOCKS_COALESCED NUMBER
PERCENT_BLOCKS_COALESCED NUMBER
6. TableSpace의 가용성 변경
a. TableSpace를 온라인으로 설정
- System TableSpace는 항상 온라인이어야함(Data Dictuinary는 항상
사용해야 한다.)
- 예]Alter tablespace users online;
b. TableSpace를 오프라인으로 설정
- dataBase의 일부분만 사용할 경우
- 응용프로그램을 갱신하거나 유지하는동안 응용프로그램과 관련된 Table그룹을 일시적으로
사용못하게 할경우
a. 정상 Offline(normal)
- DataFile에 오류가 없다면 정상적으로 Offline이 가능하다.
- 쓰기 오류가 발생하면 TableSpace의 모든 DataFile에 대해 Offline으로 설정할수 없다.
- 정상 Offline 우선순위에서 Oracle7은 TableSapce가 Offline으로 설정될때 모든 DataFile에 대해 체크포인트를 수행한다.
예)alter tablespace users offline normal
b. 임시 Offline(temporary)
- TableSpace내의 하나이상의 DataFile에 오류가 있어도 TableSapce를 일시적으로 Offline 시킬수 있다. 임시 Offline 우선순위에서 Oracle7은 아직 Offline이 아닌 DataFile을 Offline으로 설정하여 체크포인터를 수행한다.
임시 Option을 사용하더라도 Offline File이 없는경우 TableSpace를 온라인으로 설정시 매체복구를 수행안해도 된다. 그러나 쓰기오류가 인해 하나이상의 DataFile이 Offline이고 일시적으로 TableSpace를 Offline 시킬하려면 TableSpace를 Online으로 설정하기전에 복구해야 한다.
예) alter tablespace users temporary
c. 즉시 Offline(immediate)
- Oracle이 DataFile에 대해 체크포인트를 수행하지 않아도 TableSpace를 즉시 Offline
시킬수 있다, 즉시 Offline 우선순위에서 TableSpace를 Online으로 설정하기전 매체복구를
수행해야 한다. DataBase가 NoArchive Mode로 운용중이라면 즉시 Offline은 불가능하다.
예)alter tablespace users offline immediate
7. TableSpace를 읽기전용으로 만들기
- TableSpace를 일기 전용으로 만들면 쓰기작업을 방지할수 있다. 읽기전용으로
만든후에
백업본을 받아 두어야 한다. Alter tablespace로 읽기전용으로 만든다.
Alter tablespace users read only;
TableSpace를 읽기전용으로 만든후 관련파일을 읽기전용 매체에 복사할수 있다.
그런후 새위치를 지정하려면 SQL명령어 alter database rename~을 사용하여
제어파일의 DataFile이름을 변경해야 한다.
- 각 Table에 수행되는 select count(*)~같은 간단한 질의는 TableSpace내의
Data Block에 가장 효율적으로 계속 엑세스 할수 있도록 한다. 이렇게 되면
Oracle이 가장 최근에 블록을 수정한 트랜잭션 상태를 검사하지 않아도 된다.
a.필요조건
- TableSpace는 Online 이어야 한다.
- TableSapce내에 활성 Transaction이 없어야 한다.
- TableSpace에 사용중인 RollBack Segment가 없어야 한다.
(System TableSpace는 읽기전용으로 만들수 없다.)
- TableSpace는 현재 Online BackUp을 수행하고 있지 않아야 한다.
- COMPATIBLE 초기화 매개변수는 7.1.0 이상의 값으로 설정되어야 한다.
8. TableSpace를 Write가능하도록 만들기
Alter tablespace users read write;
- TableSpace내의 모든 DataFile은 Online 이어야하며
9. TableSpace의 삭제
- TableSpace를 삭제하면 Data의 복구는 불가능하다.
- 전후로 DB를 백업하는게 좋다.
- TableSapce를 삭제하면 DataBase 제어파일에 있는 파일 Pointer 만 삭제된다.
그러므로 DataFile은 계속 존재한다. OS명령으로 파일을 지우면 된다.
- TableSpace내에 사용중인 Segment가 있다면 삭제불가.
예를들면 TableSpace내의 Table이 현재 사용중이거나 TableSpace에 사용중인
롤백시그먼트가 있다면 삭제할수 없다. 즉 Drop시키기전에 Offline 시켜야한다.
- TableSpace를 삭제후 TableSpace의 입력항목은 Data Dictionary에 남아 있으나
TableSpace는 Invalid 상태가 된다.(dba_tablespaces View확인)
- drop tablespace users including contents;
- TableSpace가 비어 있다면 including contents를 사용안해도 된다.
- TableSpace내의 Object가 다른 TableSpace의 Table에 있는 외래키로 언급되는
기본키나 고유키를 가지는 Table을 포함하거나, 자식 Table의 foreign key
제약조건을 삭제하고져 할때는 cascade constraints 옵션을 이용하면 된다.