실전 데이터모델링 & 데이터베이스 설계와 구축 (12. 데이터베이스 관리...

32
실실 실실실실실실 & 실실실실실실 실실실 실실 (12. 실실실실실실 실실 )

Upload: aiko

Post on 22-Jan-2016

167 views

Category:

Documents


1 download

DESCRIPTION

실전 데이터모델링 & 데이터베이스 설계와 구축 (12. 데이터베이스 관리 ). 12. 데이터베이스 관리. ▶ 데이터베이스 기동 - 1. 데이터베이스 기동 3 단계. NOMOUNT : 인스턴스만 시작된 상태 , 주로 오라클 데이터베이스 생성할 때의 상태 MOUNT : 인스턴스에 대한 컨트롤 파일을 시스템이 읽은 상태 OPEN : 인스턴스에 대한 모든 파일을 읽고 모든 유저가 데이터베이스를 사용. ▶ 데이터베이스 기동 - 2. 1 단계 : NOMOUNT - PowerPoint PPT Presentation

TRANSCRIPT

실전 데이터모델링 & 데이터베이스 설계와 구축(12. 데이터베이스 관리 )

2/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>>

12. 데이터베이스 관리

3/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 기동 - 1

데이터베이스 기동 3 단계

NOMOUNT : 인스턴스만 시작된 상태 , 주로 오라클 데이터베이스 생성할 때의 상태

MOUNT : 인스턴스에 대한 컨트롤 파일을 시스템이 읽은 상태

OPEN : 인스턴스에 대한 모든 파일을 읽고 모든 유저가 데이터베이스를 사용

4/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 기동 - 2

1 단계 : NOMOUNT

- 데이터베이스의 파라미터 파일을 읽는다 .-Trace 파일 및 Alert 파일을 연다 . 생성 정보를 alert<SID>.log 파일에 기록한다 .-SGA(System Global Area) 를 할당한다 .- 백그라운드 프로세스 생성- 데이터베이스는 생성된 메모리 구조화 프로세스들과 아직 연결되지 않은 상태이 다 .

SQL> STARTUP NOMOUNT pfile=C:\oracle\database\initora.ora

5/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 기동 - 3

2 단계 : MOUNT

- 컨트롤 파일의 정보를 읽어서 디스크에 데이터 파일이나 리두로그 파일 등이 올바로 존재하는지 도한 각 파일이 현재 사용가능한지를 점검한다 .- 데이터베이스의 백업이나 복구 시점에 많이 이용된다 . 데이터 파일이나 로그 파일에 문제가 발생하여 데이터베이스가 시작되지 않는다면 이 단계에서 복구 작업을 수행한 이후에 데이터베이스를 기동한다 .- 데이터 파일명 변경 , 리두로그 파일 추가 , 삭제 , 이름 변경 , 아카이브 모드 옵션의 변경 , 전체 데이터베이스의 복구 , 백업하여 데이터베이스 재생성 , 불완전 데이터베이스 복구 등이 가능하다 .-MOUNT 단계에서는 일반 사용자가 데이터베이스에 접속할 수 없다 .

SQL> STARTUP MOUNT

6/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 기동 - 4

3 단계 : OPEN

- 컨트롤 파일에 기술된 모든 데이터 파일 및 리두로그 파일 등을 연다 .- 일반 사용자가 데이터베이스를 이용할 수 있는 상태이다 .- 만약 종료 시점에 테이블 스페이스가 오프라인이었으면 데이터베이스를 기동하여도 해당 테이블 스페이스는 오프라인 상태이다 .- 인스턴스가 데이터베이스를 연 이후에나 하나 이상의 롤백 세그먼트를 확보한다 .

SQL> ALTER DATABASE OPEN;

7/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 기동 - 5

윈도우 환경에서 데이터베이스 기동 방법- 서비스 관리자에서…

8/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 기동 - 6

윈도우 환경에서 데이터베이스 기동 방법- 명령어로…

9/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 기동 - 7

데이터베이스 기동 시 에러 메시지

ORA-12560 에러 발생

원인 : OracleServiceORCL 이 정지되어 있는 상태에서 오라클 접속

해결 방법 : 관리 도구의 서비스에서 OracleServiceORCL 을 시작하거나 명령어로 오라클 데이터베이스를 시작한다 .

10/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 종료 - 1

데이터베이스 종료 4가지 방법

11/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 종료 - 2

NORMAL- 정상적인 데이터베이스 종료 방법이다 .- 새로운 데이터베이스 연결은 더 이상 허락하지 않는다 .- 현재 사용자들의 세션이 종료될 때까지 기다린다 .- 다음 데이터베이스 기동 시 별도의 복구 작업이 필요하지 않다 .

TRANSACTIONAL- 모든 클라이언트가 특정 인스턴스에서 새로운 트랜잭션을 시작할 수 없다 .- 클라이언트의 진행 중인 트랜잭션이 모두 종료될 때까지 기다린다 .- 다음 데이터베이스 기동 시 별도의 복구 작업이 필요하지 않다 .

데이터베이스 종료 4가지 방법

12/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 종료 - 3

데이터베이스 종료 4가지 방법

IMMEDIATE- 데이터베이스를 관리할 때 가장 많이 사용하는 정지 옵션이다 .- 현재 커밋되지 않은 SQL 문은 롤백시킨다 . 만약 데이터베이스 롤백 정보가 많다면 데이터베이스가 정지하는데 시간이 많이 소요된다 .- 데이터베이스에 접속한 사용자가 접속을 해제하기를 기다리지 않는다 .- 잘못된 어플리케이션에 의해 부득이 데이터베이스를 정지시켜야 하는 경우에 사용된다 .- 다음 데이터베이스 기동 시 별도의 복구 작업이 필요하지 않으나 , 해당 시점에 작업하였던 부분이 롤백되었으면 다시 실행하여야 한다 .

ABORT- 트랜잭션에 대해 정리되지 않으므로 일반적으로 사용하지 않는 옵션이다 .- 현재 연결된 모든 세션을 강제로 종료시킨다 .- 커밋되지 않은 트랜잭션은 롤백도 되지 않는다 .- 백업과 복구 작업이 필요한 경우에 사용한다 .- 다음 데이터베이스 기동 시 별도의 복구 작업이 필요하다 .

13/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 종료 - 4

14/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 유용한 데이터베이스 모니터링 스크립트

교재 514 – 536의 데이터베이스 모니터링 스크립트는 직접 실습해보시기 바랍니다 .

15/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> ▶ 데이터베이스 운영 시 정기적으로 점검해야 할 사항

Thomas B.Cox 의 데이터베이스 운영 시점에서 점검해야 할 사항

점검 주기 내 용

매일

인스턴스 기동 확인로그 확인백업확인아카이브 로그 파일 백업 확인리소스 존재 확인매뉴얼 탐독

매주오브젝트 확인보안관리 확인네트워크 확인Alert 로그 파일 확인

매월비이상적인 현상 확인튜닝 대상 확인I/O 경합 존재 확인단편화 (fragmentation) 현상 확인

16/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 매일 점검해야 할 항목 - 1

모든 데이터베이스 인스턴스가 기동되었는지 확인한다 .

Alert 로그를 확인한다 .-BDUMP 에 있는 로그 파일을 확인하여 최신 상태의 로그인지 확인한다 .-ORA- 에러가 존재한다면 데이터베이스 복구 로그에 기록하고 에러에 대해 추적한다 .

데이터베이스가 성공적으로 백업되었는지 확인한다 .

데이터베이스의 아카이브 로그 파일이 성공적으로 테이프에 백업되었는지 확인한다 .

데이터베이스 성능을 위해 충분한 리소스가 존재하는지 확인한다 .- 테이블 스페이스에 충분한 공간이 있는지 확인한다 .- 롤백 세그먼트를 확인한다 .- 고도하게 증가한 세그먼트가 존재하는지 확인한다 .- 스페이스 - 바운드 오브젝트를 식별한다 .-CPU, 메모리 , 디스크 리소스가 충분한지 확인한다 .

17/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 매일 점검해야 할 항목 - 2

데이터베이스를 위해 충분한 리소스가 존재하는지 확인- 테이블 스페이스에 충분한 공간이 있는지 확인

SELECT TABLESPACE_NAME, SUM(BLOCKS) AS FREE_BLK, TRUNC(SUM(BYTES)) / (1024*1024)) AS FREE_M, MAX(BYTES) / (1024) AS BIG_CHUNK_K, COUNT(*) AS NUM_CHUNKSFROM DBA_FREE_SPACEGROUP BY TABLESPACE_NAME

데이터베이스를 위해 충분한 리소스가 존재하는지 확인- 테이블 스페이스에 남아있는 공간의 비율 확인

SELECT TABLESPACE_NAME, MAX_BLOCKS, COUNT_BLOCKS, SUM_FREE_BLOCKS TO_CHAR(100*SUM_FREE_BLOCKS/SUM_ALLOC_BLOCKS, ’99.99’) || ‘%’ AS PCT_FREEFROM (SELECT TABLESPACE_NAME, SUM(BLOCKS) AS SUM_ALLOC_BLOCKS FROM DBA_DATAFILES GROUP BY TABLESPACE_NAME), (SELECT TABLESPACE_NAME AS FS_TS_NAME, MAX(BLOCKS) AS MAX_BLOCKS, COUNT(BLOCKS) AS COUNT_BLOCKS, SUM(BLOCKS) AS SUM_FREE_BLOCKS FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME)WHERE TABLESPACE_NAME = FS_TS_NAME

18/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 매일 점검해야 할 항목 - 3

롤백 세그먼트를 확인한다 .-롤백 세그먼트를 사용하기 위해서는 상태가 ONLINE- 각 데이터베이스의 롤백 세그먼트에 대한 이름과 현재 상태에 대해 기술-V$ROLLSTAT 에서 정보를 조회하여 각각의 롤백 세그먼트가 ONLINE, FULL 인지를 조회-모든 롤백 세그먼트에 대한 스토리지 파라미터와 이름에 대해 DBA_ROLLBACK_SEGS 에서 조회

COL TODAY FROMAT A20 NEW_VALUE CURR_TIMECOL TODAY NOPRINTSELECT TO_CHAR(SYSDATE, ‘YYYY/MM/DD HH24:MI:SS’) TODAY FROM DUAL;

PROMPT ============================================PROMPT == ROLLBACK SEGMENT STORAGE AND STATUS ==PROMPT => DATE : [&CURR_TIME ]PROMPT ============================================SET LINESIZE 120COL RB_SEG FORMAT A10COL STATUS FORMAT A10COL TBS_NM FORMAT A10COL INI_KB FORMAT 9,999,999COL NXT_KB FORMAT 9,999,999COL TOT_KB FORMAT 9,999,999

COL EXT FORMAT 999COL XT FORMTA 99SELECT A.SEGMENT_NAME AS RB_SEG, A.STATUS, C.XACTS AS XT, B.INITIAL_EXTENT/1024 AS INI_KB, B.NEXT_EXTENT/1024 AS NXT_KB, B.EXTENTS AS EXT, B.BYTES/1024 AS TOT_KB, A.TABLESPACE_NAME AS TBS_NMFROM DBA_ROLLBACK_SEGS A, DBA_SEGMENTS B, V$ROLLSTAT CWEHRE A.OWNER = B.OWNERAND A.SEGMENT_NAME = B.SEGMENT_NAMEAND A.SEGMENT_ID = C.USNORDER BY A. SEGMENT_NAME;

19/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 매일 점검해야 할 항목 - 4

과도하게 증가한 세그먼트가 존재하는지 확인한다 .

BEGIN DBMS_UTITITY.ANALYZE_SCHEMA(‘&OWNER’, ‘ESTIMATE’, NULL, 5);END

일자별로 스토리지 크기에 대한 정보 수집

현재 EXTENDS 되는 정보를 검색

SELECT E.OWNER, E.SEGMENT_TYPE, E.SEGMENT_NAME, COUNT(*) AS NR_EXTENTS, S.MAX_EXTENTS, TO_CHAR( SUM(E.BYTES) / (1024*1024), ‘999,999.90) AS MBFROM DBA_EXTENTS E, DBA_SEGMENTS SWHERE E.SEGMENT_NAME=S.SEGMENT_NAMEGROUP BY E.OWNER, E.SEGMENT_TYPE, E.SEGMENT_NAME, S.MAX_EXTENTSHAVING COUNT(*) > &THRESHOLDOR ((S.MAX_EXTENTS-COUNT(*)) < &&THRESHOLD)ORDER BY COUNT(*) DESC

20/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 매일 점검해야 할 항목 - 5

스페이스 -바운드 오브젝트를 식별한다 .-스페이스 -바운드 오브젝트는 테이블 스페이스에서 제공하는 가장 큰 EXTENTS 보다 크게 NEXT_EXTENTS 가 발생된다 . 만약 스페이스 -바운드 오브젝트가 존재하면 성능이 저하된다 . -ALTER TABLESPACE <tablespace> COALESCE 명령을 사용 - 데이터 파일을 테이블 스페이스에 추가하여 사용

SELECT A.TABLE_NAME, A.NEXT_EXTENT, A.TABLESPACE_NAMEFROM ALL_TABLES A, (SELECT TABLESPACE_NAME, MAX(BYTES) AS BIG_CHUNK FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) FWHERE F.TABLESPACE_NAME = A.TABLESPACE_NAMEAND A. NEXT_EXTENT > F.BIG_CHUCK

21/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 매일 점검해야 할 항목 - 6

CPU, 메모리 , 디스크 리소스가 충분한지 확인한다 .

윈도우 환경 – 작업 관리자를 통해 CPU와 메모리 현황 모니터링 , 컴퓨터 관리에서 디스크에 대한 내용을 모니터링

22/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 주 단위로 점검해야 할 항목 - 1

잘못된 규칙에 의해 오브젝트가 존재하는지 확인한다 .- 존 재 하 는 EXTENDS 를 체 크 한 다 . 주 어 진 테 이 블 스 페 이 스 내 에 서 모 든 오브젝트들은 똑같은 크기로 NEXT_EXTENT 가 생성되어야 한다 .- 모든 테이블은 유일한 PK를 가져야 한다 . PK의 누락 여부를 확인한다 .-PK가 비활성화되어 있는지 확인한다 .-PK의 인덱스는 유일해야 한다 . PK의 인덱스가 유일한지 확인한다 .- 모든 인덱스들이 인덱스 테이블 스페이스를 이용하는지 확인한다 .- 데이터 타입의 일관성과 다른 오브젝트들의 일관성을 체크한다 .

보안 관리가 잘 유지되고 있는지 확인한다 .

Net8($ORACLE_HOME/NETWORK/log) 에 관련된 로그는 에러나 이슈 사항이 없었는지 확인한다 .

- 클라이언트 쪽의 SQLNET.log 파일에 이상이 없는지 확인한다 .- 서버 쪽의 LISTENER.log 파일에 이상이 없는지 확인한다 .

모든 Alert 로그 파일을 보관한다 .

23/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 주 단위로 점검해야 할 항목 - 2

-존재하는 EXTENDS를 체크한다 .-주어진 테이블 스페이스 내에서 모든 오브젝트들은 똑같은 크기로 NEXT_EXTENT가 생성된다 .

SELECT SEGMENT_NAME, SEGMENT_TYPE, DT.TABLESPACE_NAME, DS.NEXT_EXTENTFROM DBA_TABLESPACES DT, DBA_SEGMENT DSWHERE DT.TABLESPACE_NAME = DS.TABLESPACE_NAMEAND DT.NEXT_EXTENT !=DS.NEXT_EXTENTAND DS.OWNER = ‘&OWNER’

NEXT_EXTENT를 확인

SELECT COUNT(*), SEGMENT_NAME, SEGMENT_TYPE, DT.TABLESPACE_NAMEFROM DBA_TABLESPACE DT, DBA_EXTENTS DXWHERE DT.TABLESPACE_NAME = DX.TABLESPACE_NAMEAND DT.NEXT_EXTENT != DX.BYTESAND DX.OWNER = ‘&OWNER’GROUP BY SEGMENT_NAME, SEGMENT_TYPE, DT.TABLESPACE_NAME

존재하는 EXTENTS를 체크한다 .

24/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 주 단위로 점검해야 할 항목 - 3

-모든 테이블은 유일한 PK를 가져야 한다 . PK가 누락되어 있는지 확인한다 .

SELECT TABLE_NAMEFROM ALL_TABLESWHERE OWNER = ‘&OWNER’MINUSSELECT TABLE_NAMEFROM ALL_CONSTRAINTSWHERE OWNER = ‘&&OWNER’AND CONSTRAINT_TYPE = ‘P’

-PK가 비활성화되어 있는지 확인한다 .

SELECT OWNER, CONSTRAINT_NAME, TABLE_NAME, STATUSFROM ALL_CONSTRIANTSWHERE OWNER = ‘&OWNER’ AND STATUS = ‘DISABLED’AND CONSTRIANT_TYPE = ‘P’

25/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 주 단위로 점검해야 할 항목 - 4

-모든 PK의 인덱스는 유일해야 한다 . PK의 인덱스가 유일한지 확인한다 .

SELECT INDEX_NAME, TABLE_NAME, UNIQUENESSFROM ALL_INDEXESWHERE INDEX_NAME LIKE ‘&PKNAME%’AND OWNER = ‘&OWNER’ AND UNIQUENESS = ‘NONUNIQUENESS’

-모든 인덱스들은 인덱스 스페이스를 이용해야 한다 . 테이블이 변경되고 인덱스가 변경되는과정에서 인덱스가 인덱스 테이블 스페이스에 존재하지 않고 테이블 스페이스에 존재하는 경우가 발생한다 . 이러한 인덱스를 조사하여 테이블 스페이스로 옮기는 작업을 한다 .

SELECT ‘ALTER INDEX’ || INDEX_NAME || ‘REBUILD’, ‘TABLESPACE INDEXES STORAGE (INITIAL 256K NEXT 256K);’FROM ALL_INDEXESWHERE (TABLESPACE_NAME != ‘INDEXES’OR NEXT_EXTENT != (256 * 1024))AND OWNER = ‘&OWNER’

26/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 주 단위로 점검해야 할 항목 - 5

-데이터 타입의 일관성을 체크한다 .

SELECT TABLE_NAME, COULUM_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLEFROM ALL_TAB_COLUMNS -- 테스트 환경 WHERE OWNER = ‘&OWNER’MINUSSELECT TABLE_NAME, COULUM_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLEFROM ALL_TAB_COLUMNS@MY_DB_LINK -- 운영 환경WHERE OWNER = ‘&OWNER’ORDER BY TABLE_NAME, COLUMN_NAME

-오브젝트의 일관성을 체크한다 .

SELECT OBJECT_NAME, OBJECT_TYPEFROM USER_OBJECTS -- 테스트 환경MINUSSELECT OBJECT_NAME, OBJECT_TYPEFROM USER_OBJECTS@MY_DB_LINK -- 운영 환경

27/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 월 단위로 점검해야 할 항목

데이터베이스의 비정상적인 현상이 발생하는지 확인한다 .- 이전에 수집했던 세그먼트 정보와 비교하여 비정상적인 성장률을 보인 세그먼트를 조사하여 수정한다 .

튜닝해야 할 부분이 있는지 확인한다 .- 캐시 적중률 (Cache Hit Ratio), 래치 경합 (Latch contention), 그리고 메모리 관리와 관련된 다른 부분들에 대해 튜닝해야 할 항목이 있는지 조사한다 .

I/O 경합이 존재하는지 확인한다 . - 데이터베이스 파일에서 발생하는 I/O 를 조사하여 이전 자료와 비교하여 증가한 부분이 있는지 조사한다 .

단편화 현상 (Fragmentation) 이 존재하는지 확인한다 .- 로우 체이닝 등 단편화 현상이 발생하였는지 조사한다 .

28/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 데이터베이스 문제 발생 및 해결 방법 - 1

롤백 세그먼트 EXTENT 에러-예상했던 롤백 세그먼트의 크기보다 더 많은 작업량이 발생하거나 다른 트랜잭션이 롤백 세그먼트를 할당 받지 못했을 경우 에러가 발생한다 .

SELECT SEGMENT_NAME, EXTENTS, BYTES/(1024*1024) FROM DBA_SEGMENTSWHERE SEGMENT_TYPE = ‘ROLLBACK’;

SELECT R.NAME “ROLLBACK SEGMENT NAME”, L.SIG “ORACLE PID”, P.SID “SYSTEM PID”, NVL(P.USERNAME, ‘NO TRANSACTION’), P.TERMINALFROM V$LOCK L, V$SESSION P, V$ROLLNAME RWHERE L.SID = P.SID(+) AND TRUNC(L.ID1(+)/65536) = R.USN AND L.TYPE(+) = ‘TX’AND L.LMODE(+) = 6ORDER BY 1;

1. 롤백 세그먼트의 상태 확인

2. 특정 롤백 세그먼트에 EXTENTION이 많이 발생하여 이를 해제

ALTER ROLLBACK SEGMENT <rollbackseg_name> SHRINK;

29/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 데이터베이스 문제 발생 및 해결 방법 - 2

① 롤백 세그먼트 테이블 스페이스 크기 조정 (RESIZE) ALTER DATABASE DATAFIEL ‘데이터 파일명’ RESIZE 300M;

②롤백 세그먼트 데이터 파일을 추가로 생성 (ADD) ALTER TABLESPACE ‘테이블 스페이스명’ ADD DATAFILE ‘데이터파일명’ ;

3. 롤백 세그먼트 추가

4. 롤백 세그먼트 조정-트랜잭션의 사용에 의해 한번 크기가 늘어나면 기본적으로 롤백 세그먼트를 지우고 다시 만들기까지는크기가 줄어들지 않는다 .-optimal 크기를 지정하게 되면 , 롤백 세그먼트에서 새로운 EXTENT 를 요구하는 시점에 , 현재 할당된롤백 세그먼트의 크기와 optimal 에 지정된 크기를 비교한다 .-optimal 크기보다 큰 경우 , 할당된 EXTENT 중 활성화된 트랜잭션이 사용하지 않는 EXTENT 들을 릴리즈시켜 , 롤백 테이블 스페이스 공간으로 환원된다 .-optimal 크기가 지나치게 작다면 , 트랜잭션이 커밋 되자마자 롤백 세그먼트내의 정보는 잃게 될 것이다 .

① optimal 을 지정할 때 20개 정도의 EXTENTS 정도의 크기로 지정하는 것이 적당 ②롤백 세그먼트를 많이 필요로 하는 배치 작업의 경우 set transaction use rollback segment rollback_segment_name 구문을 사용 - 특정 롤백 세그먼트를 사용하고 나머지 롤백 세그먼트들은 OLTP 작업에 사용

30/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 데이터베이스 문제 발생 및 해결 방법 - 3

SNAPSHOT TOO OLD 에러 (ORA-1555)-하나의 트랜잭션에서 필요한 롤백 세그먼트가 다른 트랜잭션에 의해 덮어 쓰여졌을 경우자신에게 필요한 정보가 없어졌을 때 발생한다 . ① 배치 작업 시 과도하게 롤백 세그먼트를 사용할 경우 발생 ② 데이터베이스에 변경을 가하는 트랜잭션이 많고 , 롤백 세그먼트도 작고 , 개수도 적은 경우에 발생

해결 방법 1. 긴 트랜잭션을 발생시켰다면 롤백 세그먼트를 사용하지 않는 시간대로 배치 작업을 돌림해결 방법 2. 별도의 큰 롤백 세그먼트를 생성하여 트랜잭션이 사용하도록 함

① 큰 롤백 세그먼트 생성 CREATE ROLLBACK SEGMENT vldb_rbs STORAGE(INITIAL 100M NEXT 5M) TABLESPACE VLDB_RBS; ②평상시에는 OFFLINE 상태 유지 ALTER ROLLBACK SEGMENT vldb_rbs OFFLINE;

③배치 작업 수행 시 ONLINE 상태로 변경 ALTER ROLLBACK SEGMENT vldb_rbs ONLINE;

④각 작업 문장이나 세션에서 롤백 세그먼트 지정 SET TRANSACTION USE ROLLBACK SEGEMNT VLDB_RBS;

⑤작업 후 OFFLINE 으로 변경함 ALTER ROLLBACK SEGMENT vldb_rbs OFFLINE;

31/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 데이터베이스 문제 발생 및 해결 방법 - 4

테이블 스페이스 EXTENT 에러-테이블 스페이스 에러는 잘못된 용량 상정 , 테스트로 인한 지나치게 많은 데이터로 인해발생-테이블이나 인덱스의 테이블 스페이스를 잘못 지정하여 특정 테이블 스페이스에 데이터가 계속 누적될 경우 발생

SELECT TABLESPACE_NAME, MAX(BYTES), SUM(BYTES)FROM DBA_FREE_SPACEWHERE TABLESPACE_NAME=UPPER(“&TBS”)GROUP BY TABLESPACE_NAME;

1. 테이블 스페이스 여유 공간 조회

SELECT SEGMENT_NAME, BYTES FROM DBA_SEGMENTS WHERE TABLESPACE_NAME = “TS-NAME”

2. 테이블 스페이스를 사용하는 오브젝트 조회

3. 테이블 스페이스를 추가하거나 크기 변경

① 테이블 스페이스 크기 조정 (RESIZE) ALTER DATABASE DATAFIEL ‘데이터 파일명’ RESIZE 300M;

②데이터 파일을 추가로 생성 (ADD) ALTER TABLESPACE ‘테이블 스페이스명’ ADD DATAFILE ‘데이터파일명’ ;

32/32실전데이터모델링 & 데이터베이스 설계와 구축

데이터베이스 관리 >>> 데이터베이스 문제 발생 및 해결 방법 - 5

잠금 문제-테이블에 잠금이 설정되어 DML 작업과 DDL 작업이 수행되지 못하는 경우 , 해당 프로세스를 종료시키면 된다 .-어플리케이션 기동 시 메시지 없이 지속적으로 기다리는 현상 (WATING)이 발생한다면 , 데이터베이스 잠금 설정을 확인한다 .

SELECT A.SID, A.SERIAL#FROM V$SESSION A, V$LOCK B, DBA_OBJECTS CWHERE A. SID = B. SIDAND B.ID1 = C.OBJECT_IDAND B.TYPE=“TM”AND C.OBJECT_NAME=“테이블명” ;

1. 현재 걸려있는 잠금을 조회한다 .

2. 세션을 종료한다 .

ALTER SYSTEM KILL SESSION “SID, SERIAL #”;