2020. 1. 13. 15:16ㆍ카테고리 없음
* undo 데이터 관리
undo data 관리
- 자동 undo 관리
- 수동 undo 관리(사실상 사용하지 않음)
- Undo와 rollback은 같은 의미이다.
- 행단위로 독점 락을 건다.
- 원래 데이터 값을 undo segment에 저장.
- 그림상의 segment는 4개의 extent를 가지고 있다.
* undo segmet의 목적
트랜잭션 롤백
- 트랜잭션이 테이블에서 행을 수정할때 수정 하기 전의 데이터를 undo segment에 저장했다가 rollback 될 경우 undo segment 저장된 값을 가져와서 복원한다.
트랜잭션 recovery(복구)
- 데이터베이스가 다시 열릴때 데이터 파일에 commit되지 않은 데이터를 삭제하고 undo segment에 저장된 값을 가져와서 원래 값으로 복구한다.
Read consistency(읽기 일관성)
- select 명령을 출력할때까지 누군가가 데이터를 수정하고 commit 명령까지 완료한 경우에도 select 명령이 입력 됐을 경우의 데이터를 불러와야 하는데 이때 undo segment에 저장된 값을 불러온다.
* Undo 세그먼트 유형
system
-system 테이블 스페이스의 객체에 사용
비system
- 기타 테이블 스페이스의 객체에 사용
- 자동 모드 : undo 테이블 스페이스가 필요하다. undo 테이블 스페이스를 생성하면 undo 세그먼트가 자동으로 생성.
[실습]undo 관련 설정 및 상태 확인
SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS
FROM DBA_ROLLBACK_SEGS;
- Undo segment의 상태를 조회한다. (open 상태일때)
SELECT N.USN, N.NAME, S.STATUS
FROM V$ROLLNAME N, V$ROLLSTAT S
WHERE N.USN=S.USN;
- 현재 사용 중이거나 사용 가능한 undo segment를 조회.(mount 상태일때. 그러나 mount 상태일때 undo를 사용할 일이 없기때문에 의미는 없다.)
SHOW PARAMETER undo;
// undo 관련 parameter 설정 확인. undo용 tablespace가 하나밖에 없는 경우 parameter에 지정되지 않아도 되지만 여러개 존재하는 경우 반드시 사용될 undo tablespace의 이름을 지정해야 한다.
SELECT tablespace_name, bytes, file_name FROM dba_data_files;
// 생성된 tablespace 설정과 datafile 확인
SELECT segment_name, tablespace_name, status
FROM dba_rollback_segs;
// 현재 시스템에 존재하는 undo segment 목록 확인
[실습]Undo tablespace 생성과 current undo tablespace 변경
CREATE UNDO TABLESPACE <tablespace명>
DATAFILE '' SIZE <크기>;
- Undo TABLESPACE를 생성한다.
- Locally management가 default이다.
- Segment space management를 AUTO로 지정된다.
SHOW PARAMETER undo_tablespace;
// undo 테이블스페이스 확인.
DROP TABLESPACE undotbs1;
// undotbs1은 현재 사용중이기때문에 삭제가 안된다
CREATE UNDO TABLESPACE undo
DATAFILE '/app/ora12c/oradata/disk3/undo01.dbf' SIZE 50M;
// undo 테이블 스페이스 생성
SELECT segment_name, tablespace_name, status
FROM dba_rollback_segs;
// undo segment 목록을 확인해보면 새로 생성된 undo segment는 사용되지 않고 있다.
ALTER SYSTEM SET undo_tablespace = undo;
//current undo tablespace를 undo로 변경
SHOW PARAMETER undo
// undo 관련 parameter 설정을 확인해보면 사용되고 있는 undo 테이블 스페이스가 undotbs1에서 undo로 변경된 것을 확인.
SELECT segment_name, tablespace_name, status
FROM dba_rollback_segs;
// open 상태일때 undo segment의 상태 조회
DROP TABLESPACE undotbs1;
// 기존의 undo 스페이스인 undotbs1 삭제. 만약 undo 테이블 스페이스 변경 이전부터 수행중인 트랜잭션이 활성화 상태라면 drop 명령이 먹히지 않는다.
!ls /app/ora12c/oradata/disk3/
// 데이터 파일을 확인해보면 사용하지 않는 undotbs01.dbf가 삭제되지 않고 남아있다.
!rm /app/ora12c/oradata/disk3/undotbs01.dbf
// 더 이상 사용하지 않는 파일은 반드시 삭제.