2014년 10월 21일 화요일

Extents, Segments[오라클개발자교육/오라클/ORACLE강좌/오라클교육잘하는곳/오라클교육추천/ORACLE실무교육/ORACLE/ORACLE교육/ORACLE학원/오라클실무교육]

논리적인 공간의 확보를 위해 연속적인 Data Block의 집합으로서 Segments에 할당 된 것이다. 주로 데이블이나 인덱스와 같은 Segments들이 만들어 지거나 크기가 늘어 나거나 또는 변경되는 경우에 사용되어 지며 테이블이나 인덱스등이 drop, truncate 되는 경우에는 해제된다. 데이터베이스 내의 모든 Segment는 생성시 최소 한 개 이상의 Extents를 가지는데(RollBack Segment의 경우 2개) 이를 initial extents라고 한다. 결국 테이블을 생성시키면 initial extents만큼의 빈공간이 생기며 이부분이 꽉 차게 되면 확장이 일어나게 되는 것이다.(새로운 extents가 할당) 

 Segments란 하나 또는 여러 개의 extents로 구성된 테이블 스페이스 내의 논리적인 저장 공간이다. 테이블의 데이터를 포함하는 Data Segment, Index데이터를 포함하는 Index Segment, 정렬, 조인 등 복잡한 질의를 사용할 때 임시 작업공간을 위한 Temporary Segment, Transaction의 취소를 위한 RollBack Segment 등이 있다. 

 테이블스페이스를 생성하기 전에 테이블 스페이스의 두가지의 중요한 Storage Feature를 결정 해야 한다. 첫째는 extents를 어떻게 다룰 것 인가 이다.  Table이나 Index를 Create하기 전에 TableSpace를 만들어야 하며 이 테이블스페이스가 하나 또는 그 이상의 데이터 파일로 구성되어 지며, extents 저장공간 활용을 위한 두 가지의 형태가 제공 되어 진다. 하나는 Locally Managed Tablespace이며 또하나는 Dictionary Managed Tablespace이다. 전자는 extents를 다루는데 있어 테이블 스페이스 자체적으로 유지 관리하는것이며 후자는 Data Dictionary 정보를 이용하는 것이다.  둘째는 Segment Space Management이다. 즉 Segment를 어떻게 다룰 것인가의 문제이다. 물론 이부분도 다음의 두가지로 나누어 볼 수 있다. Manual 또는 Automatic Segment Space 관리 방법이다. 이상의 방법은 다음의 Tablesapce 및 Data File에서 자세히 그 방법을 익히기 바란다. 

 아래는 간단히 ROLLBACK Segment의 정보를 확인 하는 예문이다. 
SQL> connect / as sysdba 
연결되었습니다. 

SQL> SELECT segment_name, tablespace_name, bytes, blocks, extents 
  2      FROM sys.dba_segments 
  3      WHERE segment_type = 'ROLLBACK'; 

SEGMENT_NAME    TABLESPACE_NAME  BYTES    BLOCKS    EXTENTS 
------------------------------ ---------- ---------- ---------- 
SYSTEM            SYSTEM              393216      48            6 

 아래는 SCOTT 계정의 EMP 테이블 segment 정보를 확인하는 예문이다. 
SQL> SELECT segment_name, tablespace_name, bytes, blocks, extents 
  2  FROM dba_segments 
  3  WHERE segment_name = 'EMP'; 

SEGMENT_NAME  TABLESPACE_NAME      BYTES    BLOCKS    EXTENTS 
--------------------------------------------------------------- 
EMP              SYSTEM                  65536          8          1 

 아래의 예문들은 extent와 그 크기를 확인 하는 질의들 이다. 이책의 범위를 넘어서는 부분 이겠지만 minextents의 값에 따라 extent의 수가 변화하는 것을 천천히 따라 하면서 확인 해 보라.(DB_BLOCK_SIZE는 8k) 
SQL> connect / as sysdba 
연결되었습니다. 

SQL> create table scott.mytable ( 
  2  name varchar2(10) not null primary key, 
  3  addr varchar2(50) 
  4  ) 
  5  tablespace users 
  6  storage ( 
  7    initial 8k 
  8    next 8k 
  9    minextents 10 
 10  ); 

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

SQL> select initial_extent/1024||'k', extents, next_extent,max_extents 
  2  from dba_segments 
  3  where segment_name = 'MYTABLE'; 

INITIAL_EXTENT/1024||'K'                    EXTENTS NEXT_EXTENT MAX_EXTENTS 
----------------------------------------- ---------- ----------- ----------- 
88k                                                2              2147483645 

아래를 보면 MYTABLE은 두개의 segment로 구성되고 각 시그먼트는 사이즈가 64K이며 8개의 블록으로 이루어져 있습니다. 

SQL> SELECT segment_name, 
  2        bytes/1024||'k' as "SIZE(K)", 
  3        blocks 
  4  FROM dba_extents 
  5  WHERE segment_name = 'MYTABLE'; 

SEGMENT_NAME            SIZE(K)              BLOCKS 
------------------------------------------------------ 
MYTABLE                        64k                        8 
MYTABLE                        64k                        8 

SQL> drop table scott.mytable; 

테이블이 삭제되었습니다. 

SQL> create table scott.mytable ( 
  2  name varchar2(10) not null primary key, 
  3  addr varchar2(50) 
  4  ) 
  5  tablespace users 
  6  storage ( 
  7    initial 8k 
  8    next 8k 
  9    minextents 19 
 10  ); 

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

SQL> select initial_extent/1024||'k', extents, next_extent,max_extents 
  2  from dba_segments 
  3  where segment_name = 'MYTABLE'; 

INITIAL_EXTENT/1024||'K'                    EXTENTS NEXT_EXTENT MAX_EXTENTS 
----------------------------------------- ---------- ----------- ----------- 
160k                                              3              2147483645 

SQL> SELECT segment_name, 
  2        bytes/1024||'k' as "SIZE(K)", 
  3        blocks 
  4  FROM dba_extents 
  5  WHERE segment_name = 'MYTABLE'; 

SEGMENT_NAME                SIZE(K)                  BLOCKS 
-------------------------------------------------------------- 
MYTABLE                              64k                        8 
MYTABLE                              64k                        8 
MYTABLE                              64k                        8 


 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272236
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111609
53 [평일주간100%환급]Spring,JAVA,JSP,안드로이드,C#닷넷,SQL,튜닝… 오라클자바…03-151394
52 [주말]C#,ASP.NET마스터 오라클자바…01-311514
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-311721
50 [기업100%환급]개발자를위한스프링,마이바티스,하이버네이트(스… 오라클자바…01-311205
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191504
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111335
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031862
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272236
45 [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… 오라클자바…12-191611
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141584
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111609
42 [주말주간]자바&웹,jQUERY,스프링프레임워크 오라클자바…12-091284
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011506
40 [기업100%환급]자바기초&안드로이드개발자과정(Android전액환급… 오라클자바…12-011675
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011154

댓글 없음:

댓글 쓰기