HOME   로그인   회원가입
    
회원가입
비밀번호 찾기 자동로긴
이전게시판
   free_board
   건강게시판
   오라클DB
   Linux
   HTML/javascript
   질문과 답
호서기
   이미지게시판  
   건강게시판  
   음악자료  
   성준이 게시판  
[일반] [펌]롤백 세그먼트 , 템포러리 세그먼트 다루기
  호석 님께서 쓴 글입니다 - 211.♡.74.31 읽음:4592  
11. 롤백 세그먼트 다루기 (Managing Rollback Segments)

 

- Rollback Segment : before image 저장

 

Rollback Segment의 목적

 

- Transaction Rollback

- Transaction Recovery

- Read Consistency : 일괄성을 위해서...

 

Read-Consistency

 

* Select 문장이 실행되는 도중에 데이터가 변경되더라도 변경전 data를 불러오게 일괄성을 준다.

 

* SET TRANSACION READ ONLY 명령으로...

Read only 모드이면서 일괄성있는 데이터를 보여주게된다.

 

--> 이 모드 일 때, select 시간이 너무 길어서 그 시간중에 transaction이 너무 많이 일어나면

ORA_01555 SNAPSHOT TOO OLD 에러가 발생할 수 있다.

이 에러가 발생하면 rollback segment의 갯수를 늘려주면 된다.

 

Creating Rollback Segments

 

CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment

[TABLESPACE tablespace ]

[STORAGE ([INITIAL integer [K|M]]

[NEXT integer [K|M]]

[MINEXTENTS integer]

[MAXEXTENTS ]

[OPTIMAL {integer [K|M]|NULL}] )

]

* PCTINCREASE 는 사용 못함.

* MINEXTENTS >= 2

 

예) CREATE ROLLBACK SEGMENT rbs01

TABLESPACE rbs

STORAGE (INITIAL 100K NEXT 100K OPTIMAL 4M

MINEXTENTS 20 MAXEXTENTS 100) ;

 

Rollback Segments ONLINE 방법

 

- Rollback Segment는 create하면 offline 상태이다.

 

1) ALTER ROLLBACK SEGMENT rbs01 ONLINE ;

--> shutdown 하면 다시 OFFLINE으로 된다.

 

2) initSID.ora file에서 ROLLBACK_SEGMENTS=(rbs01)을 추가하면 된다.

--> startup할 때마다 항상 적용된다.

 

Rollback Segment Storage 변경

 

ALTER ROLLBACK SEGMENT rollback_segment

[STORAGE ( [NEXT integer [K|M]]

[MINEXTENTS integer]

[MAXEXTENTS ]

[OPTIMAL ] )]

 

예) ALTER ROLLBACK SEGMENT rbs01

STORAGE (MAXEXTENTS 200) ;

 

Rollback Segment Deallocate 하기

 

예) ALTER ROLLBACK SEGMENT rbs01

SHRINK TO 4M ;

 

Rollback Segment OFFLINE 방법

 

- transaction이 끝날 때까지 대기하고 있다가 모든 transaction이 끝나면 OFFLINE이 된다.

- 새로운 transaction을 허용하지 않는다.

 

예) ALTER ROLLBACK SEGMENT rbs01 OFFLINE ;

 

Rollback Segment DROP 하기

 

- DROP하기 전에는 반드시 OFFLINE을 해야 한다.

 

예) DROP ROLLBACK SEGMENT rbs01 ;

 

DBA_ROLLBACK_SEGS view : Rollback Segment 정보를 갖고 있는 view

 

column :

SEGMENT_ID

SEGMENT_NAME

TABLESPACE_NAME

OWNER (PUBLIC or SYS)

STATUS (ONLINE or OFFLINE)

 

SVRMGR> SELECT segment_name, tablespace_name, owner, status

2 FROM dba_rollback_segs ;

 

Rollback Segment Statistics

 

V$ROLLNAME : usn, name

V$ROLLSTAT : usn, extents, rssize, xacts, optsize, hwmsize, aveactive, status, curext, curblk

 

- XACTS : 현재 rollback segment를 사용하고 있는 transaction 수

 

SVRMGR> SELECT n.name, s.extents, s.rssize, s.optsize,

2 s.hwmsize, s.xacts, s.status

3 FROM v$rollname n, v$rollstat s

4 WHERE n.usn = s.usn ;

 

Rollback Segment: Current Activity

 

V$SESSION : saddr, username, sid, serial#

V$TRANSACTION : ses_addr, xidusn, ubafil, ubablk, ubasqn, ubarec, status, used_ublk, used_urec

 

SVRMGR> SELECT s.username, t.xidusn, t.ubafil, t.ubablk, t.used_ublk

2 FROM v$session s, v$transaction t

3 WHERE s.saddr = t.ses_addr ;

 

Blocking Session 찾는 방법

 

SVRMGR> SELECT s.sid, s.serial#, t.start_time, t.xidusn, s.username

2 FROM v$session s, v$transaction t, v$rollstat r

3 WHERE s.saddr = t.ses_addr

4 AND t.xidusn = r.usn

5 AND ((r.curext = t.start_uext-1) OR

6 ((r.curext = r.extents-1) AND t.start_uext=0)) ;

--> 첫 번째 extent가 blocking 되었을 땐 5LINE에서의 조건이 성립되지 않기 때문에...

6LINE 조건을 추가한다.

 

연습

 

현재 database에 몇개의 rollback segment가 존재하는지 조회하십시오.

 

$ sqlplus system/manager

SQL> select * from dba_rollback_segs ;

 

rbs tablespace에 rbs03, rbs04 란 이름으로 rollback segment를 생성하십시오. (storage는 initial 10k next 10k minextents 2 optimal 20k 를 이용하십시오)

 

SQL> create rollback segment rbs03

2 tablespace rbs

3 storage (initial 10k next 10k minextents 2 optimal 20k) ;

SQL> create rollback segment rbs04

2 tablespace rbs

3 storage (initial 10k next 10k minextents 2 optimal 20k) ;

 

rollback segment들의 status를 조회하고, offline 상태인 rollback segment들을 online 상태로 만들어 보십시오.

 

SQL> select segment_name, tablespace_name, status

2 from dba_rollback_segs ;

SQL> alter rollback segment rbs03 online ;

SQL> alter rollback segment rbs03 online ;

 

scott user 로 접속한 후 transaction 을 수행하고, 어느 rollback segment가 그 transaction 에 의해서 사용되고 있는지 확인하십시오.

 

$ sqlplus scott/tiger

SQL> create table test(name char(30)

2 storage (initial 100k)

3 tablespace data01 ;

SQL> insert into test values('aaaaaaaa') ;

 

다른 터미날 윈도우를 열어서,

 

$sqlplus system/manager

SQL> select name, extents

2 from v$rollname n, v$rollstat s

3 where n.usn = s.usn

4 and s.xacts > 0 ;

 

scott user로 접속한 후, transaction을 수행하여 rollback segment가 shrink 되는지 확인하라.

 

$ sqlplus scott/tiger

SCOTT.SQL> set transaction use rollback segment rbs03 ;

SCOTT.SQL> begin

2 for i in 1..500 loop

3 insert into test values('aaaaaaaaaa') ;

4 end loop ;

5 end ;

6 /

 

다른 터미날 윈도우를 열어서, rollback segment의 사용을 monitoring 한다.

 

$ sqlplus system/manager

SYSTEM.SQL> select name, extents

2 from v$rollname n, v$rollstat s

3 where n.usn = s.usn

4 and s.xacts > 0 ;

 

SCOTT.SQL> rollback ;

 

SYSTEM.SQL> select name, extents, xacts, shrinks

2 from v$rollname n, v$rollstat s

3 where n.usn = s.usn ;

==> rbs03의 xacts와 extents 확인!!!

SYSTEM.SQL> alter rollback segment rbs03 shrink ;

SYSTEM.SQL> select name, extents, xacts, shrinks

2 from v$rollname n, v$rollstat s

3 where n.usn = s.usn ;

==> rbs03의 extents가 shrink 되었는지 확인!!!

 

rbs03 와 rbs04 rollback segment 에 active transaction 이 없는지 확인한 후, DROP 하십시오.

 

$ sqlplus system/manager

SQL> select name, extents, xacts, shrinks

2 from v$rollname n, v$rollstat s

3 where n.usn = s.usn ;

==> xacts 가 0 인지 확인!!!

SQL> alter rollback segment rbs03 offline ;

SQL> alter rollback segment rbs04 offline ;

SQL> drop rollback segment rbs03 ;

SQL> drop rollback segment rbs04 ;

[/pre]

 

11. 템포러리 세그먼트 다루기 (Managing Temporary Segments)

 

[b]Temporary Segment Usage[/b]

   ; Temporary segment는 아래의 문장을 수행할 때 사용된다.
     SELECT ... ORDER BY
     CREATE INDEX
     SELECT DISTINCT
     SELECT ... GROUP BY
     SELECT ... UNION
    
   * size는 initial parameter SORT_AREA_SIZE 에서 설정한다.

[b]Temporary Segment 의 type (TEMPORARY, PERMANENT)[/b]

   1) Temporary segments in a PERMANENT tablespace
      - transaction이 필요할 때 생성된다.
      - 문장이 완전하게 실행되었을 때 SMON이 작업한다.
     
      ALTER TABLESPACE tablespace_name PERMANENT
     
   2) Temporary segments in a TEMPORARY tablespace
      - sort segment 라고도 한다.
      - instance가 startup 한 후에 생성된다.
      - instance가 shutdown 될 때까지 살아있다.
      - Sort Extent Pool의 정보를 기초로 한다.
     
      ALTER TABLESPACE tablespace_name TEMPORARY

[b]V$SORT_SEGMENT view : sort extent pool의 상태 정보[/b]


   column :
     tablespace_name
     extent_size
     total_extents
     total_blocks
     used_extents
     used_blocks
     free_extents
     free_blocks
     max_sort_size


     max_sort_blocks
    
   SVRMGR> SELECT tablespace_name, extent_size,
        2  total_extents, max_sort_blocks
        3  FROM v$sort_segment ;

[b]V$SORT_USAGE view : 현재 active sort 정보[/b]

   column :
     session_addr
     tablespace
     contents
     extents
     blocks
    
   SVRMGR> SELECT s.username, u.tablespace,
        2  u.contents, u.extents, u.blocks
        3  FROM v$session s, v$sort_usage u
        4  WHERE s.saddr = u.session_addr ;

[b] 연습[/b]

TEMP 테이블스페이스를 TEMPORARY 로 변경하고, 변경이 되었는지를 검증하십시오.

SQL> alter tablespace temp temporary ;
SQL> select tablespace_name, contents
  2  from dba_tablespaces ;
SQL> select username, temporary_tablespace
  2  from dba_users ;
     ==> system 의 temporary tablespace가 temp로 되어있는지 확인하고, 만약 아니면 바꾼다.
         ( alter user system temporary tablespace temp ;)

인스턴스를 종료하지 않고 SORT_AREA_SIZE 를 2Kb로 변경하십시오.

SQL> alter system set sort_area_size = 2048 deferred ;

   * deferred : 이 명령을 실행하고 나서 다음에 접속할 때 부터 사용하라!

새롭게 사용자 SYSTEM 으로써 데이터베이스에 두 개의 session 을 오픈하십시오. 하나의 세션에서 srt_dd.sql 을 실행하고 나머지 세션에서 정렬 작업을 모니터 하십시오.

========== srt_dd.sql ===========
-- srt_dd.sql
-- Use for Lab 11 Q3 O8DBA class
SELECT object_name
FROM dba_objects
UNION
SELECT segment_name
FROM dba_segments
/
=================================

$ sqlplus system/manager
SQL> @ srt_dd

다른 터미날 윈도우를 열고,

$ sqlplus system/manager
SQL> select tablespace_name, total_extents, total_blocks
  2  from v$sort_segment ;

SORT_AREA_SIZE 를 재설정 하십시오.

SQL> alter system set sort_area_size = 65536 deferred ;


목록

분류 선택
69 일반 오라클에서 pfile과 spfile의 특징 호석 07-03-09 4553
70 일반 RHEL4 리눅스에서 오라클설치 ★★★★★ (1) 호석 07-03-09 5004
71 일반 ORA-27123 에러 메타링크 참조 호석 07-03-19 4736
72 일반 ORU-10027 에러 -> dbms_output.enable('10000000000') 사용 호석 07-03-19 4418
73 일반 오라클 커널 shared max 값 적용하기 호석 07-03-26 4272
74 일반 decode 활용쿼리 비교연산자 대용 sign() 호석 07-03-29 4919
일반 [펌]롤백 세그먼트 , 템포러리 세그먼트 다루기 호석 07-04-04 4593
76 일반 undotbs01가 너무 커졌을 경우 초기화 오라클 9i 호석 07-04-04 5366
77 일반 오라클에서 임의로 범위의 날짜를 가져오는 쿼리문 호석 07-04-05 4546
78 일반 [sql] select case when then 를 이용한 쿼리문 호석 07-04-26 6566
79 일반 oracle10g + php5.1.2 error [OCIEnvNlsCreate() failed] 호석 07-04-27 7901
80 일반 mysql DB 및 사용자 생성 (1) 호석 07-05-18 4697
81 일반 오라클 8i DB 재시작 호석 07-06-12 4741
82 일반 오라클 8i ORA-00604 ,ORA-04031 에러 처리 호석 07-06-12 7059
83 일반 개발자가 범하기 쉬운 튜닝 이슈 10가지 유형 분석 호석 07-06-22 5836
처음이전  [1] [2] [3] [4] [5] [6] 7 [8] [9] [10]  다음맨끝

 
Copyright © zenos.pe.kr. All rights reserved.