검색결과 리스트
undosegment에 해당되는 글 1건
- 2015.07.30 7.Tablespace와 Datafile 관리하기 - Undo Tablespace / 1
글
Tablespace와 Datafile 관리하기.
1.Undo Tablespace
- Undo Data : 사용자가 DML을 수행할 경우 발생하는 원본데이터.
- Undo Segment: Undo Data만 저장하는 Segment
- Undo Tablespace: Undo Segment를 저장하는 Tablespace
Undo Data만 저장 가능하며, Oracle Server process가 직접관리한다.
1-1) Undo Tablespace의 특징.
- Oracle server process는 이 테이블 스페이스에 Undo Segment를 생성하고 각 사용자별로 Undo Segment를 할당하여 undo data를 관리하며 사용자는 관여할 수 없다.
- Undo Tablespace는 Instance당 여러 개가 존재할 수 있으나, 사용되는것은 한번에 1개뿐.
- 관리방법으로는 자동 모드와 수동 모드가 있으며, 9i버젼부터 Automatic Undo Management(AUM)을 권장한다.
사용하기 위해서는 초기화 파라미터 파일에 Undo_management = auto로 설정하고 수동 mode 관리를 위해서는 manual로 설정하면된다.
- 자동모드가 기본이며, manual값은 주로 장애가 발생될 경우 복구용도로 사용된다. 변경 후 적용을 위해서는 Instance를 재기동 해야한다.
SYS@PROD>show parameter undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1 |
1-2) Undo Tablespace의 사용목적.
- Transaction Rollback : 사용자가 Rollback 명령어를 사용하면, 이곳에 저장된 Undo Data를 사용하여 Rollback 수행.
- Read Consistency : CR 작업을 통해 트랜잭션이 끝나지 않은 데이터는 변경 전 데이터를 보여준다.
* CR 작업 : 1. 데이터를 DB Buffer Cache로 복사
2. Redo Log Buffer에 변경내용기록
3. Undo Segment에 기록
4. DB Buffer cache의 원본 변경
*읽기 일관성 실습
- 터미널 1에서 EMPNO 7369의 이름을 GOOD BOY로 변경
DB BUFFER CACHE에 이름이 변경되고, LOCK이 설정되어 터미널1에서 COMMIT 이나 ROLLBACK 수행 전까지는 터미널2에서 변경된 데이터를 볼 수 없음.
- 터미널 2에서 변경된 데이터에 대한 조회를 수행
사용자의 SERVER PROCESS는 UNDO에 있는 데이터를 DB BUFFER CACHE로 복사해서 사용자에게 제공
터미널 1 | 터미널2 | ||
SCOTT@PROD> select EMPNO, ENAME from EMP;
EMPNO ENAME ---------- ---------- 7369 HELLO 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER |
| ||
SCOTT@PROD> UPDATE EMP SET ENAME ='GOODBOY' WHERE EMPNO=7369;
|
| ||
SCOTT@PROD> select EMPNO, ENAME from EMP;
EMPNO ENAME ---------- ---------- 7369 GOODBOY 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER | SCOTT@PROD> select EMPNO, ENAME from EMP;
EMPNO ENAME ---------- ---------- 7369 HELLO 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER | ||
SCOTT@PROD> COMMIT; |
| ||
SCOTT@PROD> select EMPNO, ENAME from EMP;
EMPNO ENAME ---------- ---------- 7369 GOODBOY 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER | SCOTT@PROD> select EMPNO, ENAME from EMP;
EMPNO ENAME ---------- ---------- 7369 GOODBOY 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER |
- Transaction Recovery (Instance Recovery라고도함)
운영중인 DB서버가 비정상적으로 종료가 되었을 때 Roll Forward와 Roll back 작업을 수행해서 Dirty database를 Clean Database로 만들어주는 과정에서 Undo Data 사용
1-3) Undo Segment 할당되는 원리
- Undo Tablespace의 특징 중 하나는 Undo Data File의 크기가 증가만 되고 줄어들지는 않는다.
- Undo Tablespace 안에 4개의 Undo Segment 가 할당되어 있다.
- E라는 사용자가 신규접속하여 DML을 수행할 경우 E 사용자의 Server Process는 가장먼저 Undo Segment를 할당받게된다.
기존에 만들어져 있던 Segment 중 트랜잭션이 완료된것이 있는지를 우선적으로 확인 후, 그시점에 A가 Commit 을 수행하여 트랜잭션이 끝났다면, A가 사용했던 Undo Segement를 덮어쓰게된다.
- F 라는 사용자가 접속하여, DML을 수행하려하는데 Commit 이나 Rollback을 수행하지 않아서 트랜잭션이 완료된게 없는 경우 새로운 Undo Segment를 하나 더 생성해서 기록한다.
- Undo Segment가 Data file의 저장공간이 허용하는 범위까지 늘어나다가 Data File에 더 공간이 없게되면 하나의 Segment에 두개 세션이상의 Undo Data를 함께 기록하다가 그 조차도 공간이 없으면 해당 트랜잭션은 에러가나게됨.
* Undo Data가 늘어나도 늘어난 데이터파일의 크기를 줄일 수는 없다. Commit을 수행해도 Undo Segment안에 Undo Data는 지워지지 않고 남아있기 때문.
* Commit 수행 시 다른 서버 프로세스가 덮어 쓸 수 있게 해주는 것일 뿐 Undo Segment 안의 자료를 지우는것은 아니다.
* Undo Tablespace 크기가 비정상적으로 클 경우에는 관리자가 다른 작은 Undo Tablespace를 신규로 만들고, Undo Tablespace를 신규 Undo Tablespace로 변경시킨 후 기존 Undo Tablespace를 삭제해 주어야한다.
1-4) Undo tablespace 변경하기.
1. Undo 상태확인. SYS@PROD>show parameter undo;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1 => 현재 인스턴스의 Undo tablespace 는 UNDOTBS1로 지정되어 있다. 2. 신규 Undo Tablespace 생성 SYS@PROD>create undo tablespace undo01 datafile '/u01/app/oracle/oradata/PROD/undo01.dbf' size 10M autoextend on; 3. 현재 Tablespace 목록 확인 TABLESPACE MB FILE_NAME AUT ONLINE_ ---------- ---------- -------------------------------------------------- --- ------- SYSTEM 400 /home/oracle/systemdest/system01.dbf NO SYSTEM SYSAUX 200 /u01/app/oracle/oradata/PROD/sysaux01.dbf NO ONLINE UNDOTBS1 200 /u01/app/oracle/oradata/PROD/undotbs01.dbf NO ONLINE USERS 50 /u01/app/oracle/oradata/PROD/users01.dbf NO ONLINE EXAMPLE 100 /u01/app/oracle/oradata/PROD/example01.dbf NO ONLINE UNDO01 10 /u01/app/oracle/oradata/PROD/undo01.dbf YES ONLINE
6 rows selected. => UNDO01 Tablespace가 생성됨. 4. 새로 생성한 Undo Tablespace로 변경
SYS@PROD>alter system set undo_tablespace=undo01; => Pfile인 경우 이 작업 이후 파라미터파일의 내용도 변경해야 DB 재시작 후 장애가 없음. (작업환경은 SPFILE 사용) ** 참고(value에 경로 없을경우 SPFILE 사용 경로 있을 경우 Pfile사용) SYS@PROD>show parameter pfile
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string 5. 변경된 Undo Tablespace 확인. SYS@PROD>show parameter undo
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDO01 |
1-5) Undo 사용세션 확인.
1) 확인스크립트
select s.sid, s.serial#, s.username, r.name "ROLLBACK SEG" from v$session s, v$transaction t, v$rollname r where s.taddr=t.addr and t.xidusn=r.usn; |
2) 실습
터미널1 (SYS 계정) | 터미널 2 (SCOTT 계정) |
SYS@PROD>@undo_ses
no rows selected |
|
| SCOTT@PROD>update emp set job='DBA' where empno=7369;
1 row updated. |
SYS@PROD>@undo_status SID SERIAL# USERNAME USED_UREC USED_UBLK ---------- ---------- ------------------------------ ---------- ---------- 34 93 SCOTT 1 1
|
|
| SCOTT@PROD>update emp set JOB='ADMIN' where empno=7499 ; |
SYS@PROD>@undo_status
SID SERIAL# USERNAME USED_UREC USED_UBLK ---------- ---------- ------------------------------ ---------- ---------- 34 93 SCOTT 2 1 |
|
| SCOTT@PROD> commit; |
SYS@PROD>@undo_ses
no rows selected |
|
* 추가 테스트 1. 다른 세션에서 SCOTT 계정으로 변경작업을 시도할 경우
SID SERIAL# USERNAME USED_UREC USED_UBLK ---------- ---------- ------------------------------ ---------- ---------- 45 60 SCOTT 1 1 34 93 SCOTT 3 1 32 103 SCOTT 1 1
|
* 추가 테스트 2. SID 34 세션에서 Commit 이나 Rollback을 수행하지 않고 종료할 경우
SID SERIAL# USERNAME USED_UREC USED_UBLK ---------- ---------- ------------------------------ ---------- ---------- 45 60 SCOTT 1 1 32 103 SCOTT 1 1
|
1-6) Undo 관련 주요 파라미터.
- UNDO_RETENTION(초단위)
COMMIT 수행 후에도 해당 UNDO SEGMENT 내의 데이터를 다른 서버 프로세스가 덮어 쓰지 못하도록 막아주는 시간.
그러나, Undo segment 여분이 있을 경우에만 적용되며, 만약 모든Undo Segment가 사용중일 경우에는 적용되지않는다.
* ORA-01555. Snapshot too old
사용자 A: 1시간정도 수행되는 특정 데이터의 집계작업을 수행중
사용자 B: 사용자A가 집계중인 데이터를 update 한 후 commit할 경우
사용자 A: 사용자 B가 변경전의 데이터를 Undo Segment에서 찾아서 집계하게됨.
만약 B가 Commit 한 후 사용자 C가 사용자 B의 Undo Segment를 덮어 썻다면 사용자 A는 집계쿼리를 완성할 수 없고. 이때 발생하는 에러가 Snap shot too old Error 이다.
- UNDO_RETENTION_GURANTEE
UNDO_RETENTION이란 파라미터는 UNDO SEGMENT양이 부족하면 설정된 시간이 무시되고 UNDO SEGMENT가 재사용되지만, UNDO_RETENTION_GURANTEE 파라미터를 설정하면, 설정된 시간동안 재활용을 하지않고 지켜준다.
* 이 기능을 사용할 경우 COMMIT을 수행해도 UNDO SEGMENT를 특정 시간동안 재사용 하지 않음으로써, UNDO TABLESPACE의 용량이 증가될 수 있기 때문에 기본값은 NOGURANTEE 이다.
SYS@PROD>select tablespace_name, retention from dba_tablespaces;
TABLESPACE_NAME RETENTION ------------------------------ ----------- SYSTEM NOT APPLY SYSAUX NOT APPLY UNDOTBS1 NOGUARANTEE TEMP NOT APPLY USERS NOT APPLY EXAMPLE NOT APPLY UNDO01 NOGUARANTEE |
'Oracle 참고서적 정리 > 오라클 관리실무' 카테고리의 다른 글
7. Tablespace와 Datafile 관리하기 - Data file 이동 / 테이블스페이스 삭제 (0) | 2015.07.27 |
---|---|
7. Tablespace와 Data File 관리하기. (0) | 2015.07.16 |
6. Redo Log 관리하기 - SCN과 Checkpoint (0) | 2015.07.16 |
6-3. Redo Log 관리하기 - 실습 (0) | 2015.07.16 |
6-2. Redo Log File 구성 및 관리하기. (0) | 2015.06.18 |
RECENT COMMENT