1. Coalescing Free Space
- tablespace에 연속해서 있는 빈 공간을 합쳐 준다.
- 떨어져 있는 공간은 붙일 수 없다.
- SMON이 작동한다.
- PERCENT_EXTENTS가 100%가 될때까지 계속 실행 해준다.
- PERCENT_EXTENTS가 100%가 되면 coalescing 할 수 없다.
SVRMGR> ALTER TABLESPACE data01 COALESCE ;
* coalescing 상황을 보여주는 view (DBA_FREE_SPACE_COALESCED)
SVRMGR> SELECT tablespace_name, total_extents,
2 percent_extents_coalesced
3 FROM dba_free_space_coalesced
4 WHERE percent_extents_coalesced <> 100 ;
2. Database Block Contents
HEADER |
TS |
| |
|
TS : Transaction Slot
3. Block Space를 사용하기 위한 Parameter들
- INITRANS : transaction slot을 초기값으로 몇개를 만드나? default 1
- MAXTRANS : transaction slot의 max값. default 255
- PCTFREE : 전체 database block 중에 설정한 값% 이외의 부분만 쓸 수 있게 하겠다. default 10
- PCTUSED : 사용된 공간이 설정한 값% 만큼 되었을때만 공간을 쓰겠다.
설정한 값% 이상이면 못 쓴다. default 40
4. Storage Structure에 관한 정보를 갖고있는 Data Dictionary Views
DBA_TABLESPACES : tablespace 정보
DBA_SEGMENTS : segment 정보
DBA_DATA_FILES : data file 정보
DBA_EXTENTS : used extent 정보
DBA_FREE_SPACE : free extent 정보
5. DBA_SEGMENTS view : querying segment 정보
- General information column : OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME
- size에관한 column : EXTENTS, BLOCKS
- storage setting에 대한 정보 column : INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, MAX_EXTENTS,
PCT_INCREASE
SVRMGR> SELECT segment_name, tablespace_name, extents, blocks
2 FROM dba_segments
3 WHERE owner = 'SCOTT' ;
6. DBA_EXTENTS view : used extent 정보
column : owner, segment_name, extent_id, tablespace_name, relative_fno, file_id, block_id,
blocks
SVRMGR> SELECT extent_id, file_id, block_id, blocks
2 FROM dba_extents
3 WHERE owner='SCOTT'
4 AND segment_name='EMP' ;
7. DBA_FREE_SPACE view : free extent 정보
column : tablespace_name, relative_fno, file_id, block_id, blocks
SVRMGR> SELECT tablespace_name, count(*),
2 max(blocks), sum(blocks)
3 FROM dba_free_space
4 GROUP BY tablespace_name ;
[ Lab ]
1. 테이블과 인덱스를 생성하기 위해서 system 사용자로 스크립트 cr_segs.sql을 실행하십시오.
--- cr_seqs.sql ---
-- Script cr_segs.sql to create segments |
SQL> connect system/manager
SQL> @ cr_segs
2. 데이터베이스에 있는 세그먼트의 type을 조회해 보십시오.
SQL> select distinct segment_type
2 from dba_segments ;
3. 앞으로 최대 5개 이상의 extent를 가질 수 없는 세그먼트를 검사하기 위한 질의를 작성하십시오. (bootstrap 세그먼트는 무시하십시오.)
SQL> select segment_name, segment_type, max_extents, extents
2 from dba_segments
3 where extents + 5 > max_extents
4 and segment_type <> 'CACHE' ;
4. 어느 파일에 EMP 테이블을 위한 공간이 할당되었습니까?
SQL> select distinct f.file_name, e.owner
2 from dba_extents e, dba_data_files f
3 where e.segment_name = 'EMP'
4 and e.file_id = f.file_id ;
5.
a) EMP 테이블에 헤더의 File Number와 Block Number를 구하기 위한 질의를 작성하십시오.
SQL> select relative_fno, header_block, owner, extents
2 from dba_segments
3 where segment_name = 'EMP'
4 and owner = 'SYSTEM' ;
b) [문제a]와는 반대로, file number 와 block number를 input으로 받아서, 그 블록을 사용하는 세그먼트의 이름과 유형을 리턴하는 질의를 작성하십시오.(이 때, [문제a]에서 조회한 번호를 입력하여 segment이름이 EMP로 나오는지 확인하십시오)
SQL> select segment_name, segment_type, blocks, owner
2 from dba_extents
3 where file_id = &file_number
4 and &block_number between block_id and (block_id + blocks - 1) ;
6. 테이블스페이스의 이용가능한 free space를 질의하십시오. 이 때, fragment의 개수, total free space, 가장 큰 free extent를 디스플레이 해야 합니다.
SQL> select tablespace_name, count(*) as fragments,
2 sum(bytes) as total, max(bytes) as largest
3 from dba_free_space
4 group by tablespace_name ;
7. cr_flags.sql 스크립트를 실행하고, 데이터베이스에 어떤 인접한 free extent가 있는지를 검사하십시오. 만약 있다면 coalesce 한 후에, 다시 검증하십시오.
--- cr_flags.sql ---
connect sys/oracle as sysdba; |
SQL> @ cr_frags
SQL> select tablespace_name, total_blocks, blocks_coalesced,
2 percent_blocks_coalesced
3 from dba_free_space_coalesced
4 where percent_blocks_coalesced <> 100 ;
SQL> alter tablespace data02 coalesce ;
SQL> select tablespace_name, total_blocks, blocks_coalesced,
2 percent_blocks_coalesced
3 from dba_free_space_coalesced
4 where percent_blocks_coalesced <> 100 ;
8. 추가적인 extent를 할당하려고 시도할 때 공간이 부족하여 에러를 발생시킬수 있는 세그먼트를 나열하십시오.
SQL> select s.segment_name, s.segment_type,
2 s.tablespace_name, s.next_extent
3 from dba_segments s
4 where exists
5 (select 1 from dba_free_space f
6 where s.tablespace_name = f.tablespace_name
7 having max(f.bytes) <= s.next_extent) ;
'DATABASE > ORACLE' 카테고리의 다른 글
[Db Admin] 17.Managing Users (0) | 2012.07.09 |
---|---|
[Db Admin] 16.Loading and Reorganizing Data (0) | 2012.07.09 |
[Db Admin] 7.Maintaining Redo Log files (0) | 2012.07.09 |
[Db Admin] 6.Maintaining the Control File (0) | 2012.07.09 |
[Db Admin] 5.Data Dictionary Views and Standard Packages (0) | 2012.07.09 |