oracle8 - tistory

566
Oracle8i 개념 설명서 볼륨 2 릴리스 8.1.5 1999 년 2월 Part No. A67783-01

Upload: others

Post on 03-Feb-2022

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Oracle8 - Tistory

Oracle8i

개념 설명서볼륨 2

릴리스 8 . 1 . 5

1 9 9 9년 2월

Part No. A67783-01

Page 2: Oracle8 - Tistory

O r a c l e 8i 개념 설명서, 볼륨 2 릴리스 8 . 1 . 5

Part No. A67783-01

Copyright ⓒ 1999, Oracle Corporation. All rights reserved.

저자: Lefty Leverenz, Diana Rehfield

기고: Steve Bobrowski, Cynthia Chin-Lee, Cindy Closkey, Bill Creekbaum, Jason Durbin,

John Frazzini, Richard Mateosian, Denis Raphaely, Danny Sokolsky

공헌자: Richard Allen, David Anderson, Andre Bakker, Bill Bridge, Atif Chaudry, Jeff

Cohen, Benoit Dageville, Sandy Dreskin, Ahmed Ezzat, Jim Finnerty, Diana Foch-

Lorentz, Anurag Gupta, Gary Hallmark, Michael Hartstein, Terry Hayes, Alex Ho, Chin

Hong, Ken Jacobs, Sandeep Jain, Amit Jasuja, Hakan Jakobsson, Robert Jenkins, Jr.,

Ashok Joshi, Mohan Kamath, Jonathan Klein, R. Kleinro, Robert Kooi, Vishu

Krishnamurthy, Muralidhar Krishnaprasad, Andre Kruglikov, Tirthankar Lahiri, Juan

Loaiza, Brom Mahbod, William Maimone, Andrew Mendelsohn, Reza Monajjemi, Mark

Moore, Rita Moran, Denise Oertel, Mark Porter, Maria Pratt, Tuomas Pystynen, Patrick

Ritto, Hasan Rizvi, Sriram Samu, Hari Sankar, Gordon Smith, Leng Leng Tan, Lynne

Thieme, Alvin To, Alex Tsukerman, William Waddington, Joyo Wijaya, Linda Willis,

Andrew Witkowski, Mohamed Zait

그래픽디자이너: Valarie Moore

이 프로그램은 핵, 항공, 대량 수송 수단, 의료 또는 기타 본질적으로 위험한 상황에서 사용하도록 개발된

것이 아니므로 그런 목적으로 사용된경우, 라이센스 사용자는 응용 프로그램의 안전한 사용을 보장하기 위

한 모든 적절한 비상-안전, 백업, 대비및 기타 조치를 반드시 취해야 합니다. 프로그램이 이러한 목적으로

사용되었을 경우 Oracle Corp.은이러한 프로그램 사용으로 인한 피해를책임지지 않습니다.

이 프로그램(소프트웨어와 설명서 포함)은 Oracle Corp.의 독점적 정보를 포함하고 있습니다. 이 정보는

사용 제한 및 기밀 유지 규정을 포함하는 사용권 계약에 따라 제공되며 저작권법, 특허 및 기타 지적 재산

권 관련 법규에 의해 보호됩니다. 이 프로그램을 리버스 엔지니어링하거나 분해하거나 또는 역 컴파일하는

것은 금지되어 있습니다.

이 문서의 내용은 사전 공지 없이 변경될 수 있습니다. 이 문서에서 잘못된 내용을 발견하면 서면으로 알

려주시기 바랍니다. Oracle Corp.에서는오류에 대해 책임을 지지 않습니다. 이 프로그램의 사용권 계약

에 서면으로 허가된 경우를 제외하고, 이 문서의 어떠한 부분도 Oracle Corp.의 서면 허가 없이 어떠한

목적으로도 기계적, 전자적 또는 기타 임의의 수단을통해 배포되거나 복사할 수 없습니다.

이 프로그램을 미국 정부나 사용권이 지정된 모든 사용자에게 제공하거나 미국 정부를 위해 프로그램을 사

용할 때는 다음 경고를 적용할 수 있습니다.

Restricted Rights Notice Programs delivered subject to the DOD FAR Supplement are

“commercial computer software”and use, duplication, and disclosure of the Programs

including documentation, shall be subject to the licensing restrictions set forth in the

applicable Oracle license agreement. Otherwise, Programs delivered subject to the Federal

Acquisition Regulations are “restricted computer software”and use, duplication, and

disclosure of the Programs shall be subject to the restrictions in FAR 52.227-19,

Commercial Computer Software - Restricted Rights (June, 1987). Oracle Corporation, 500

Oracle Parkway, Redwood City, CA 94065.

Page 3: Oracle8 - Tistory

O r a c l e은 등록 상표이며 Net8, Oracle Call Interface, Oracle7, Oracle8, Oracle8i, Oracle

Designer, Oracle Enterprise Manager, Oracle Forms, Oracle Parallel Server, Oracle Server

Manager, Oracle SQL*Loader, LogMiner, PL/SQL, Pro*C/C++, SQL*Net, SQL*Plus 및

Trusted Oracle은 Oracle Corp.의 상표이거나 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각

해당 소유주의 상표로서 참조용으로만 사용됩니다.

Page 4: Oracle8 - Tistory

i i i

목차

독자 제안서··········································x x v

머리말···········································x x v i i

볼륨 1

I부 O ra c l e이란

1장 O racle 서버에 대한 소개

데이터베이스와 정보 관리··································1 - 2

O racle 서버······································1 - 4

오라클 데이터베이스··································1 - 8

데이터베이스 구조와 영역 관리·······························1 - 8

논리적 데이터베이스 구조································1 - 9

물리적 데이터베이스 구조·······························1 - 1 1

메모리 구조와 프로세스··································1 - 1 4

메모리 구조······································1 - 1 4

프로세스 구조·····································1 - 1 7

프로그램 인터페이스··································1 - 2 0

O racle 작동 방법 예··································1 - 2 1

데이터베이스 관리에 대한 객체 관계형 모델·························1 - 2 2

관계형 모델······································1 - 2 2

객체 관계형 모델···································1 - 2 2

Page 5: Oracle8 - Tistory

스키마와 스키마 객체·································1 - 2 3

데이터 딕셔너리····································1 - 3 0

데이터 동시성과 일관성··································1 - 3 0

동시성········································1 - 3 0

읽기 일관성······································1 - 3 1

잠금 기법·······································1 - 3 2

분산 처리 및 분산 데이터베이스······························1 - 3 3

클라이언트/서버 구조: 분산 처리····························1 - 3 3

다중 계층 구조: 응용 프로그램 서버··························1 - 3 4

분산 데이터베이스···································1 - 3 4

테이블 복제······································1 - 3 6

O ra c l e과 N e t 8····································1 - 3 7

시작과 종료 작업·····································1 - 3 7

데이터베이스 보안·····································1 - 3 8

보안 기법·······································1 - 3 9

권한·········································1 - 4 1

데이터베이스 백업 및 복구·································1 - 4 5

복구의 중요성·····································1 - 4 5

장애 유형·······································1 - 4 5

복구에 사용되는 구조·································1 - 4 7

기본 복구 단계····································1 - 5 0

R e c o v e ry Manager ·································1 - 5 1

데이터 액세스······································1 - 5 1

SQL - 구조적 질의어·································1 - 5 2

트랜잭션·······································1 - 5 3

P L / S Q L·······································1 - 5 5

데이터 무결성·····································1 - 5 7

I I부 데이터베이스 구조

2장 데이터 딕셔너리

데이터 딕셔너리 소개····································2 - 2

데이터 딕셔너리 구조····································2 - 2

데이터 딕셔너리 소유자, SYS································2 - 3

i v

Page 6: Oracle8 - Tistory

데이터 딕셔너리 사용법···································2 - 3

O ra c l e의 데이터 딕셔너리 사용법····························2 - 3

사용자와 D B A의 데이터 딕셔너리 사용법························2 - 5

동적 성능 테이블······································2 - 7

3장 테이블스페이스와 데이터 파일

데이터베이스, 테이블스페이스및 데이터 파일·························3 - 2

데이터베이스에 대한 추가 영역 할당···························3 - 3

테이블스페이스·······································3 - 6

SYSTEM 테이블스페이스································3 - 6

다중 테이블스페이스 사용································3 - 7

테이블스페이스의 영역 관리·······························3 - 7

온라인 및 오프라인 테이블스페이스····························3 - 9

읽기 전용 테이블스페이스·······························3 - 1 0

임시 테이블스페이···································3 - 1 2

데이터베이스 간의 테이블스페이스 이동·························3 - 1 3

데이터 파일·······································3 - 1 6

데이터 파일의 내용··································3 - 1 6

데이터 파일 크기···································3 - 1 6

오프라인 데이터 파일·································3 - 1 7

임시 데이터 파일···································3 - 1 7

4장 데이터 블록, 확장 영역 및 세그먼트

데이터 블록, 확장 영역 및 세그먼트 간의 관계························4 - 2

데이터 블록·······································4 - 3

데이터 블록 형식····································4 - 3

P C T F R E E, PCTUSED 및 행 체인화 소개·······················4 - 5

확장 영역········································4 - 1 1

확장 영역 할당 시기··································4 - 1 1

확장 영역의 크기와 한계 설정·····························4 - 1 1

확장 영역 할당 방법··································4 - 1 2

확장 영역의 할당 해제 시기······························4 - 1 4

세그먼트········································4 - 1 6

데이터 세그먼트····································4 - 1 6

인덱스 세그먼트····································4 - 1 7

v

Page 7: Oracle8 - Tistory

임시 세그먼트·····································4 - 1 7

롤백 세그먼트·····································4 - 1 9

I I I부 O racle 인스턴스

5장 데이터베이스와 인스턴스 시작 및 종료

O racle 인스턴스 개요···································5 - 2

인스턴스와 데이터베이스································5 - 2

관리자 권한으로 접속··································5 - 3

매개변수 파일·····································5 - 4

인스턴스와 데이터베이스 시작································5 - 5

인스턴스 시작·····································5 - 5

데이터베이스 마운트··································5 - 6

데이터베이스 열기···································5 - 7

데이터베이스와 인스턴스 종료································5 - 9

데이터베이스 닫기···································5 - 1 0

데이터베이스 마운트 해제·······························5 - 1 0

인스턴스 종료····································5 - 1 0

6장 분산 처리

O racle 클라이언트/서버구조································6 - 2

분산 처리········································6 - 2

Ne t 8···········································6 - 5

Net8 작동 방법·····································6 - 5

네트워크 리스너····································6 - 6

다중 계층 구조·······································6 - 7

클라이언트·······································6 - 8

응용 프로그램 서버···································6 - 8

데이터베이스 서버···································6 - 8

7장 메모리 구조

O racle 메모리 구조 소개··································7 - 2

시스템 글로벌 영역( S GA )··································7 - 2

데이터베이스 버퍼 캐시·································7 - 3

v i

Page 8: Oracle8 - Tistory

리두 로그 버퍼·····································7 - 6

공유 풀········································7 - 6

대용량 풀·······································7 - 1 2

S GA의 크기·····································7 - 1 2

S GA의 메모리 사용 제어·······························7 - 1 3

프로그램 글로벌 영역( P GA )································7 - 1 4

P GA의 내용·····································7 - 1 4

P GA의 크기·····································7 - 1 5

정렬 영역········································7 - 1 6

가상 메모리·······································7 - 1 7

소프트웨어 코드 영역···································7 - 1 7

8장 프로세스 구조

프로세스 소개·······································8 - 2

다중 프로세스 O racle 시스템······························8 - 2

프로세스 유형·····································8 - 2

사용자 프로세스······································8 - 4

접속 및 세션······································8 - 4

O racle 프로세스······································8 - 5

서버 프로세스·····································8 - 5

백그라운드 프로세스··································8 - 5

추적 파일 및 A L E RT 파일 ······························8 - 1 4

다중 스레드 서버 구성···································8 - 1 6

디스패처 요청 및 응답 대기열·····························8 - 1 7

공유 서버 프로세스··································8 - 1 9

인위적인 교착 상태··································8 - 1 9

다중 스레드 서버의 제한된 작업····························8 - 2 0

다중 스레드 서버를 사용하는 O racle 예·························8 - 2 0

전용 서버 구성······································8 - 2 2

전용 서버 프로세스를 사용하는 O racle 예························8 - 2 4

프로그램 인터페이스····································8 - 2 5

프로그램 인터페이스 구조·······························8 - 2 5

프로그램 인터페이스 드라이버·····························8 - 2 6

운영 체제 통신 소프트웨어·······························8 - 2 6

v i i

Page 9: Oracle8 - Tistory

9장 데이터베이스 자원 관리

데이터베이스 자원 관리자 소개·······························9 - 2

자원 소비자 그룹과 자원 계획································9 - 3

자원 소비자 그룹이란··································9 - 3

자원 계획이란·····································9 - 4

자원 할당 방법·······································9 - 6

CPU 자원 할당 방법: 강조·······························9 - 6

최대 병렬도 자원 할당 방법: 절대값···························9 - 7

자원 계획 지시어······································9 - 7

예제···········································9 - 7

자원 소비자 그룹과 자원 계획 사용····························9 - 8

하위 계획 사용·····································9 - 9

다중 레벨 자원 계획 사용·······························9 - 1 0

병렬도 제한 자원 지시어 사용·····························9 - 1 0

요약·········································9 - 1 1

데이터베이스 자원 관리자 사용·······························9 - 1 1

I V부 객체 관계형 D B M S

1 0장 스키마 객체

스키마 객체 개요·····································1 0 - 2

테이블··········································1 0 - 3

테이블 데이터 저장 방법·······························1 0 - 4

널··········································1 0 - 7

열 기본값······································1 0 - 8

중첩 테이블·····································1 0 - 9

임시 테이블·····································1 0 - 1 0

뷰···········································1 0 - 1 1

뷰 저장 영역····································1 0 - 1 2

뷰 사용 방법····································1 0 - 1 3

뷰 처리 방법····································1 0 - 1 4

종속성과 뷰·····································1 0 - 1 5

갱신 가능한 조인 뷰·································1 0 - 1 5

객체 뷰······································1 0 - 1 6

v i i i

Page 10: Oracle8 - Tistory

인라인 뷰······································1 0 - 1 6

구체화된 뷰·······································1 0 - 1 7

구체화된 뷰 갱신··································1 0 - 1 8

구체화된 뷰 로그··································1 0 - 1 8

차원··········································1 0 - 1 8

시퀀스 생성기······································1 0 - 1 9

동의어·········································1 0 - 2 0

인덱스·········································1 0 - 2 1

고유한 인덱스 및 고유하지 않은 인덱스························1 0 - 2 2

조합 인덱스·····································1 0 - 2 2

인덱스 및 키····································1 0 - 2 3

인덱스와 널·····································1 0 - 2 4

함수 기준 인덱스··································1 0 - 2 4

인덱스 저장 방법··································1 0 - 2 6

키 압축······································1 0 - 2 9

역방향 키 인덱스··································1 0 - 3 1

비트맵 인덱스····································1 0 - 3 2

인덱스 구성 테이블···································1 0 - 3 6

인덱스 구성 테이블의 장점······························1 0 - 3 8

행 오버플로우 영역을 가진 인덱스 구성 테이블····················1 0 - 3 8

인덱스 구성 테이블의 보조 인덱스··························1 0 - 3 9

인덱스 구성 테이블의 추가 기능···························1 0 - 3 9

인덱스 구성 테이블을 위한 응용 프로그램·······················1 0 - 4 0

응용 프로그램 도메인 인덱스·······························1 0 - 4 2

인덱스 유형·····································1 0 - 4 3

도메인 인덱스····································1 0 - 4 3

사용자 정의 연산자·································1 0 - 4 4

클러스터········································1 0 - 4 6

성능 고려 사항···································1 0 - 4 8

클러스터화된 데이터 블록 형식····························1 0 - 4 9

클러스터 키·····································1 0 - 4 9

클러스터 인덱스···································1 0 - 5 0

해시 클러스터·····································1 0 - 5 0

해시 클러스터에 데이터 저장 방법·························1 0 - 5 1

해시 키 값····································1 0 - 5 3

i x

Page 11: Oracle8 - Tistory

해시 함수······································1 0 - 5 4

해시 클러스터에 대한 영역 할당···························1 0 - 5 5

단일 테이블 해시 클러스터······························1 0 - 5 7

1 1장 분할된 테이블과 인덱스

분할에 대한 소개····································1 1 - 2

분할이란······································1 1 - 2

분할의 이점·····································1 1 - 5

분할 영역 뷰를 사용한 수동 분할···························1 1 - 1 1

기본 분할 모델·····································1 1 - 1 3

범위 분할······································1 1 - 1 5

해시 분할······································1 1 - 1 6

조합 분할······································1 1 - 1 7

분할 영역 및 하위 분할 영역 이름··························1 1 - 1 8

분할 및 하위 분할 열과 키······························1 1 - 1 9

범위 분할에 대한 분할 영역 바운드··························1 1 - 2 0

동등 분할·····································1 1 - 2 4

테이블 및 인덱스 분할 규칙·······························1 1 - 2 7

테이블 분할·····································1 1 - 2 7

인덱스 분할·····································1 1 - 2 9

LOB 열을 가진 테이블 분할·····························1 1 - 3 8

인덱스 구성 테이블 및 보조 인덱스 분할·······················1 1 - 4 2

DML 분할 영역 잠금 및 하위 분할 영역 잠금·······················1 1 - 4 5

DML 분할 영역 잠금································1 1 - 4 6

DML 하위 분할 영역 잠금······························1 1 - 4 6

O racle Pa rallel Serv e r에 대한 성능 고려 사항····················1 1 - 4 7

유지 관리 작업····································1 1 - 4 8

분할 영역 유지 관리 작업······························1 1 - 4 8

인덱스 관리·····································1 1 - 5 9

분할된 테이블 및 인덱스 권한····························1 1 - 6 2

분할된 테이블 및 인덱스 감사····························1 1 - 6 3

분할 영역 확장 테이블 이름과 하위 분할 영역 확장 테이블 이름··············1 1 - 6 3

PA RTITION 및 S U B PA RTITION 지정 항목····················1 1 - 6 3

분할 영역 또는 하위 분할 영역을 테이블로 보기····················1 1 - 6 4

분할 영역 및 하위 분할 영역 확장 테이블 이름 사용··················1 1 - 6 4

x

Page 12: Oracle8 - Tistory

1 2장 내장 데이터 유형

O racle 데이터 유형 개요·································1 2 - 2

문자 데이터 유형·····································1 2 - 5

CHAR 데이터 유형·································1 2 - 5

VA RCHAR2 및 VA RCHAR 데이터 유형·······················1 2 - 5

문자 데이터 유형과 NLS 문자 집합에 대한 열 길이···················1 2 - 6

NCHAR 및 N VA RCHAR2 데이터 유형·······················1 2 - 6

LOB 문자 데이터 유형································1 2 - 7

LONG 데이터 유형·································1 2 - 7

NUMBER 데이터 유형··································1 2 - 8

내부 숫자 형식····································1 2 - 9

DATE 데이터 유형···································1 2 - 1 0

율리우스 날짜 사용·································1 2 - 1 1

날짜 연산······································1 2 - 1 1

세기와 2 0 0 0년···································1 2 - 1 2

LOB 데이터 유형···································1 2 - 1 2

BLOB 데이터 유형·································1 2 - 1 3

CLOB 및 NCLOB 데이터 유형···························1 2 - 1 3

BFILE 데이터 유형·································1 2 - 1 4

R AW 및 L O NG RAW 데이터 유형···························1 2 - 1 4

ROWID 및U ROWID 데이터 유형····························1 2 - 1 5

ROWID 의사 열··································1 2 - 1 5

물리적 ROW I D···································1 2 - 1 6

논리적 ROW I D···································1 2 - 2 0

O ra c l e이 아닌 데이터베이스의 ROW I D·······················1 2 - 2 2

A NSI, DB2 및 SQL/DS 데이터유형··························1 2 - 2 2

데이터 변환······································1 2 - 2 3

1 3장 사용자 정의 데이터 유형

소개···········································1 3 - 2

복합 데이터 모델···································1 3 - 2

멀티미디어 데이터 유형································1 3 - 3

사용자 정의 데이터 유형·································1 3 - 3

객체 유형······································1 3 - 4

모음 유형······································1 3 - 1 0

x i

Page 13: Oracle8 - Tistory

응용 프로그램 인터페이스································1 3 - 1 3

S Q L········································1 3 - 1 3

P L / S Q L······································1 3 - 1 3

P ro * C / C + +·····································1 3 - 1 4

O C I········································1 3 - 1 4

O T T········································1 3 - 1 5

J P u b l i s h e r····································1 3 - 1 5

J D B C·······································1 3 - 1 6

S Q L J·······································1 3 - 1 6

1 4장 사용자 정의 데이터 유형 사용

소개···········································1 4 - 2

객체 유형 및 참조····································1 4 - 3

객체 속성의 특징···································1 4 - 3

객체 참조······································1 4 - 7

이름 분석······································1 4 - 8

모음··········································1 4 - 1 0

모음 질의x·····································1 4 - 1 0

중첩되지 않은 모음·································1 4 - 1 0

중첩 테이블 로케이터································1 4 - 1 1

모음에 대한 D M L··································1 4 - 1 2

사용자 정의 유형 및 메소드에 대한 권한·························1 4 - 1 3

시스템 권한·····································1 4 - 1 3

스키마 객체 권한··································1 4 - 1 3

새로운 유형이나 테이블에서 유형 사용························1 4 - 1 3

예········································1 4 - 1 4

유형 액세스와 객체 액세스에 대한 권한························1 4 - 1 5

종속성과 불완전 유형··································1 4 - 1 6

불완전 유형 완료··································1 4 - 1 7

테이블의 유형 종속성································1 4 - 1 7

사용자 정의 유형의 저장 영역······························01 4 - 1 8

최하위 레벨 속성··································1 4 - 1 8

행 객체·······································1 4 - 1 8

열 객체·······································1 4 - 1 9

R E F·······································1 4 - 1 9

x i i

Page 14: Oracle8 - Tistory

중첩 테이블·····································1 4 - 1 9

VA R R AY·····································1 4 - 2 0

유틸리티·······································1 4 - 2 0

사용자 정의 유형의 I m p o r t / E x p o r t·························1 4 - 2 0

사용자 정의 유형 로드································1 4 - 2 0

1 5장 객체 뷰

소개···········································1 5 - 2

객체 뷰의 장점····································1 5 - 2

객체 뷰 정의·······································1 5 - 3

객체 뷰 사용·······································1 5 - 4

객체 뷰 갱신·······································1 5 - 5

뷰의 중첩 테이블 열 갱신·······························1 5 - 5

볼륨 2

V부 데이터 액세스

1 6장 S Q L과 P L / S Q L

S Q L··········································1 6 - 2

SQL 문·······································1 6 - 3

비 표준 SQL 식별··································1 6 - 6

재귀 SQL ······································1 6 - 6

커서········································1 6 - 6

공유 S Q L······································1 6 - 7

구문 분석······································1 6 - 7

SQL 처리········································1 6 - 8

SQL 문 실행의 개요·································1 6 - 8

DML 문 처리····································1 6 - 1 0

DDL 문 처리····································1 6 - 1 4

트랜잭션 제어····································1 6 - 1 4

P L / S Q L········································1 6 - 1 5

PL/SQL 실행 방법·································1 6 - 1 5

P L / S Q L에 대한 언어 구성자····························1 6 - 1 7

x i i i

Page 15: Oracle8 - Tistory

내장 프로시저····································1 6 - 1 8

외부 프로시저····································1 6 - 2 0

1 7장 트랜잭션 관리

트랜잭션 소개·····································1 7 - 2

명령문 실행 및 트랜잭션 제어·····························1 7 - 3

명령문 레벨 롤백···································1 7 - 4

O ra c l e과 트랜잭션 관리·································1 7 - 4

트랜잭션 커밋····································1 7 - 5

트랜잭션 롤백····································1 7 - 6

저장점·······································1 7 - 7

2단계 커밋 기법···································1 7 - 7

이산 트랜잭션 관리···································1 7 - 8

자율 트랜잭션······································1 7 - 9

자율 PL/SQL 블록··································1 7 - 9

자율 블록의 트랜잭션 제어문·····························1 7 - 1 0

1 8장 프로시저와 패키지

내장 프로시저와 패키지 소개·······························1 8 - 2

내장 프로시저와 함수·································1 8 - 2

패키지·······································1 8 - 4

프로시저와 함수·····································1 8 - 6

프로시저 지침····································1 8 - 7

프로시저의 이점···································1 8 - 7

익명의 PL/SQL 블록 대 내장 프로시저························1 8 - 9

독립형 프로시저···································1 8 - 9

정의자 권한 및 호출자 권한······························1 8 - 9

내장 프로시저에 대한 종속성 추적··························1 8 - 1 1

외부 프로시저····································1 8 - 1 1

패키지·········································1 8 - 1 1

패키지의 이점····································1 8 - 1 5

패키지에 대한 종속성 추적······························1 8 - 1 6

O racle 지원 패키지·································1 8 - 1 6

프로시저와 패키지 저장 방법·······························1 8 - 1 7

프로시저와 패키지 컴파일······························1 8 - 1 7

x i v

Page 16: Oracle8 - Tistory

메모리에 컴파일된 코드 저장·····························1 8 - 1 7

데이터베이스에 프로시저나 패키지 저장························1 8 - 1 7

프로시저와 패키지 실행 방법·······························1 8 - 1 8

사용자 액세스 검증·································1 8 - 1 8

프로시저 유효성 검증································1 8 - 1 8

프로시저 실행····································1 8 - 1 9

1 9장 고급 대기열 처리

메시지 대기열 처리 소개·································1 9 - 2

O racle 고급 대기열 처리·································1 9 - 3

대기열 처리 엔티티··································1 9 - 4

고급 대기열 처리의 특징·······························1 9 - 6

2 0장 트리거

트리거 소개·······································2 0 - 2

트리거 사용법····································2 0 - 3

트리거 구성·······································2 0 - 5

트리거링 이벤트 또는 명령문·····························2 0 - 6

트리거 제한 사항···································2 0 - 7

트리거 작업·····································2 0 - 7

트리거 유형·······································2 0 - 8

행 트리거 및 명령문 트리거······························2 0 - 8

BEFORE 및 AFTER 트리거·····························2 0 - 9

트리거 유형 결합···································2 0 - 9

INSTEAD-OF 트리거·······························2 0 - 1 2

시스템 이벤트 및 사용자 이벤트 트리거························2 0 - 1 8

트리거 실행·······································2 0 - 2 1

트리거 실행 모델과 무결성 제약 조건 검사······················2 0 - 2 1

트리거에 대한 데이터 액세스·····························2 0 - 2 3

PL/SQL 트리거 저장 영역·····························2 0 - 2 5

트리거 실행·····································2 0 - 2 5

트리거에 대한 종속성 유지 관리···························2 0 - 2 5

x v

Page 17: Oracle8 - Tistory

2 1장 O racle 종속성 관리

종속성 실행 소개·····································2 1 - 2

스키마 객체 종속성 해결·································2 1 - 4

뷰와 PL/SQL 프로그램 단위 컴파일··························2 1 - 5

함수 기준 인덱스 종속성·······························2 1 - 7

종속성 관리 및 존재하지 않는 스키마 객체·························2 1 - 8

공유 SQL 종속성 관리·································2 1 - 1 0

로컬 및 원격 종속성 관리································2 1 - 1 0

로컬 종속성 관리··································2 1 - 1 0

원격 종속성 관리··································2 1 - 1 1

V I부 SQL 문 최적화

2 2장 최적기

최적화란·········································2 2 - 2

실행 계획······································2 2 - 2

실행 순서······································2 2 - 5

최적기 계획 안정성··································2 2 - 6

비용 기준 최적화·····································2 2 - 7

비용 기준 접근 방법의 목표······························2 2 - 7

비용 기준 최적화에 사용되는 통계···························2 2 - 8

비용 기준 접근 방법 사용 시기····························2 2 - 1 5

확장 가능한 최적화···································2 2 - 1 6

사용자 정의 통계··································2 2 - 1 7

사용자 정의 선택성·································2 2 - 1 7

사용자 정의 비용··································2 2 - 1 7

규칙 기준 최적화····································2 2 - 1 8

2 3장 최적기 작업

최적기 작업 개요·····································2 3 - 2

최적기 작업·····································2 3 - 2

SQL 문 유형·····································2 3 - 3

표현식과 조건 평가····································2 3 - 4

상수·········································2 3 - 5

x v i

Page 18: Oracle8 - Tistory

LIKE 연산자·····································2 3 - 5

IN 연산자······································2 3 - 5

ANY 또는 SOME 연산자······························2 3 - 6

ALL 연산자·····································2 3 - 6

BETWEEN 연산자·································2 3 - 7

NOT 연산자·····································2 3 - 7

추이성········································2 3 - 8

DETERMINISTIC 함수·······························2 3 - 9

명령문 변환 및 최적화··································2 3 - 1 0

O R를 혼합 질의로 변환·······························2 3 - 1 0

복합 명령문을 조인문으로 변환····························2 3 - 1 3

뷰를 액세스하는 명령문 최적화····························2 3 - 1 5

혼합 질의 최적화··································2 3 - 2 7

분산 명령문 최적화·································2 3 - 3 0

최적화 접근 방법 및 목표 선택······························2 3 - 3 1

OPTIMIZER_MODE 초기화매개변수························2 3 - 3 1

데이터 딕셔너리에 있는 통계·····························2 3 - 3 2

A LTER SESSION 명령어의O P T I M I Z E R _ G OAL 매개변수·············2 3 - 3 2

F I R S T _ ROW S, ALL_ROW S, CHOOSE 및 RULE 힌트··············2 3 - 3 3

PL/SQL 및 최적기 목표······························2 3 - 3 3

액세스 경로 선택····································2 3 - 3 3

액세스 방법·····································2 3 - 3 4

액세스 경로·····································2 3 - 3 6

액세스 경로 선택··································2 3 - 5 0

2 4장 조인의 최적화

조인문 최적화······································2 4 - 2

조인 작업······································2 4 - 2

조인문에 대한 실행 계획 선택·····························2 4 - 8

외부 조인의 뷰···································2 4 - 1 1

반대 조인과 세미 조인 최적화······························2 4 - 1 3

“스타”질의최적화···································2 4 - 1 4

스타 질의 예····································2 4 - 1 4

스타 질의 조정···································2 4 - 1 5

스타 변환······································2 4 - 1 6

x v i i

Page 19: Oracle8 - Tistory

V I I부 병렬 SQL 및 직접 로드 I N S E R T

2 5장 직접 로드 I N S E R T

직접 로드 I NS E RT 소개·································2 5 - 2

직접 로드 I N S E RT의 장점······························2 5 - 2

I N S E RT...SELECT 문·······························2 5 - 3

직접 로드 I NS E RT 문의 다양한 형태···························2 5 - 3

직렬 및 병렬 I N S E RT································2 5 - 3

로깅 모드······································2 5 - 5

직접 로드 I NS E RT에 대한 추가 고려 사항·························2 5 - 8

인덱스 유지 관리···································2 5 - 8

영역 고려 사항····································2 5 - 8

잠금 고려 사항···································2 5 - 1 1

직접 로드 I NS E RT에 대한 제한 사항···························2 5 - 1 1

2 6장 병렬 실행

병렬 실행 개요······································2 6 - 2

병렬화할 수 있는 작업································2 6 - 2

작업 병렬화 방법···································2 6 - 3

병렬 실행을 위한 프로세스 구조······························2 6 - 5

병렬 실행 서버 풀··································2 6 - 7

병렬 실행 서버 통신 방법·······························2 6 - 9

SQL 문 병렬화···································2 6 - 1 0

병렬도 설정·······································2 6 - 1 5

연산에 대한 병렬도 결정 방법····························2 6 - 1 6

작업 로드 조절···································2 6 - 1 9

SQL 문에 대한 병렬화 규칙·····························2 6 - 2 0

병렬 질의········································2 6 - 2 8

인덱스 구성 테이블에서의 병렬 질의·························2 6 - 2 9

객체 유형의 병렬 질의································2 6 - 2 9

병렬 D D L·······································2 6 - 3 0

병렬화될 수 있는 DDL 문······························2 6 - 3 0

병렬 C R E ATE TA B L E...AS SELECT·······················2 6 - 3 1

복구성과 병렬 D D L·································2 6 - 3 2

x v i i i

Page 20: Oracle8 - Tistory

병렬 D D L에 대한 영역 관리·····························2 6 - 3 3

병렬 D M L·······································2 6 - 3 5

수동 병렬화에 대한 병렬 D M L의 장점························2 6 - 3 6

병렬 DML 사용 시기································2 6 - 3 7

병렬 DML 활성화··································2 6 - 3 8

병렬 D M L에 대한 트랜잭션 모델···························2 6 - 3 9

병렬 D M L에 대한 복구·······························2 6 - 4 0

병렬 D M L에 대한 영역 고려 사항··························2 6 - 4 1

병렬 D M L에 대한 자원 잠금 및 대기열에 넣기····················2 6 - 4 2

병렬 D M L에 대한 제한 사항·····························2 6 - 4 3

함수의 병렬 실행····································2 6 - 4 6

친화력·········································2 6 - 4 8

친화력 및 병렬 질의·································2 6 - 4 8

친화력 및 병렬 D M L································2 6 - 4 9

다른 유형의 병렬화···································2 6 - 5 0

V I I I부 데이터 보호

2 7장 데이터 동시성과 일관성

다중 사용자 환경에서의 데이터 동시성과 일관성······················2 7 - 2

방지되어야 하는 현상과 트랜잭션 분리 레벨······················2 7 - 2

잠금 처리 기법····································2 7 - 3

데이터 동시성과 일관성 관리 방법·····························2 7 - 4

다중 버전 동시성 제어································2 7 - 4

명령문 레벨 읽기 일관성·······························2 7 - 5

트랜잭션 레벨 읽기 일관성······························2 7 - 6

O racle Pa rallel Serv e r의 읽기 일관성························2 7 - 6

O racle 분리 레벨···································2 7 - 6

분리 레벨 설정····································2 7 - 7

커밋된 데이터 읽기와 연속 분리 비교·························2 7 - 9

분리 레벨 선택···································2 7 - 1 2

데이터를 잠그는 방법··································2 7 - 1 5

트랜잭션과 데이터 동시성······························2 7 - 1 5

교착 상태······································2 7 - 1 7

잠금 유형······································2 7 - 1 9

x i x

Page 21: Oracle8 - Tistory

DML (데이터) 잠금·································2 7 - 2 0

DDL 잠금 (딕셔너리 잠금)·····························2 7 - 2 8

래치와 내부 잠금··································2 7 - 2 9

명시적 (수동) 데이터 잠금······························2 7 - 3 1

O racle 잠금 관리 서비스······························2 7 - 3 9

2 8장 데이터 무결성

데이터 무결성 정의····································2 8 - 2

데이터 무결성 유형··································2 8 - 3

데이터 무결성 강제 수행 방법·····························2 8 - 4

무결성 제약 조건 소개··································2 8 - 5

무결성 제약 조건의 장점·······························2 8 - 5

무결성 제약 조건의 성능 비용·····························2 8 - 7

무결성 제약 조건 유형··································2 8 - 7

NOT NULL 무결성 제약 조건····························2 8 - 7

UNIQUE 키 무결성 제약 조건····························2 8 - 8

P R I M A RY KEY 무결성 제약 조건·························2 8 - 1 1

FOREIGN KEY(참조) 무결성제약 조건······················2 8 - 1 3

CHECK 무결성 제약 조건······························2 8 - 1 7

제약 조건 검사 방법···································2 8 - 1 8

기본 열 값과 무결성 제약 조건 검사·························2 8 - 2 0

지연된 제약 조건 검사·································2 8 - 2 0

제약 조건 속성···································2 8 - 2 1

SET CONSTRAINTS 모드·····························2 8 - 2 1

고유 제약 조건과 인덱스·······························2 8 - 2 2

제약 조건 상태·····································2 8 - 2 2

제약 조건 상태 수정·································2 8 - 2 3

2 9장 데이터베이스 액세스 제어

데이터베이스 보안····································2 9 - 2

스키마, 데이터베이스 사용자 및 보안 도메인························2 9 - 2

사용자 인증·······································2 9 - 3

운영 체제에 의한 인증································2 9 - 4

네트워크에 의한 인증·································2 9 - 4

오라클 데이터베이스에 의한 인증···························2 9 - 7

x x

Page 22: Oracle8 - Tistory

다중 계층 인증 및 권한 부여·····························2 9 - 9

데이터베이스 관리자 인증······························2 9 - 1 2

사용자 테이블스페이스 설정값 및 할당량·························2 9 - 1 3

기본 테이블스페이스·································2 9 - 1 3

임시 테이블스페이스·································2 9 - 1 3

테이블스페이스 액세스와 할당량···························2 9 - 1 4

PUBLIC 사용자 그룹··································2 9 - 1 4

사용자 자원 제한과 프로파일·······························2 9 - 1 5

시스템 자원과 제한 유형·······························2 9 - 1 6

프로파일······································2 9 - 1 8

사용권 지정·······································2 9 - 1 9

동시 사용권 지정··································2 9 - 2 0

명명된 사용자의 사용권 지정·····························2 9 - 2 1

3 0장 권한, 롤, 보안 정책

권한···········································3 0 - 2

시스템 권한·····································3 0 - 2

스키마 객체 권한···································3 0 - 3

테이블 보안 항목···································3 0 - 5

뷰 보안 항목·····································3 0 - 6

프로시저 보안 항목··································3 0 - 7

유형 보안 항목···································3 0 - 1 1

롤···········································3 0 - 1 6

롤의 일반적 사용··································3 0 - 1 7

롤의 기법······································3 0 - 1 8

롤 부여 및 철회···································3 0 - 1 8

롤을 부여하거나 철회할 수 있는 사용자························3 0 - 1 9

롤 이름 지정····································3 0 - 1 9

롤과 사용자의 보안 도메인······························3 0 - 1 9

PL/SQL 블록과 롤·································3 0 - 2 0

데이터 정의어 명령문과 롤······························3 0 - 2 0

미리 정의된 롤···································3 0 - 2 2

운영 체제와 롤···································3 0 - 2 2

분산 환경에서의 롤·································3 0 - 2 2

x x i

Page 23: Oracle8 - Tistory

상세한 액세스 제어···································3 0 - 2 2

동적 술어······································3 0 - 2 3

보안 정책의 예···································3 0 - 2 3

응용 프로그램 컨텍스트·································3 0 - 2 4

3 1장 감사

감사 기능 소개·····································3 1 - 2

감사 기능······································3 1 - 2

감사 기법······································3 1 - 4

명령문 감사·······································3 1 - 7

권한 감사········································3 1 - 7

스키마 객체 감사·····································3 1 - 8

뷰와 프로시저에 대한 스키마 객체 감사 옵션······················3 1 - 8

명령문, 권한 및 스키마 객체 감사의 범위·························3 1 - 9

명령문의 성공적 실행과 실패에 대한 감사·······················3 1 - 9

BY SESSION 감사와 BY ACCESS 감사······················3 1 - 1 0

사용자에 의한 감사·································3 1 - 1 2

3 2장 데이터베이스 복구

데이터베이스 복구 소개··································3 2 - 2

오류와 장애·····································3 2 - 2

데이터베이스 복구에 사용되는 구조····························3 2 - 6

데이터베이스 백업··································3 2 - 6

리두 로그······································3 2 - 7

롤백 세그먼트····································3 2 - 8

제어 파일······································3 2 - 8

롤포워드와 롤백·····································3 2 - 8

리두 로그와 롤포워드·································3 2 - 9

롤백 세그먼트와 롤백·································3 2 - 9

복구 성능 향상·····································3 2 - 1 0

병렬 복구 수행···································3 2 - 1 0

빠른 시작 복구···································3 2 - 1 3

투명한 응용 프로그램 복구에 의한 장애 마스크····················3 2 - 1 4

R e c ove ry Manager·································3 2 - 1 5

복구 카탈로그····································3 2 - 1 5

x x i i

Page 24: Oracle8 - Tistory

병렬화·······································3 2 - 1 6

보고서 생성·····································3 2 - 1 7

데이터베이스 아카이브 모드·······························3 2 - 1 8

N OA RCHIVELOG 모드 (매체 복구 비활성화)····················3 2 - 1 8

A RCHIVELOG 모드 (매체 복구 활성화)······················3 2 - 1 8

제어 파일·······································3 2 - 2 1

제어 파일의 내용··································3 2 - 2 1

다중화된 제어 파일·································3 2 - 2 2

데이터베이스 백업····································3 2 - 2 3

전체 데이터베이스 백업·······························3 2 - 2 3

부분 데이터베이스 백업·······························3 2 - 2 4

Export 및 Import 유틸리티·····························3 2 - 2 5

읽기 전용 테이블스페이스 및 백업··························3 2 - 2 6

존재 가능성······································3 2 - 2 6

손상 복구 계획···································3 2 - 2 6

자동화된 대기 데이터베이스·····························3 2 - 2 6

I X부 분산 데이터베이스와 복제

3 3장 분산 데이터베이스

오라클 분산 데이터베이스 구조······························3 3 - 2

클라이언트와 서버··································3 3 - 2

네트워크·······································3 3 - 4

데이터베이스와 데이터베이스 링크···························3 3 - 4

데이터베이스 링크··································3 3 - 6

스키마 객체 이름 분석································3 3 - 6

O racle 서버 버전 간의 접속······························3 3 - 7

분산 데이터베이스와 분산 처리····························3 3 - 7

분산 데이터베이스와 데이터베이스 복제························3 3 - 7

이기종 분산 데이터베이스·································3 3 - 8

이기종 서비스····································3 3 - 8

이기종 서비스 대리 프로세서·····························3 3 - 9

기능·········································3 3 - 9

분산 데이터베이스 응용 프로그램 개발··························3 3 - 1 0

x x i i i

Page 25: Oracle8 - Tistory

분산 질의 최적화··································3 3 - 1 0

원격 및 분산 SQL 문································3 3 - 1 1

원격 프로시저 호출( R P C )······························3 3 - 1 2

원격 및 분산 트랜잭션································3 3 - 1 2

분산 데이터베이스 시스템의 투명성··························3 3 - 1 4

오라클 분산 데이터베이스 시스템 관리··························3 3 - 1 6

사이트 자율성····································3 3 - 1 6

분산 데이터베이스 보안·······························3 3 - 1 7

오라클 분산 데이터베이스 관리 도구·························3 3 - 1 9

Enterprise Manager································3 3 - 1 9

협력업체 관리 도구·································3 3 - 2 0

SNMP 지원····································3 3 - 2 0

국가별 언어 지원····································3 3 - 2 0

3 4장 데이터베이스 복제

복제란··········································3 4 - 2

복제 객체, 그룹 및 사이트································3 4 - 2

다중 마스터 복제·····································3 4 - 6

다중 마스터 복제 사용································3 4 - 6

스냅샷 복제·······································3 4 - 8

읽기 전용 스냅샷···································3 4 - 8

갱신 가능 스냅샷···································3 4 - 9

스냅샷 복제 사용··································3 4 - 1 1

다중 마스터와 스냅샷 하이브리드 구성··························3 4 - 1 3

복제 환경 관리·····································3 4 - 1 4

복제 카탈로그···································3 4 - 1 4

복제 관리 A P I와 관리 요청·····························3 4 - 1 4

O racle Replication Manager···························3 4 - 1 4

복제 충돌·······································3 4 - 1 5

특수 복제 옵션·····································3 4 - 1 5

X부 부록

부록 A 운영 체제별 정보

색인

x x i v

Page 26: Oracle8 - Tistory

x x v

Page 27: Oracle8 - Tistory

독자 제안서

개념 설명서, 볼륨 2, 릴리스 8.1.5

Part NO. A67783-01

오라클사에서는 이 설명서의 품질과 유용성에 관한 여러분의 의견과 제안을 환영합니다. 제안하신 내용

은 개정판에서 중요한 정보로 사용됩니다.

■ 잘못된 부분을 발견하셨습니까?

■ 내용 설명이 명확하게 되어 있습니까?

■ 어떤 부분에 대해 자세한 정보가 필요하십니까?

■ 예제들은 정확합니까? 좀더 많은 예제가 필요하십니까?

■ 이 설명서에서 가장 마음에 드는 부분은 무엇입니까?

잘못된 부분이 있거나 개선할 점에 대한 제안이 있으면 아래에 장, 단원, 제목, 페이지 번호를 기입해

다음으로 보내주시기 바랍니다.

■ 전자 우편: DocTM@Kr. o ra c l e. c o m

■ 팩스: (02) 780-1687

■ 전화: (02) 369-9500

■ 우편: 서울시 영등포구 여의도동 27-3

대한투자신탁 빌딩 1 8층

한국 오라클 한글 매뉴얼 담당

회신을 원하신다면 아래에 이름, 주소, 전화 번호를 기입해 주십시오.

소프트웨어에 문제가 있으면 사용자 지역의 O racle World Wide Support Center로문의하십시오.

x x v

Page 28: Oracle8 - Tistory

x x v i

Page 29: Oracle8 - Tistory
Page 30: Oracle8 - Tistory

x x v i i

머리말

두권의 볼륨으로 구성된 이 설명서에서는 객체 관계형 데이터베이스 관리 시스템인O racle 서버의 모든 기능을 설명합니다. 또한 O racle 서버의 기능 수행 방식을 설명하며다른 O racle 서버 설명서에 나오는 실질적인 정보에 대한 기본 개념을 제공합니다. 이 설명서의 내용은 모든 운영 체제에서 실행되는 O racle 서버에 적용됩니다.

O ra c l e 8i와 O ra c l e 8i E n terprise Edition

O racle8i 개념 설명서에는 O ra c l e 8 i와 O racle8i Enterprise Edition 제품의 특성과 기능에 대해 설명하는 내용이 수록되어 있습니다. Ora c l e 8 i와 O racle8i EnterpriseE d i t i o n은 동일한 기본 기능을 가지고 있지만 몇 가지 고급 기능은 Enterprise Edition에서만 사용할 수 있고 그 중 일부는 선택 사항입니다. 예를 들어, 테이블을 분할하려면Enterprise Edition과Partitioning 옵션이있어야 합니다.

O ra c l e 8 i와 O racle8i Enterprise Edition 간의차이점 및 사용 가능한 기능과 옵션에 대한 내용은 O racle8i 입문서를 참조하십시오.

Page 31: Oracle8 - Tistory

대상 독자

이 설명서는 데이터베이스 관리자, 시스템 관리자 및 데이터베이스 응용 프로그램 개발자를 대상으로 합니다.

대상 독자에 대한 전제

관계형 데이터베이스에 대한 개념과 O ra c l e이 실행되는 운영 체제 환경을 잘 알고 있어야 합니다.

우선 모든 독자는 1장“O racle 서버에 대한 소개”를 읽어야 합니다. 1장에서는 이 설명서의 나머지 부분에서 사용되는 개념과 용어에 대해 포괄적으로 설명합니다.

설치 및 이전 정보

이 설명서에는 설치 또는 이전에 대한 설명이 없으므로 설치 작업에 대한 내용은 사용자 운영 체제별 오라클 설명서를, 데이터베이스와 응용 프로그램 이전에 대한 내용은 O racle8i Migra t i o n을 참조하십시오.

데이터베이스 관리 정보

이 설명서는 O racle 서버의 구조, 프로세스 및 다른 개념에 대해 설명하지만 O ra c l e서버를 관리하는 방법에 대한 내용은 없습니다. 자세한 내용은 O racle8i 관리자 설명서를 참조하십시오.

응용 프로그램 설계 정보

관리자뿐 아니라 O racle 사용 경험이 있는 사용자와 고급 데이터베이스 응용 프로그램 설계자도 이 설명서에서 유용한 정보를 찾을 수 있습니다. 하지만 데이터베이스응용 프로그램 개발자는 O racle8i Application Dev e l o p e r’s Guide - Fundam-e n t a l s와 오라클 데이터베이스 응용 프로그램을 개발하는데 사용할 도구나 언어 제품설명서를 읽어야 합니다.

설명서 구성

이 설명서는 다음과 같이 여러 부로 나누어져 있습니다.

■ 볼륨 1

- I부: Ora c l e이란

- II부: 데이터베이스구조

- III부: Oracle 인스턴스

- IV부: 객체 관계형 D B M S

x x v i i i

Page 32: Oracle8 - Tistory

■ 볼륨 2

- V부: 데이터 액세스

- VI부: SQL 문 최적화

- VII부: 병렬 SQL 및 직접 로드 I N S E RT

- VIII부: 데이터보호

- IX부: 분산 데이터베이스와 복제

- X부: 부록

볼륨 1

I부: Ora c l e이란

1장“O racle 서버에 대한 소개”

O racle 데이터 서버를 이해하는데 필요한 개념과 용어에 대한 개요가 있으므로 다른장의 상세한 정보를 사용하기 전에 읽어야 합니다.

I I부: 데이터베이스 구조

2장“데이터 딕셔너리”

오라클 데이터베이스에 대한 읽기 전용 정보를 포함하는 참조 테이블과 뷰 집합인 데이터 딕셔너리에 대해 설명합니다.

3장“테이블스페이스와 데이터 파일”

오라클 데이터베이스의 물리적 저장 영역을 테이블스페이스라는 논리적 영역으로 나누는 방법과 테이블스페이스와 관련된 물리적 운영 체제 파일인 데이터 파일에 대해설명합니다.

4장“데이터 블록, 확장 영역 및 세그먼트”

데이터 저장 방법과 저장 영역 할당 방법 및 오라클 데이터베이스 내의 다양한 객체가 저장 영역을 사용하는 방법을 설명합니다. 영역 관리에 필요한 정보는 다음 장과1 0장“스키마 객체”에서 설명합니다.

x x i x

Page 33: Oracle8 - Tistory

I I I부: Oracle 인스턴스

5장“데이터베이스와 인스턴스 시작 및 종료”

O racle 인스턴스에 대해 설명하며 데이터베이스 관리자가 오라클 데이터베이스 시스템에 대한 액세스 가능성을 제어하는 방법과 데이터베이스 작업을 제어하는 매개변수에 대해 설명합니다.

6장“분산 처리”

O racle 데이터 서버가 작동할 수 있는 분산 처리 환경에 대해 설명합니다.

7장“메모리 구조”

오라클 데이터베이스 시스템에서 사용하는 메모리 구조에 대해 설명합니다.

8장“프로세스 구조”

O racle 인스턴스의 프로세스 구조와 O ra c l e에서 사용할 수 있는 여러 가지 프로세스구성에 대해 설명합니다.

9장“데이터베이스 자원 관리”

데이터베이스 자원 관리자를 사용하여 자원 사용을 제어하는 방법에 대해 설명합니다.

I V부: 객체 관계형 D B M S

1 0장“스키마 객체”

특정 사용자(스키마) 도메인에서 생성할 수 있는 테이블, 뷰, 숫자 시퀀스, 동의어 등과 같은 데이터베이스 객체와 인덱스, 구체화된 뷰, 차원, 클러스터 및 데이터 검색을보다 효율적으로 수행할 수 있는 추가 구조에 대해 설명합니다.

1 1장“분할된 테이블과 인덱스”

대규모 테이블과 인덱스를 보다 관리하기 쉬운 조각으로 분할하는 방법에 대해 설명합니다.

1 2장“내장 데이터 유형”

고정 길이 문자열과 가변 길이 문자열, 숫자, 날짜 및 B L O B ( B i n a ry Large Object)와 같이 오라클 데이터베이스 테이블에 저장할 수 있는 관계형 데이터 유형에 대해설명합니다.

1 3장“사용자 정의 데이터 유형”

O ra c l e이 제공하는 객체 확장 영역에 대한 개요를 다룹니다.

x x x

Page 34: Oracle8 - Tistory

1 4장“사용자 정의 데이터 유형 사용”

O racle 데이터 서버에서 사용할 수 있는 사용자 정의 객체 유형에 대해 설명합니다.

1 5장“객체 뷰”

O racle 데이터 서버에서 제공하는 뷰의 확장을 설명합니다.

볼륨 2

V부: 데이터 액세스

1 6장“S Q L과 P L / S Q L”

O ra c l e과 통신하는데 사용되는 언어인 S Q L ( S t r u c t u red Query Language)과S Q L의 절차적 언어 확장판인 P L / S Q L에 대해 설명합니다.

1 7장“트랜잭션 관리”

트랜잭션 개념을 정의하고 트랜잭션 제어에 사용되는 SQL 문에 대해 설명합니다. 트랜잭션은 하나의 단위로 함께 실행되는 논리적 작업 단위입니다.

1 8장“프로시저와 패키지”

데이터베이스에 저장되는 PL/SQL 프로그램 단위인 절차적 언어 구조의 프로시저,함수 및 패키지에 대해 설명합니다.

1 9장“고급 대기열 처리”

O racle 서버에 의해 사용자로 하여금 지연된 검색 및 처리를 위해 대기열에 메시지를저장할 수 있도록 하는 O racle Advanced Queuing 기능에대해 설명합니다.

2 0장“트리거”

데이터베이스 테이블에 행을 삽입, 갱신 또는 삭제할 때 암시적으로 실행되는 프로시저인 절차적 언어 구조의 트리거에 대해 설명합니다.

2 1장“O racle 종속성 관리”

O ra c l e이 프로시저, 패키지, 트리거 및 뷰와 같은 객체에 대한 종속성을 관리하는 방법에 대해 설명합니다.

x x x i

Page 35: Oracle8 - Tistory

V I부: SQL 문 최적화

2 2장“최적기”

O ra c l e의 일부로 각 SQL 문을 가장 효율적으로 실행하는 방법을 선택하는 최적기를소개합니다.

2 3장“최적기 작업”

최적기가 SQL 문을 최적으로 실행하는 방법을 선택하는 방법에 대해 설명합니다.

2 4장“조인의 최적화”

최적기가 조인, 반대 조인 및 세미 조인을 포함하는 SQL 문을 실행하는 방법에 대해다루며 최적기가 비트맵 인덱스를 사용하여 사실 테이블을 다중 차원 테이블로 조인하는 스타 질의를 실행하는 방법을 설명합니다.

V I I부: 병렬 SQL 및 직접 로드 I N S E R T

2 5장“직접 로드 I N S E RT”

직렬 또는 병렬로 수행될 수 있는 직접 로드 I N S E RT 경로와 NOLOGGING 옵션에 대해 설명합니다.

2 6장“병렬 실행”

SQL 문(질의, DML 및 DDL 문)의 병렬 실행과 SQL 문 병렬화 규칙에 대해 설명합니다.

V I I I부: 데이터 보호

2 7장“데이터 동시성과 일관성”

O ra c l e이 다중 사용자 환경에서 공유 정보를 동시에 액세스하는 방법과 공유 정보의정확성을 유지 관리하는 방법을 설명합니다. 또한 여러 사용자가 서로의 작업을 방해하지 않으면서 동시에 작업을 수행할 수 있도록 하는 자동 처리 방법에 대해 설명합니다.

2 8장“데이터 무결성”

데이터 무결성과 데이터 무결성을 강제로 시행하는데 사용할 수 있는 선언적 무결성제약 조건에 대해 설명합니다.

2 9장“데이터베이스 액세스 제어”

데이터와 데이터베이스 자원에 대한 사용자 액세스를 제어하는 방법을 설명합니다.

3 0장“권한, 롤, 보안 정책”

시스템과 스키마 객체 레벨의 보안에 대해 설명합니다.

x x x i i

Page 36: Oracle8 - Tistory

3 1장“감사”

데이터베이스 작업을 추적하는 O racle 감사 기능에 대해 설명합니다.

3 2장“데이터베이스 복구”

데이터베이스 복구에 사용되는 파일과 구조에 대해 설명하며 고장으로부터 오라클 데이터베이스를 보호하는 방법을 설명합니다.

I X부: 분산 데이터베이스와 복제

3 3장“분산 데이터베이스”

분산 데이터베이스 구조, 원격 데이터 액세스 및 테이블 복제에 대해 설명합니다.

3 4장“데이터베이스 복제”

분산 데이터베이스 시스템에서의 오라클 데이터베이스 복제에 대해 설명합니다.

X부: 부록

부록 A “운영 체제별 정보”

이 설명서에 있는 운영 체제별 참조 사항을 모두 나열합니다.

설명서 사용법

1장“O racle 서버에 대한 소개”는 뒷부분에서 언급할 자세한 내용에 대한 기본 내용으로 O ra c l e과 관련된 개념과 용어에 대해 설명하므로 모든 독자가 읽어야 합니다.

이 설명서의 각 부는 이전에 설명한 대로 일반 독자 중 특정 독자를 위한 것입니다.예를 들어, 보안 관리에 관심이 있는 관리자는 1장을 읽은 후 V I I I부“데이터 보호”,특히 2 9장“데이터베이스 액세스 제어”, 30장“권한, 롤 및 보안 정책”및 3 1장“감사”내용을 중점적으로 읽어보시기 바랍니다.

x x x i i i

Page 37: Oracle8 - Tistory

설명서에 사용된 표기 규칙

이 설명서에서는 다양한 유형의 정보를 나타내기 위해 여러 가지 글꼴을 사용합니다.

텍스트

다음은 이 설명서의 텍스트에 사용된 표기 규칙입니다.

대문자

대문자 텍스트는 명령어 키워드, 데이터베이스 객체 이름, 매개변수, 파일 이름 등을나타내는데 사용됩니다.

예를 들어, “기본값을 넣으면 O ra c l e은 DEPTNO 열에 정의된 FOREIGN KEY무결성 제약 조건을 검사합니다.”또는“전용 롤백 세그먼트를 생성할 경우 RO L L B -ACK_SEGMENTS 초기화매개변수에 이름을 지정해야 합니다.”

기울임꼴 문자

책 제목을 표시하거나 단어를 강조할 때 기울임꼴을 사용합니다.

코드 예

S Q L, Oracle Enterprise Manager 라인 모드 및 SQL*Plus 명령어 또는 명령문은 고정 너비 글꼴로 나타납니다.

예:

INSERT INTO emp (empno, ename) VALUES (1000, ’SMITH’);ALTER TABLESPACE users ADD DATAFILE ’users2.ora’ SIZE 50K;

예제 명령문에 쉼표나 따옴표 같은 문장 부호가 있을 수 있습니다. 예제 명령문의 모든 문장 부호는 필수적입니다. 모든 예제 명령문은 세미콜론( ; )으로 마칩니다. 응용프로그램에 따라 명령문의 마침 표시로 세미콜론 또는 다른 종결자가 필요하거나 필요하지 않을 수 있습니다.

코드 예문의 대문자

예문의 대문자 단어는 O racle SQL 키워드를 나타냅니다. 그러나 명령문을 실행할때 키워드는 대소문자를 구분하지 않습니다.

코드 예문의 소문자

예문의 소문자 단어는 예제의 문맥에만 제공되는 단어를 나타냅니다. 예를 들어, 소문자 단어는 테이블, 열 또는 파일 이름을 나타낼 수 있습니다.

x x x i v

Page 38: Oracle8 - Tistory

제안을 환영합니다

오라클에서는 설명서에 대한 사용자들의 의견과 제안을 환영합니다. 제안한 내용은개정판을 위하여 중요한 정보로 사용됩니다.

다음 한글 매뉴얼 담당자의 전자 우편 주소로 귀하의 의견과 제안을 보내주십시오.

D o c T M @ k r. o ra c l e. c o m

다음 주소로 편지나 팩스를 보내셔도 됩니다.

주소: 서울시 영등포구 여의도동 27-3 대한투자신탁 빌딩 1 8층한국 오라클 한글 매뉴얼 담당

전화: (02) 369-9500

팩스: (02) 780-1687

x x x v

Page 39: Oracle8 - Tistory

x x x v i

Page 40: Oracle8 - Tistory

V데이터 액세스

V부에서는 오라클 데이터베이스의 데이터를 액세스하는 SQL 문을 구성하는 트랜잭션 사용법에 대해 설명합니다. 또한 데이터 액세스에 대한 추가 기능을 제공하는 프로시저 언어구조에 대해 설명합니다.

V부에서는 다음 장을 포함하고 있습니다.

■ 1 6장“SQL 및 P L / S Q L”

■ 1 7장“트랜잭션 관리”

■ 1 8장“프로시저 및 패키지”

■ 1 9장“고급 대기열”

■ 2 0장“트리거”

■ 2 1장“O racle 종속성 관리”

Page 41: Oracle8 - Tistory

16S Q L과 P L / S Q L

이 장에서는 S Q L (구조적 질의어)과 O ra c l e의 S Q L의 확장된 절차적 언어인 P L / S Q L에대한 개요를 설명하며 다음 내용을 다룹니다.

■ S Q L

■ SQL 처리

■ P L / S Q L

추가 정보: P L / S Q L에 대한 자세한 내용은 PL/SQL 사용 설명서 및 참조서를 참조하십시오.

S Q L과 PL/SQL 1 6 - 1

Page 42: Oracle8 - Tistory

S Q L

S Q L은 간단하지만 강력한 데이터베이스 액세스 언어로 절차적 언어가 아닙니다. 사용자 자신이 원하는 작업을 S Q L로 기술하면 SQL 언어 컴파일러는 데이터베이스를이동하여 원하는 작업을 수행할 절차를 자동으로 생성합니다.

IBM 연구소에서 S Q L을 개발하고 정의했으며 A N S I / I S O에서 관계형 데이터베이스관리 시스템을 위한 표준 언어로 S Q L을 재정의했습니다. Ora c l e에 대해 오라클사에서 구현한 S Q L은 ANSI/ISO 1992 표준 SQL 데이터 언어와 입력 항목 레벨에서100% 호환됩니다.

O racle SQL은 ANSI/ISO 표준 SQL 언어로의 많은 확장성을 포함하며 O racle 도구와 응용 프로그램은 추가 명령어를 제공합니다. Oracle 도구인 S Q L * P l u s와O racle Enterprise Manager를 사용하여 오라클 데이터베이스에 대한 모든ANSI/ISO 표준 SQL 문뿐만 아니라 이런 도구에서 사용할 수 있는 명령어나 함수를실행할 수 있습니다.

일부 O racle 도구와 응용 프로그램은 SQL 사용을 간소화하거나 마스크하지만 모든데이터베이스 작업은 S Q L을 사용하여 수행됩니다. 다른 데이터 액세스 방법은O racle 내에 구축된 봉안을 침해할 수 있고 잠재적으로 데이터 보안과 무결성을 위태롭게 할 수 있습니다.

추가 정보: SQL 명령어와 S Q L의 다른 부분(예를 들어, 연산자, 함수및 형식 모델)에 대한 자세한 내용은 O racle8i SQL 참조서를 참조하십시오.

SQL 명령어의 차이를 포함한 O racle Enterprise Manager에 대한자세한 내용은 O racle Enterprise Manager Ad m i n i s t ra t o r’sG u i d e를, SQL*Plus 명령어에 대해서는 SQL*Plus 사용 설명서 및참조서를 참조하십시오.

이 단원에서는 다음 내용을 다룹니다.

■ SQL 문

■ 비 표준 SQL 식별

■ 재귀 S Q L

■ 커서

■ 공유 S Q L

■ 구문 분석

S Q L

1 6 - 2 Oracle8i 개념 설명서, 볼륨 2

Page 43: Oracle8 - Tistory

SQL 문

오라클 데이터베이스에 있는 정보에 대해 수행되는 모든 작업은 SQL 문을 사용하여실행됩니다. SQL 문은 유효한 SQL 명령어의 특정 인스턴스입니다. 명령문은 부분적으로 S Q L에서 특별한 의미를 가지는 SQL 예약어로 구성되어 있으며 이것은 다른 용도로는 사용할 수 없습니다. 예를 들어, SELECT와 U P DAT E는 예약어이므로 테이블 이름으로 사용할 수 없습니다.

SQL 문은 매우 간단하지만 강력한 컴퓨터 프로그램이나 명령으로 생각할 수 있습니다. 명령문은 SQL “문장”과 동등해야 합니다.

SELECT ename, deptno FROM emp;

SQL 문만이 실행될 수 있습니다. 다음과 같은“문장 부분”은 SQL 문을 실행하려면더 많은 텍스트가 필요하다는 오류를 발생시킵니다.

SELECT ename

O racle SQL 문은 다음과 같은 범주로 나누어집니다.

■ 데이터 조작어 명령문( D M L )

■ 데이터 정의어 명령문( D D L )

■ 트랜잭션 제어문

■ 세션 제어문

■ 시스템 제어문

■ 내장 SQL 문

주: O ra c l e은 또한 PL/SQL 프로그램 단위에서의 SQL 문 사용을 지원합니다. 이 기능에 대한 자세한 내용은 1 8장“프로시저와 패키지”및2 0장“트리거”를 참조하십시오.

DML 문

DML 문은 기존 스키마 객체의 데이터를 질의하거나 조작합니다. DML 문을 사용하여 다음 작업을 수행할 수 있습니다.

■ 하나 이상의 테이블이나 뷰에서 데이터를 읽어 들입니다. ( S E L E C T )

■ 테이블이나 뷰에 새로운 데이터 행을 추가합니다. ( I N S E T R )

S Q L

S Q L과 PL/SQL 1 6 - 3

Page 44: Oracle8 - Tistory

■ 테이블이나 뷰에 있는 기존 행의 열 값을 변경합니다. ( U P DAT E )

■ 테이블이나 뷰에서 행을 제거합니다. ( D E L E T E )

■ SQL 문에 대한 실행 계획을 봅니다.(EXPLAIN PLAN)

■ 테이블이나 뷰를 잠궈 일시적으로 다른 사용자의 액세스를 제한합니다. ( L O C KTA B L E )

DML 문은 가장 자주 사용되는 SQL 문으로 다음은 DML 문의 예입니다.

SELECT ename, mgr, comm + sal FROM emp;

INSERT INTO emp VALUES(1234, ’DAVIS’, ’SALESMAN’, 7698, ’14-FEB-1988’, 1600, 500, 30);

DELETE FROM emp WHERE ename IN (’WARD’, ’JONES’);

DDL 문

DDL 문은 스키마 객체를 정의하고 구조를 변경하며 삭제합니다. DDL 문을 사용하여 다음 작업을 수행할 수 있습니다.

■ 데이터베이스 자체와 데이터베이스 사용자를 포함하여 스키마 객체와 다른 데이터베이스 구조를 작성, 변경, 삭제합니다. ( C R E AT E, ALT E R, DRO P )

■ 스키마 객체의 이름을 바꿉니다. ( R E NA M E )

■ 객체의 구조를 제거하지 않은 채 스키마 객체의 모든 데이터를 삭제합니다. ( T RU -N CAT E )

■ 스키마 객체에 대한 통계를 수집하며 객체 구조를 검증하고 객체 내의 체인화된행을 나열합니다. ( A NA LY Z E )

■ 권한과 롤을 부여하거나 철회합니다. ( G R A N T, REVO K E )

■ 감사 옵션을 설정하거나 해제합니다. ( AU D I T, NOAU D I T )

■ 데이터 딕셔너리에 설명을 추가합니다. ( C O M M E N T )

DDL 문은 암시적으로 이전 트랜잭션을 커밋하고 새로운 트랜잭션을 시작합니다.

다음은 DDL 문의 예입니다.

CREATE TABLE plants(COMMON_NAME VARCHAR2 (15), LATIN_NAME VARCHAR2 (40));

DROP TABLE plants;

GRANT SELECT ON emp TO scott;

S Q L

1 6 - 4 Oracle8i 개념 설명서, 볼륨 2

Page 45: Oracle8 - Tistory

REVOKE DELETE ON emp FROM scott;

데이터베이스와 데이터 액세스에 해당하는 DDL 문에 대한 자세한 내용은 2 9장“데이터베이스 액세스 제어”와 3 0장“권한, 롤, 보안 정책”및 3 1장“감사”를 참조하십시오.

트랜잭션 제어문

트랜잭션 제어문은 DML 문에 의해 변경된 내용을 관리하며 DML 문은 트랜잭션으로 그룹화합니다. DML 문을 사용하여 다음 작업을 수행할 수 있습니다.

■ 트랜잭션의 변경 내용을 영구적으로 만듭니다. ( C O M M I T )

■ 트랜잭션이 시작된 시점 또는 저장점으로 트랜잭션에서의 변경을 실행 취소합니다. ( RO L L B AC K )

■ 롤백할 수 있는 시점을 설정합니다. ( SAV E P O I N T )

■ 트랜잭션 속성을 설정합니다.(SET TRANSAC T I O N )

세션 제어문

세션 제어문은 특정 사용자 세션의 속성을 관리합니다. 예를 들어, 세션 제어문을 사용하여 다음 작업을 수행할 수 있습니다.

■ SQL 추적 기능을 활성화하거나 비활성화는 것과 같은 특별한 기능을 수행하여 현재 세션을 변경합니다. ( A LTER SESSION)

■ 현재 세션에 대한 롤(권한 그룹)을 활성화하거나 비활성화합니다.(SET RO L E )

시스템 제어문

시스템 제어문은 O racle 서버 인스턴스의 속성을 변경합니다.

A LTER SY S T E M은 유일한 시스템 제어 명령어입니다. 시스템 제어문을 사용하여최소 공유 서버 수 같은 설정값을 변경하거나 세션을 종료하고 다른 작업을 수행할수 있습니다.

내장 SQL 문

내장 SQL 문은 프로시저 언어 프로그램 내에서 D D L, DML 및 트랜잭션 제어문과공동으로 작업합니다. 내장 SQL 문은 O racle 선행 컴파일러와 함께 사용됩니다. 내장 SQL 문을 사용하여 다음 작업을 수행할 수 있습니다.

■ 커서를 정의하고 할당하며 해제합니다.(DECLARE CURSOR, OPEN,C L O S E )

S Q L

S Q L과 PL/SQL 1 6 - 5

Page 46: Oracle8 - Tistory

■ 데이터베이스를 지정하고 O ra c l e에 접속합니다.(DECLARE DATA B A S E,C O N N E C T )

■ 변수 이름을 할당합니다.(DECLARE STAT E M E N T )

■ 설명자를 초기화합니다. ( D E S C R I B E )

■ 오류와 경고 조건이 처리되는 방법을 지정합니다. ( W H E N E V E R )

■ SQL 문을 구문 분석하고 실행합니다. ( P R E PA R E, EXECUTE, EXECUTEI M M E D I AT E )

■ 데이터베이스에서 데이터를 읽어 들입니다. ( F E T C H )

비 표준 SQL 식별

O ra c l e은 표준 S Q L의“데이터베이스 언어 무결성 확장”에 확장 기능을 제공합니다.S Q L의 F I P S ( Fe d e ral Information Processing Standard) 127-2에는업체가 이러한 확장 기능을 사용하는 SQL 문을 식별하는 방법을 제공해야 합니다. FIPS 플래그 표시자를 사용하여 대화식 S Q L, Oracle 선행 컴파일러, SQL*Module에서의O racle 확장자를 식별하거나“표시”할 수 있습니다.

다르게 구현된 S Q L로 응용 프로그램을 이동하려면 FIPS 플래그 표시자를 사용합니다.

추가 정보: FIPS 플래그 표시자를 사용하는 방법은 P ro*C/C++ Pre c -ompiler Pro g ra m m e r’s Guide, Pro*COBOL Precompiler Pro g -ra m m e r’s Guide 또는 SQL*Module for Ada Pro g ra m m e r’sG u i d e를 참조하십시오.

재귀 S Q L

DDL 문이 실행되면 O ra c l e은 데이터 딕셔너리 정보를 수정하는 재귀 SQL 문을 암시적으로 생성합니다. 사용자는 O ra c l e이 내부적으로 수행하는 재귀 SQL 문에 대해서는 고려하지 않아도 됩니다.

커서

커서는 구문 분석된 명령문과 명령문 처리에 필요한 여러 정보를 저장하는 메모리 영역인 전용 SQL 영역의 핸들 또는 이름입니다.

대부분의 O racle 사용자는 O racle 유틸리티를 제어하는 자동 커서를 사용하지만 프로그램 인터페이스를 사용하면 응용 프로그램 설계자는 커서에 대해 더 많이 제어할수 있습니다. 응용 프로그램 개발에 있어 커서는 프로그램에 사용될 수 있는 명명된자원이며 응용 프로그램에 내장된 SQL 문을 구문 분석하는데 사용될 수 있습니다.

S Q L

1 6 - 6 Oracle8i 개념 설명서, 볼륨 2

Page 47: Oracle8 - Tistory

각 사용자 세션은 초기화 매개변수 O P E N _ C U R S O R S에서 제한한 수만큼의 다중 커서를 열 수 있습니다. 그러나 응용 프로그램은 시스템 메모리를 절약하기 위해 불필요한 커서는 닫아야 합니다. 커서 수에 대한 제한으로 인해 커서를 더 이상 열 수 없는 경우 데이터베이스 관리자는 OPEN_CURSORS 초기화 매개변수를 변경할 수 있습니다.

일부 명령문(주로 DDL 문)은 O ra c l e에 재귀 SQL 문을 암시적으로 실행하도록 요구하며 재귀 SQL 문도 재귀 커서를 필요로 합니다. 예를 들어, CREATE TABLE 문으로 인해 새로운 테이블과 열을 기록하기 위해 다양한 데이터 딕셔너리 테이블에 대한 갱신이 많이 발생합니다. 그러한 재귀 커서에 대해 재귀 호출이 발생하며 하나의커서가 여러 재귀 호출을 실행할 수도 있습니다. 이러한 재귀 커서는 공유 SQL 영역도 사용합니다.

공유 S Q L

O ra c l e은 응용 프로그램이 동일한 SQL 문을 데이터베이스에 전송하는 시기를 자동으로 인식합니다. 명령문의 첫 번째 인스턴스를 처리하는데 사용되는 SQL 영역은 공유됩니다. 즉, 동일한 명령문의 후속 인스턴스를 처리하는데 사용됩니다. 따라서 하나의 고유 명령문에 대해 하나의 공유 SQL 영역만이 존재합니다. 공유 SQL 영역은공유된 메모리 영역이므로 모든 O racle 프로세스가 공유 SQL 영역을 사용할 수 있습니다. SQL 영역을 공유하면 데이터베이스 서버에 대한 메모리 사용을 감소시켜 시스템 처리 능력이 향상됩니다.

명령문이 동일한지의 여부를 평가할 때 O ra c l e은 DDL 문이 내부적으로 실행한 재귀SQL 문뿐 아니라 사용자와 응용 프로그램이 직접 발생시킨 SQL 문도 고려합니다.

추가 정보: 공유 S Q L에 대한 자세한 내용은 O racle8i Ap p l i c a t i o nD ev e l o p e r’s Guide - Fundamentals를참조하십시오.

구문 분석

구문 분석은 SQL 문을 처리하는 한 단계입니다. 응용 프로그램이 SQL 문을 실행하면 응용 프로그램은 O ra c l e에 구문 분석 호출을 만듭니다. 구분 분석 호출 동안O ra c l e은 다음 작업을 수행합니다.

■ 명령문의 구문적 유효성과 의미적 유효성을 확인합니다.

■ 명령문을 생성한 프로세스가 명령문을 실행할 권한을 가지고 있는지를 확인합니다.

■ 명령문에 대한 전용 SQL 영역을 할당합니다.

S Q L

S Q L과 PL/SQL 1 6 - 7

Page 48: Oracle8 - Tistory

O ra c l e은 라이브러리 캐시에 명령문의 구문 분석된 표현을 포함하는 기존 공유 S Q L영역이 있는지를 판별합니다. 있다면 사용자 프로세스는 구문 분석된 표현을 사용하여 즉시 명령문을 실행합니다. 없다면 O ra c l e은 명령문을 구문 분석하고 사용자 프로세스는 라이브러리 캐시에 명령문에 대한 공유 SQL 영역을 할당하고 구문 분석된 표현을 저장합니다.

SQL 문에 대한 구문 분석을 호출한 응용 프로그램과 실제로 명령문을 구문 분석하는O ra c l e과의 차이점에 주의해야 합니다. 응용 프로그램이 수행한 구문 분석 호출은SQL 문과 전용 SQL 영역을 연관시킵니다. 명령문이 전용 SQL 영역과 연관되면 응용 프로그램이 구문 분석 호출을 만들지 않아도 반복적으로 실행될 수 있습니다.O ra c l e에 의한 구문 분석 작업은 SQL 문에 대해 공유 SQL 영역을 할당합니다. 명령문에 대해 공유 SQL 영역이 할당되면 이것은 다시 구문 분석되지 않고 반복적으로실행될 수 있습니다.

구문 분석 호출과 구문 분석은 실행에 비해 노력이 많이 들기 때문에 가능한 적게 실행하는 것이 바람직합니다.

이러한 설명은 PL/SQL 블록을 구문 분석하거나 PL/SQL 영역을 할당하는데도 적용됩니다.(16-15 페이지“P L / S Q L”을 참조하십시오.) 내장 프로시저, 함수, 패키지,트리거 등이 PL/SQL 영역에 할당됩니다. Ora c l e은 또한 PL/SQL 블록 내의 각SQL 문을 공유 SQL 영역과 전용 SQL 영역에 할당합니다.

SQL 처리

이 단원에서는 SQL 처리에 대한 기본 사항을 소개하며 다음 내용을 다룹니다.

■ SQL 문 실행의 개요

■ DML 문 처리

■ DDL 문 처리

■ 트랜잭션 제어

SQL 문 실행의 개요

그림 1 6 - 1은 일반적으로 SQL 문을 처리하고 실행하는데 사용되는 단계에 대한 개요를 나타냅니다. 어떤 경우 O ra c l e은 이러한 단계를 조금 다른 순서로 실행할 수도 있습니다. 예를 들어, 사용자가 코드를 작성한 방법에 따라 DEFINE 단계가 F E T C H단계 바로 전에 수행될 수도 있습니다.

많은 O racle 도구에서 몇몇 단계는 자동으로 수행됩니다. 대부분의 사용자는 이러한레벨의 상세한 내용에 관심을 가지거나 알 필요는 없습니다. 그러나 오라클 응용 프로그램 작성 시 이러한 정보가 유용하게 사용될 수 있습니다.

SQL 처리

1 6 - 8 Oracle8i 개념 설명서, 볼륨 2

Page 49: Oracle8 - Tistory

그림 16-1 SQL 문 처리의 단계

SQL 처리

S Q L과 PL/SQL 1 6 - 9

질의하겠습니까?

P A R S E

설명하겠습니까?

D E F I N E

D E S C R I B E

더 하겠습니까?

더 하겠습니까?

예 예

예아니오

아니오

다시 구문 분석하겠습니까?

바인드하겠습니까?바인드하겠습니까?

E X E C U T E

P A R A L L E L I Z E

더 하겠습니까?

B I N D

아니오

아니오아니오

질의하겠습니까?

C L O S E

다른 작업을실행하겠습니까?

더 하겠습니까?

F E T C H예

예예

아니오

아니오

아니오

아니오

아니오

O P E N

Page 50: Oracle8 - Tistory

DML 문 처리

이 단원에서는 DML 문 처리의 각 단계에서 SQL 문 실행 도중 발생하는 상황에 대한 간단한 예를 제시합니다.

부서에 있는 모든 사원의 봉급을 인상하기 위해 P ro*C 프로그램을 사용하고 있다고합시다. 또한 사용하는 프로그램이 O ra c l e에 접속되어 있고 EMP 테이블을 변경하기위해 적절한 스키마에 접속되어 있다고 합시다. 프로그램에는 다음 SQL 문이 포함되어 있을 것입니다.

EXEC SQL UPDATE emp SET sal = 1.10 * salWHERE deptno = :dept_number;

D E P T _ N U M B E R는 부서 번호에 대한 값을 가지고 있는 프로그램 변수입니다. SQL문이 실행될 때 DEPT_NUMBER 값은응용 프로그램에 의해 제공되어 사용됩니다.

다음 단계는 명령문 처리의 각 유형에 대한 필수 단계입니다.

■ 1단계: 커서 생성

■ 2단계: 명령문 구문 분석

■ 5단계: 변수 바인드

■ 7단계: 명령문 실행

■ 9단계: 커서 닫기

선택적으로 또 다른 단계를 포함할 수 있습니다.

■ 6단계: 명령문 병렬화

질의( S E L E C T )는 그림 1 6 - 1에서와 같이 몇 개의 추가 단계를 필요로 합니다.

■ 3단계: 질의 결과 설명

■ 4단계: 질의 출력 정의

■ 8단계: 질의 행 인출

■ 9단계: 커서 닫기

자세한 내용은 16-12 페이지“질의처리”를 참조하십시오.

SQL 처리

1 6 - 1 0 Oracle8i 개념 설명서, 볼륨 2

Page 51: Oracle8 - Tistory

1단계: 커서 생성

프로그램 인터페이스 호출은 커서를 생성합니다. 커서는 SQL 문에 대해 독립적으로생성됩니다. 커서는 모든 SQL 문에 사용될 수 있도록 생성됩니다. 대부분의 응용 프로그램에서 커서는 자동으로 생성되지만 선행 컴파일러 프로그램에서는 커서 생성이암시적으로 발생할 수도 있고 명시적으로 선언될 수도 있습니다.

2단계: 명령문 구문 분석

명령문을 구문 분석하는 동안 SQL 문은 사용자 프로세스에서 O ra c l e로 전달되며SQL 문의 구문 분석된 표현은 공유 SQL 영역에 로드됩니다. 이러한 명령문 처리 단계에서 많은 오류가 발견될 수 있습니다.

명령문 구문 분석 프로세서는 다음과 같습니다.

■ SQL 문을 변환하여 유효한 명령문인지 검증합니다.

■ 데이터 딕셔너리 탐색을 수행하여 테이블과 열 정의를 검사합니다.

■ 필요한 객체에 대한 구문 분석 잠금을 획득하여 명령문을 구문 분석하는 동안 객체 정의가 변경되지 않도록 합니다.

■ 참조한 스키마 객체에 액세스하기 위한 권한을 검사합니다.

■ 명령문에 대한 최적의 실행 계획을 결정합니다.

■ 공유 SQL 영역으로 로드합니다

■ 분산 명령문의 경우 명령문 모두나 일부를 참조한 데이터를 포함하는 원격 노드로라우트합니다.

O ra c l e은 동일한 SQL 문에 대한 공유 SQL 영역이 공유 풀에 없을 때만 SQL 문을구문 분석합니다. 이 경우 새로운 공유 SQL 영역이 할당되고 명령문이 구문 분석됩니다. (자세한 내용은 16-7 페이지“공유 S Q L”을 참조하십시오. )

구문 분석은 명령문이 실행되는 횟수에 관계없이 한 번만 수행되어야 합니다. Ora c l e은 각 SQL 문에 대해 한 번만 변환하고 후속 명령문 참조에 대해서는 구문 분석된명령문을 재실행합니다.

SQL 문의 구문 분석이 명령문의 유효성을 검증하지만 구문 분석은 단지 명령문 실행전에 발견될 수 있는 오류만 식별합니다. 따라서 어떤 오류는 구문 분석에 의해 발견될 수 없습니다. 예를 들어, 데이터 변환 오류나 데이터 오류(기본 키에 중복된 값을입력하려는 시도 등) 및 교착 상태는 모두 실행 단계에서만 발생할 수 있는 오류 또는상황입니다.

SQL 처리

S Q L과 PL/SQL 1 6 - 1 1

Page 52: Oracle8 - Tistory

질의 처리

일반 명령문은 단순히 성공 또는 실패를 돌려주지만 질의는 성공하면 데이터를 결과로 돌려주므로 다른 유형의 SQL 문과는 다릅니다. 질의는 한 행 또는 여러 행을 돌려줄 수 있습니다. 질의의 결과는 항상 테이블 형식이며 결과 행은 한 행이나 그룹으로 인출(검색)됩니다.

질의 처리와 관련하여 몇 가지 문제점이 있습니다. 질의는 명시적인 SELECT 문뿐아니라 다른 SQL 문에 암시적인 질의(하위 질의)도 포함합니다. 예를 들어, 다음 각명령문은 실행의 일부로 질의를 요구합니다.

INSERT INTO table SELECT...

UPDATE table SET x = y WHERE...

DELETE FROM table WHERE...

CREATE table AS SELECT...

특히, 질의는 다음 사항을 필요로 합니다.

■ 읽기 일관성을 요구합니다.

■ 중간 처리를 위해 임시 세그먼트를 사용할 수 있습니다.

■ SQL 문 처리에서 설명, 정의, 인출 단계를 요구할 수 있습니다.

3단계: 질의 결과 설명

설명 단계는 질의 결과의 특성이 알려지지 않은 경우에만 필요합니다. 예를 들어, 사용자가 질의를 대화식으로 입력하는 경우입니다.

이러한 경우 설명 단계는 질의 결과의 특성(데이터 유형, 길이, 이름)을 판별합니다.

4단계: 질의 출력 정의

질의에 대한 정의 단계에서 위치, 크기, 인출한 각 값을 받기 위해 정의된 변수의 데이터 유형을 지정해야 합니다. Ora c l e은 필요한 경우 데이터 유형 변환을 수행합니다.

5단계: 변수 바인드

이 시점에서 O ra c l e은 SQL 문의 의미는 알고 있지만 명령문을 실행하기 위한 충분한 정보는 가지고 있지 않습니다. Ora c l e은 명령문에 나열된 모든 변수에 대한 값을

SQL 처리

1 6 - 1 2 Oracle8i 개념 설명서, 볼륨 2

Page 53: Oracle8 - Tistory

필요로 합니다. 앞의 예에서 O ra c l e은 D E P T _ N U M B E R에 대한 값을 필요로 합니다. 이러한 값을 얻는 프로세스를 변수 바인딩이라고 합니다.

프로그램은 값을 찾을 수 있는 위치(메모리 주소)를 지정해야 합니다. Oracle 유틸리티는 사용자에게 새로운 값에 대해 프롬프트하므로 응용 프로그램의 일반 사용자는바인드 변수를 지정하는 것을 모를 수도 있습니다.

사용자가 위치를 지정하므로 (참조에 의한 바인딩) 재실행 전에 변수를 다시 바인드하지 않아도 됩니다 사용자는 변수 값을 변경시킬 수 있고 O ra c l e은 메모리 주소를사용하여 실행할 때마다 변수 값을 참조할 수 있습니다.

O ra c l e이 데이터 유형 변환을 수행해야 한다면 사용자는 (암시적이거나 기본값이 아닌 경우) 각 값에 대한 데이터 유형과 길이를 지정해야 합니다.

추가 정보: 값에 데이터 유형과 길이를 지정하는데 대한 자세한 내용은다음 책자를 참조하십시오.

■ O racle Call Interface Pro g ra m m e r’s Guide

■ P ro*C/C++ Precompiler Pro g ra m m e r’s Guide (“동적 SQL 방법 4”참조)

■ P ro*COBOL Precompiler Pro g ra m m e r’s Guide (“동적 SQL 방법 4”참조)

6단계: 명령문 병렬화

O ra c l e은 질의(SELECT), INSERT, UPDAT E, DELETE 및 인덱스 생성이나 하위 질의에 의한 테이블 생성과 같은 일부 DDL 연산, 그리고 분할 영역에 대한 작업을 병렬화할 수 있습니다. 병렬화는 다중 서버 프로세스로 하여금 동시에 SQL 문의작업을 수행하도록 하므로 작업이 더 신속하게 완료될 수 있습니다.

병렬 S Q L에 대한 자세한 내용은 2 6장“병렬 실행”을 참조하십시오.

7단계: 명령문 실행

이 시점에서 O ra c l e은 필요한 모든 정보와 자원을 가지고 있으므로 명령문이 실행됩니다. 명령문의 질의나 I N S E RT 문이면 데이터의 내용이 변경되지 않으므로 어떠한행에 대해서도 잠금이 필요하지 않습니다. 그러나 명령문이 U P DAT E나 D E L E T E문이면 명령문에 의해 영향을 받는 모든 행은 트랜잭션에 대한 다음 C O M M I T,RO L L B AC K, SAV E P O I N T까지 잠겨 있어 데이터베이스의 다른 사용자는 사용할수 없습니다. 이것은 데이터의 무결성을 보장합니다.

일부 명령문에 대해 수행될 실행 수를 지정할 수 있습니다. 이것을 배열 처리라고 합니다. 실행 수가 n으로 주어지면 위치 바인드와 정의는 크기가 n인 배열의 시작 부분으로 가정됩니다.

SQL 처리

S Q L과 PL/SQL 1 6 - 1 3

Page 54: Oracle8 - Tistory

8단계: 질의 행 인출

(질의가 요구한 경우) 인출 단계에서 행이 선택되고 정렬됩니다. 그리고 연속적인 인출을 통해 마지막 행을 인출할 때까지 다른 결과 행이 읽혀집니다.

9단계: 커서 닫기

SQL 문 처리의 마지막 단계는 커서를 닫는 것입니다.

DDL 문 처리

DDL 문이 성공하려면 데이터 딕셔너리에 대한 쓰기 권한이 필요하므로 DDL 문의실행은 DML 문과 질의의 실행과는 다릅니다. 이러한 명령문에 대해 구문 분석 단계( 2단계)는 실제로 구문 분석뿐만 아니라 데이터 딕셔너리 참조 및 실행을 포함하게됩니다.

트랜잭션 관리, 세션 관리, 시스템 관리 SQL 문은 구문 분석과 실행 단계를 통해 처리됩니다. 이러한 명령문을 재실행하려면 다른 실행을 수행하면 됩니다.

트랜잭션 제어

일반적으로 O ra c l e에 대한 프로그래밍 인터페이스를 사용하는 응용 프로그램 설계자만이 하나의 트랜잭션으로 그룹화되어야 하는 작업 유형과 관련이 있습니다. 트랜잭션은 작업이 논리적 단위로 이루어지고 데이터가 일관성을 유지할 수 있도록 적절하게 정의되어야 합니다. 트랜잭션은 하나의 논리적 작업 단위를 수행하기 위한 필수적인 부분으로만 이루어져야 합니다.

■ 참조한 모든 테이블의 데이터는 트랜잭션이 시작되기 전이나 완료된 후에도 일관성을 유지해야 합니다.

■ 트랜잭션은 데이터의 일관성을 유지시키는 SQL 문으로만 이루어져야 합니다.

예를 들어, 두 계좌 간의 자금 전송(트랜잭션 또는 논리적 작업 단위)은 한 계좌에서는 인출(하나의 SQL 문)이 되어야 하고 또 다른 계좌에는 입금(하나의 SQL 문)이되어야 합니다. 두 작업은 하나의 작업 단위로 동시에 실패하거나 성공해야 합니다.즉, 인출 없이 입금되면 안됩니다. 한 계좌에 대한 새로운 입금과 같이 관련되지 않은작업은 자금 전송 트랜잭션에 포함되지 않아야 합니다.

트랜잭션을 형성하는 작업 유형을 결정하는 것과 함께 응용 프로그램을 설계할 때B E G I N _ D I S C R E T E _ T R A N SACTION 프로시저의 사용 시점을 결정하여 짧고 분

SQL 처리

1 6 - 1 4 Oracle8i 개념 설명서, 볼륨 2

Page 55: Oracle8 - Tistory

산되지 않은 트랜잭션의 성능을 향상시켜야 합니다. 자세한 내용은 17-8 페이지“이산 트랜잭션 관리”를 참조하십시오.

PL/SQL

P L / S Q L은 O ra c l e의 S Q L의 확장된 절차적 언어입니다. PL/SQL을 사용하여 S Q L문과 절차적 구조를 혼합해서 사용할 수 있습니다. PL/SQL을 사용하여 프로시저,함수, 패키지와 같은 PL/SQL 프로그램 단위를 정의하고 실행할 수 있습니다.

PL/SQL 프로그램 단위는 익명 블록과 내장 프로시저 등 두 가지 범주로 나누어집니다.

익명 블록은 응용 프로그램 내에 나타나는 PL/SQL 블록인데 이름이 없으며 데이터베이스에 저장되지 않습니다. 많은 응용 프로그램에서 SQL 문이 나타날 수 있는 모든 장소에 PL/SQL 블록이 나타납니다.

내장 프로시저는 O ra c l e이 데이터베이스에 저장하는 PL/SQL 블록이며 응용 프로그램에서 이름으로 이 프로시저를 호출할 수 있습니다. 내장 프로시저를 생성하면O ra c l e은 프로시저를 구문 분석하고 구문 분석 표현을 데이터베이스에 저장합니다.O ra c l e로 프로시저와 유사한 함수 및 프로시저와 함수 그룹인 패키지를 생성하고 저장할 수 있습니다.

내장 프로시저, 함수, 패키지, 데이터베이스트리거에 대한 내용은 1 8장“프로시저와패키지”및 2 0장“트리거”를 참조하십시오.

PL/SQL 실행 방법

PL/SQL 프로그램 단위를 처리하는 PL/SQL 엔진은 O racle 서버를 비롯한 많은 오라클 제품의 특별한 구성 요소입니다.

그림 1 6 - 2는 O racle 서버에 포함되어 있는 PL/SQL 엔진을 나타냅니다.

P L / S Q L

S Q L과 PL/SQL 1 6 - 1 5

Page 56: Oracle8 - Tistory

그림 16-2 PL/SQL 엔진과Oracle 서버

프로시저나 패키지는 데이터베이스에 저장됩니다. 응용 프로그램이 데이터베이스에저장된 프로시저를 호출하면 O ra c l e은 컴파일된 프로시저 또는 패키지를 시스템 글로벌 영역( S GA )의 공유 풀에 로드하고 P L / S Q L과 SQL 문 실행기를 함께 작동하여프로시저 내의 명령문을 처리합니다.

다음 오라클 제품은 PL/SQL 엔진을 포함합니다.

■ O racle 서버

■ O racle Fo r m s (버전 3 이상)

■ S Q L * M e n u (버전 5 이상)

■ O racle Reports(버전 2 이상)

■ O racle Gra p h i c s (버전 2 이상)

P L / S Q L

1 6 - 1 6 Oracle8i 개념 설명서, 볼륨 2

프로그램코드

프로그램코드

프로시저 호출

프로그램코드

프로그램 코드

SQL 문

실행기

S Q L

절차형명령문

실행기

프로시저

B e g i nP r o c e d u r a lP r o c e d u r a lS Q LP r o c e d u r a l

S Q LE N D ;

Oracle 서버

S G A PL/SQL 엔진데이터베이스응용 프로그램

데이터베이스

Page 57: Oracle8 - Tistory

다른 PL/SQL 블록에서도 내장 프로시저를 호출할 수 있는데 이것은 익명 블록이나다른 내장 프로시저일 수 있습니다. 예를 들어, Oracle Fo r m s (버전 3 이상)에서 내장 프로시저를 호출할 수 있습니다.

또한 다음과 같은 도구로 개발한 응용 프로그램의 익명 블록을 O ra c l e로 전달할 수있습니다.

■ O racle 선행 컴파일러(사용자 종료 포함)

■ O racle Call Interfa c e ( O C I )

■ S Q L * P l u s

■ S ever Manager

■ O racle Enterprise Manager

P L / S Q L에 대한 언어 생성자

PL/SQL 블록은 다음과 같은 PL/SQL 언어 생성자를 포함할 수 있습니다.

■ 변수와 상수

■ 커서

■ 예외 사항

이 단원에서는 각 생성자에 대한 일반적인 설명을 제공합니다.

추가 정보: PL/SQL 사용 설명서 및 참조서를 참조하십시오.

변수와 상수

변수와 상수는 프로시저, 함수, 패키지 내에서 선언할 수 있습니다. SQL 또는PL/SQL 문에 변수나 상수를 사용하여 필요할 때 값을 보관하거나 제공할 수 있습니다.

주: S Q L * P l u s와 같은 일부 대화식 도구를 사용하여 현재 세션에서 변수를 정의할 수 있습니다. 이러한 변수는 프로시저나 패키지 내에 선언된 변수와 유사하게 사용될 수 있습니다.

P L / S Q L

S Q L과 PL/SQL 1 6 - 1 7

Page 58: Oracle8 - Tistory

커서

프로시저, 함수, 패키지 내에서 명시적으로 커서를 선언하여 O racle 데이터를 레코드별로 처리할 수 있습니다. 커서는 또한 다른 데이터 조작 작업 지원을 위해 P L / S Q L엔진에 의해 암시적으로 선언될 수 있습니다.

예외 사항

P L / S Q L을 사용하면 내부 오류 조건이나 사용자 정의 오류 조건을 명시적으로 처리할 수 있습니다. 이를 예외 사항이라고 하며 PL/SQL 코드 처리 중에 발생합니다.내부 예외 사항은 0으로 나누기와 같은 잘못된 연산이나 PL/SQL 코드에 돌려지는O racle 오류에 의해 발생합니다. 사용자 정의 예외 사항은 명시적으로 정의되며 응용프로그램 고유의 오류 처리를 제어하기 위해 PL/SQL 블록 내에서 신호(예를 들어,계정을 파변하고 음수를 남겨 놓는 것)를 받습니다.

예외 사항이 발생하면 (신호를 받으면) PL/SQL 코드의 정상적인 실행이 중단되며예외 사항 처리기를 호출한 루틴이 실행됩니다. 특정 예외 사항 처리기를 작성하여내부 예외 사항이나 사용자 정의 예외 사항을 처리할 수 있습니다.

내장 프로시저

O ra c l e로 내장 프로시저를 생성하고 호출할 수 있습니다. 응용 프로그램이 내장 프로시저를 호출하면 O ra c l e에 있는 PL/SQL 엔진이 프로시저의 구문 분석된 표현을 데이터베이스에서 읽어 들여 처리합니다.

주: 많은 오라클 제품이 PL/SQL 구성 요소를 가지고 있지만, 이 설명서에서는 오라클 데이터베이스에 저장될 수 있고 O racle 서버의PL/SQL 엔진을 사용하여 처리할 수 있는 프로시저와 패키지만을 다룹니다.

추가 정보: 각 O racle 도구의 PL/SQL 기능은 해당 도구의 사용 설명서에서 설명합니다.

다음과 같은 도구로 개발한 응용 프로그램에서 내장 프로시저를 호출할 수 있습니다.

■ O racle 선행 컴파일러(사용자 종료 포함)

■ O racle Call Interfa c e ( O C I )

■ S Q L * M o d u l e

■ S Q L * P l u s

P L / S Q L

1 6 - 1 8 Oracle8i 개념 설명서, 볼륨 2

Page 59: Oracle8 - Tistory

■ S e rver Manager

■ O racle Enterprise Manager

다른 PL/SQL 블록, 익명 블록 또는 다른 내장 프로시저에서 내장 프로시저를 호출할 수 있습니다. 자세한 내용은 1 8장“프로시저와 패키지”를 참조하십시오.

추가 정보: 응용 프로그램의 각 유형에서 내장 프로시저를 호출하는 방식에 대한 자세한 내용은 P ro*C/C++ Precompiler Pro g ra m m e r’sGuide 또는 P ro*COBOL Precompiler Pro g ra m m e r’s Guide와 같은 특정 응용 프로그램 도구에 대한 설명서를 참조하십시오.

P L / S Q L의 동적 SQL

P L / S Q L은 실행해야 완전한 텍스트를 알 수 있는 동적 SQL 문을 실행할 수 있습니다. 동적 SQL 문은 실행 시 프로그램에 입력되고 작성된 문자열에 저장됩니다. 동적S Q L을 사용하여 일반적인 용도의 프로시저를 생성할 수 있습니다. 예를 들어, 동적S Q L을 사용하면 실행해야 이름을 알 수 있는 테이블에 대해 작업하는 프로시저를 생성할 수 있습니다.

다음 두 가지 방법으로 동적 S Q L을 포함하는 내장 프로시저 및 익명의 PL/SQL 블록을 작성할 수 있습니다.

■ PL/SQL 블록에 동적 S Q L을 포함시킵니다.

■ DBMS_SQL 패키지를 사용합니다.

또한 동적 S Q L을 사용하여 모든 D M L이나 DDL 문을 실행할 수 있습니다. 동적S Q L을 사용하면 P L / S Q L에 정적으로 내장된 DDL 문을 실행할 수 없는 문제를 해결할 수 있습니다. 예를 들어, DBMS_SQL 패키지가 제공하는 EXECUTE IMM-E D I ATE 문이나 PARSE 프로시저를 사용하여 내장 프로시저로부터 D ROP TA B L E문을 실행할 수도 있습니다.

추가 정보: 동적 S Q L의 두 가지 접근법 비교에 대한 자세한 내용은O racle8i Application Dev e l o p e r’s Guide - Fundamentals를, 동적 S Q L에 대한 자세한 내용은 PL/SQL 사용 설명서 및 참조서를 참조하십시오.

P L / S Q L

S Q L과 PL/SQL 1 6 - 1 9

Page 60: Oracle8 - Tistory

외부 프로시저

O racle 서버에서 실행되는 PL/SQL 프로시저는 C 프로그래밍 언어로 작성되거나 공유 라이브러리에 저장된 외부 프로시저나 함수를 호출할 수 있습니다. C 루틴은O racle 서버의 주소 공간과 분리된 주소 공간에서 실행됩니다.

추가 정보: 외부 프로시저와 ILMS(Inter-Language MethodS e rv i c e s )에 대한 자세한 내용은 O racle8i Application Dev e l o p e r’sGuide - Fundamentals를참조하십시오.

P L / S Q L

1 6 - 2 0 Oracle8i 개념 설명서, 볼륨 2

Page 61: Oracle8 - Tistory

17트랜잭션 관리

이 장에서는 트랜잭션을 정의하고 트랜잭션을 사용하여 작업을 관리하는 방법을 설명하며다음 내용을 다룹니다.

■ 트랜잭션 소개

■ O ra c l e과 트랜잭션 관리

■ 이산 트랜잭션 관리

■ 자율 트랜잭션

트랜잭션 관리 1 7 - 1

Page 62: Oracle8 - Tistory

트랜잭션 소개

트랜잭션은 하나 이상의 SQL 문을 포함하는 작업의 논리적 단위로 가장 작은 단위입니다. 트랜잭션에 있는 모든 SQL 문의 결과는 모두 커밋(데이터베이스에 적용)되거나 모두 롤백(데이터베이스의 작업 취소)되어야 합니다.

트랜잭션은 실행 가능한 첫 번째 SQL 문으로 시작하며 (COMMIT 문이나 RO L L -B ACK 문에 의해) 명시적으로나 (DDL 문이 실행되는 경우) 암시적으로 커밋되거나롤백될 때 종료합니다.

트랜잭션 개념 설명을 위해 은행 데이터베이스를 생각할 수 있습니다. 고객이 예금계좌에서 인출 계좌로 송금하는 경우 트랜잭션은 세 가지 분리된 작업을 수행합니다.예금 계좌의 잔액을 감소시키는 작업, 인출 계좌의 잔액을 증가시키는 작업, 트랜잭션 저널에 트랜잭션을 기록하는 작업 등입니다.

O ra c l e은 두 가지 상황을 허용해야 합니다. 세 개의 SQL 문이 모두 수행되어 계좌간에 계산이 맞다면 트랜잭션의 결과는 데이터베이스에 적용됩니다. 그러나 어떤 사정(잔고 부족, 잘못된 계좌 번호, 하드웨어 장애 등)에 의해 트랜잭션 내의 한두 명령문이 완료되지 않았다면 전체 트랜잭션은 모든 계좌의 계산이 맞도록 롤백되어야 합니다.

그림 1 7 - 1은 은행 트랜잭션 예를 나타냅니다.

트랜잭션 소개

1 7 - 2 Oracle8i 개념 설명서, 볼륨 2

Page 63: Oracle8 - Tistory

그림 17-1 은행 트랜잭션

트랜잭션 시작

트랜잭션 종료

명령문 실행 및 트랜잭션 제어

“성공적으로 실행된”SQL 문과“커밋된”트랜잭션은별개입니다.

성공적으로 실행되었다는 것은 단일 명령문의 구문이 분석되어 이것이 유효한 S Q L생성자라는 것과 전체 명령문이 오류 없이 단일 단위로 실행되었다는 것을 의미합니다. (예를 들어, 다중 행 갱신 작업에서 모든 행이 변경된 것을 들 수 있습니다.) 그러나 이 명령문을 포함하고 있는 트랜잭션이 커밋될 때까지는 트랜잭션이 롤백될 수있으므로 이 명령문에 의해 변경된 내용이 모두 취소될 수 있습니다. 이것은 단지 명령문이 성공적으로 실행된 것이며 트랜잭션이 성공적으로 실행된 것은 아닙니다.

커밋은 사용자가 명시적으로나 암시적으로“이 트랜잭션의 모든 변경 내용을 영구적인것으로 한다”라고 선언한 것입니다. 트랜잭션의 SQL 문이 변경한 내용은 영구적인

트랜잭션 소개

트랜잭션 관리 1 7 - 3

UPDATE savings_accounts

SET balance = balance - 500

WHERE account = 3209;

예금 계좌 잔액 감소

UPDATE checking_accounts

SET balance = balance + 500

WHERE account = 3208;

인출 계좌 잔액 증가

INSERT INTO journal VALUES

(journal_seq.NEXTVAL, ’1B’

3209, 3208, 500);

트랜잭션 저널에기록

COMMIT WORK;

트랜잭션 종료

Page 64: Oracle8 - Tistory

것이 되며 트랜잭션이 커밋된 후에 다른 사용자도 변경된 내용을 볼 수 있습니다. 이트랜잭션 이후에 시작된 다른 사용자의 트랜잭션만이 커밋된 변경 내용을 볼 수 있습니다.

명령문 레벨 롤백

SQL 문이 실행되는 동안 오류가 발생하면 항상 해당 명령문의 결과는 롤백됩니다.롤백의 결과는 명령문이 실행되지 않은 것과 동일합니다. 이것이 명령문 레벨 롤백입니다.

어떤 명령문 레벨의 롤백 원인이 되는 오류(기본 키에 중복된 값을 삽입하려고 할 때와 같은 오류 예)는 SQL 문 실행 단계에서 발견됩니다. 실행되지 않은 SQL 문 구문분석 단계(구문 오류와 같은)에서 발견된 오류는 명령문 레벨의 롤백 원인이 되지 않습니다. 교착 상태(동일한 데이터에 대한 경쟁)에 있는 단일 SQL 문은 명령문 레벨롤백 원인이 될 수도 있습니다. 27-17 페이지“교착상태”를 참조하십시오.

실패로 끝난 SQL 문은 자신을 수행한 작업에만 손실을 가져옵니다. 즉, 현재 트랜잭션에서 실패로 끝난 SQL 문 이전에 진행한 작업에 대해서는 손실을 입히지 않습니다. 명령문이 DDL 문인 경우 바로 이전에 진행된 암시적 커밋은 취소되지 않습니다.

주: 사용자는 롤백 명령문의 암시적 저장점을 직접 참조할 수 없습니다.

O ra c l e과 트랜잭션 관리

O ra c l e에서 트랜잭션은 첫 번째 실행 가능한 SQL 문을 만나면 시작됩니다. 실행 가능한 SQL 문은 D M L과 DDL 문을 포함하여 인스턴스에 대한 호출을 생성하는SQL 문입니다.

트랜잭션이 시작되면 O ra c l e은 사용할 수 있는 롤백 세그먼트에 트랜잭션을 할당하여새로운 트랜잭션을 위한 롤백 입력 항목을 기록합니다. 자세한 내용은 4-20 페이지

“트랜잭션과 롤백 세그먼트”를 참조하십시오.

트랜잭션은 다음과 같은 상황이 발생하면 종료합니다.

■ SAVEPOINT 절 없이 C O M M I T이나 RO L L B ACK 문을 실행한 경우

■ C R E AT E, DRO P, RENA M E, ALT E R와 같은 DDL 문을 실행할 경우 현재트랜잭션이 DML 문을 포함하고 있다면 O ra c l e은 우선 트랜잭션을 커밋하고

O r a c l e과 트랜잭션 관리

1 7 - 4 Oracle8i 개념 설명서, 볼륨 2

Page 65: Oracle8 - Tistory

DDL 문을 새로운 단일 명령문 트랜잭션으로 간주하여 실행하고 커밋합니다.

■ O ra c l e의 접속을 해제할 경우 (현재 트랜잭션이 커밋됨)

■ 사용자 프로세스가 비정상적으로 종료될 경우 (현재 트랜잭션이 롤백됨)

한 트랜잭션이 종료되면 다음 실행 가능한 SQL 문이 자동으로 다음 트랜잭션을 시작합니다.

주: 응용 프로그램은 프로그램을 종료하기 전에 항상 명시적으로 트랜잭션을 커밋하거나 롤백해야 합니다.

트랜잭션 커밋

트랜잭션을 커밋한다는 것은 트랜잭션에 있는 SQL 문이 수행한 변경 내용을 영구적인 것으로 만든다는 의미입니다.

데이터를 수정한 트랜잭션이 커밋되기 전에 다음과 같은 상황이 발생합니다.

■ O ra c l e은 시스템 글로벌 영역( S GA )의 롤백 세그먼트 버퍼에 롤백 세그먼트 레코드를 생성합니다. 롤백 정보에는 트랜잭션의 SQL 문에 의해 변경된 이전 데이터값이 들어 있습니다.

■ O ra c l e은 S GA의 리두 로그 버퍼에 리두 로그 입력 항목을 생성합니다. 이러한변경 내용은 트랜잭션이 커밋되기 전에 디스크에 기록될 수 있습니다.

■ S GA의 데이터베이스 버퍼에도 변경 작업이 수행됩니다. 이러한 변경 내용은 트랜잭션이 실제로 커밋되기 전에 디스크에 기록될 수도 있습니다.

주: S GA의 데이터베이스 버퍼에 저장된 커밋된 트랜잭션에 대한 데이터 변경 내용은 데이터베이스 기록자(DBMn) 백그라운드 프로세스에의해 데이터 파일에 즉시 기록되지 않아도 됩니다. 이러한 쓰기 작업은가장 효율적인 시점에 이루어집니다. 이러한 작업은 트랜잭션이 커밋되기 전이나 트랜잭션이 커밋된 후 어느 정도 시간이 경과되고 난 뒤에수행됩니다.

트랜잭션이 커밋되면 다음과 같은 상황이 발생합니다.

■ 관련된 롤백 세그먼트에 대한 내부 트랜잭션 테이블은 트랜잭션이 커밋되었다는사실을 기록하고 트랜잭션에 대응되는 고유한 시스템 변경 번호( S C N )가 할당되며테이블에 기록됩니다.

O r a c l e과 트랜잭션 관리

트랜잭션 관리 1 7 - 5

Page 66: Oracle8 - Tistory

■ 로그 기록자 프로세스( L GW R )는 S GA의 리두 로그 버퍼에 있는 리두 로그 입력항목을 온라인 리두 로그 파일에 기록합니다. 도한 L GW R은 트랜잭션의 S C N을온라인 리두 로그 파일에 기록합니다. 이것은 트랜잭션의 커밋을 구성하는 분리할수 없는 이벤트입니다.

■ O ra c l e은 행과 테이블에 적용되는 잠금을 해제합니다. (잠금에 대한 자세한 내용은 27-3 페이지“잠금 처리 기법”을 참조하십시오. )

■ O ra c l e은 트랜잭션을“c o m p l e t e”로 표시합니다.

백그라운 프로세스 L GW R과 D BWn에 대한 자세한 내용은 8-5 페이지“O racle 프로세스”를 참조하십시오.

트랜잭션 롤백

롤백은 커밋되지 않은 트랜잭션 내의 SQL 문에 의해 수행된 데이터에 대한 변경 내용을 취소하는 것입니다.

O ra c l e을 사용하면 커밋되지 않은 트랜잭션 전체를 롤백할 수 있습니다. 아니면 커밋되지 않은 트랜잭션의 후행 부분을 저장점이라는 표시자로 롤백할 수 있습니다. 자세한 설명은 17-7 페이지“저장점”을 참조하십시오.

모든 유형의 롤백은 동일한 프로시저를 사용합니다.

■ 명령문 레벨 롤백 (명령문 또는 교착 상태 실행 오류로 인한)

■ 저장점으로 롤백

■ 사용자 요구에 따른 트랜잭션 롤백

■ 비정상 프로세스 종료로 인한 트랜잭션 롤백

■ 인스턴스의 비정상 종료 시 모든 미해결 트랜잭션 롤백

■ 복구 중 불완전한 트랜잭션 롤백

저장점을 참조하지 않고 전체 트랜잭션을 롤백하면 다음과 같은 상황이 발생합니다.

■ O ra c l e은 해당 롤백 세그먼트를 사용하여 트랜잭션에 있는 모든 SQL 문에 의해변경된 내용을 모두 취소합니다.

■ O ra c l e은 데이터에 대한 트랜잭션의 모든 잠금을 해제합니다. (잠금에 대한 자세한 내용은 27-3 페이지“잠금 처리 기법”을 참조하십시오. )

■ 트랜잭션이 종료됩니다.

트랜잭션을 저장점으로 롤백하면 다음과 같은 상황이 발생합니다.

■ O ra c l e은 저장점 이후에 실행된 명령문만을 롤백합니다.

O r a c l e과 트랜잭션 관리

1 7 - 6 Oracle8i 개념 설명서, 볼륨 2

Page 67: Oracle8 - Tistory

■ 지정된 저장점은 보존되지만 지정된 저장점 이후에 설정된 모든 저장점은 손실됩니다.

■ O ra c l e은 저장점 이후에 획득한 모든 테이블과 행에 대한 잠금을 해제하지만 저장점 이전에 획득한 모든 데이터 잠금은 유지합니다. (잠금에 대한 자세한 내용은27-3 페이지“잠금 처리 기법”을 참조하십시오. )

■ 트랜잭션은 활성화된 상태로 유지되며 계속 실행될 수 있습니다.

저장점

트랜잭션의 문맥 내에 있는 저장점이라는 중간 표시자를 선언할 수 있습니다. 저장점은 긴 트랜잭션을 작은 부분으로 나눕니다.

저장점을 사용하면 긴 트랜잭션 내의 어떤 점에 작업을 임의로 표시할 수 있습니다.사용자는 트랜잭션에서의 현 시점 (트랜잭션의 끝부분) 이전과 트랜잭션 내에서 선언된 저장점 이후에 수행된 작업을 롤백할 수 있습니다. 예를 들어, 복잡하고 긴 일련의갱신 작업에서 저장점을 사용하면 오류가 발생했을 때 모든 명령문을 재실행하지 않아도 됩니다.

저장점은 유사한 방법으로 응용 프로그램 내에서 유용하게 사용됩니다. 프로시저가많은 함수를 포함하고 있는 경우 각 함수가 시작되기 전에 저장점을 생성할 수 있습니다. 그러면 함수에 오류가 발생해도 데이터의 상태를 함수 시작 전으로 돌려주고수정된 매개변수를 사용하여 함수를 재실행하거나 복구 작업을 수행하는 것이 쉬워집니다.

저장점으로 롤백한 후 O ra c l e은 롤백된 명령문이 획득한 데이터 잠금을 해제합니다그러면 이전에 잠긴 자원을 기다리는 다른 트랜잭션을 처리할 수 있으며 이전에 잠긴행을 갱신할 트랜잭션도 처리할 수 있습니다.

2단계 커밋 기법

분산 데이터베이스에서 O ra c l e은 네트워크 또는 시스템 장애가 발생해도 네트워크 및유지 관리 데이터 일관성에 대한 트랜잭션 제어를 조정해야 합니다.

2단계 커밋 기법은 분산 트랜잭션에 참여하는 모든 데이터베이스 서버가 트랜잭션의명령문을 모두 커밋하거나 롤백하도록 보장합니다. 2단계 커밋 기법은 무결성 제약 조건, 원격 프로시저 호출 및 트리거에 의해 수행되는 암시적 DML 작업도 보호합니다.

O ra c l e의 2단계 커밋 기법은 분산 트랜잭션을 실행하는 사용자에게 완벽한 투명성을제공합니다. 실제로 사용자는 트랜잭션이 분산되었는지의 여부를 몰라도 됩니다. 트랜잭션 종료를 표시하는 COMMIT 문은 자동으로 2단계 커밋 기법을 작동시켜 트랜

O r a c l e과 트랜잭션 관리

트랜잭션 관리 1 7 - 7

Page 68: Oracle8 - Tistory

잭션을 커밋합니다. 데이터베이스 응용 프로그램 본문 내에 분산 트랜잭션을 포함하기 위해 코딩이나 복잡한 명령문 구문이 필요하지는 않습니다.

복구자(RECO) 백그라운드 프로세스는 미확정 분산 트랜잭션(모든 유형의 시스템 또는 네트워크 장애로 커밋이 중단된 분산 트랜잭션)의 결과를 자동으로 분석합니다.장애가 복구되고 통신이 재구축되면 각 지역 O racle 서버의 R E C O는 관련된 모든노드의 미확정 분산 트랜잭션을 일관성 있게 자동으로 커밋하거나 롤백합니다.

장기간 장애가 발생하면 O ra c l e은 각 지역 관리자가 장애 결과로 발생한 미확정 분산트랜잭션을 수동으로 커밋하거나 롤백할 수 있도록 합니다. 이 옵션을 사용하여 지역데이터베이스 관리자는 장기간 장애로 인해 보류 중인 잠겨진 모든 자원을 해제할 수있습니다.

데이터베이스가 과거의 한 시점으로 복구되어야 하는 경우 O ra c l e의 복구 기능을 사용하여 다른 사이트의 데이터베이스 관리자는 보다 이전의 데이터베이스 시점으로 돌아갈 수도 있습니다. 이러한 기능을 통해 전역 데이터베이스는 일관성을 유지하게 됩니다.

이산 트랜잭션 관리

응용 프로그램 개발자는 B E G I N _ D I S C R E T E _ T R A N SACTION 프로시저를 사용하여 단기적이고 분산되지 않은 트랜잭션의 성능을 향상시킬 수 있습니다. 이 프로시저는 단기적인 트랜잭션을 보다 빠르게 실행될 수 있도록 하기 위해 트랜잭션을 간소화합니다.

이산 트랜잭션을 처리하는 동안에는 트랜잭션이 커밋되어야 데이터에 대한 변경 내용이 처리됩니다. 물론 다른 동시 트랜잭션은 트랜잭션의 이산 여부에 관계없이 커밋되지 않은 트랜잭션의 변경 내용을 볼 수 없습니다.

O ra c l e은 리두 정보를 생성하여 메모리의 별개 위치에 저장합니다. 트랜잭션이 커밋을 요구하면 O ra c l e은 다른 그룹 커밋과 함께 리두 정보를 리두 로그 파일에 기록합니다. 그리고 데이터베이스 블록에 대한 변경 내용을 블록에 직접 적용합니다.O ra c l e은 커밋이 완료되면 응용 프로그램에 대한 제어를 돌려줍니다. 트랜잭션이 커밋될 때까지 블록은 수정되지 않고 리두 정보는 리두 로그 버퍼에 저장되어 있으므로실행 취소 정보를 생성할 필요가 없어집니다.

항상 리두를 생성하는 이산 트랜잭션과 직접 경로 작업에만 적용되는 N O L O G G I N G모드 간에는 상호작용이 발생하지 않습니다. (25-5 페이지“로깅 모드”를 참조하십시오.) 따라서 이산 트랜잭션은 NOLOGGING 속성 집합을 갖는 테이블에 대하여 실행될 수 있습니다.

이산 트랜잭션 관리

1 7 - 8 Oracle8i 개념 설명서, 볼륨 2

Page 69: Oracle8 - Tistory

추가 정보: 이산 트랜잭션에 대한 자세한 내용은 O racle8i Tuning을참조하십시오.

자율 트랜잭션

자율 트랜잭션은 다른 트랜잭션으로부터 호출될 수 있는 독립 트랜잭션입니다. 자율트랜잭션을 사용하면 호출 트랜잭션의 컨텍스트로부터“빠져 나가”일부 SQL 작업을수행하여 작업을 커밋하거나 롤백할 수 있습니다. 그런 다음 호출 트랜잭션의 컨텍스트로 복귀하여 해당 트랜잭션을 계속 진행할 수 있습니다.

일당 호출되면 자율 트랜잭션은 호출 트랜잭션(주 트랜잭션)으로부터 완전히 독립적입니다. 자율 트랜잭션은 주 트랜잭션에 의해 작성된 모든 커밋되지 않은 변경 내용을 인식하지 않으며 잠금이나 자원을 주 트랜잭션과 공유하지 않습니다. 자율 트랜잭션에 의해 작성된 변경 내용은 자율 트랜잭션이 커밋되면 다른 트랜잭션이 볼 수 있게 됩니다.

자율 트랜잭션은 다른 자율 트랜잭션을 호출할 수 있습니다. 자원 한계를 제외하고자율 트랜잭션이 호출될 수 있는 레벨 수에 대한 한계는 없습니다.

자율 트랜잭션과 자율 트랜잭션의 호출 트랜잭션 사이에 교착 상태가 일어날 수 있습니다. Ora c l e은 교착 상태를 감지하고 오류를 돌려줍니다. 응용 프로그램 개발자는교착 상태를 방지해야 합니다.

자율 트랜잭션은 호출 트랜잭션의 커밋 또는 롤백 여부에 관계없이 트랜잭션 로깅이나 재시도 카운터와 같이 독립적으로 수행되어야 할 작업을 구현하는데 유용합니다.

자율 PL/SQL 블록

사용자는 PL/SQL 블록으로부터 자율 트랜잭션을 호출할 수 있습니다. PRAG M AAU T O N O M O U S _ T R A N SACTION 지정 항목은 다음 종류의 PL/SQL 블록을 자율 블록으로 선언할 수 있습니다.

■ 내장 프로시저 또는 함수

■ 지역 프로시저 또는 함수

■ 패키지

■ 유형 메소드

■ 최상위 레벨 자율 블록

자율 블록의“B E G I N . . E N D”부분에서 수행되는 트랜잭션 작업은 자율 트랜잭션의일부로 수행됩니다. 즉, 트랜잭션 작업은 호출 블록의 트랜잭션 컨텍스트에 독립적입

자율 트랜잭션

트랜잭션 관리 1 7 - 9

Page 70: Oracle8 - Tistory

니다. 자율 PL/SQL 블록이 입력되면 호출자의 트랜잭션 컨텍스트는 일시 중지됩니다. 그러면 이 블록(또는 이로부터 호출된 다른 블록)에서 수행되는 SQL 작업은 호출자의 트랜잭션 컨텍스트의 상태와 독립적이며 영향을 주지 않습니다.

SQL 작업이 자율 블록 또는 이로부터 호출된 다른 블록에서 수행되는 경우에도 자율PL/SQL 블록은 RNDS(Reads No Database State)와 W N D S ( Writes NoDatabase State)의 순수성을 가지는 것으로 간주됩니다. 따라서 SQL 컨텍스트에서이러한 블록을 호출할 수 있습니다.

추가 정보; 순수성 레벨에 대한 자세한 내용은 O racle8i Ap p l i c a t i o nD ev e l o p e r’s Guide - Fundamentals를참조하십시오.

자율 블록이 다른 자율 블록이나 자체를 호출하면 호출된 블록은 어떤 트랜잭션 컨텍스트도 호출 블록과 공유하지 않습니다. 그러나 자율 블록이 비자율 블록(즉, 자율 블록으로 선언되지 않은 블록)을 호출하면 호출된 블록은 호출 자율 블록의 트랜잭션컨텍스트를 상속 받게 됩니다.

자율 블록의 트랜잭션 제어문

자율 PL/SQL 블록에 있는 트랜잭션 제어문은 현재 활성 자율 트랜잭션에만 적용됩니다. 그러한 명령문의 예는 다음과 같습니다.

■ SET TRANSAC T I O N

■ C O M M I T

■ RO L L B AC K

■ SAV E P O I N T

■ RO L L B ACK TO SAV E P O I N T

마찬가지로 주 트랜잭션에서 트랜잭션 제어문은 해당 트랜잭션에만 적용되고 주 트랜잭션이 호출하는 다른 자율 트랜잭션에는 적용되지 않습니다. 예를 들어, 자율 트랜잭션이 시작되기 전에 발생한 저장점으로 주 트랜잭션을 롤백하면 자율 트랜잭션은롤백되지 않습니다.

추가 정보: 자율 트랜잭션에 대한 자세한 내용은 PL/SQL 사용 설명서및 참조서를 참조하십시오.

자율 트랜잭션

1 7 - 1 0 Oracle8i 개념 설명서, 볼륨 2

Page 71: Oracle8 - Tistory

18프로시저와 패키지

이 장에서는 프로시저 기능에 대해 설명하며 다음 내용을 다룹니다.

■ 내장 프로시저와 패키지 소개

■ 프로시저와 함수

■ 패키지

■ 프로시저와 패키지 저장 방법

■ 프로시저와 패키지 실행 방법

프로시저, 함수, 패키지 종속성과 이러한 종속성을 관리하는 방법은 2 1장“O racle 종속성관리”를 참조하십시오.

프로시저와 패키지 1 8 - 1

Page 72: Oracle8 - Tistory

내장 프로시저와 패키지 소개

PL/SQL 프로그램 단위인 프로시저 스키마 객체를 사용하여 데이터베이스 정보를 액세스하고 조작할 수 있습니다. 프로시저, 함수, 패키지는 모두 PL/SQL 프로그램 단위의 예입니다.

P L / S Q L은 S Q L에 대한 O ra c l e의 절차형 확장 언어입니다. PL/SQL은 S Q L을 흐름 제어와 P L / S Q L로 복잡한 프로그램을 작성할 수 있도록 하는 다른 명령문으로 확장합니다. PL/SQL 엔진은 PL/SQL 프로그램 단위를 정의, 컴파일, 실행할 때 사용하는 도구입니다. 이 엔진은 O racle 서버를 포함하는 많은 오라클 제품 중 하나의 특별한 구성 요소입니다.

많은 오라클 제품이 PL/SQL 구성 요소를 가지고 있으며 이 장에서는 특히 오라클데이터베이스에 저장되어 O racle 서버 PL/SQL 엔진을 사용하여 처리될 수 있는 프로시저와 패키지에 대해 설명합니다. 각 O racle 도구의 PL/SQL 기능은 해당 도구의 설명서에서 설명합니다. 자세한 내용은 16-15 페이지“P L / S Q L”을 참조하십시오.

내장 프로시저와 함수

프로시저와 함수는 특정 작업을 수행하기 위해 일련의 S Q L과 다른 PL/SQL 프로그래밍 언어 명령문을 논리적으로 한데 모아 놓은 스키마 객체입니다. 프로시저와 함수는 사용자의 스키마에 생성되며 계속적인 사용을 위해 데이터베이스에 저장됩니다.SQL*Plus 같은 O racle 도구를 사용하여 프로시저나 함수를 대화식으로 실행할 수있으며 O racle Fo r m s나 P recompiler 응용 프로그램 같은 데이터베이스 응용 프로그램 코드나 다른 프로시저, 트리거 코드에서 프로시저나 함수를 명시적으로 호출할수도 있습니다.

그림 1 8 - 1은 데이터베이스에 저장되고 여러 개의 다른 데이터베이스 응용 프로그램에의해 호출되는 간단한 프로시저를 보여줍니다.

프로시저와 함수는 함수가 항상 호출한 함수에 단일 값을 돌려주지만 프로시저는 그렇지 않다는 점을 제외하고는 동일합니다. 이 장에서 사용되는“프로시저”는“프로시저 또는 함수”를 의미합니다.

1 8 - 2 Oracle8i 개념 설명서, 볼륨 2

내장 프로시저와 패키지 소개

Page 73: Oracle8 - Tistory

그림 18-1 내장 프로시저

EMP 테이블에 사원 레코드를 삽입하는 그림 1 8 - 1의 내장 프로시저는 그림 1 8 - 2에나와 있습니다.

프로시저와 패키지 1 8 - 3

내장 프로시저와 패키지 소개

데이터베이스응용 프로그램

내장 프로시저

데이터베이스

Program code..Program code.HIRE_EMP(...);.Program code ode

.Program code.HIRE_EMP(...);.Program code

Prog ..Program code.HIRE_EMP(...);.Program code

H IR E_ E M P ( . . . )

BEGIN..END;

Page 74: Oracle8 - Tistory

그림 18-2 HIRE_EMP 프로시저

그림 1 8 - 1의 모든 데이터베이스 응용 프로그램은 HIRE_EMP 프로시저를 호출합니다. 대안으로 권한이 있는 사용자는 O racle Enterprise Manager 또는 S Q L * P l u s를 사용하여 다음 명령문으로 HIRE_EMP 프로시저를 실행할 수 있습니다.

EXECUTE hire_emp ('TSMITH', 'CLERK', 1037, SYSDATE, \500, NULL, 20);

위의 명령문은 T S M I T H라는 새로운 사원 레코드를 EMP 테이블에 넣습니다.

패키지

패키지는 패키지가 사용하는 커서와 변수를 포함한 관련된 프로시저와 함수의 그룹으로 계속적인 사용을 위해 하나의 단위로 데이터베이스에 모두 저장됩니다. 독립형 프로시저 및 함수와 마찬가지로 패키지화된 프로시저와 함수는 응용 프로그램이나 사용자가 명시적으로 호출할 수 있습니다.

그림 1 8 - 3은 사원 데이터베이스 관리에 사용하는 많은 프로시저를 포함하는 하나의패키지를 나타냅니다.

1 8 - 4 Oracle8i 개념 설명서, 볼륨 2

내장 프로시저와 패키지 소개

Procedure HIRE_EMP (name VARCHAR2, job VARCHAR2,mgr NUMBER, hiredate DATE, sal NUMBER,comm NUMBER, deptno NUMBER)

BEGIN..INSERT INTO emp VALUES

(emp_sequence.NEXTVAL, name, job, mgrhiredate, sal, comm, deptno);

.

.END;

Page 75: Oracle8 - Tistory

그림 18-3 내장 패키지

프로시저와 패키지 1 8 - 5

내장 프로시저와 패키지 소개

데이터베이스응용 프로그램

Program code.EMP_MGMT.FIRE_EMP(...);

Program code.EMP_MGMT.HIRE_EMP(...);.Program code

Program code.EMP_MGMT.HIRE_EMP(...);

Program code.EMP_MGMT.SAL_RAISE(...);.Program code

데이터베이스

FIRE_EMP(...)

BEGIN..END;

HIRE_EMP(...)

BEGIN..END;

SAL_RAISE(...)

BEGIN..END;

EMP_MGMT

Page 76: Oracle8 - Tistory

데이터베이스 응용 프로그램은 필요할 때 패키지화된 프로시저를 명시적으로 호출합니다. EMP_MGMT 패키지에 대한 권한을 인정받은 후에 사용자는 패키지에 포함된프로시저를 명시적으로 실행할 수 있습니다. 예를 들어, HIRE_EMP 패키지 프로시저 실행을 위해 O racle Enterprise Manager 또는 S Q L * P l u s를 사용하여 다음 명령문을 실행할 수도 있습니다.

EXECUTE emp_mgmt.hire_emp ('TSMITH', 'CLERK', 1037, SYSDATE, 500, NULL, 20);

패키지는 독립형 내장 프로시저에 비해 여러 가지 개선과 성능상의 이점을 제공합니다. (18-11 페이지“패키지”를 참조하십시오. )

프로시저와 함수

프로시저나 함수는 일련의 SQL 문과 다른 PL/SQL 생성자로 이루어진 스키마 객체로 함께 그룹화되어 데이터베이스에 저장되며 특정 문제를 해결하거나 일련의 관련된작업을 수행하는 하나의 단위로 실행됩니다. 호출자는 프로시저와 함수를 사용하여입력 전용, 출력 전용 또는 입출력 값이 되는 매개변수를 제공할 수 있습니다.

프로시저와 함수를 사용하면 S Q L의 용이성과 융통성을 구조화된 프로그래밍 언어의절차적 기능과 함께 사용할 수 있습니다. 예를 들어, 다음 명령문은 돈을 은행 구좌에입금하는 C R E D I T _ ACCOUNT 프로시저를 생성합니다.

CREATE PROCEDURE credit_account(acct NUMBER, credit NUMBER) AS

/* This procedure accepts two arguments: an account number and anamount of money to credit to the specified account. If the specified account does not exist, a new account is created. */

old_balance NUMBER;new_balance NUMBER;

BEGINSELECT balance INTO old_balance FROM accounts

WHERE acct_id = acctFOR UPDATE OF balance;

new_balance := old_balance + credit;UPDATE accounts SET balance = new_balance

WHERE acct_id = acct;COMMIT;

1 8 - 6 Oracle8i 개념 설명서, 볼륨 2

프로시저와 함수

Page 77: Oracle8 - Tistory

EXCEPTIONWHEN NO_DATA_FOUND THEN

INSERT INTO accounts (acct_id, balance)VALUES(acct, credit);

WHEN OTHERS THENROLLBACK;

END credit_account;

SQL 문과 PL/SQL 문이 위의 프로시저 예제에 모두 포함되어 있음에 유의하십시오.

프로시저 지침

내장 프로시저 설계 시 다음 지침을 사용합니다.

■ 하나의 작업을 중점적으로 완료하도록 프로시저를 정의합니다. 여러 프로시저 코드에서 불필요하게 중복될 수 있는 공통적인 하위 작업이 있을 수 있으므로 여러개의 서로 다른 하위 작업을 가지는 긴 프로시저는 정의하지 마십시오.

■ 다른 O racle 특성에 의해 제공되는 기능과 중복되는 프로시저는 정의하지 마십시오. 예를 들어, 선언적 무결성 제약 조건을 사용하여 쉽게 강제로 수행할 수 있는간단한 데이터 무결성 규칙 강제 수행을 위한 프로시저는 정의하지 마십시오.

프로시저의 이점

프로시저는 다음과 같은 부분에서 장점을 제공합니다.

보안

내장 프로시저는 데이터 보안을 강제로 수행하도록 합니다. 사용자는 정의자의 권한으로 실행되는 프로시저와 함수를 통해서만 데이터에 액세스하도록 데이터베이스 작업을 제한할 수 있습니다. (18-9 페이지“정의자 권한과 호출자 권한”을 참조하십시오.) 예를 들어, 사용자에게 테이블을 갱신하는 프로시저에 액세스하는 권한을 부여하고 테이블 자체를 액세스하는 권한은 부여하지 않을 수 있습니다. 사용자가 프로시저를 호출하면 프로시저는 프로시저 소유자의 권한으로 실행합니다. 프로시저를 실행하는 권한만 있는 (기본 테이블을 질의, 갱신, 삭제하는 권한이 없는) 사용자는 프로시저를 호출할 수는 있지만 테이블 데이터를 조작할 수는 없습니다.

프로시저와 패키지 1 8 - 7

프로시저와 함수

Page 78: Oracle8 - Tistory

성능

내장 프로시저는 다음과 같은 방법으로 데이터베이스 성능을 향상시킵니다.

■ 각각의 SQL 문 실행이나 전체 PL/SQL 블록의 텍스트를 O ra c l e에 보내는 것과비교하여 볼 때 네트워크를 통해 보내야 하는 정보의 양을 현격하게 줄입니다. 한번 정보를 보낸 후에는 사용될 때마다 호출되기 때문입니다.

■ 데이터베이스에서 프로시저를 컴파일한 형태를 사용할 수 있으므로 실행 시 별도로 컴파일하지 않아도 됩니다.

■ 프로시저가 S GA의 공유 풀에 있다면 디스크에서 데이터를 읽어 들이지 않고도즉시 시작할 수 있습니다.

메모리 할당

내장 프로시저는 O ra c l e의 공유 메모리 성능의 장점을 이용하므로 많은 사용자의 실행을 위해 프로시저의 단일 복사본만이 메모리에 로드되면 됩니다. 많은 사용자 사이에서 동일한 코드를 공유하면 응용 프로그램에 대한 O racle 메모리 요구 사항이 현저하게 줄어듭니다.

생산성

내장 프로시저는 개발 생산성을 증가시킵니다. 일반적인 프로시저 집합으로 응용 프로그램을 설계하여 불필요한 코딩을 피하고 생산성을 증가시킬 수 있습니다.

예를 들어, EMP 테이블에 행을 삽입, 갱신, 삭제하기 위해 프로시저를 작성할 수 있습니다. 그러면 이러한 프로시저는 작업 수행에 필요한 SQL 문을 재작성하지 않고도모든 응용 프로그램에 의해 호출될 수 있습니다. 데이터 관리 방법이 변경되면 프로시저를 사용하는 응용 프로그램이 아닌 프로시저만 수정하면 됩니다.

무결성

내장 프로시저는 응용 프로그램의 무결성과 일관성을 향상시킵니다. 일반적인 프로시저 그룹으로 응용 프로그램을 개발하면 코딩 오류를 발생할 확률을 줄일 수 있습니다.

예를 들어, 프로시저나 함수가 정확한 결과를 돌려주는지를 확인하기 위해 프로시저나 함수를 테스트할 수 있으며, 검증되었다면 다시 테스트하지 않은 채 많은 응용 프로그램에서 재사용할 수 있습니다. 프로시저가 참조하는 데이터 구조가 변경되었다면프로시저만 재컴파일하면 됩니다. 프로시저를 호출하는 응용 프로그램은 수정하지 않아도 됩니다.

1 8 - 8 Oracle8i 개념 설명서, 볼륨 2

프로시저와 함수

Page 79: Oracle8 - Tistory

익명의 PL/SQL 블록 대 내장 프로시저

내장 프로시저는 생성되어 데이터베이스에 스키마 객체로 저장됩니다. 내장 프로시저가 생성되고 컴파일되면 재컴파일하지 않고 실행될 수 있는 명명된 객체입니다. 또한 종속성 정보는 데이터 딕셔너리에 저장되어 각 내장 프로시저의 유효성을 보장합니다.

내장 프로시저의 대안으로 O racle 도구 또는 응용 프로그램에서 O racle 서버로 명명되지 않은 PL/SQL 블록을 보내 익명의 PL/SQL 블록을 생성할 수 있습니다.O ra c l e은 PL/SQL 블록을 컴파일하여 컴파일된 버전을 S GA 공유 풀에 넣지만 데이터베이스에 있는 소스 코드나 컴파일된 버전을 현재 인스턴스 밖에서 재사용할 수 있도록 저장하지는 않습니다. 공유 S Q L을 사용하면 공유 풀이 비워지기 전까지 공유풀에 있는 익명의 PL/SQL 블록은 재사용되고 공유될 수 있습니다.

동일한 방법으로 데이터베이스 응용 프로그램 밖의 PL/SQL 블록을 데이터베이스나메모리에 저장된 데이터베이스 프로시저로 이동하여 실행 시 불필요한 프로시저 재컴파일을 피할 수 있으므로 응용 프로그램과 O ra c l e의 전체 성능이 향상됩니다.

독립형 프로시저

패키지 내에 정의되지 않은 내장 프로시저를 독립형 프로시저라고 합니다. 패키지 내에 정의된 프로시저는 패키지의 일부분으로 간주합니다. (패키지의 장점에 대한 내용은 18-11 페이지“패키지”를 참조하십시오. )

정의자 권한 및 호출자 권한

PL/SQL 프로시저는 프로시저 정의에 따라 소유자 권한(정의자 권한) 또는 현재 사용자 권한(호출자 권한)으로 실행될 수 있습니다.

■ 정의자 권한 프로시저는 정의자 권한으로 실행합니다. 정의자 권한 프로시저에서는 롤을 사용할 수 없습니다.

■ 호출자 권한 프로시저에서는 롤을 사용할 수 있으며 모든 호출자 권한으로 실행합니다.

권한에 대한 자세한 내용은 30-7 페이지“프로시저 보안 항목”을, 롤에 대한 자세한내용은 30-20 페이지“PL/SQL 블록과롤”을 참조하십시오.

프로시저와 패키지 1 8 - 9

프로시저와 함수

Page 80: Oracle8 - Tistory

현재 사용자

호출자 권한 프로시저가 소프트웨어 묶음에서 호출되는 첫 번째 프로그램일 경우 호출자 또는 현재 사용자는 세션 사용자로 로그인된 사용자이거나 원격 프로시저 호출세션과 관련된 사용자입니다. 다른 호출자 권한 프로시저에 들어갈 때 현재 사용자는변경되지 않습니다.

그러나 정의자 권한 프로시저에 들어갈 때 해당 프로시저의 소유자가 현재 사용자가됩니다. 정의자 권한 프로시저가 호출자 권한 프로시저를 호출한 경우 현재 사용자는정의자 권한 프로시저의 소유자로 남아 있습니다.

기존의 정의자 권한 프로시저에서 현재 사용자는 프로시저 소유자에서 이전의 현재사용자 즉, 정의자 권한 프로시저를 호출한 프로시저의 현재 사용자로 전환됩니다.

외부 참조 분석

PL/SQL 프로시저의 외부 참조는 프로그램 단위 외부에 있는 객체를 참조하는 사항입니다.

■ 정의자 권한 프로시저의 경우 모든 외부 참조는 프로시저를 포함하는 스키마에서분석됩니다.

■ 호출자 권한 프로시저의 경우 외부 참조는 나타나는 명령문의 종류에 따라 다르게분석됩니다. 다음 이름은 호출자와 관련된 스키마에서 분석됩니다.

- 테이블, 뷰, 시퀀스와같은 DML 문 이름

- 커서 이름

- 동적 SQL 문과 DBMS_SQL 문 이름

호출자 권한 프로시저가 호출한 프로그램 단위 이름은 프로시저를 포함한 스키마에서 분석됩니다.

호출자의 스키마에서 이름 분석을 사용하면 응용 프로그램은 스키마를 지정하지 않고도 사용자별 테이블에 액세스할 수 있습니다. 자세한 내용은 18-19 페이지“데이터베이스 객체와 프로그램 단위에 대한 이름 분석”을 참조하십시오.

1 8 - 1 0 Oracle8i 개념 설명서, 볼륨 2

프로시저와 함수

Page 81: Oracle8 - Tistory

내장 프로시저에 대한 종속성 추적

내장 프로시저는 프로시저 본문에서 참조하는 객체에 종속적입니다. Ora c l e은 이러한종속성을 자동으로 추적하고 관리합니다. 예를 들어, 프로시저로 참조하는 테이블 정의를 변경하면 프로시저는 설계된 대로 작업을 계속하기 위해 재컴파일되어야 합니다. 보통은 자동으로 이러한 종속성 관리가 수행됩니다.

종속성 추적에 대한 자세한 내용은 2 1장“O racle 종속성 관리”를 참조하십시오.

외부 프로시저

O racle 서버에서 실행 중인 PL/SQL 프로시저는 C 프로그래밍 언어로 작성되어 공유 라이브러리에 저장된 외부 프로시저 또는 함수를 호출할 수 있습니다. C 루틴은O racle 서버의 주소 공간과 다른 별도의 주소 공간에서 수행됩니다.

추가 정보: 외부 프로시저와 Inter-Language Method Serv i c e s ( I L -M S )에 대한 자세한 내용은 O racle8i Application Dev e l o p e r’s G-uide - Fundamentals를참조하십시오.

패키지

패키지는 데이터베이스에서 관련된 프로시저와 함수 및 관련된 커서와 변수를 함께모아 하나의 단위로 캡슐화하는 방법을 제공합니다.

패키지는 선언부와 본문, 두 부분으로 생성됩니다. 패키지 선언부는 패키지의 모든공용 생성자를 선언하고 본문은 패키지의 모든 생성자(공용 및 전용)를 정의합니다.이렇게 두 부분으로 분리하면 다음과 같은 이점이 있습니다.

■ 개발자는 개발 주기에 더 많은 융통성을 가질 수 있습니다. 실제로 패키지 본문을생성하지 않고 선언부를 생성하여 공용 프로시저를 참조할 수 있습니다.

■ 패키지 선언부에서 공용으로 선언한 사항과는 별도로 패키지 본문에 포함된 프로시저 본문을 변경할 수 있습니다. 프로시저 선언부가 변경되지 않으면 패키지의변경된 프로시저를 참조하는 객체는 부적합한 것으로 표시되지 않습니다. 즉, 객체를 재컴파일해야 한다고 표시하지 않습니다. (종속성에 대한 자세한 내용은 2 1장“O racle 종속성 관리”를 참조하십시오. )

프로시저와 패키지 1 8 - 1 1

패키지

Page 82: Oracle8 - Tistory

예를 들어, 다음 예는 은행 트랜잭션을 처리하는 여러 프로시저와 함수를 포함하는패키지에 대한 본문과 선언부를 생성합니다.

CREATE PACKAGE bank_transactions (null) ASminimum_balance CONSTANT NUMBER := 100.00;PROCEDURE apply_transactions;PROCEDURE enter_transaction (acct NUMBER,

kind CHAR,amount NUMBER);

END bank_transactions;

CREATE PACKAGE BODY bank_transactions AS

/* Package to input bank transactions */

new_status CHAR(20); /* Global variable to record statusof transaction being applied. Usedfor update in APPLY_TRANSACTIONS. */

PROCEDURE do_journal_entry (acct NUMBER,kind CHAR) IS

/* Records a journal entry for each bank transaction appliedby the APPLY_TRANSACTIONS procedure. */

BEGININSERT INTO journal

VALUES (acct, kind, sysdate);IF kind = 'D' THENnew_status := 'Debit applied';

ELSIF kind = 'C' THENnew_status := 'Credit applied';

ELSEnew_status := 'New account';

END IF;END do_journal_entry;

PROCEDURE credit_account (acct NUMBER, credit NUMBER) IS

/* Credits a bank account the specified amount. If the account does not exist, the procedure creates a new account first. */

old_balance NUMBER;new_balance NUMBER;

1 8 - 1 2 Oracle8i 개념 설명서, 볼륨 2

패키지

Page 83: Oracle8 - Tistory

BEGINSELECT balance INTO old_balance FROM accounts

WHERE acct_id = acctFOR UPDATE OF balance; /* Locks account for credit update */

new_balance := old_balance + credit;UPDATE accounts SET balance = new_balance

WHERE acct_id = acct;do_journal_entry(acct, 'C');

EXCEPTIONWHEN NO_DATA_FOUND THEN /* Create new account if not found */

INSERT INTO accounts (acct_id, balance)VALUES(acct, credit);

do_journal_entry(acct, 'N');WHEN OTHERS THEN /* Return other errors to application */

new_status := 'Error: ' || SQLERRM(SQLCODE);END credit_account;

PROCEDURE debit_account (acct NUMBER, debit NUMBER) IS

/* Debits an existing account if result is greater than theallowed minimum balance. */

old_balance NUMBER;new_balance NUMBER;insufficient_funds EXCEPTION;

BEGINSELECT balance INTO old_balance FROM accounts

WHERE acct_id = acctFOR UPDATE OF balance;

new_balance := old_balance - debit;IF new_balance >= minimum_balance THEN

UPDATE accounts SET balance = new_balance

WHERE acct_id = acct;do_journal_entry(acct, 'D');ELSE

RAISE insufficient_funds;END IF;

EXCEPTIONWHEN NO_DATA_FOUND THEN

new_status := 'Nonexistent account';

프로시저와 패키지 1 8 - 1 3

패키지

Page 84: Oracle8 - Tistory

WHEN insufficient_funds THENnew_status := 'Insufficient funds';

WHEN OTHERS THEN /* Returns other errors to application */new_status := 'Error: ' || SQLERRM(SQLCODE);

END debit_account;

PROCEDURE apply_transactions IS

/* Applies pending transactions in the table TRANSACTIONS to theACCOUNTS table. Used at regular intervals to update bankaccounts without interfering with input of new transactions. */

/* Cursor fetches and locks all rows from the TRANSACTIONS table with a status of 'Pending'. Locks released after all

pending transactions have been applied. */

CURSOR trans_cursor ISSELECT acct_id, kind, amount FROM transactions

WHERE status = 'Pending'ORDER BY time_tagFOR UPDATE OF status;

BEGINFOR trans IN trans_cursor LOOP /* implicit open and fetch */IF trans.kind = 'D' THEN

debit_account(trans.acct_id, trans.amount);ELSIF trans.kind = 'C' THENcredit_account(trans.acct_id, trans.amount);

ELSEnew_status := 'Rejected';

END IF;/* Update TRANSACTIONS table to return result of applying

this transaction. */ UPDATE transactions SET status = new_status

WHERE CURRENT OF trans_cursor;END LOOP;COMMIT; /* Release row locks in TRANSACTIONS table. */

END apply_transactions;PROCEDURE enter_transaction (acct NUMBER,

kind CHAR,amount NUMBER) IS

/* Enters a bank transaction into the TRANSACTIONS table. A newtransaction is always put into this 'queue' before beingapplied to the specified account by the APPLY_TRANSACTIONS

1 8 - 1 4 Oracle8i 개념 설명서, 볼륨 2

패키지

Page 85: Oracle8 - Tistory

procedure. Therefore, many transactions can be simultaneouslyinput without interference. */

BEGININSERT INTO transactions

VALUES (acct, kind, amount, 'Pending', sysdate);COMMIT;

END enter_transaction;

END bank_transactions;

패키지를 사용하여 데이터베이스 관리자나 응용 프로그램 개발자가 유사한 루틴을 구성할 수 있습니다. 또한 패키지는 향상된 기능과 데이터베이스 성능을 제공합니다.

패키지의 이점

패키지는 관련된 프로시저, 변수 및 커서를 정의하는데 사용되며 종종 다음과 같은부분에서 여러 가지 장점을 제공합니다.

■ 관련된 프로시저와 변수 캡슐화

■ 공용 및 전용 프로시저, 변수, 상수 및 커서의 선언

■ 보다 나은 성능

캡슐화

내장 패키지를 사용하여 관련된 내장 프로시저, 변수, 데이터 유형 등을 하나의 이름을 가진 저장된 단위로 데이터베이스에 캡슐화거나 그룹화할 수 있습니다. 이렇게 하면 개발 과정 중에 보다 나은 구성을 제공하게 됩니다.

패키지에 절차형 생성자를 캡슐화하면 권한 관리가 보다 쉬워집니다. 패키지 사용 권한이 부여되면 패키지의 모든 생성자를 액세스할 수 있습니다.

공용 및 전용 데이터와 프로시저

패키지를 정의하는 방법을 사용하여 변수, 커서, 프로시저를 다음과 같이 지정할 수있습니다.

공용 패키지 사용자는 직접적으로 액세스 가능

전용 패키지 사용자에게 보이지 않음

프로시저와 패키지 1 8 - 1 5

패키지

Page 86: Oracle8 - Tistory

예를 들어, 패키지가 열 개의 프로시저를 포함한다고 합시다. 패키지는 세 개의 프로시저만 공용으로 만들어 패키지 사용자가 실행에 사용할 수 있도록 정의할 수 있습니다. 나머지 프로시저는 전용이므로 패키지에 있는 프로시저에 의해서만 액세스할 수있습니다.

공용 및 전용 패키지 변수와 2 9장“데이터베이스 액세스 제어”에서 설명할 P U B L I C권한과 혼동하지 마십시오.

성능 향상

패키지 내의 프로시저가 처음 호출되면 전체 패키지가 메모리에 로드됩니다. 독립형프로시저는 별도로 로드해야 하는 반면 패키지 로드는 한 번의 작업으로 완료됩니다.따라서 관련된 패키지 프로시저 호출이 발생할 때 메모리의 컴파일된 코드를 실행하는데 있어 디스크 입출력은 필요하지 않습니다.

패키지 본문은 선언부에 영향을 주지 않으면서 바뀌거나 재컴파일될 수 있습니다. 결과적으로 항상 선언부를 통해 패키지의 생성자를 참조하는 스키마 객체는 패키지 선언부가 바뀌지 않으면 재컴파일하지 않아도 됩니다. 패키지를 사용하면 불필요한 재컴파일을 최소화할 수 있으며 전체 데이터베이스 성능에 많은 영향을 주지 않습니다.

패키지에 대한 종속성 추적

패키지는 본문에 정의된 프로시저와 함수가 참조하는 객체에 종속됩니다. 그와 같은종속성은 자동으로 추적되어 관리됩니다. 종속성 추적에 대한 자세한 내용은 2 1장

“O racle 종속성 관리”를 참조하십시오.

O racle 지원 패키지

O ra c l e은 데이터베이스 또는 PL/SQL 기능 확장을 위한 프로시저를 포함하는 많은PL/SQL 패키지를 지원합니다. 패키지의 대부분은 D B M S _ S Q L, DBMS_LOCK 및D B M S _ J O B과 같이“D B M S _”접두어로 시작하는 이름을 가집니다. 일부 지원 패키지는 U T L _ H T T P와 U T L _ F I L E과 같은“U T L _”접두어를 가지거나“D E B U G _”와“O U T L N _”접두어를 가집니다.

추가 정보: O racle 지원 패키지에 대한 자세한 설명은 O ra c l e 8 iSupplied Packages Refe re n c e를 참조하십시오.

1 8 - 1 6 Oracle8i 개념 설명서, 볼륨 2

패키지

Page 87: Oracle8 - Tistory

프로시저와 패키지 저장 방법

프로시저나 패키지를 생성할 때 O ra c l e은 다음과 같은 단계를 수행합니다.

■ 프로시저나 패키지를 컴파일합니다.

■ 메모리에 컴파일된 코드를 저장합니다.

■ 데이터베이스에 프로시저나 패키지를 저장합니다.

프로시저와 패키지 컴파일

PL/SQL 컴파일러는 소스 코드를 컴파일합니다. PL/SQL 컴파일러는 O ra c l e에 포함된 PL/SQL 엔진의 일부분으로 컴파일 중에 오류가 발생하면 메시지가 복귀됩니다.

추가 정보: 컴파일 오류 식별에 대한 내용은 O racle8i Application De -v e l o p e r’s Guide - Fundamentals를참조하십시오.

메모리에 컴파일된 코드 저장

컴파일된 프로시저나 패키지는 시스템 글로벌 영역( S GA )의 공유 풀에 저장됩니다.그러면 코드가 빠르게 실행되며 여러 사용자가 코드를 공유할 수 있습니다. 프로시저나 패키지의 컴파일된 버전은 프로시저의 원래 호출자가 세션을 종료한다 해도 공유풀에 의해 사용되는 수정된 L RU(Least Recently Used) 알고리즘에따라 공유 풀에 남게 됩니다. 공유 풀 버퍼에 대한 자세한 내용은 7-6 페이지“공유 풀”을 참조하십시오.

데이터베이스에 프로시저나 패키지 저장

생성할 때나 컴파일할 때 다음과 같은 프로시저 또는 패키지에 대한 정보는 데이터베이스에 자동으로 저장됩니다.

스키마 객체 이름 이 이름을 사용하여 프로시저나 패키지를 식별합니다.C R E ATE PRO C E D U R E, CREATE FUNCTION,C R E ATE PAC K AG E, CREATE PAC K AGE BODY 문에 이 이름을 지정합니다.

소스 코드와 PL/SQL 컴파일러는 소스 코드를 분석하여 구문 분석 트리구문 분석 트리 라는 소스 코드의 구문 분석된 표현을 만들어 냅니다.

프로시저와 패키지 1 8 - 1 7

프로시저와 패키지 저장 방법

Page 88: Oracle8 - Tistory

의사 코드(P 코드) PL/SQL 컴파일러는 구문 분석된 코드로 의사 코드 또는 P코드를 생성합니다. PL/SQL 엔진은 프로시저나 패키지를호출할 때 이 코드를 실행합니다.

오류 메시지 프로시저나 패키지를 컴파일하는 동안 오류가 발생할 수도있습니다.

프로시저나 패키지의 불필요한 재컴파일을 피하려면 객체의 구문 분석 트리와 P 코드를 모두 데이터베이스에 저장합니다. 그러면 프로시저가 호출되었지만 현재 S GA에없을 때 PL/SQL 엔진이 프로시저나 패키지의 컴파일된 버전을 S GA 공유 풀 버퍼로 읽어 들일 수 있습니다. 구문 분석 트리는 프로시저를 호출하는 코드가 컴파일될때 사용됩니다.

데이터베이스 프로시저의 모든 부분은 해당 데이터베이스의 데이터 딕셔너리( SYSTEM 테이블스페이스)에 저장됩니다. 데이터베이스 관리자는 모든 내장 프로시저가 이 테이블스페이스에서 영역을 필요로 한다는 점을 감안하여 SYSTEM 테이블스페이스 크기를 계획해야 합니다.

프로시저와 패키지 실행 방법

독립형 또는 패키지화된 프로시저를 호출할 때 O ra c l e은 사용자 액세스를 검증하고,프로시저 유효성을 검증하며, 프로시저를 실행합니다.검증과 실행은 정의자 권한 프로시저 및 호출자 권한 프로시저에 따라 다릅니다. (18-9 페이지“정의자 권한과 호출자 권한”을 참조하십시오. )

사용자 액세스 검증

호출하는 사용자가 프로시저나 캡슐화된 패키지에 대해 EXECUTE 권한이 있는지검증해야 합니다. 프로시저를 실행하는 사용자는 프로시저에서 참조한 프로시저나 객체에 대한 액세스를 필요로 하지 않습니다. 프로시저나 패키지 생성자만이 참조된 스키마 객체에 액세스하는 권한이 필요합니다.

프로시저 유효성 검증

프로시저나 패키지 상태가 유효한지 보려면 데이터 딕셔너리를 검사합니다. 프로시저나 패키지는 마지막으로 컴파일된 후 다음 중 하나가 발생하면 부적합하게 됩니다.

1 8 - 1 8 Oracle8i 개념 설명서, 볼륨 2

프로시저와 패키지 실행 방법

Page 89: Oracle8 - Tistory

■ 프로시저나 테이블, 뷰 및 다른 프로시저 같은 패키지 내에서 참조한 하나 이상의스키마 객체가 변경되거나 삭제될 때 (예를 들어, 사용자가 테이블에 하나의 열을추가하는 경우)

■ 패키지나 프로시저가 필요로 하는 시스템 권한이 PUBLIC 또는 프로시저나 패키지의 소유자로부터 취소될 때

■ 프로시저나 패키지가 참조하는 하나 이상의 스키마 객체에 필요한 스키마 객체 권한이 PUBLIC 또는 프로시저나 패키지 소유자로부터 취소될 때

프로시저는 위의 작업 중 하나에 의해 부적합하게 되지 않으면 적합합니다. 적합한독립형 또는 패키지화된 프로시저가 호출되면 컴파일된 코드가 실행됩니다. 부적합한독립형 또는 패키지화된 프로시저가 호출되면 실행하기 전에 자동으로 재컴파일됩니다.

프로시저와 패키지의 적합성 및 부적합성, 프로시저 재컴파일, 종속성에 대한 내용은2 1장“O racle 종속성 관리”를 참조하십시오.

프로시저 실행

PL/SQL 엔진은 상황에 따라 다른 단계를 사용하여 프로시저나 패키지를 실행합니다.

■ 프로시저가 적합하고 현재 메모리에 있다면 PL/SQL 엔진은 단순히 P 코드를 실행합니다.

■ 프로시저가 적합한데 현재 메모리에 있지 않다면 PL/SQL 엔진은 디스크로부터컴파일된 P 코드를 메모리에 로드하여 실행합니다. 패키지의 경우 패키지의 모든생성자(하나의 실행 가능한 코드 부분으로 컴파일된 모든 프로시저, 변수 등)는하나의 단위로 로드됩니다.

PL/SQL 엔진은 16-16 페이지 그림 1 6 - 2에 나타난 것처럼 명령문 단위로 프로시저를 처리하여 모든 절차형 명령문을 다루며 SQL 문을 SQL 문 실행기에 전달합니다.

데이터베이스 객체와 프로그램 단위에 대한 이름 분석 정의자 권한 프로시저의 경우모든 외부 참조는 정의자의 스키마에서 분석됩니다. 호출자 권한 프로시저의 경우 외부 참조에 대한 분석은 명령문이 나타나는 종류에 따라 다릅니다.

■ DML 문과 동적 SQL 문의 외부 참조는 호출자의 스키마에서 분석되고 O ra c l e은호출자 권한을 사용하는 실행 시 액세스 권한에 대해 검사합니다. 이 규칙은 다음

프로시저와 패키지 1 8 - 1 9

프로시저와 패키지 실행 방법

Page 90: Oracle8 - Tistory

과 같은 유형의 명령문에서 테이블, 뷰 및 시퀀스와 같은 데이터베이스 객체 이름에 적용됩니다.

- SELECT, UPDAT E, INSERT 및 DELETE 문

- OPEN 커서(커서 선언부의 SELECT 문은 O P E N에서 분석됩니다. )

- LOCK TABLE 문

- 동적 SQL 문: EXECUTE IMMEDIATE 및P R E PA R E

- DBMS_SQL 문: DBMS_SQL. PA R S E ( )를 사용하여 구문 분석된 모든 명령문

스키마 객체의 이름은 실행 시 분석되지만 컴파일러는 정의자 스키마의 템플리트객체에 대한 이름을 임시로 분석하여 컴파일 시 각각의 참조 사항에 대한 유형을식별합니다.

■ DML 또는 동적 SQL 이외의 모든 명령문의 외부 참조는 정의자 스키마에서 분석되고 O ra c l e은 컴파일 시 정의자 권한을 사용하여 액세스 권한을 검사합니다.이러한 규칙은 패키지, 프로시저, 기능 및 유형과 같은 프로시저에 의해 호출되는다른 프로그램 단위의 이름에 적용됩니다.

예를 들어, “x := fu n c ( 1 )”과 같은 외부 함수 호출을 포함한 할당문에서 함수 이름“fu n c”은 프로시저의 정의자 스키마에서 결정되고“fu n c”에 대한 액세스는 정의자 권한으로 컴파일 시 검사됩니다.

데이터베이스 링크에 대한 이름 분석 PL/SQL 프로시저의 데이터베이스 링크 이름은 이전 단원에서 설명한 다음 규칙으로 분석됩니다. 원격 데이터베이스로 접속하는데 사용되는 승인 I D는 다음 중 하나입니다.

1 . 명명된 링크의 경우 O ra c l e은 원격 데이터베이스로 접속할 링크에 지정된 사용자명을 사용합니다. 이 기능은 정의자 권한 프로시저와 호출자 권한 프로시저에서동일합니다.

CREATE DATABASE LINK link1CONNECT TO scott IDENTIFIED BY tigerUSING connect_string;

J O E가 소유한 프로시저가 L I N K 1을 사용하는 경우 누가 이 프로시저를 호출해도 링크에 지정된 이름 S C O T T으로 접속됩니다.

1 8 - 2 0 Oracle8i 개념 설명서, 볼륨 2

프로시저와 패키지 실행 방법

Page 91: Oracle8 - Tistory

2. 익명의 링크의 경우 O ra c l e은 세션 사용자명을 사용하여 원격 데이터베이스로 접속합니다. 이 기능은 정의자 권한 프로시저와 호출자 권한 프로시저에서 동일합니다.

CREATE DATABASE LINK link2USING connect_string;

J O E가 소유한 프로시저가 익명의 링크 L I N K 2를 사용하고 사용자 S C O T T이프로시저를 호출한 경우 S C O T T으로 원격 데이터베이스에 접속됩니다.

3 . 현재 사용자 링크의 경우 이 기능은 정의자 권한 프로시저와 호출자 권한 프로시저에 따라 다릅니다.

- 호출자 권한 프로시저의 경우 O ra c l e은 호출자 승인 I D를 사용하여 원격 사용자로 접속합니다.

CREATE DATABASE LINK link3CONNECT TO CURRENT_USERUSING connect_string;

글로벌 사용자 S C O T T이 J O E가 소유한 호출자 권한 프로시저를 호출한 경우S C O T T이 현재 사용자이므로 L I N K 3은 사용자 S C O T T으로 원격 데이터베이스에 접속합니다.

- 정의자 권한 프로시저의 경우 O ra c l e은 소유자의 승인 I D를 사용하여 원격사용자로 접속합니다. 정의자 권한 프로시저를 J O E가 소유하고 있는 경우L I N K 3은 현재 사용자가 되는 글로벌 사용자 J O E로 원격 데이터베이스에 접속합니다.

주: O ra c l e 8에서 사용 가능했던 글로벌 사용자 기능이 수정되어 현재는 베타 고객만 사용할 수 있습니다. 이후 릴리스의 O ra c l e 8 i에서는 이기능을 사용할 수 있을 것입니다.

프로시저와 패키지 1 8 - 2 1

프로시저와 패키지 실행 방법

Page 92: Oracle8 - Tistory

1 8 - 2 2 Oracle8i 개념 설명서, 볼륨 2

프로시저와 패키지 실행 방법

Page 93: Oracle8 - Tistory

고급 대기열 처리 1 9 - 1

19고급 대기열 처리

이 장에서는 O ra c l e의 고급 대기열 처리( O racle AQ) 기능을 설명하며 다음 내용을 다룹니다.

■ 메시지 대기열 처리 소개

■ O racle 고급 대기열 처리

- 대기열 처리 엔티티

- 고급 대기열 처리의 특징

주의 사항: 이 장에서 설명하는 기능은 O racle8i Enterprise Edition을구입한 경우에만 사용할 수 있습니다. Oracle8i Enterprise Edition에서사용 가능한 기능에 대한 내용은 O racle8i 입문서를 참조하십시오.

추가 정보: O racle AQ에 대한 자세한 내용은 O racle8i Application De-v e l o p e r’s Guide - Advanced Queuing을참조하십시오.

Page 94: Oracle8 - Tistory

메시지 대기열 처리 소개

프로그램 간의 통신은 다음 두 유형 중 하나로 분류될 수 있습니다.

■ 동기식 통신 (온라인/접속된 모델)

■ 비동기식 통신 (접속되지 않은/지연된 모델)

동기식 통신

동기식 통신은 요구/응답 패러다임에 준한 것으로 한 프로그램은 또 다른 프로그램에요구 사항을 전송한 다음 응답이 도착할 때까지 기다립니다.

온라인 또는 접속 통신이라고도 하는 이 통신 모델은 작업을 계속 진행하기 전에 먼저 응답을 받아야 하는 프로그램에 적합합니다. 전통적인 클라이언트/서버 구조가 이모델에 근거를 두고 있습니다.

동기식 통신의 큰 단점은 응용 프로그램이 작업할 수 있으려면 프로그램이 사용 가능해야 하고 실행되어야 한다는 것입니다. 네트워크 문제나 시스템에 장애가 발생하면프로그램은 기능을 멈추게 됩니다.

비동기식 통신

접속되지 않거나 지연된 모델에서 프로그램은 요구 사항을 대기열에 넣고 자신의 작업을 계속 진행하면서 비동기적으로 통신합니다.

예를 들어, 응용 프로그램은 시간이 지난 다음 특정 조건이 만족되면 데이터 입력이나 작업 실행을 필요로 할 수도 있습니다. 수신 프로그램은 대기열에서 요구 사항을가져와 처리하게 됩니다. 이 모델은 요구 사항을 대기열에 넣은 다음 자신의 작업을계속 수행할 수 있는 응용 프로그램에 적합합니다. 이러한 응용 프로그램은 응답을기다리느라 중단되지 않습니다.

네트워크 문제나 시스템 장애, 응용 프로그램 오류가 발생하더라도 지연 실행이 제대로 작동되려면 요구 사항이 지속적으로 저장되고 정확하게 한 번만 처리되어야 합니다. 이것은 지속적인 대기열 처리와 트랜잭션 보호를 결합함으로써 가능합니다.

클라이언트와 서버의 요구 사항을 정확하게 한 번만 처리하는 것은 트랜잭션 무결성과 흐름 모두를 유지하는데 중요합니다. 예를 들어, 요구 사항이 특정 가격에 여러 주식 지분을 매입하는 것이었을 경우 전송이나 받는 과정, 요구 사항 실행 과정에서 네트워크 문제나 시스템 장애가 발생하더라도 이 요구 사항을 손실하거나 두 번 실행하는 것은 용납될 수 없습니다.

1 9 - 2 Oracle8i 개념 설명서, 볼륨 2

메시지 대기열 처리 소개

Page 95: Oracle8 - Tistory

O ra cle 고급 대기열 처리

O ra c l e의 고급 대기열 처리( O racle AQ )는 메시지 대기열 처리 시스템과 오라클 데이터베이스를 통합한 것으로 이를 사용하여 메시지를 대기열에 저장하여 O racle 서버로 검색하여 처리할 수 있습니다.

응용 프로그램은 P L / S Q L, Jav a, C/C++ 및 Visual Basic으로 정의된 인터페이스를 통해 대기열 처리 기능에 액세스할 수 있습니다. 따라서 이 응용 프로그램은 트랜잭션 프로세싱(TP) 모니터나 Message Oriented Middlew a re와 같은 소프트웨어를추가로 구입할 필요 없이 신뢰성 있고 효율적인 대기열 처리 방식을 제공합니다.

O racle AQ는 다음 기능을 제공합니다.

■ 메시지에 대해 구조화된 페이로드

■ 대기열 메시지의 우선순위와 순서 지정

■ 각 메시지에 대한 실행 창 지정 기능

■ 표준 S Q L을 사용한 대기열 질의 기능

■ 응용 프로그램 개발과 관리를 단순화하는 통합된 트랜잭션

■ 다수의 메시지를 한 묶음으로 대기열에서 빼는 기능

■ 다중 수신자 지정 기능

■ 지역 또는 원격 오라클 데이터베이스의 대기열에 메시지를 전달하는 기능

■ 내용 기준 필터링으로 규칙 기준 등록/구독

■ 다수의 대기열에서 메시지를 대기하는 기능

■ 지속 및 비지속 대기열 처리

■ 대기열에 저장되고 다른 대기열로 전달되는 메시지 통계

■ 분석을 위해 메시지와 메시지 기록 보존

■ 대기열 레벨 액세스 제어

■ 예외 처리 지원

■ 성능 향상을 위한 O racle Pa rallel Server 환경지원

■ 콜백 함수를 사용한 비동기식 알림

O racle AQ 대기열은 데이터베이스 테이블로 구현되므로 높은 가용성과 확장성, 신뢰성이 대기열 데이터에도 동일하게 적용됩니다. 또한 데이터베이스 개발과 관리 도구를 대기열에 사용할 수 있습니다.

고급 대기열 처리 1 9 - 3

O ra cle 고급 대기열 처리

Page 96: Oracle8 - Tistory

대기열 처리 엔티티

O racle AQ에는 메시지, 대기열, 대기열 테이블, 대리인, 수신자, 수신자 및 구독 목록, 규칙, 규칙기준구독자, 대기열모니터와 같은여러 개의 기본엔티티가 있습니다.

메시지

메시지는 대기열에 삽입되고 검색되는 가장 작은 정보 단위로 제어 정보와 페이로드데이터로 구성됩니다. 제어 정보는 메시지 관리를 위해 O racle AQ가 사용하는 메시지 속성입니다. 페이로드 데이터는 대기열에 저장된 정보로 O racle AQ에 대해 투명합니다. 페이로드 데이터 유형은 R AW 또는 객체 유형이 될 수 있습니다.

하나의 메시지는 하나의 대기열에만 존재할 수 있습니다. 메시지는 대기열에 넣기 호출에 의해 생성되고 대기열에서 빼기 호출에 의해 소비됩니다. 대기열에 넣기 및 대기열에서 빼기 호출은 D B MS _ AQ 패키지의 일부입니다.

대기열

대기열은 메시지 저장소로 사용자 (정상) 대기열과 예외 대기열, 두 가지 유형이 있습니다. 사용자 대기열은 정상적인 메시지 처리에 사용됩니다. 대기열의 모든 메시지는동일한 데이터 유형을 가져야 합니다. 어떤 이유로 메시지를 검색하고 처리할 수 없을 경우 메시지는 예외 대기열로 전송됩니다.

D B M S _ AQADM 패키지를 사용하여 대기열을 생성, 변경, 시작, 정지, 삭제할 수있습니다.

대기열 테이블

대기열은 대기열 테이블에 저장됩니다. 각 대기열 테이블은 데이터베이스 테이블로 하나 이상의 대기열을 포함합니다. 각 대기열 테이블은 기본 예외 대기열을 포함합니다.

대기열 테이블을 생성하면 약 2 5개의 열을 가진 데이터베이스 테이블이 생성됩니다.이러한 열에는 O racle AQ 메타 데이터와 사용자 정의 페이로드가 저장됩니다.

대기열 테이블에는 하나의 뷰와 두 개의 인덱스가 생성됩니다. 뷰를 사용하여 사용자는 메시지 데이터를 질의할 수 있습니다. 인덱스는 메시지 데이터에 대한 액세스 기능을 높이는데 사용됩니다.

대리인

대리인은 대기열 사용자로 메시지를 대기열에 넣는(인큐) 생산자와 메시지를 읽어 들이는(디큐) 소비자라는 두 가지 유형의 대리인이 있습니다. 주어진 시간에 임의의 수의 생산자와 소비자가 대기열에 액세스할 수 있습니다.

1 9 - 4 Oracle8i 개념 설명서, 볼륨 2

O ra cle 고급 대기열 처리

Page 97: Oracle8 - Tistory

대리인은 이름, 주소 및 프로토콜로 식별됩니다. 원격 데이터베이스의 대리인에 대해현재 지원되는 유일한 프로토콜은 queue_name@dblink 형식의주소를 사용하는 오라클 데이터베이스 링크입니다.

수신자

메시지의 수신자는 이름으로만 지정될 수 있고, 이 경우 수신자는 메시지를 넣은 대기열에서 메시지를 빼야 합니다. 수신자는 프로토콜 값이 0인 이름과 주소로 지정될수 있습니다. 주소는 동일한 데이터베이스 또는 데이터베이스 링크에 의해 식별된 다른 O racle8 데이터베이스의 대기열 이름이어야 하며, 이 경우 메시지는 지정된 대기열로 전달되고 지정된 이름의 소비자가 대기열에서 메시지를 뺄 수 있습니다. 수신자이름이 N U L L인 경우 메시지는 주소에서 지정된 대기열로 전달되고 주소에서 지정된대기열의 구독자가 대기열에서 뺄 수 있습니다. 프로토콜 필드가 0이 아닌 경우 이름과 주소 필드는 시스템에 의해 해석되지 않고 특정 소비자는 대기열에서 메시지를 뺄수 없게 됩니다. (전달 단원의 협력 업체 지원 내용을 참조하십시오. )

수신자 및 구독 목록

하나의 메시지를 다수의 소비자가 사용할 수 있도록 다음 두 가지 방법으로 설계할수 있습니다.

■ 대기열 입력자는 메시지를 읽어 들일 수 있는 소비자를 메시지 수신자로 명시적으로 지정할 수 있습니다. 수신자는 이름, 주소 및 프로토콜로 식별되는 대리인입니다.

■ 대기열 관리자는 대기열에서 메시지를 읽어 들일 수 있는 수신자의 기본 목록을 지정할 수 있습니다. 기본 목록에 지정된 수신자를 구독자라고 합니다. 수신자를 지정하지 않고 메시지를 대기열에 넣으면 메시지는 암시적으로 모든구독자에게 전송됩니다.

각각 다른 대기열은 다른 구독자를 가질 수 있고 동일한 수신자가 하나 이상의 대기열의 구독자가 될 수 있습니다. 또한 대기열의 특정 메시지는 대기열의 구독자이든아니든 특정 수신자에게 보내질 수 있으므로, 이는 구독자 목록보다 우선적으로 적용됩니다.

규칙

규칙은 해당 규칙을 따르는 메시지를 구독할 때 구독자의 여러 관심사를 정의하는데사용됩니다. 이러한 기준을 만족하는 메시지는 관심 있는 구독자에게 전달됩니다. 다른 방법으로는 구독자가 관심을 가지는 주제에 준하여 규칙이 대기열에 있는 메시지를 필터링합니다.

고급 대기열 처리 1 9 - 5

O ra cle 고급 대기열 처리

Page 98: Oracle8 - Tistory

규칙은 SQL 질의의 WHERE 절과 유사한 구문을 사용하여 참 또는 거짓으로 평가되는 부울 표현식으로 지정됩니다. 부울 표현식은 다음 조건을 포함할 수 있습니다.

■ 메시지 속성(현재 p r i o r i t y 및 c o r r i d)

■ 사용자 데이터 속성(객체 페이로드만)

■ 함수(SQL 질의의 WHERE 절에 지정된)

규칙 기준 구독자

규칙 기준 구독자는 기본 수신자 목록의 규칙과 관련된 규칙을 가진 구독자입니다.관련 규칙이 메시지를 T R U E로 평가한 경우 규칙 기준 구독자는 명백히 지정된 수신자가 없는 메시지를 받게 됩니다.

대기열 모니터

대기열 모니터는 대기열에서 메시지를 모니터하는 선택적 백그라운드 프로세스로 메시지 만기, 재시도 및 지연 방식을 제공하며 (19-7 페이지“실행 창”참조) 구간 통계치를 모을 수 있도록 합니다. (19-11 페이지“대기열처리 통계”참조)

대기열 모니터 프로세스는 프로세스 실패가 인스턴스 실패를 발생시키지 않는다는 점에서 대부분의 다른 O racle 백그라운드 프로세스와 다릅니다.

초기화 매개변수 AQ _ T M _ P RO C E S S E S는 인스턴스 시작 시 하나 이상의 대기열 모니터 프로세스 생성을 지정합니다.

고급 대기열 처리의 특징

이 단원에서는 O racle 고급 대기열 처리의 주요한 특징을 설명합니다.

구조화된 페이로드

객체 유형을 사용하여 페이로드를 구조화하여 관리할 수 있습니다. (RAW 데이터 유형은 구조화되지 않은 페이로드에 사용될 수 있습니다. )

통합 데이터베이스 레벨 작업 지원

O racle AQ는 메시지를 테이블에 저장합니다. 복구, 재시작, Oracle EnterpriseM a n a g e r와 같은 표준 데이터베이스의 모든 기능이 지원됩니다.

1 9 - 6 Oracle8i 개념 설명서, 볼륨 2

O ra cle 고급 대기열 처리

Page 99: Oracle8 - Tistory

SQL 액세스

메시지는 데이터베이스 레코드로 저장됩니다. 사용자는 S Q L을 사용하여 메시지 특성과 메시지 기록, 페이로드에 액세스할 수 있습니다. 인덱스와 같은 S Q L에서 사용할수 있는 모든 기술은 메시지 액세스를 최적화하는데 사용될 수 있습니다.

AQ _ A D M I N I S T R ATOR 롤은 대기열 정보에 대한 액세스를 제공합니다.

실행 창

메시지가 특정 시간 창에서 소비되도록 지정할 수 있습니다. 메시지는 지정된 시간(지연 시간)이 경과한 다음 처리가 가능해지고 지정된 시간 제한이 만료되기 전에 소비되도록 표시할 수 있습니다.

초기화 매개변수 AQ _ T M _ P RO C E S S는 메시지 지연과 만기 특성을 지정하는데 사용되는 대기열 메시지의 시간 모니터링을 설정합니다. 구간 통계를 모으려는 경우 시간모니터링을 활성화해야 합니다. (19-11 페이지“대기열처리 통계”참조)

이 매개변수가 1로 설정되면 O ra c l e은 메시지 모니터를 위해 하나의 대기열 모니터프로세스( Q M N 0 )를 백그라운드 프로세스로 생성합니다. 이 매개변수가 2에서 10 사이의 값으로 설정되면 O ra c l e은 해당 숫자 만큼의 QMNn 프로세스를 생성합니다.매개변수가 지정되지 않았거나 0으로 설정되면 대기열 모니터 프로세스는 생성되지않습니다. 대기열 모니터 작업을 시작하고 정지시키는데 사용되는 D B M S _ AQ A D M패키지의 프로시저는 적어도 하나의 대기열 모니터 프로세스가 이 매개변수를 지정하여 인스턴스 시작의 일부로 시작된 경우에만 유효합니다.

하나의 메시지에 여러 소비자

단일 메시지를 여러 소비자가 소비할 수 있습니다.

이동

여러 옵션을 사용하여 메시지를 대기열에서 선택할 수 있습니다. 첫 번째 메시지를선택하거나 하나의 메시지를 선택하여 일관성 있는 읽기 스냅샷을 설정하면 현재 스냅샷에 준하여 다음 메시지를 검색할 수 있습니다. 대기열에서 첫 번째 메시지를 선택할 때마다 새로운 일관성 있는 읽기 스냅샷을 얻게 됩니다.

또한 사용자는 메시지 상관 식별자를 사용하여 특정 메시지를 검색할 수 있습니다.

메시지 우선순위와 순서 지정

세 가지 옵션을 사용하여 어느 메시지를 소비할 것인지의 순서를 지정할 수 있습니다. 정렬 순서는 대기열의 모든 메시지의 순서를 결정하는데 사용되는 특성, 각 메시

고급 대기열 처리 1 9 - 7

O ra cle 고급 대기열 처리

Page 100: Oracle8 - Tistory

지에 할당된 우선순위, 다른 메시지에 대한 관계에서 메시지를 위치시킬 수 있도록하는 시퀀스 편차를 지정합니다.

여러 소비자가 동일한 대기열에 대해 작업하는 경우 소비자는 즉시 소비할 수 있는 첫번째 메시지를 가져오게 됩니다. 다른 소비자가 소비하고 있는 메시지는 무시됩니다.

대기열에서 빼기 모드

DEQUEUE 요구를 통해 메시지를 검색하거나 제거할 수 있습니다. 메시지가 검색되면 이후에 해당 메시지를 다시 처리할 수 있도록 사용 가능한 상태로 남겨집니다. 메시지가 제거되면 그 메시지는 더 이상 DEQUEUE 요구에 사용될 수 없습니다. 대기열의 특성에 따라 제거된 메시지는 대기열 테이블에 보존됩니다.

메시지 도착 대기

D E Q U E U E는 빈 대기열에 대해서도 실행될 수 있습니다. 사용자는 메시지 도착 대기에 허용된 시간과 조건을 지정할 수 있습니다.

지연과 재시도

메시지는 정확하게 한번 소비되어야 합니다. 메시지를 대기열에서 빼내려는 시도가 실패하고 트랜잭션이 롤백되면 메시지는 사용자가 지정한 지연 시간이 지난 다음에 다시처리할 수 있습니다. 다시 처리하려는 시도는 지정한 제한 시간까지 계속됩니다.

예외 대기열

메시지는 실행 창 또는 재실행 제한이라는 제약 조건 내에서 소비되지 못할 수도 있습니다. 이런 상황이 발생하면 메시지는 사용자가 지정한 예외 대기열로 이동됩니다.

가시도

ENQUEUE/DEQUEUE 요구는일반적으로 요구를 포함하는 트랜잭션의 일부로 요망되는 트랜잭션 기능을 제공합니다. 그러나 사용자는 특정 요구 자체를 트랜잭션으로 지정함으로써 요구의 결과를 즉시 다른 트랜잭션에 보이게 할 수 있습니다.

메시지 그룹화

하나의 대기열에 속해 있는 메시지는 한 번에 한 사용자만이 소비할 수 있는 집합을형성하도록 그룹화할 수 있습니다. 이 때 대기열은 메시지 그룹화가 가능한 대기열테이블에서 생성되어야 합니다.

1 9 - 8 Oracle8i 개념 설명서, 볼륨 2

O ra cle 고급 대기열 처리

Page 101: Oracle8 - Tistory

한 그룹에 속해 있는 모든 메시지는 동일한 트랜잭션에서 생성된 것이어야 하며 하나의 트랜잭션에서 생성된 모든 메시지는 동일한 그룹에 속합니다. 이러한 특징으로 인해 사용자는 복잡한 메시지를 단순한 메시지로 분할할 수 있습니다. 예를 들어, 명세기입 청구서를 포함하는 대기열로 향하는 메시지는 헤더 메시지로 시작하는 메시지와그 다음에 구체적인 사항을 나타내는 메시지, 그리고 마지막으로 꼬리말 메시지의 그룹으로 구성될 수 있습니다.

보유

사용자는 소비한 후에도 메시지가 보유되도록 지정할 수 있습니다. 이로 인해 사용자는 관련된 메시지의 기록을 만들 수 있습니다. 기록은 추적과 데이터 웨어하우스, 그리고 데이터 마이닝 작업에 사용될 수 있습니다.

메시지 기록

O racle AQ는 각 메시지의 기록에 대한 정보를 저장합니다. Oracle AQ에는 E N Q -UEUE/DEQUEUE 시간과 각 요구를 실행한 트랜잭션을 식별하는데 사용되는 정보가 포함됩니다.

추적

메시지가 보유되면 메시지는 서로 관련될 수 있습니다. 예를 들어, 메시지 m 2가 메시지 m 1이 소비된 결과로 생성되었다면 m 1은 m 2와 관련됩니다. 이로 인해 사용자는 관련된 메시지의 시퀀스를 추적할 수 있습니다. 이러한 시퀀스는 종종 응용 프로그램에 의해 구성되는“이벤트 저널”을 나타냅니다. Oracle AQ는 응용 프로그램이자동으로 이벤트 저널을 생성하도록 설계되어 있습니다.

대기열 레벨 액세스 제어

O ra c l e 8 i에서 8.1 스타일 대기열의 소유자는 해당 대기열에 대한 대기열 레벨 권한을부여하거나 철회할 수 있습니다. DBA는 새로운 AQ 시스템 레벨 권한을 다른 데이터베이스 사용자에게 부여하거나 철회할 수 있습니다. 또한 D B A는 데이터베이스 사용자를 AQ 관리자로 만들 수 있습니다.

다른 데이터베이스로 메시지 전달

하나의 데이터베이스에 있는 대기열에 삽입된 메시지는 다른 데이터베이스의 대기열로 전달될 수 있습니다. 원본 및 대상 대기열의 데이터 유형은 서로 일치해야 합니다.

메시지 전달을 사용하면 동일한 데이터베이스 또는 동일한 대기열에 접속되지 않고도응용 프로그램이 서로 통신할 수 있습니다. 전달은 지역 또는 원격 데이터베이스 간에 데이터베이스 링크 및 N e t 8을 사용하며 모두 사용 가능한 O racle AQ를 가져야합니다.

고급 대기열 처리 1 9 - 9

O ra cle 고급 대기열 처리

Page 102: Oracle8 - Tistory

메시지 전달 계획을 잡거나 취소할 수 있고 시작 시간, 전달 창 및 주기 일정에서 이후 전달 창에 대한 날짜 함수를 지정할 수 있습니다. 데이터 딕셔너리 뷰 D B A _Q U E U E _ S C H E D U L E S는 전달 메시지의 현재 일정을 설명합니다.

작업 대기열 백그라운드 프로세스( S N P n )는 메시지 전달을 처리합니다. 전달을 활성화하려면 초기화 매개변수 J O B _ Q U E U E _ P RO C E S S E S를 가진 적어도 하나의 작업대기열 프로세스를 시작해야 합니다.

전달 통계

전달 통계는 일정에 전달된 메시지/바이트 합계/평균 숫자 형식으로 사용 가능합니다. 이 정보는 메시지의 전달 성능을 조정하는데 사용될 수 있습니다.

비지속 대기열

AQ는 비지속 메시지를 비동기적으로 구독자들에게 전달할 수 있습니다. 이러한 메시지는 이벤트를 유도할 수 있고 시스템(또는 인스턴스) 장애가 발생한 경우를 제외하고는 지속되지 않습니다. AQ는공통 A P I를 가진 지속 및 비지속 메시지를 지원합니다.

등록/구독 지원

조합된 기능은 응용 프로그램 간에 등록/구독 스타일의 메시지 전달이 가능하도록 도입되었습니다. 이러한 기능에는 규칙 기준 구독자, 메시지 전달, 수신 및 알림 기능이 있습니다. 트리거는 시스템 이벤트와 사용자 이벤트를 등록하는데 사용될 수 있습니다.(20-18 페이지“시스템이벤트 및 사용자 이벤트 트리거”를 참조하십시오. )

O racle Parallel Server 환경지원

응용 프로그램은 대기열 테이블에 대해 인스턴스 친화력을 지정할 수 있습니다. AQ가 Pa rallel Serv e r와 여러 인스턴스에 사용되면 이 정보는 대기열 모니터 일정에 대해 인스턴스 간의 대기열 테이블을 분할하는데 사용됩니다. 대기열 테이블은 사용자가 지정한 인스턴스의 대기열 모니터에 의해 모니터됩니다. 인스턴스 친화력이 지정되지 않은 경우 사용 가능한 인스턴스 사이에서 대기열 테이블이 임의로 분할됩니다.대기열 테이블을 액세스하는 응용 프로그램과 대기열 테이블을 모니터하는 대기열 모니터 사이에서‘핑’기능이 가능합니다. 인스턴스 친화력을 지정하는 것이 응용 프로그램이 다른 인스턴스에서 대기열 테이블과 대기열을 액세스하지 못하도록 하지는 않습니다.

이러한 기능은 다른 인스턴스에서 실행 중인 대기열 모니터와 AQ 전달 작업 사이의‘핑’기능을 방지합니다. Oracle8i 릴리스 8 . 1 . 5에서 인스턴스 친화력(기본 및 보조)

1 9 - 1 0 Oracle8i 개념 설명서, 볼륨 2

O ra cle 고급 대기열 처리

Page 103: Oracle8 - Tistory

이 대기열 테이블에 지정될 수 있습니다. AQ가 Pa rallel Serv e r와 여러 인스턴스에사용되면 이 정보는 대기열 모니터 일정과 전달에 대해 인스턴스 간의 대기열 테이블을 분할하는데 사용됩니다. 대기열 테이블은 항상 하나의 인스턴스와 친화력을 가집니다. 지정된 친화력이 없는 경우 사용 가능한 인스턴스는 대기열 테이블의 소유자로작성됩니다. 대기열 테이블의 소유자가 삭제되면 보조 인스턴스 또는 일부 사용 가능한 인스턴스가 대기열 테이블의 소유권을 가지게 됩니다.

대기열 처리 통계

O racle AQ는 동적 테이블 GV $AQ의 시간 구간 통계 값과 대기열 처리 시스템의 현재 상태에 대한 통계를 가지고 있습니다.

대기열 처리 시스템의 현재 상태에 대한 통계에는 준비, 대기 및 만기된 메시지 수가있습니다.

다음과 같은 구간 통계 값을 보유하는 하나 이상의 대기열 모니터 프로세스가 시작되어야 합니다.

■ 각 상태(준비, 대기 및 만기)의 메시지 수

■ 대기 중인 메시지의 평균 대기 시간

■ 대기 중인 메시지의 총 대기 시간

비동기식 알림

OCI 클라이언트는 새로운 호출 O C I S u b s c r i p t i o n R e g i s t e r를 사용하여 메시지 알림에 대한 콜백을 등록할 수 있습니다. 클라이언트는 구독 이름과 콜백을 지정하는 등록 호출을 실행합니다. 구독 메시지가 수신되면 콜백이 호출됩니다. 콜백은 메시지를읽어 들이기 위해 대기열에서 메시지를 빼냅니다.

수신 기능(다중 대기열의 메시지 대기)

수신 호출은 다중 대기열의 메시지를 대기하는데 사용될 수 있는 차단 호출입니다.대기열 집합을 모니터하는 게이트웨이 응용 프로그램에서 사용될 수 있습니다. 응용프로그램은 또한 구독 목록의 메시지를 대기하는데 사용할 수 있습니다. 수신이 성공적으로 반환되면 대기열에서 메시지를 빼서 읽어 들여야 합니다.

상관 식별자

식별자를 각 메시지에 할당할 수 있습니다. 이 식별자는 특정 메시지를 읽어 들이는데 사용될 수 있습니다.

고급 대기열 처리 1 9 - 1 1

O ra cle 고급 대기열 처리

Page 104: Oracle8 - Tistory

임포트/엑스포트

대기열의 임포트/엑스포트는 기본 대기열 테이블 및 관련된 딕셔너리 테이블의 임포트/엑스포트로 구성됩니다. 대기열의 임포트/엑스포트는 대기열 테이블 단위로 이루어집니다.

대기열 테이블이 엑스포트되면 테이블 정의 정보와 대기열 데이터 모두 엑스포트됩니다. 대기열 테이블이 임포트되면 엑스포트 작업 프로시저는 대기열 딕셔너리를 유지관리합니다. 대기열 테이블 데이터도 엑스포트되므로 대기열 테이블 데이터가 이동될때 응용 프로그램 레벨의 데이터 무결성을 유지 관리할 책임은 사용자에게 있습니다.

다중 수신자를 지원하는 모든 대기열 테이블에 대해 중요한 대기열 메타 데이터를 포함하는 인덱스 구성 테이블이 있습니다. 이 메타 데이터는 대기열의 작업에 필수적이므로 임포트 후에 작업하려면 사용자는 대기열에 대한 대기열 테이블과 함께 이 인덱스 구성 테이블도 엑스포트하고 임포트해야 합니다.

대기열 테이블을 가진 스키마가 엑스포트되면 인덱스 구성 테이블은 자동으로 엑스포트됩니다. 이것은 임포트의 경우에도 동일합니다. 메타 데이터 테이블이 대기열 테이블의 일부 행의 ROW I D를 포함하므로 임포트는 메타 데이터 테이블을 임포트할 때ROW I D가 폐기되었다고 표시하게 됩니다. 대기열 처리 시스템이 임포트 프로세스의한 과정으로 폐기된 ROW I D를 자동으로 수정하므로 이 메시지는 무시될 수 있습니다. 그러나 임포트 중에 롤백 세그먼트 영역을 다 써버리는 것과 같은 다른 문제가 발생하면 그 문제가 해결된 후에 임포트가 재실행되어야 합니다.

추가 정보: O racle AQ에 대한 자세한 내용은 O racle8i Ap p l i c a t i o nD ev e l o p e r’s Guide - Advanced Queuing을참조하십시오.

1 9 - 1 2 Oracle8i 개념 설명서, 볼륨 2

O ra cle 고급 대기열 처리

Page 105: Oracle8 - Tistory

20트리거

이 장에서는 테이블이나 뷰를 수정할 때마다 또는 일부 사용자 작업이나 데이터베이스 시스템 작업이 발생할 때 암시적으로 실행되는 P L / S Q L, Java 또는 C로 작성된 프로시저인 트리거에 대해 설명합니다. 특정 스키마 객체의 DML 문, 스키마 또는 데이터베이스에서 수행되는 DDL 문, 사용자 로그온 또는 로그오프 이벤트, 서버 오류, 데이터베이스 시작 또는 인스턴스 종료 등과 같은 작업이 발생할 때마다 실행되는 트리거를 작성할 수 있습니다.

이 장에서는 다음 내용을 다룹니다.

■ 트리거 소개

■ 트리거 구성

■ 트리거 유형

■ 트리거 실행

트리거 2 0 - 1

Page 106: Oracle8 - Tistory

트리거 소개

O ra c l e을 사용하여 I N S E RT, UPDAT E, DELETE 문을 관련 테이블(또는 어떤 경우에는 뷰)에 대해 실행하거나 데이터베이스 시스템 작업이 발생하면 암시적으로 실행되는 트리거라는 프로시저를 정의할 수 있습니다. PL/SQL 또는 J av a로 이러한프로시저를 작성하여 데이터베이스에 저장하거나 C 콜아웃으로 작성할 수도 있습니다.

트리거는 1 8장“프로시저와 패키지”에서 설명하는 내장 프로시저와 유사합니다. 데이터베이스에 저장된 트리거는 하나의 단위로 실행하는 S Q L, PL/SQL 또는 J ava 문을 포함할 수 있으며 내장 프로시저를 호출할 수 있습니다. 그러나 프로시저와 트리거는 호출되는 방법이 다릅니다. 프로시저는 사용자, 응용 프로그램 또는 트리거에의해 명시적으로 실행됩니다. 반면에 하나 이상의 트리거는 접속된 사용자나 사용되는 응용 프로그램에 관계없이 트리거링 이벤트가 발생되면 O ra c l e에 의해 암시적으로실행됩니다.

그림 2 0 - 1은 데이터베이스에 저장된 여러 개의 트리거를 암시적으로 실행하는 S Q L문이 있는 데이터베이스 응용 프로그램을 나타냅니다. 데이터베이스는 관련 테이블과는 별도로 트리거를 저장합니다.

그림 20-1 트리거

2 0 - 2 Oracle8i 개념 설명서, 볼륨 2

트리거 소개

데이터베이스

응용 프로그램t 테이블

UPDATE t SET...;

INSERT INTO t...;

DELETE FROM t...;

Update Trigger

BEGIN. . .

Insert Trigger

BEGIN. . .

Delete Trigger

BEGIN. . .

Page 107: Oracle8 - Tistory

트리거는 C 프로시저를 호출할 수도 있는데, 이는 계산에 집중된 작업을 처리하는 데에 유용합니다.

테이블의 데이터를 수정하는 DML 문( I N S E RT, UPDATE 또는 DELETE), DDL문, 시작, 종료 및 오류 메시지와 같은 시스템 이벤트 또는 로그온 및 로그오프와 같은 사용자 이벤트 등이 트리거를 실행하는 이벤트가 될 수 있습니다. 자세한 내용은20-6 페이지“트리거링이벤트 또는 명령문”을 참조하십시오.

주: O racle Fo r m s는 다른 종류의 트리거를 정의, 저장, 실행할 수 있습니다. 그러나 이 장에서 설명하는 트리거와 O racle Forms 트리거를혼동하지 마십시오.

트리거 사용법

트리거는 O ra c l e의 표준 기능을 보완하여 고도의 사용자 정의 데이터베이스 관리 시스템을 제공합니다. 예를 들어, 트리거는 DML 작업이 정규 업무 시간 동안 실행되도록 테이블에 대해 DML 작업을 제한할 수 있습니다. 또한 트리거는 평일 특정 시간에만 발생하도록 DML 작업을 제한할 수도 있습니다. 또한 트리거는 보통 다음과같이 사용됩니다.

■ 자동으로 파생된 열 값 생성

■ 잘못된 트랜잭션 방지

■ 복잡한 보안 권한 강제 수행

■ 분산 데이터베이스의 노드 상에서 참조 무결성 강제 수행

■ 복잡한 업무 규칙 강제 수행

■ 투명한 이벤트 로깅 제공

■ 복잡한 감사 제공

■ 동기 테이블 복제 유지 관리

■ 테이블 액세스에 대한 통계 수집

■ DML 문을 뷰에 실행할 때 테이블 데이터 수정

■ 데이터베이스 이벤트, 사용자 이벤트 및 구독 응용 프로그램에 대한 SQL 문 정보등록

추가 정보: 다양한 트리거 사용에 대한 예는 O racle8i Ap p l i c a t i o nD ev e l o p e r’s Guide - Fundamentals를참조하십시오.

트리거 2 0 - 3

트리거 소개

Page 108: Oracle8 - Tistory

트리거 사용 시 주의 사항

트리거는 데이터베이스를 사용자 정의하는데 유용하지만 필요할 때만 사용해야 합니다. 과다한 트리거 사용은 복잡한 내부 종속성을 초래하며 대규모 응용 프로그램에서의 유지 관리를 어렵게 만듭니다. 예를 들어, 트리거를 실행할 때 트리거 작업 내의SQL 문은 잠정적으로 다른 트리거를 실행하여 계단식 트리거를 만듭니다. 그림 2 0 - 2는 트리거를 보여줍니다.

그림 20-2 계단식 트리거

2 0 - 4 Oracle8i 개념 설명서, 볼륨 2

트리거 소개

SQL 문

UPDATE t1 SET ...;

UPDATE_T1 트리거

BEFORE UPDATE ON t1FOR EACH ROWBEGIN

.

.INSERT INTO t2 VALUES (...);..

END;

UPDATE_T2 트리거

BEFORE UPDATE ON t2FOR EACH ROWBEGIN

.

.INSERT INTO ... VALUES (...);..

END;

U P D A T E _ T 1트리거실행

I N S E R T _ T 2트리거실행

기타 등등

Page 109: Oracle8 - Tistory

트리거와 선언적 무결성 제약 조건

트리거와 무결성 제약 조건을 모두 사용하여 모든 유형의 무결성 규칙을 정의하고 강제로 수행할 수 있습니다. 그러나 오라클사에서는 다음과 같은 상황에서만 데이터 입력을 제약하는 트리거를 사용할 것을 강력히 권장합니다.

■ 하위 테이블과 상위 테이블이 분산 데이터베이스의 서로 다른 노드에 있을 때 참조 무결성을 강제로 수행하는 경우

■ 무결성 제약 조건을 사용하여 정의할 수 없는 복잡한 업무 규칙을 강제로 수행하는 경우

■ 다음과 같은 무결성 제약 조건을 사용하여 필요한 참조 무결성 규칙을 강제로 수행할 수 없는 경우

- NOT NULL, UNIQUE 키

- PRIMARY KEY

- FOREIGN KEY

- CHECK

- DELETE CA S CADE

- DELETE SET NULL

무결성 제약 조건에 대한 자세한 내용은 28-4 페이지“데이터 무결성 강제 수행 방법”을 참조하십시오.

트리거 구성

트리거는 기본적인 세 부분으로 다음과 같이 구성됩니다.

■ 트리거링 이벤트 또는 명령문

■ 트리거 제한 사항

■ 트리거 작업

그림 2 0 - 3은 트리거를 이루는 각 부분을 나타내지만 정확한 구문은 아닙니다. 트리거의 각 부분에 대해서는 다음 단원에서 보다 자세하게 설명합니다.

트리거 2 0 - 5

트리거 구성

Page 110: Oracle8 - Tistory

그림 20-3 REORDER 트리거

트리거링 이벤트 또는 명령문

트리거링 이벤트나 명령문은 트리거를 실행시키는 SQL 문, 데이터베이스 이벤트 또는 사용자 이벤트입니다. 다음 중 하나 이상의 경우가 트리거링 이벤트가 될 수 있습니다.

■ 특정 테이블(또는 어떤 경우에는 뷰)에 대한 I N S E RT, UPDAT E, DELETE 문

■ 모든 스키마 객체에 대한 C R E AT E, ALTER 또는 D ROP 문

■ 데이터베이스 시작 또는 인스턴스 종료

■ 특정 오류 메시지 또는 모든 오류 메시지

■ 사용자 로그온 또는 로그오프

2 0 - 6 Oracle8i 개념 설명서, 볼륨 2

트리거 구성

FOR EACH ROWD E C L A R E /* a dummy variable for counting */

NUMBER X;B E G I N

SELECT COUNT(*) INTO X /* query to find out if part has already been */FROM pending_orders /* reordered-if yes, x=1, if no, x=0 */WHERE part_no=:new.part_no;

IF x = 0T H E N /* part has not been reordered yet, so reorder */

INSET INTO pending_ordersVALUES (new.part_no, new.reorder_quantity, sysdate);

END IF; /* part has already been reordered */E N D ;

WHEN (new.parts_on_hand < new.reorder_point)

AFTER UPDATE OF parts_on_hand ON inventory

REORDER 트리거

트리거링 명령문

트리거제한 사항 트리거작업

Page 111: Oracle8 - Tistory

예를 들어, 그림 2 0 - 3에서 트리거링 명령문은 다음과 같습니다.

. . . UPDATE OF parts_on_hand ON inventory . . .

I N V E N T O RY 테이블에서 한 행의 PA RTS_ON_HAND 열이 갱신된다면 트리거를실행하라는 의미입니다. 트리거링 이벤트가 U P DATE 문일 경우 트리거를 실행하기위해 갱신되어야 하는 열을 식별하는 열 목록을 포함할 수 있습니다. INSERT와DELETE 문에 대한 열 목록은 정보 행 전체에 영향을 주므로 지정할 수 없습니다.

트리거링 이벤트는 다음과 같은 여러 SQL 문을 지정할 수 있습니다.

. . . INSERT OR UPDATE OR DELETE OF inventory . . .

이는 I N S E RT, UPDAT E, DELETE 문이 I N V E N T O RY 테이블에 대해 수행될때 트리거를 실행하라는 의미입니다. 여러 유형의 SQL 문이 트리거를 실행할 수 있을 때 조건부 술어를 사용하여 트리거링 명령문 유형을 감지할 수 있습니다. 이와 같이 트리거를 실행하는 명령문 유형에 따라 다른 코드를 실행하는 단일 트리거를 생성할 수 있습니다.

트리거 제한 사항

트리거 제한 사항은 트리거 실행을 위해서는 T RU E여야 하는 부울(논리적) 표현식을지정합니다. 트리거는 트리거 제한 사항이 FA L S E나 U N K N OW N으로 평가되면 실행되지 않습니다. 예를 들어, 트리거 제한 사항은 다음과 같습니다.

new.parts_on_hand < new.reorder_point

트리거 작업

트리거 작업은 트리거링 명령문이 수행되고 트리거 제한 사항이 T RU E로 평가된 경우 실행될 SQL 문과 코드를 포함하는 프로시저(PL/SQL 블록, Java 프로그램, C콜아웃)입니다.

내장 프로시저와 마찬가지로 트리거 작업은 SQL 및 PL/SQL 또는 J ava 문을 포함하며 PL/SQL 언어 생성자(변수, 상수, 커서, 예외사항 등) 또는 J ava 언어 생성자를 정의하고 내장 프로시저를 호출할 수 있습니다. 또한 다음 단원에서 설명하는 행트리거의 경우 트리거 작업의 명령문은 트리거가 처리할 현재 행의 열 값(새로운 값과 이전 값)을 액세스합니다. 상관 이름은 각 열에 대한 새로운 값과 이전 값에 대한액세스를 제공합니다.

트리거 2 0 - 7

트리거 구성

Page 112: Oracle8 - Tistory

트리거 유형

이 단원에서는 다양한 유형의 트리거를 설명합니다.

■ 행 트리거 및 명령문 트리거

■ BEFORE 및 AFTER 트리거

■ INSTEAD-OF 트리거

■ 시스템 이벤트 및 사용자 이벤트 트리거

행 트리거 및 명령문 트리거

트리거를 정의할 때 트리거링 명령문이 영향을 주는 행 수에 관계없이 트리거링 명령문(많은 행을 갱신하는 U P DATE 문에 의해 실행되는 것처럼)의 영향을 받는 모든행에 대해 또는 트리거링 명령문에 대해 트리거 작업의 횟수를 지정할 수 있습니다.

행 트리거

행 트리거는 테이블이 트리거링 명령문에 의해 영향을 받을 때마다 실행됩니다. 예를들어, UPDATE 문이 테이블의 여러 행을 갱신하면 행 트리거는 U P DATE 문에 의해 영향을 받는 각 행에 대해 한 번씩 실행됩니다. 트리거링 명령문이 행에 영향을 주지 않으면 행 트리거는 실행되지 않습니다.

행 트리거는 트리거 작업의 코드가 트리거링 명령문이나 영향을 받는 행에 의해 제공되는 데이터에 따라 다를 경우에 유용합니다. 예를 들어, 그림 2 0 - 3은 트리거링 명령문에 의해 영향을 받는 각 행의 값을 사용하는 행 트리거를 나타냅니다.

명령문 트리거

명령문 트리거는 테이블에서 트리거링 명령문에 의해 영향을 받는 행 수에 관계없이(영향을 받는 행이 없다 해도) 트리거링 명령문 대신 한 번 실행됩니다. 예를 들어,DELETE 문이 테이블에서 여러 행을 삭제하면 명령문 레벨 DELETE 트리거는 테이블에서 삭제되는 행 수에 관계없이 한 번만 실행됩니다.

명령문 트리거는 트리거 작업 코드가 트리거링 명령문이나 영향을 받은 행에 의해 제공되는 데이터에 종속되지 않을 때 유용합니다. 예를 들어, 트리거가 현재 시간이나사용자에 대해 복잡한 보안 검사를 할 때 또는 트리거링 명령문 유형에 따라 하나의감사 레코드를 만들 때는 명령문 트리거가 사용됩니다.

2 0 - 8 Oracle8i 개념 설명서, 볼륨 2

트리거 유형

Page 113: Oracle8 - Tistory

BEFORE 및 AFTER 트리거

트리거를 정의할 때 트리거 타이밍을 지정할 수 있습니다. 즉, 트리거 작업을 트리거링 명령문 전에 실행할 것인지 또는 후에 실행할 것인지를 지정할 수 있습니다.B E F O R E와 A F T E R는 명령문 트리거와 행 트리거 모두에 적용됩니다. (다른 유형의 트리거에 대한 내용은 20-12 페이지“INSTEAD-OF 트리거”를 참조하십시오. )

DML 문으로 실행되는 BEFORE 및 AFTER 트리거는 테이블에서만 정의되며 뷰에서는 정의될 수 없습니다. 그러나 I N S E RT, UPDATE 또는 DELETE 문이 뷰에실행된 경우 뷰의 기본 테이블에 있는 트리거가 실행됩니다. DDL 문으로 실행되는BEFORE 및 AFTER 트리거는 데이터베이스 또는 스키마에서만 정의할 수 있고 특정 테이블에서는 정의할 수 없습니다. 20-18 페이지“시스템 이벤트 및 사용자 이벤트 트리거”에서는 BEFORE 및 AFTER 트리거가 DML 및 DDL 문에 대한 정보를구독자에게 배포하는데 사용될 수 있는 방법을 설명합니다.

BEFORE 트리거

BEFORE 트리거는 트리거링 명령문이 실행되기 전에 트리거 작업을 실행합니다. 이러한 트리거 유형은 보통 다음과 같은 경우에 사용됩니다.

■ 트리거 작업이 트리거링 명령문의 실행 여부를 결정할 때 사용됩니다. 이러한 목적을 위해 BEFORE 트리거를 사용하면 불필요한 트리거링 명령문 처리와 트리거작업에 예외 상황이 발생할 때 실행해야 하는 롤백을 제거할 수 있습니다.

■ 트리거링 I N S E RT 또는 U P DATE 문을 완료하기 전의 특정 열 값을 구하는데사용됩니다.

AFTER 트리거

AFTER 트리거는 트리거링 명령문이 실행된 후에 트리거 작업을 실행합니다. AFT-ER 트리거는 트리거 작업을 실행하기 전에 트리거링 명령문을 완료하려는 경우에 사용됩니다.

트리거 유형 결합

위에서 나열한 옵션을 사용하여 다음 네 가지 유형의 행 및 명령문 트리거를 생성할수 있습니다.

■ BEFORE 문트리거

트리거링 명령문을 실행하기 전에 트리거 작업이 실행됩니다.

■ BEFORE 행트리거

트리거링 명령문에 의해 영향을 받은 각 행을 수정하고 해당 무결성 제약 조건을

트리거 2 0 - 9

트리거 유형

Page 114: Oracle8 - Tistory

검사하기 전에 트리거 제한 사항에 위배되지 않은 경우 트리거 작업이 실행됩니다.

■ AFTER 행트리거

트리거링 명령문에 의해 영향을 받은 각 행을 수정하고 가능한 해당 무결성 제약조건을 적용한 후에 트리거 제한 사항에 위배되지 않은 경우 트리거 작업이 현재행에 대해 실행됩니다. BEFORE 행 트리거와 달리 AFTER 행 트리거는 행을잠급니다.

■ AFTER 문트리거

트리거링 명령문을 실행하고 지연된 무결성 제약 조건을 적용한 후에 트리거 작업이 실행됩니다.

주어진 테이블에 대해 동일한 명령문에 동일한 유형의 다중 트리거를 가질 수 있습니다. 예를 들어, EMP 테이블의 U P DATE 문에 대해 두 개의 BEFORE 문 트리거를 가질 수도 있습니다. 동일한 유형의 다중 트리거를 사용하면 동일한 테이블에 트리거를 가진 응용 프로그램 모듈을 설치할 수 있습니다. 또한 O racle 스냅샷 로그는AFTER 행 트리거를 사용하므로 O ra c l e에 정의된 AFTER 행 트리거 외에 사용자소유의 AFTER 행 트리거를 설계할 수 있습니다.

각각의 DML 문( I N S E RT, UPDATE 또는 DELETE) 유형에 필요한 만큼 앞에 나온 여러 유형의 트리거를 생성할 수 있습니다.

예를 들어, SAL 테이블이 있는데 테이블이 액세스되는 시간과 수행되는 질의 유형을알고 싶다고 합시다. 다음 예는 SAL 테이블에 대해 이러한 정보를 시간과 작업 유형(예를 들어, UPDAT E, DELETE 또는 I N S E RT )별로 추적하는 예제 패키지와 트리거를 포함합니다. 글로벌 세션 변수 S TAT. ROW C N T는 BEFORE 문 트리거에의해 0으로 초기화되고 행 트리거가 실행될 때마다 증가됩니다. 마지막으로 통계 정보는 AFTER 문 트리거에 의해 S TAT _ TAB 테이블에 저장됩니다.

SAL 테이블에 대한 예제 패키지 및 트리거

DROP TABLE stat_tab;CREATE TABLE stat_tab(utype CHAR(8),

rowcnt INTEGER, uhour INTEGER);

CREATE OR REPLACE PACKAGE stat ISrowcnt INTEGER;END;/

2 0 - 1 0 Oracle8i 개념 설명서, 볼륨 2

트리거 유형

Page 115: Oracle8 - Tistory

CREATE TRIGGER bt BEFORE UPDATE OR DELETE OR INSERT ON salBEGINstat.rowcnt := 0;END;/

CREATE TRIGGER rt BEFORE UPDATE OR DELETE OR INSERT ON salFOR EACH ROW BEGINstat.rowcnt := stat.rowcnt + 1;END;/

CREATE TRIGGER at AFTER UPDATE OR DELETE OR INSERT ON salDECLAREtyp CHAR(8);hour NUMBER;BEGINIF updatingTHEN typ := ’update’; END IF;IF deleting THEN typ := ’delete’; END IF;IF inserting THEN typ := ’insert’; END IF;

hour := TRUNC((SYSDATE - TRUNC(SYSDATE)) * 24);UPDATE stat_tab

SET rowcnt = rowcnt + stat.rowcntWHERE utype = typ

AND uhour = hour;IF SQL%ROWCOUNT = 0 THEN

INSERT INTO stat_tab VALUES (typ, stat.rowcnt, hour);END IF;

EXCEPTIONWHEN dup_val_on_index THEN

UPDATE stat_tabSET rowcnt = rowcnt + stat.rowcnt

WHERE utype = typAND uhour = hour;

END;/

트리거 2 0 - 1 1

트리거 유형

Page 116: Oracle8 - Tistory

INSTEAD-OF 트리거

주의 사항: INSTEAD-OF 트리거는 O racle8i Enterprise Edition을 구입한 경우에만 사용할 수 있습니다. INSTEAD-OF 트리거는 관계형 뷰 및 객체 뷰에서 사용될 수 있습니다. Oracle8i EnterpriseE d i t i o n에서 사용 가능한 기능에 대한 내용은 O racle8i 입문서를 참조하십시오.

INSTEAD-OF 트리거는 SQL DML 문( I N S E RT, UPDATE 및 D E L E T E )을 통해 직접 수정할 수 없는 뷰를 수정하는 투명한 방법을 제공합니다. 이 트리거는 다른유형의 트리거와는 달리 O ra c l e이 트리거링 명령문을 실행하지 않고 트리거를 실행하므로 INSTEAD-OF 트리거라고합니다.

뷰에 정상적인 I N S E RT, DELETE 및 U P DATE 문을 작성할 수 있으며 기본 테이블을 제대로 갱신하기 위해 INSTEAD-OF 트리거를 실행합니다. INSTEAD-OF트리거는 수정된 뷰의 각 행에 대해 활성화됩니다.

뷰 수정

뷰 수정은 근본적인 모호성 문제를 가지고 있습니다.

■ 뷰에서의 행 삭제는 뷰에서 더 이상 해당 행을 선택할 수 없도록 기본 테이블에서해당 행을 삭제하거나 일부 열 값을 갱신하는 것을 의미합니다.

■ 뷰에서의 행 삽입은 뷰에서 해당 행을 볼 수 있도록 새로운 행을 기본 테이블에삽입하거나 기존 행을 갱신하는 것을 의미합니다.

■ 조인과 관련된 열을 뷰에서 갱신하면 뷰에 보이지 않는 다른 열의 의미를 변경할수 있습니다.

객체 뷰는 또 다른 문제를 발생시킵니다. (15장“객체 뷰”참조) 예를 들어, 객체 뷰는 주로 마스터/세부 사항 관계를 표현하는데 사용됩니다. 이는 필연적으로 조인과관련되며 조인 수정은 근본적으로 모호성이 있습니다.

이러한 모호성의 결과, 뷰를 수정하는데는 많은 제한 사항이 따릅니다. (다음 단원 참조) INSTEAD-OF 트리거는 다른 경우 수정할 수 없는 관계형 뷰와 객체 뷰에 대해서도 사용될 수 있습니다.

뷰는 본래 수정 가능하지만 삽입, 갱신 또는 삭제될 값에 대해 검증하고자 할 수 있습니다. 이러한 경우에도 INSTEAD-OF 트리거를 사용할 수 있습니다. 트리거 코드가수정될 행에 대해 검증하고 유효하다면 변경 사항을 기본 테이블로 전달합니다.

2 0 - 1 2 Oracle8i 개념 설명서, 볼륨 2

트리거 유형

Page 117: Oracle8 - Tistory

또한 INSTEAD-OF 트리거를 사용하여 O C I를 통해 클라이언트측의 객체 뷰 인스턴스를 수정할 수 있습니다. 클라이언트측 객체 캐시에 있는 객체 뷰로 구체화되는 객체를 수정하고 이를 영구 저장 영역에 다시 배치하려면 객체 뷰가 본래 수정 가능하지 않는 한 INSTEAD-OF 트리거를 지정해야 합니다. 그러나 객체 캐시에 있는 뷰객체를 고정하고 읽기 위해 이 트리거를 정의할 필요는 없습니다.

추가 정보: 자세한 내용은 O racle Call Interface Pro g ra m m e r’sG u i d e를 참조하십시오.

수정할 수 없는 뷰

뷰가 INSTEAD-OF 트리거를 사용하지 않고도 삽입, 갱신, 삭제될 수 있고 아래에나열된 제한 사항을 따른다면 뷰는 본래 수정할 수 있습니다. 뷰 질의가 다음과 같은생성자를 포함하는 경우 뷰는 본래 수정할 수 없으며 뷰에 대해 삽입, 갱신, 삭제를수행할 수 없습니다.

■ 집합 연산자

■ 집계 함수

■ G ROUP BY, CONNECT BY 또는S TA RT WITH 절

■ DISTINCT 연산자

■ 조인(그러나 조인 뷰의 부분 집합은 수정 가능합니다. 10-15 페이지“갱신가능한조인 뷰”참조)

뷰가 의사 열이나 표현식을 포함하는 경우 의사 열이나 표현식을 참조하지 않는U P DATE 문을 가진 뷰만을 갱신할 수 있습니다.

INSTEAD OF 트리거의 예

다음 예는 모든 부서와 관리자를 나열하는 m a n a g e r _ i n f o 뷰의 행을 갱신하는INSTEAD OF 트리거를보여줍니다.

d e p t는 부서 목록을 포함하는 관계형 테이블이 되도록 합니다.

CREATE TABLE dept (deptno NUMBER PRIMARY KEY,deptname VARCHAR2(20),manager_num NUMBER

);

트리거 2 0 - 1 3

트리거 유형

Page 118: Oracle8 - Tistory

e m p가 사원 및 사원이 근무하는 부서 목록을 포함하는 관계형 테이블이 되도록 합니다.

CREATE TABLE emp (empno NUMBER PRIMARY KEY,empname VARCHAR2(20),deptno NUMBER REFERENCES dept(deptno),startdate DATE

);ALTER TABLE dept ADD (FOREIGN KEY(manager_num) REFERENCES emp(empno));

각 부서의 관리자를 모두 나열하는 m a n a g e r _ i n f o 뷰를 생성합니다.

CREATE VIEW manager_info ASSELECT d.deptno, d.deptname, e.empno, e.empnameFROM emp e, dept dWHERE e.empno = d.manager_num;

INSTEAD-OF 트리거를 정의하여 뷰에 대한 삽입 작업을 처리합니다. m a n a g e r _i n f o 뷰로의 삽입 작업은 d e p t 테이블의 manager_num 열에 대한 갱신으로 번역될수 있습니다.

트리거에서는 부서의 관리자에 대해 적어도 한 명의 사원이 해당 부서에 있어야 한다는 제약 조건을 강제로 수행할 수 있습니다.

CREATE TRIGGER manager_info_insertINSTEAD OF INSERT ON manager_info

REFERENCING NEW AS n -- new manager informationFOR EACH ROWDECLAREempCount NUMBER;

BEGIN

/* First check to make sure that the number of employees* in the department is greater than one */SELECT COUNT(*) INTO empCount FROM emp eWHERE e.deptno = :n.deptno;

/* If there are enough employees then make him or her the manager */IF empCount >= 1 THEN

UPDATE dept dSET manager_num = :n.empnoWHERE d.deptno = :n.deptno;

2 0 - 1 4 Oracle8i 개념 설명서, 볼륨 2

트리거 유형

Page 119: Oracle8 - Tistory

END IF;END;/

예를 들어, 다음과 같이 m a m a g e r _ i n f o 뷰에 삽입합니다.

INSERT INTO manager_info VALUES (200,’Sports’,1002,’Jack’);

위의 명령문은 m a n a g e r _ i n f o _ i n s e r t 트리거를 실행하고 기본 테이블을 갱신합니다. 유사한 트리거가 뷰에 I N S E RT 및 D E L E T E에 대한 적합한 작업을 지정할 수있습니다.

사용 시 주의 사항

C R E ATE TRIGGER 문에 대한 INSTEAD OF 옵션은 뷰에 생성된 트리거에만 사용되며 BEFORE 및 AFTER 옵션은 뷰에 생성된 트리거에 사용할 수 없습니다.

INSTEAD OF 트리거를 사용하여 뷰에 삽입 및 갱신 작업이 수행될 때 뷰에 대한CHECK 옵션은 실행되지 않습니다. INSTEAD OF 트리거 본문은 검사를 강제로수행해야 합니다.

추가 정보: INSTEAD-OF 트리거에 대한 자세한 내용은 O ra c l e 8 iApplication Dev e l o p e r’s Guide - Fundamentals 및 O ra c l e 8 iSQL 참조서의 C R E ATE TRIGGER 명령어를참조하십시오.

중첩 테이블의 INSTEAD-OF 트리거

뷰에 있는 중첩 테이블 열의 요소를 TABLE 절로 직접 수정할 수는 없습니다. 그러나 뷰의 중첩 테이블 열에서 INSTEAD OF 트리거를 정의하여 수정할 수 있습니다.중첩 테이블의 트리거는 중첩 테이블 요소가 갱신, 삽입 또는 삭제되고 기본 테이블에 대한 실제 수정 사항을 처리하는 경우 실행됩니다.

부서와 사원에 대한 예를 다시 생각해 봅시다. 부서 뷰에는 부서 목록과 각 부서의 사원 집합이 있습니다. 다음 예는 INSTEAD-OF 트리거를 사용하여 부서 뷰의 사원객체의 중첩 테이블 요소를 수정하는 방법을 보여줍니다.

/* Create an employee type */CREATE TYPE emp_t AS OBJECT(empno NUMBER,empname VARCHAR2(20),

트리거 2 0 - 1 5

트리거 유형

Page 120: Oracle8 - Tistory

days_worked NUMBER);//* Create a nested table type of employees */CREATE TYPE emplist_t AS TABLE OF emp_t;//* Now, create the department type */CREATE TYPE dept_t AS OBJECT(deptno NUMBER,deptname VARCHAR2(20),emplist emplist_t

);//* The dept_view can now be created based on the dept (department) and emp* (employee) tables. */

CREATE VIEW dept_view OF dept_t WITH OBJECT OID(deptno)AS SELECT d.deptno, d.deptname, -- department number and name

CAST (MULTISET (SELECT e.empno, e.empname, (SYSDATE - e.startdate)FROM emp eWHERE e.deptno = d.deptno)

AS emplist_t) -- emplist - nested table of employeesFROM dept d;

TABLE 구문을 사용하여 뷰의 중첩 테이블 e m p l i s t로의 삽입 작업을 가능하게 합니다.

INSERT INTO TABLE(SELECT d.emplist FROM dept_view d WHERE d.deptno = 10)VALUES (10,’Harry Mart’,334);

중첩 테이블 e m p l i s t에 INSTEAD-OF 트리거를 정의하여 다음과 같이 삽입 작업을처리할 수 있습니다.

CREATE TRIGGER dept_empinstr INSTEAD OF INSERT ONNESTED TABLE emplist OF dept_view FOR EACH ROW

BEGININSERT INTO emp VALUES(:NEW.empno, :NEW.empname,

:PARENT.deptno, SYSDATE - :NEW.days_worked);END;/

마찬가지로 중첩 테이블 요소에 트리거를 정의하여 갱신 및 삽입 작업을 처리할 수있습니다.

2 0 - 1 6 Oracle8i 개념 설명서, 볼륨 2

트리거 유형

Page 121: Oracle8 - Tistory

중첩 테이블 트리거 내 상위 행의 속성 액세스 일반 트리거에서는 NEW 또는 O L D수식자를 사용하여 현재 행의 값을 액세스할 수 있습니다. 뷰의 중첩 테이블 열의 트리거의 경우 이러한 수식자는 수정될 중첩 테이블 요소의 속성을 의미합니다. 중첩테이블 열이 있는 상위 행의 값에 액세스하는데 PARENT 수식자를 사용할 수 있습니다.

이 수식자는 이러한 중첩 테이블 트리거 내에서만 사용될 수 있습니다. PARENT 수식자를 사용하여 얻은 상위 행의 값은 수정할 수 없습니다. (즉, 상위 행의 값은 읽기전용입니다. )

앞의 예에서 d e p t _ e m p i n s t r 트리거를 생각해 봅시다. NEW 수식자는 삽입될 중첩테이블의 행(empno, empname 및 d a y s _ w o r k e d를 포함하는 행)을 참조하고 사원이일하는 부서 번호(d e p t n o)는 포함하지 않습니다. 그러나 트리거 내에서 부서 번호를사원 테이블에 삽입해야 합니다. 이러한 d e p t n o 값은 PARENT 수식자를 사용하여사원 목록을 포함하는 상위 행에서 얻을 수 있습니다.

중첩 테이블 및 뷰 트리거 실행 앞에서 설명한 대로 뷰의 중첩 테이블 열이 정의된INSTEAD-OF 트리거를 가지는 경우 해당 중첩 테이블의 요소가 삽입, 갱신 또는삭제되면 트리거는 실제 수정 작업을 수행하기 위해 실행됩니다.

중첩 테이블 열을 포함하는 뷰는 작업할 뷰에 정의된 INSTEAD-OF 트리거를 가질필요가 없습니다. 뷰에 정의된 어떤 트리거도 중첩 테이블 요소에 대한 수정을 위해실행되지 않습니다.

반대로 뷰의 행을 수정하는 명령문은 해당 뷰의 중첩 테이블 열에 있는 트리거가 아니라 뷰에서 정의된 트리거만을 실행합니다. 예를 들어, d e p t _ v i e w를 통해 e m p l i s t중첩 테이블 열이 다음과 같이 갱신되면

UPDATE dept_view SET emplist = emplist_t(emp_t(1001,’John’,234));

d e p t _ e m p i n s t r 중첩 테이블 트리거가 아닌 d e p t _ v i e w에 정의된 I N S T E A D - O F갱신 트리거를 실행합니다.

추가 정보: 중첩 테이블의 INSTEAD OF 트리거에 대한 자세한 내용은 O racle8i Application Dev e l o p e r’s Guide - Fundamentals를참조하십시오.

트리거 2 0 - 1 7

트리거 유형

Page 122: Oracle8 - Tistory

시스템 이벤트 및 사용자 이벤트 트리거

트리거를 사용하여 데이터베이스 이벤트에 대한 정보를 구독자에게 배포할 수 있습니다. 다른 응용 프로그램에서 메시지를 구독하는 것처럼 응용 프로그램이 데이터베이스 이벤트를 구독할 수 있습니다. 다음과 같은 데이터베이스 이벤트가 있습니다.

■ 시스템 이벤트

- 데이터베이스 시작 및 종료

- 서버 오류 메시지 이벤트

■ 사용자 이벤트

- 사용자 로그온 및 로그오프

- DDL 문( C R E AT E, ALTER 및 D RO P )

- DML 문( I N S E RT, DELETE 및 U P DAT E )

시스템 이벤트 트리거는 데이터베이스 레벨 또는 스키마 레벨에서 정의될 수 있습니다. 예를 들어, 데이터베이스 종료 트리거는 데이터베이스 레벨에서 정의됩니다.

CREATE TRIGGER register_shutdownON DATABASESHUTDOWN

BEGIN...DBMS_AQ.ENQUEUE(...);...END;

DDL 문의 트리거 또는 로그온/로그오프 이벤트는 데이터베이스 레벨 또는 스키마 레벨에서 정의될 수도 있습니다. DML 문의 트리거는 테이블 또는 뷰에서 정의될 수있습니다. 데이터베이스 레벨에서 정의된 트리거는 모든 사용자에 대해 실행되고 스키마 또는 테이블 레벨에서 정의된 트리거는 트리거링 이벤트가 해당 스키마 또는 테이블을 포함하고 있을 때만 실행됩니다.

이벤트 등록

이벤트 등록은 O racle 고급 대기열 처리( 1 9장“고급 대기열 처리”참조)의 등록/구독방식을 사용합니다. 대기열은 여러 구독자에게 흥미있는 주제의 메시지 저장소로 제공됩니다. 트리거는 D B M S _ AQ 패키지를 사용하여 특정 시스템이나 사용자 이벤트가 발생하면 메시지를 대기열에 넣습니다.

2 0 - 1 8 Oracle8i 개념 설명서, 볼륨 2

트리거 유형

Page 123: Oracle8 - Tistory

이벤트 속성

각 이벤트는 트리거 텍스트 내의 속성 사용을 허용합니다. 예를 들어, 데이터베이스시작 및 종료 트리거는 인스턴스 번호와 데이터베이스 이름에 대한 속성을 가지며 로그온 및 로그오프 트리거는 사용자명에 대한 속성을 가집니다. 이벤트가 발생했을 때속성을 등록하려는 경우 사용자가 트리거를 작성했을 때 동일한 이름의 함수를 속성으로 지정할 수 있습니다. 그런 다음 트리거가 실행될 때 속성 값은 함수 또는 페이로드에 전달됩니다. DML 문의 트리거의 경우 :NEW 및 :OLD 열 값으로 수행됩니다.

시스템 이벤트

트리거를 실행할 수 있는 시스템 이벤트는 인스턴스 시작과 종료 및 오류 메시지와관련됩니다. 시작 및 종료 이벤트에서 생성된 트리거는 데이터베이스와 관련되어야합니다. 오류 이벤트에서 생성된 트리거는 데이터베이스 또는 스키마와 관련될 수 있습니다.

■ S TA RTUP 트리거는 데이터베이스가 인스턴스에 의해 열리면 실행됩니다.S TA RTUP 트리거 속성에는 시스템 이벤트, 인스턴스 번호 및 데이터베이스 이름이 있습니다.

■ S H U T D OWN 트리거는 서버가 인스턴스를 종료하기 바로 전에 실행됩니다. 이러한 트리거를 사용하여 데이터베이스를 종료할 때 구독 응용 프로그램을 완전히종료할 수 있습니다. (인스턴스가 비정상적으로 종료되면 이러한 트리거가 실행되지 않습니다.) SHUTDOWN 트리거 속성에는 시스템 이벤트, 인스턴스 번호 및데이터베이스 이름이 있습니다.

■ S E RV E R E R ROR 트리거는 특정 오류가 발생하거나 지정된 오류 번호가 없는 오류가 발생했을 때 실행됩니다. SERV E R E R ROR 트리거 속성에는 시스템 이벤트와 오류 번호가 있습니다.

사용자 이벤트

트리거를 실행할 수 있는 사용자 이벤트는 사용자 로그온 및 로그오프, DDL 문 및DML 문과 관련됩니다.

로그온 및 로그오프 이벤트 트리거 LOGON 및 LOGOFF 트리거는 데이터베이스또는 스키마와 관련될 수 있습니다. LOGON 및 LOGOFF 트리거 속성에는 시스템이벤트와 사용자명이 있고 USERID 및 U S E R NA M E에서 간단한 조건을 지정할 수있습니다.

■ LOGON 트리거는 사용자가 성공적으로 로그온한 후 실행됩니다.

■ LOGOFF 트리거는 사용자 로그오프 시작 시 실행됩니다.

트리거 2 0 - 1 9

트리거 유형

Page 124: Oracle8 - Tistory

DDL 문 트리거 DDL 트리거는 데이터베이스 또는 스키마와 관련될 수 있습니다.DDL 트리거 속성에는 시스템 이벤트, 스키마 객체의 유형 및 이름이 있고 U S E R I D및 U S E R NA M E과 같은 함수뿐만 아니라 스키마 객체의 유형과 이름에 대한 간단한조건을 지정할 수 있습니다.

■ BEFORE CREATE 및 AFTER CREATE 트리거는 스키마 객체가 데이터베이스 또는 스키마에서 생성될 때 실행됩니다.

■ BEFORE ALTER 및 AFTER ALTER 트리거는 스키마 객체가 데이터베이스또는 스키마에서 변경될 때 실행됩니다.

■ BEFORE DROP 및 AFTER DROP 트리거는 스키마 객체가 데이터베이스 또는 스키마에서 삭제될 때 실행됩니다.

DML 문 트리거 이벤트 등록을 위한 DML 트리거는 테이블과 관련됩니다. DML 트리거는 특정 DML 작업이 발생하는 각 행에 실행되는 BEFORE 또는 AFTER 트리거입니다. (20-8 페이지“행 트리거”및 20-9 페이지“BEFORE 및 AFTER 트리거”참조) 뷰에 INSTEAD OF 트리거를사용하여 DML 문과 관련된 이벤트를 등록할 수 없습니다. 대신 INSTEAD OF 트리거로 생성된 뷰의 기본 테이블에 대한DML 작업에 대해 BEFORE 또는 AFTER 트리거를 사용하여 이벤트를 등록할 수있습니다.

이벤트 등록에 대한 DML 트리거 속성에는 시스템 이벤트와 SELECT 목록에 사용자가 정의한 열이 있습니다. 이것은 함수(예를 들어, UID, USER, USERENV 및SY S DATE), 의사 열 및 열뿐만 아니라 스키마 객체의 유형과 이름에 간단한 조건을지정할 수 있습니다. 열은 이전 값과 새로운 값에 대해 :OLD 및 : N E W로 접두어가붙습니다.

■ BEFORE INSERT 및AFTER INSERT 트리거는 테이블에 삽입된 각 행에 대해 실행됩니다.

■ BEFORE UPDATE 및 AFTER UPDATE 트리거는 테이블에 갱신된 각 행에대해 실행됩니다.

■ BEFORE DELETE 및 AFTER DELETE 트리거는 테이블에서 삭제된 각 행에 대해 실행됩니다.

추가 정보: 시스템 이벤트 및 사용자 이벤트 트리거를 사용하여 이벤트를 등록하는데 대한 자세한 내용은 O racle8i Application Dev e l o p -e r’s Guide - Fundamentals를참조하십시오.

2 0 - 2 0 Oracle8i 개념 설명서, 볼륨 2

트리거 유형

Page 125: Oracle8 - Tistory

트리거 실행

트리거 모드는 다음 두 가지 중 하나입니다.

활성화 활성화된 트리거는 트리거링 명령문이 실행되고 트리거 제한 사항이 T RU E인 경우에 트리거 작업을 실행합니다.

비활성화 비활성화된 트리거는 트리거링 명령문이 실행되고 트리거 제한사항이 T RU E라 해도 트리거 작업을 실행하지 않습니다.

활성화된 트리거의 경우 O ra c l e은 자동으로 다음 작업을 수행합니다.

■ 하나 이상의 트리거가 단일 SQL 문에 의해 실행되면 계획된 실행 순서대로 각 유형의 트리거를 실행합니다.

■ 다른 유형의 트리거에 따라 설정 지점에서 무결성 제약 조건 검사를 수행하며 트리거는 무결성 제약 조건과 타협하지 않습니다.

■ 질의와 제약 조건에 대해 일관성 있는 읽기 뷰를 제공합니다.

■ 트리거와 트리거 작업 코드에서 참조하는 스키마 객체 사이의 종속성을 관리합니다.

■ 트리거가 분산 데이터베이스에서 원격 테이블을 갱신하면 2단계 커밋을 사용합니다.

■ 주어진 명령문에 대해 동일한 유형의 트리거가 하나 이상 있다면 O ra c l e은 임의의순서대로 다중 트리거를 실행합니다.

트리거 실행 모델과 무결성 제약 조건 검사

단일 SQL 문은 잠정적으로 BEFORE 행 트리거, BEFORE 문 트리거, AFTER행 트리거, AFTER 문 트리거 등 네 가지 유형의 트리거를 실행할 수 있습니다. 트리거링 명령문이나 트리거 내의 명령문은 하나 이상의 무결성 제약 조건을 검사할 수있습니다. 또한 트리거는 다른 트리거(계단식 트리거)를 실행시키는 명령문을 포함할수 있습니다.

O ra c l e은 다음 실행 모델을 사용하여 다중 트리거의 적합한 실행 순서와 제약 조건검사를 유지 관리합니다.

1. 명령문에 적용하는 BEFORE 문 트리거를 실행합니다.

2. SQL 문에 영향을 받은 각 행에 대해 반복합니다.

트리거 2 0 - 2 1

트리거 실행

Page 126: Oracle8 - Tistory

a. 명령문에 적용하는 모든 BEFORE 행 트리거를 실행합니다.

b. 행을 잠그고 변경합니다. 무결성 제약 조건 검사를 실행합니다. (트랜잭션이커밋될 때까지 잠금이 해제되지 않습니다. )

c. 명령문에 적용하는 모든 AFTER 행 트리거를 실행합니다.

3. 지연된 무결성 제약 조건 검사를 완료합니다.

4. 명령문에 적용하는 모든 AFTER 문 트리거를 실행합니다.

실행 모델에 대한 정의는 재귀적입니다. 예를 들어, 주어진 SQL 문은 BEFORE 행트리거를 실행시키며 무결성 제약 조건을 검사할 수 있습니다. BEFORE 행 트리거가 이번에는 무결성 제약 조건을 검사하고 AFTER 문 트리거를 실행하도록 하는 갱신 작업을 수행할 수도 있습니다. AFTER 문 트리거는 무결성 제약 조건을 검사합니다. 이 경우 실행 모델은 다음 단계를 재귀적으로 실행합니다.

1. 원래의 SQL 문을 실행합니다.

2. BEFORE 행 트리거를 실행합니다.

3. BEFORE 행 트리거에서 U P DAT E로 AFTER 문 트리거를 실행합니다.

4. AFTER 문 트리거의 명령문을 실행합니다.

5. AFTER 문 트리거가 변경된 테이블에 대한 무결성 제약 조건을 검사합니다.

6. BEFORE 행 트리거의 명령문을 실행합니다.

7. BEFORE 행 트리거가 변경된 테이블에 대한 무결성 제약 조건을 검사합니다.

8. SQL 문을 실행합니다.

9. SQL 문에서 무결성 제약 조건을 검사합니다.

이러한 재귀적 순환에 대해 두 가지 예외가 있습니다.

■ 트리거링 명령문이 참조 제약 조건(기본 키 테이블 또는 외래 키 테이블)이 있는하나의 테이블을 수정할 때와 트리거된 명령문이 다른 테이블을 수정할 때 트리거링 명령문만 무결성 제약 조건을 검사합니다. 이것은 행 트리거가 참조 무결성을향상시키도록 합니다.

■ DELETE CA S CADE 및 DELETE SET NULL로 인해 실행된 명령문 트리거는 개별 수행 명령문 이전 및 이후가 아니라 사용자의 DELETE 문 이전 및 이후에 실행됩니다. 이것은 명령문 트리거의 오류 발생을 방지해 줍니다.

2 0 - 2 2 Oracle8i 개념 설명서, 볼륨 2

트리거 실행

Page 127: Oracle8 - Tistory

실행 모델의 중요한 특성은 SQL 문의 결과로 수행되는 모든 작업과 검사가 성공적으로 수행되어야 한다는 것입니다. 트리거 내에서 예외 사항이 발생하여 예외 사항이명시적으로 처리되지 않으면 원래의 SQL 문의 결과로 수행되는 모든 작업은 실행된트리거에 의해 수행되는 모든 작업을 포함하여 롤백됩니다. 따라서 트리거는 무결성제약 조건과 타협하지 않습니다. 실행 모델은 무결성 제약 조건을 검사하여 선언적무결성 제약 조건을 위반하는 트리거는 허용하지 않습니다.

예를 들어, 앞에서 설명한 내용에서 1에서 8단계까지 성공적으로 수행되었다고 합시다. 그러나 9단계에서 무결성 제약 조건이 위반되었다면 결과적으로 SQL 문( 8단계)에 의해 변경된 모든 사항과 실행된 BEFORE 행 트리거( 6단계), 실행된 A F T E R문 트리거( 4단계)는 롤백됩니다.

주: 다른 유형의 트리거는 지정 순서로 실행되지만 동일한 명령문에 대한 동일한 유형의 트리거는 지정된 순서대로 실행되지 않습니다. 예를들어, 단일 U P DATE 문에 대한 모든 BEFORE 행 트리거는 항상 동일한 순서로 실행되지는 않습니다. 동일한 유형의 여러 트리거를 실행하는 순서에 의존하지 않도록 응용 프로그램을 설계해야 합니다.

트리거에 대한 데이터 액세스

트리거가 실행될 때 트리거 작업에서 참조한 테이블은 다른 사용자의 트랜잭션에 포함된 SQL 문에 의해 현재 변경 중일 수도 있습니다. 모든 경우 트리거 내에서 실행된 SQL 문은 독립형 SQL 문에서 사용한 일반 규칙을 따릅니다. 특히 커밋되지 않은트랜잭션이 실행될 트리거가 읽거나(질의) 써야(갱신) 하는 값을 수정했다면 실행될트리거 본문의 SQL 문은 다음 지침 사항을 사용합니다.

■ 질의는 동일한 트랜잭션 내에서 변경된 데이터와 현재 참조된 테이블의 일관성 있는 읽기 스냅샷을 참조합니다.

■ 갱신할 때 계속 진행하기 전에 기존 데이터 잠금이 끝나기를 기다립니다.

다음 예를 참조하십시오.

예: SA L A RY_CHECK 트리거(본문)가다음 SELECT 문을 포함한다고 합시다.

SELECT minsal, maxsal INTO minsal, maxsalFROM salgradeWHERE job_classification = :new.job_classification;

트리거 2 0 - 2 3

트리거 실행

Page 128: Oracle8 - Tistory

위의 예에서 T1 트랜잭션이 SALGRADE 테이블의 M A X SAL 열을 갱신했고SA L A RY_CHECK 트리거는 T2 트랜잭션의 명령문에 의해 실행되었다고 합시다.T 2에서 시작한 실행된 트리거 내의 SELECT 문은 커밋되지 않은 T1 트랜잭션에 의해 갱신된 사항을 보지 않으며 트리거의 질의는 T2 트랜잭션의 일관성 있는 읽기 지점의 이전 M A X SAL 값을 돌려줍니다.

예: T O TA L _ SA L A RY 트리거가 부서에 있는 모든 멤버의 전체 월급을 저장하는 파생된 열을 유지 관리한다고 합시다.

CREATE TRIGGER total_salaryAFTER DELETE OR INSERT OR UPDATE OF deptno, sal ON empFOR EACH ROW BEGIN/* assume that DEPTNO and SAL are non-null fields */IF DELETING OR (UPDATING AND :old.deptno != :new.deptno)THEN UPDATE deptSET total_sal = total_sal - :old.salWHERE deptno = :old.deptno;END IF;IF INSERTING OR (UPDATING AND :old.deptno != :new.deptno)THEN UPDATE deptSET total_sal = total_sal + :new.salWHERE deptno = :new.deptno;END IF;IF (UPDATING AND :old.deptno = :new.deptno AND:old.sal != :new.sal )THEN UPDATE deptSET total_sal = total_sal - :old.sal + :new.sal

WHERE deptno = :new.deptno;END IF;END;

위의 예에서 한 사용자의 커밋되지 않은 트랜잭션이 DEPT 테이블에 있는 행의T O TA L _ SAL 열을 갱신한다고 합시다. TOTA L _ SA L A RY 트리거는 두 번째 사용자의 SQL 문에 의해 실행됩니다. 첫 번째 사용자의 커밋되지 않은 트랜잭션이T O TA L _ SAL 열의 타당한 값을 갱신하고자 하므로 (즉, 행 잠금이 이루어진 상태에서) TOTA L _ SA L A RY 트리거에 의해 수행되는 갱신 작업은 행 잠금 상태의 트랜잭션이 커밋되거나 롤백되어야 수행됩니다. 따라서 두 번째 사용자는 첫 번째 사용자의트랜잭션이 커밋되거나 롤백될 때까지 기다려야 합니다.

2 0 - 2 4 Oracle8i 개념 설명서, 볼륨 2

트리거 실행

Page 129: Oracle8 - Tistory

PL/SQL 트리거 저장 영역

O ra c l e은 PL/SQL 트리거를 내장 프로시저와 같이 컴파일된 형태로 저장합니다.C R E ATE TRIGGER 문이 커밋되면 컴파일된 PL/SQL 코드인 P 코드(의사 코드)는 데이터베이스에 저장되며 트리거의 소스 코드는 공유 풀에서 삭제됩니다.

PL/SQL 코드 컴파일 및 저장에 대한 자세한 내용은 18-17 페이지“프로시저와패키지 저장 방법”을 참조하십시오.

트리거 실행

O ra c l e은 프로시저 실행과 동일한 단계를 사용하여 트리거를 내부적으로 실행합니다.차이라면 트리거링 명령문을 실행할 권한이 있는 사용자가 자동으로 트리거를 실행할수 있다는 것입니다. 그 외에도 트리거는 내장 프로시저와 동일한 방법으로 확인되고실행됩니다.

자세한 내용은 18-18 페이지“프로시저와패키지 실행 방법”을 참조하십시오.

트리거에 대한 종속성 유지 관리

프로시저와 같이 트리거는 참조한 객체에 종속적입니다. Ora c l e은 트리거 작업에서참조한 스키마 객체에 대해 트리거 종속성을 자동으로 관리합니다. 트리거에 대한 종속성은 내장 프로시저와 동일한 방식으로 실행됩니다. 트리거는 내장 프로시저처럼취급되며 데이터 딕셔너리에 삽입됩니다.

자세한 내용은 2 1장“O racle 종속성 관리”를 참조하십시오.

트리거 2 0 - 2 5

트리거 실행

Page 130: Oracle8 - Tistory

2 0 - 2 6 Oracle8i 개념 설명서, 볼륨 2

트리거 실행

Page 131: Oracle8 - Tistory

21O racle 종속성 관리

뷰와 프로시저를 포함한 일부 객체의 정의는 테이블과 같은 다른 객체를 참조합니다. 따라서 일부 객체는 정의에서 참조한 객체에 의존적입니다. 이 장에서는 스키마 객체 사이의종속성과 그러한 종속성을 자동으로 추적하고 관리하는 방법에 대해 설명하며 다음 내용을 다룹니다.

■ 종속성 문제 소개

■ 스키마 객체 종속성 해결

■ 종속성 관리 및 존재하지 않는 스키마 객체

■ 공유 SQL 종속성 관리

■ 로컬 및 원격 종속성 관리

Oracle 종속성 관리 2 1 - 1

Page 132: Oracle8 - Tistory

종속성 문제 소개

일부 스키마 객체 유형은 정의의 한 부분으로 다른 객체를 참조할 수 있습니다. 예를들어, 뷰는 테이블이나 다른 뷰를 참조하는 질의에 의해 정의됩니다. 프로시저의 본문은 데이터베이스의 다른 객체를 참조하는 SQL 문을 포함합니다. 객체 정의의 한부분으로 또 다른 객체를 참조하는 객체를 종속 객체라고 하고 참조되는 객체를 참조된 객체라고 합니다. 그림 2 1 - 1은 여러 유형의 종속 객체와 참조된 객체를 나타냅니다.

그림 21-1 가능한 종속 스키마 객체와 참조된 스키마 객체 유형

참조된 객체의 정의를 변경하면 종속 객체는 변경된 유형에 따라 오류 없이 계속 작동할 수도 있고 작동하지 않을 수도 있습니다. 예를 들어, 테이블을 삭제하면 삭제된테이블에 준한 뷰는 사용할 수 없습니다.

O ra c l e은 객체 사이의 종속성을 자동으로 기록하여 데이터베이스 관리자와 사용자에대해 복잡한 종속성 관리를 덜어줍니다. 예를 들어, 여러 내장 프로시저가 종속되어있는 테이블을 변경하면 다음에 프로시저가 참조(실행되거나 컴파일)될 때 종속 프로시저를 자동으로 재컴파일합니다.

스키마 객체 사이의 종속성을 관리하기 위해 데이터베이스에 있는 모든 스키마 객체가 다음과 같은 상태 정보를 가지고 있습니다.

VA L I D 스키마 객체를 참조할 때 스키마 객체가 컴파일되어 있으므로 즉시 사용할 수 있습니다.

I N VA L I D 스키마 객체는 사용하기 전에 컴파일되어야 합니다.

2 1 - 2 Oracle8i 개념 설명서, 볼륨 2

종속성 문제 소개

종속 객체

뷰프로시저함수

패키지 선언부패키지 본문

데이터베이스 트리거

참조된객체

테이블뷰

시퀀스동의어프로시저함수

패키지 선언부

Page 133: Oracle8 - Tistory

■ 프로시저, 함수 및 패키지의 경우 스키마 객체를 컴파일하는 것을의미합니다.

■ 뷰의 경우에는 데이터 딕셔너리에 있는 현재 정의를 사용하여 다시구문 분석해야 함을 의미합니다.

종속 객체를 제외한 테이블, 시퀀스, 동의어 등은 항상 사용할 수 있

습니다.

뷰, 프로시저, 함수, 패키지 등을 사용할 수 없다면 컴파일하려고 해

도 객체에 관련된 오류가 발생합니다. 예를 들어, 뷰를 컴파일하면 기

본 테이블 중 하나가 없거나 기본 테이블에 대한 올바른 권한이 없어질

수 있습니다. 패키지를 컴파일할 때 PL/SQL 또는 SQL 구문 오류가

발생할 수 있으며 참조된 객체에 대한 올바른 권한이 없을 수도 있습니

다. 이러한 문제가 있는 스키마 객체는 부적합한 상태로 남습니다.

O ra c l e은 데이터베이스의 특정 변경 사항을 자동으로 추적하며 데이터 딕셔너리에 관련된 객체에 대한 상태를 자동으로 기록합니다.

상태 기록은 순환적인 과정입니다. 참조된 객체의 상태가 변경되면 직접적으로 종속된 객체의 상태뿐 아니라 간접적으로 종속된 객체의 상태도 변경됩니다.

예를 들어, 뷰를 직접 참조하는 내장 프로시저를 보면 실제로 내장 프로시저는 해당뷰의 기본 테이블을 간접적으로 참조합니다. 따라서 기본 테이블을 변경하면 뷰는 물론 내장 프로시저도 무효화됩니다. 그림 2 1 - 2를 참조하십시오.

Oracle 종속성 관리 2 1 - 3

종속성 문제 소개

Page 134: Oracle8 - Tistory

그림 21-2 간접 종속성

스키마 객체 종속성 해결

SQL 문에서 직접 또는 종속된 객체 참조를 통해 간접적으로 스키마 객체를 참조하는경우 필요하다면 O ra c l e은 SQL 문에 명시적으로 지정한 객체와 참조된 객체의 상태를 확인합니다. SQL 문에서 직접 또는 간접적으로 참조한 객체 상태에 따라 여러 가지 이벤트가 발생합니다.

■ 모든 참조된 객체를 사용할 수 있다면 SQL 문은 추가 작업 없이 즉시 실행됩니다.

■ 참조된 뷰나 프로시저(함수 또는 패키지 포함)가 부적합하면 O ra c l e은 객체를 자동으로 컴파일합니다.

- 부적합한 모든 참조된 객체가 성공적으로 컴파일될 수 있다면 객체는 컴파일되며 O ra c l e은 SQL 문을 실행합니다.

- 부적합한 객체가 성공적으로 컴파일될 수 없다면 객체는 부적합한 상태로 남아 있고 O ra c l e은 오류를 돌려 주고 SQL 문을 포함하는 트랜잭션을 롤백합니다.

2 1 - 4 Oracle8i 개념 설명서, 볼륨 2

스키마 객체 종속성 해결

ALTER TABLE emp...;

INVALID

ADD_EMP 함수

INVALID

A D D _ E M P에 의해참조됨 (종속 객체)

종속 객체

EMP 테이블

DEPT 테이블

EMP_DEPT 뷰

E M P _ D E P T에의해 참조됨

Page 135: Oracle8 - Tistory

주: O ra c l e은 객체를 부적합한 것으로 감지한 후 바뀌지 않았을 때만동적으로 부적합한 객체를 재컴파일하려고 합니다. 이러한 최적화는 불필요한 재컴파일을 제거합니다.

뷰와 PL/SQL 프로그램 단위 컴파일

뷰나 PL/SQL 프로그램 단위는 다음 조건을 만족하면 컴파일되어 사용할 수 있게 됩니다.

■ 뷰나 프로그램 단위의 정의가 정확하고 모든 SQL 및 PL/SQL 문은 적합한 구성이어야 합니다.

■ 모든 참조된 객체가 있으며 기대되는 구조를 가집니다. 예를 들어, 뷰의 정의 질의가 열을 포함하면 열은 기본 테이블에 나타나야 합니다.

■ 뷰나 프로그램 단위의 소유자는 참조된 객체에 대해 필요한 권한을 가져야 합니다. 예를 들어, 프로시저의 SQL 문이 테이블에 행을 삽입한다면 프로시저 소유자는 참조된 테이블에 대한 I N S E RT 권한이 있어야 합니다.

뷰와 기본 테이블

뷰는 뷰 정의 질의에서 참조한 기본 테이블 또는 뷰에 종속됩니다. 참조한 열에 대한뷰의 정의 질의가 명백하지 않다면, 예를 들어, SELECT * FROM table정의질의는 그 시점에서 참조된 기본 테이블에 있는 모든 열을 포함하기 위해 데이터 딕셔너리에 저장될 때 확장됩니다.

뷰의 기본 테이블 또는 뷰가 변경되거나 이름을 바꾸거나 삭제되면 뷰는 무효화되지만 뷰의 정의는 권한, 동의어, 다른 객체 및 부적합한 뷰를 참조하는 다른 뷰와 함께데이터 딕셔너리에 남습니다.

부적합한 뷰를 사용하려고 하면 O ra c l e은 이 뷰를 동적으로 자동 재컴파일합니다. 뷰를 바꾸면 뷰는 다음 사항에 따라 사용 여부가 결정됩니다.

■ 뷰를 정의하는 질의에 의해 참조되는 모든 기본 테이블은 존재하는 것이어야 합니다. 따라서 뷰의 기본 테이블 이름이 바뀌거나 삭제되면 뷰는 무효화되어 사용할수 없게 됩니다. 부적합한 뷰를 참조하면 참조하는 명령문은 실패합니다. 뷰는 기본 테이블이 원래 이름으로 바뀌거나 기본 테이블이 재생성될 때만 컴파일됩니다.

Oracle 종속성 관리 2 1 - 5

스키마 객체 종속성 해결

Page 136: Oracle8 - Tistory

■ 기본 테이블이 변경되거나 동일한 열로 재생성했으나 기본 테이블에 있는 하나 이상의 열 데이터 유형이 변경되면 종속 뷰는 재컴파일될 수 있습니다.

■ 뷰의 기본 테이블이 동일한 열의 집합으로 변경되거나 재생성되면 뷰는 유효화됩니다. 기본 테이블이 새 열로 재생성되고, 뷰가 재생성된 테이블에 없는 열을 참조하면 뷰는 무효화됩니다. 후자와 같은 경우는 특히 SELECT * FROMt a b l e 질의와 함께 정의된 뷰에 많습니다. 이것은 정의 질의가 뷰를 생성할 때확장되어 영구적으로 데이터 딕셔너리에 저장되기 때문입니다.

프로그램 단위와 참조된 객체

참조된 객체의 정의가 변경되면 프로그램 단위는 자동으로 무효화됩니다. 예를 들어,독립형 프로시저가 테이블, 뷰, 다른 독립형 프로시저 또는 공용 패키지 프로시저를참조하는 여러 명령문을 포함한다고 합시다. 이 경우 다음과 같은 조건이 유지됩니다.

■ 참조된 테이블이 변경되면 종속 프로시저는 무효화됩니다.

■ 참조된 뷰의 기본 테이블이 변경되면 뷰와 종속 프로시저는 무효화됩니다.

■ 참조된 독립형 프로시저가 바뀌면 종속 프로시저는 무효화됩니다.

■ 참조된 패키지의 본문이 바뀌면 종속 프로시저는 영향을 받지 않습니다. 그러나참조된 패키지 선언부가 바뀌면 종속 프로시저는 무효화됩니다.

마지막 경우는 프로시저와 패키지를 사용하여 참조한 객체 사이의 종속성을 최소화하는 기법을 나타냅니다.

세션 상태와 참조된 패키지

패키지 생성자를 참조하는 각 세션은 지속적인 상태의 공유 변수, 전용 변수, 커서,상수를 포함하여 해당 패키지의 고유 인스턴스를 가집니다. 상태를 포함한 모든 세션의 패키지 인스턴스는 인스턴스화된 패키지(사양 또는 본문)가 계속 무효화되고 재컴파일되면 손실됩니다.

보안 권한

DML 객체나 시스템 권한이 사용자나 P U B L I C에 부여되거나 철회되면 모든 소유자의 종속 객체는 자동으로 무효화됩니다. 종속 객체의 소유자가 모든 참조된 객체에

2 1 - 6 Oracle8i 개념 설명서, 볼륨 2

스키마 객체 종속성 해결

Page 137: Oracle8 - Tistory

대해 필요한 권한을 계속 가지고 있는지 검증하기 위해 O ra c l e은 종속 객체를 무효화합니다. 내부적으로 그러한 객체는“재컴파일”하지 않아도 됩니다. 단지 객체의 구조가 아닌 보안 권한이 유효하면 됩니다. 이러한 최적화는 불필요한 재컴파일을 제거하며 종속 객체의 시간 기록 변경을 방지합니다.

추가 정보: 잘못된 뷰 또는 프로그램 단위의 재컴파일 강제 수행에 대한내용은 O racle8i Application Developer's Guide - Fundamentals를 참조하십시오.

함수 기준 인덱스 종속성

함수 기준 인덱스는 인덱스를 정의하는 표현식에 사용되는 함수에 따라 다릅니다.(10-24 페이지“함수 기준 인덱스”를 참조하십시오.) 그러한 함수(예를 들어,PL/SQL 함수 또는 패키지 함수)가 변경되면 인덱스는 사용 불가로 표시됩니다.

이 단원에서는 함수 기준 인덱스에 대한 요구 사항 및 함수가 삭제되거나 함수가 사용하는 권한이 철회되는 등 임의의 방식으로 함수가 변경되는 경우 발생 가능한 상황에 대해 설명합니다.

요구 사항

함수 기준 인덱스를 생성하려면 다음과 같이 하십시오.

■ 다음 초기화 매개변수를 정의해야 합니다.

■ Q U E RY _ R E W R I T E _ I N T E G R I T Y를 T RU S T E D로 설정해야 합니다.

■ Q U E RY _ R E W R I T E _ E NA B L E D를 T RU E로 설정해야 합니다.

■ C O M PAT I B L E을 8.1.0.0.0 이상 값으로 설정해야 합니다.

■ 사용자는 C R E ATE INDEX와 Q U E RY REWRITE 또는 C R E ATE ANYI N D E X와 GLOBAL QUERY REWRITE 권한을부여받아야 합니다.

함수 기준 인덱스를 사용하려면 다음과 같이 하십시오.

■ 인덱스가 생성된 후 테이블을 분석해야 합니다.

■ NULL 값은 인덱스에 저장되지 않으므로 인덱스화된 표현식에서 질의가 N U L L값을 필요로 하지 않도록 해야 합니다.

다음 단원에서는 추가적인 요구 사항에 대해 설명합니다.

Oracle 종속성 관리 2 1 - 7

스키마 객체 종속성 해결

Page 138: Oracle8 - Tistory

DETERMINISTIC 함수

함수 기준 인덱스에서 사용되는 사용자 작성 함수는 DETERMINISTIC 키워드로선언되어야 합니다. 이 키워드는 함수가 일련의 주어진 입력 인수 값에 대해 항상 동일한 출력 반환 값을 돌려준다는 것을 나타냅니다. 자세한 내용은 23-9 페이지“DETERMINISTIC 함수”를 참조하십시오.

함수 정의 권한

인덱스 소유자는 함수 기준 인덱스를 정의하는데 사용된 함수에 대한 EXECUTE 권한을 필요로 합니다. EXECUTE 권한이 철회된 경우 O ra c l e은 인덱스를D I SA B L E D로 표시합니다. 인덱스 소유자는 기본 테이블에 대해 SELECT 권한을부여하기 위해 이 함수에 대한 EXECUTE WITH GRANT OPTION 권한을필요로 하지 않습니다.

함수 기준 인덱스의 종속성 해결

함수 기준 인덱스는 사용 중인 함수에 따라 다릅니다. 함수나 함수를 포함하는 패키지 선언부를 재정의하면 (또는 인덱스 소유자의 EXECUTE 권한이 철회되면) 인덱스는 D I SA B L E D로 표시됩니다.

■ 최적기가 인덱스 사용을 선택하면 D I SABLED 인덱스에 대한 질의를 실패합니다.

■ 인덱스가 U N U SA B L E로 표시되지 않고 초기화 매개변수 S K I P _ U N U SA B L E _I N D E X E S가 참으로 설정되어 있지 않으면 D I SABLED 인덱스에 대한 DML 작업을 실패합니다.

A LTER INDEX. . . E NABLE 문을 사용하면 함수가 변경된 후에 인덱스를 다시 사용 가능하게 합니다.

종속성 관리 및 존재하지 않는 스키마 객체

종속 객체가 생성되면 먼저 현재 스키마에서 검색하여 모든 참조를 분석합니다. 참조된 객체가 현재 스키마에 없다면 동일한 스키마의 전용 동의어를 검색하여 참조를 분석합니다. 전용 동의어가 없다면 공용 동의어를 찾습니다. 공용 동의어가 없다면 객체 이름의 첫 부분과 일치하는 스키마 이름을 찾습니다. 일치하는 스키마 이름이 있다면 스키마에서 객체를 찾으려고 합니다. 스키마가 없는 경우에는 오류를 돌려줍니다.

O ra c l e이 참조 분석 방법을 가지고 있기 때문에 객체는 다른 객체의 존재하지 않는객체에 종속될 수 있습니다. 이 같은 상황은 종속 객체가 다른 객체가 되어 다르게 해석되는 참조를 사용할 때 발생합니다. 예를 들어, 다음을 생각해 봅시다.

2 1 - 8 Oracle8i 개념 설명서, 볼륨 2

종속성 관리 및 존재하지 않는 스키마 객체

Page 139: Oracle8 - Tistory

■ 현 시점에서 C O M PANY 스키마가 EMP 테이블을 포함합니다.

■ E M P라는 PUBLIC 동의어가 C O M PA N Y. E M P에 대해 생성되며 C O M PA N Y.E M P에 대한 SELECT 권한이 PUBLIC 롤에 부여됩니다.

■ J WARD 스키마는 EMP 테이블이나 전용 동의어를 포함하지 않습니다.

■ 사용자인 J WA R D는 다음 명령문을 사용하여 자신의 스키마에 뷰를 생성합니다.

CREATE VIEW dept_salaries ASSELECT deptno, MIN(sal), AVG(sal), MAX(sal) FROM empGROUP BY deptnoORDER BY deptno;

J WA R D가 D E P T _ SALARIES 뷰를 생성할 때 E M P에 대한 참조는 처음에J WA R D. E M P를 찾지 못한 테이블, 뷰 또는 전용 동의어로 검색한 후 찾은 E M P공용 동의어로 검색하여 분석합니다. 결과적으로 J WA R D. D E P T _ SA L A R I E S는J WA R D. E M P의 존재하지 않는 객체에 종속적이며 P U B L I C. E M P의 존재하는 객체에 종속적입니다.

J WA R D가 다음 명령문을 사용하여 스키마에 E M P라는 새로운 뷰를 생성한다고 합시다.

CREATE VIEW emp ASSELECT empno, ename, mgr, deptnoFROM company.emp;

J WA R D. E M P는 C O M PA N Y. E M P와 동일한 구조를 가지지 않습니다.

객체 정의에서 참조를 분석할 때 O ra c l e은 내부적으로 새로운 종속 객체가“존재하지않는”객체 즉, 존재한다면 객체 정의의 해석을 변경하는 스키마 객체를 가지는 종속성을 정의합니다. 이러한 종속성은 나중에 존재하지 않는 객체를 생성할 때 정의되어야 합니다. 존재하지 않는 객체를 생성하면 모든 종속 객체는 무효화되어 재컴파일되고 검증되어야 하며 모든 종속 함수 기준 인덱스는 사용 불가로 표시되어야 합니다.

따라서 위의 예에서처럼 J WA R D. E M P를 생성할 때 J WA R D. D E P T _ SA L A R I E S는무효화되는데 이것은 J WA R D. D E P T _ SA L A R I E S가 J WA R D. E M P에 종속되기 때문입니다. 그런다음 J WA R D. D E P T _ SA L A R I E S를 사용할 때 O ra c l e은 뷰를 재컴파일하려고 합니다. EMP에 대한 참조를 분석할 때 J WA R D. E M P ( P U B L I C. E M P는이제 참조된 객체가 아님)를 찾게 됩니다. JWA R D. E M P는 SAL 열을 가지지 않으므로 뷰를바꿀 때 오류가 발견되어 뷰는잘못된 상태로 남게 됩니다.

Oracle 종속성 관리 2 1 - 9

종속성 관리 및 존재하지 않는 스키마 객체

Page 140: Oracle8 - Tistory

요약하면 객체가 분석되는 동안 검사되는 존재하지 않는 객체에 대한 종속성은 나중에 존재하지 않는 객체를 생성할 때 관리되어야 합니다.

공유 SQL 종속성 관리

스키마 객체 사이의 종속성 관리 외에 O ra c l e은 공유 풀에 있는 각각의 공유 S Q L영역의 종속성을 관리합니다. 테이블, 뷰, 동의어, 시퀀스가 생성, 변경, 삭제되거나프로시저, 패키지 선언부가 재컴파일되면 모든 종속된 공유 SQL 영역은 무효화됩니다. 무효화된 공유 SQL 영역에 해당되는 커서를 계속 실행하면 O ra c l e은 SQL 문을다시 구문 분석하여 공유 SQL 영역을 재생성합니다.

로컬 및 원격 종속성 관리

종속성 추적 및 필요한 재컴파일 완료는 O ra c l e에 의해 자동으로 수행됩니다. 가장단순한 경우 단일 데이터베이스(로컬 종속성 관리)에 있는 객체 사이에서 종속성을관리해야 합니다. 예를 들어, 프로시저의 명령문은 동일한 데이터베이스에 있는 테이블을 참조할 수 있습니다. 보다 복잡한 시스템에서는 네트워크(원격 종속성 관리)를통한 분산 환경에서의 종속성을 관리해야 합니다. 예를 들어, Oracle Forms 트리거는 데이터베이스에 있는 스키마 객체에 종속될 수 있습니다. 분산 데이터베이스에서 로컬 뷰의 정의 질의는 원격 테이블을 참조할 수 있습니다.

로컬 종속성 관리

O ra c l e은 데이터베이스의 내부“종속”테이블을 사용하여 모든 로컬 종속성 검사를관리합니다. 즉, 각 스키마 객체의 종속 객체를 추적합니다. 참조된 객체가 수정되면O ra c l e은 종속 테이블을 사용하여 종속 객체를 식별하여 무효화합니다. 예를 들어,J WA R D.EMP 테이블을 참조하는 U P DAT E _ SAL 내장 프로시저가 있다고 합시다.테이블 정의가 변경되면 J WA R D. E M P를 참조하는 모든 객체의 상태는U P DAT E _ SAL 내장 프로시저를 포함하여 I N VA L I D로 변경됩니다. 결과적으로 프로시저가 재컴파일되어 사용할 수 있어야 실행될 수 있음을 의미합니다. 마찬가지로사용자에게서 DML 권한을 철회하면 사용자 스키마에 있는 모든 종속 객체는 무효화됩니다. 그러나 권한이 철회되었기 때문에 무효화된 객체는“재권한”에 의해 다시 유효화될 수 있으며 이 경우 완전한 재컴파일을 필요로 하지 않습니다.

2 1 - 1 0 Oracle8i 개념 설명서, 볼륨 2

공유 SQL 종속성 관리

Page 141: Oracle8 - Tistory

원격 종속성 관리

응용 프로그램 대 데이터베이스와 분산 데이터베이스 종속성도 관리해야 합니다. 예를 들어, Oracle Forms 응용 프로그램은 테이블을 참조하는 트리거를 포함할 수 있으며 로컬 내장 프로시저는 분산 데이터베이스 시스템에서 원격 프로시저를 호출할수 있습니다. 데이터베이스 시스템은 이러한 객체 사이에서 종속성을 관리해야 합니다. Ora c l e은 관련된 객체에 따라 다른 기법을 사용하여 원격 종속성을 관리합니다.

로컬 및 원격 데이터베이스 프로시저 사이의 종속성

분산 데이터베이스 시스템에서 내장 프로시저(함수, 패키지, 트리거 포함) 사이의 종속성은 시간 기록 검사 또는 서명 검사를 사용하여 관리됩니다.

동적 초기화 매개변수 R E M O T E _ D E P E N D E N C I E S _ M O D E는 시간 기록 또는 서명의 원격 종속성 제어 여부를 결정합니다.

추가 정보: 시간 기록 또는 서명으로 원격 종속성을 관리하는데 대한자세한 내용은 O racle8i Application Dev e l o p e r’s Guide - Fund-a m e n t a l s를 참조하십시오.

시간 기록 검사 시간 기록 검사 종속성 모델에서 프로시저가 컴파일되거나 재컴파일될 때마다 그 시간 기록(생성, 변경 또는 바뀌는 시간)이 데이터 딕셔너리에 기록됩니다. 또한 컴파일된 프로시저 버전은 원격 프로시저 스키마, 패키지 이름, 프로시저 이름 및 시간 기록을 포함하여 컴파일된 프로시저가 참조하는 각 원격 프로시저에 대한정보를 포함합니다.

종속 프로시저를 사용할 때 O ra c l e은 컴파일 시간에 기록된 원격 시간 기록과 원격으로 참조된 프로시저의 현재 시간 기록을 비교합니다. 비교 결과에 따라 다음과 같은두 가지 상황이 발생할 수 있습니다.

■ 로컬 및 원격 프로시저는 시간 기록이 일치하면 컴파일하지 않고도 실행됩니다.

■ 원격으로 참조된 프로시저의 시간 기록이 일치하지 않으면 로컬 프로시저가 무효화되고 오류는 호출 환경으로 복귀됩니다. 또한 새로운 시간 기록을 가지는 원격프로시저에 종속된 모든 다른 로컬 프로시저도 무효화됩니다. 예를 들어, 여러 로컬 프로시저가 원격 프로시저를 호출하고 원격 프로시저가 재컴파일된다고 합시다. 로컬 프로시저 중 하나가 실행되고 원격 프로시저가 다른 시간 기록을 가지고있음을 알았을 때 원격 프로시저에 종속된 모든 로컬 프로시저는 무효화됩니다.

Oracle 종속성 관리 2 1 - 1 1

로컬 및 원격 종속성 관리

Page 142: Oracle8 - Tistory

실제적인 시간 기록 비교는 로컬 프로시저 본문의 명령문이 원격 프로시저를 실행할때 발생합니다. 이 시점에서만 분산 데이터베이스의 통신 링크를 통해 시간 기록이비교됩니다. 따라서 잘못된 프로시저 호출 이전의 로컬 프로시저에 있는 명령문은 실행될 수 있지만 잘못된 프로시저 호출 명령문 이후의 명령문은 실행되지 않습니다. (컴파일해야 합니다.) 그러나 잘못된 프로시저 호출 전에 실행된 DML 문은 롤백됩니다.

서명 검사 O ra c l e은 서명을 사용하여 추가 원격 종속성 기능을 제공합니다. 서명 기능은 원격 종속성에만 영향을 줍니다. 로컬(동일한 서버) 종속성에는 영향을 주지 않습니다. 이 환경에서는 항상 재컴파일할 수 있습니다.

프로시저의 서명에는 다음 정보가 포함됩니다.

■ 패키지, 프로시저 또는 함수의 이름

■ 매개변수의 기본 유형

■ 매개변수 모드(IN, OUT, IN OUT)

주: 매개변수의 유형과 모드만 중요합니다. 매개변수 이름은 서명에 영향을 주지 않습니다.

서명 종속성 모델이 적용되는 경우 원격 프로그램 단위(패키지, 내장 프로시저, 내장함수 또는 트리거)의 종속성은 종속 단위가 상위 단위에 있는 프로시저에 대한 호출을 포함하면 종속 단위가 부적합하게 되며 이 프로시저의 서명은 호환될 수 없는 방법으로 변경됩니다.

다른 원격 스키마 객체 사이의 종속성

O ra c l e은 로컬 프로시저 대 원격 프로시저 종속성 외에 원격 스키마 객체 사이의 종속성은 관리하지 않습니다.

예를 들어, 로컬 뷰가 생성되어 원격 테이블을 참조하는 질의에 의해 정의된다고 합시다. 또한 로컬 프로시저가 동일한 원격 테이블을 참조하는 SQL 문을 포함한다고합시다. 나중에 테이블 정의가 변경됩니다.

결과적으로 로컬 뷰 및 프로시저는 뷰나 프로시저가 테이블이 변경된 후에 사용되어도 또는 뷰나 프로시저를 사용할 때 (이 경우 뷰나 프로시저는 수동으로 변경되어야

2 1 - 1 2 Oracle8i 개념 설명서, 볼륨 2

로컬 및 원격 종속성 관리

Page 143: Oracle8 - Tistory

오류가 발생하지 않습니다.) 오류가 반환되어도 무효화되지 않습니다. 이러한 경우에는 종속 객체의 불필요한 재컴파일을 위해 종속성을 관리하지 않습니다.

응용 프로그램의 종속성

데이터베이스 응용 프로그램의 코드는 접속된 데이터베이스에 있는 객체를 참조할 수있습니다. 예를 들어, OCI, Precompiler 및 SQL*Module 응용 프로그램은 익명의PL/SQL 블록을 보낼 수 있으며 O racle Forms 응용 프로그램의 트리거는 스키마객체를 참조할 수 있습니다.

이러한 응용 프로그램은 이들이 참조하는 스키마 객체에 대해 종속적입니다. 종속성관리 기법은 개발 환경에 따라 다릅니다. 데이터베이스 응용 프로그램 내의 원격 종속성 관리 방법에 대한 자세한 내용은 응용 프로그램 개발 도구와 사용자 운영 체제별 설명서를 참조하십시오.

Oracle 종속성 관리 2 1 - 1 3

로컬 및 원격 종속성 관리

Page 144: Oracle8 - Tistory

2 1 - 1 4 Oracle8i 개념 설명서, 볼륨 2

로컬 및 원격 종속성 관리

Page 145: Oracle8 - Tistory

VISQL 문 최적화

V I부에서는 가장 효율적인 방법을 선택하여 각 SQL 문을 실행하는 최적기에 대해 설명합니다.

V I부에서는 다음 장을 포함하고 있습니다.

■ 2 2장“최적기”

■ 2 3장“최적기 작업”

■ 2 4장“조인의 최적화”

Page 146: Oracle8 - Tistory

22최적기

이 장에서는 O racle 최적기에 대해 설명하며 다음 내용을 다룹니다.

■ 최적화란

■ 비용 기준 최적화

■ 확장 가능한 최적화

■ 규칙 기준 최적화

다음 장에서는 O racle 최적기가 작업하는 방법을 자세하게 설명합니다.

■ 2 3장“최적기 작업”

■ 2 4장“조인의 최적화”

추가 정보: 질의 재작성을 위한 구체화된 뷰 사용 방법을 포함한 최적기에대한 자세한 내용은 O racle8i Tuning을 참조하십시오.

최적기 2 2 - 1

Page 147: Oracle8 - Tistory

최적화란

최적화는 SQL 문을 가장 효율적으로 실행하는 방법을 선택하는 과정으로 D M L (데이터 조작어) 문 ( S E L E C T, INSERT, UPDAT E, DELETE) 처리에서 중요한 단계입니다. 예를 들어, 테이블이나 인덱스가 액세스되는 순서 변화와 같이 SQL 문을 실행하는 방법은 매우 다양합니다. 명령문 실행에 사용되는 프로시저는 명령문 실행 속도에 많은 영향을 줄 수 있습니다.

O ra c l e의 일부인 최적기는 가장 효율적인 방법으로 계산하여 SQL 문을 실행합니다.최적기는 다양한 액세스 경로에서 선택을 위해 여러 가지 요소를 평가하고 비용 또는규칙 기준 접근 방법을 사용할 수 있습니다. (22-7 페이지“비용 기준 최적화”및22-18 페이지“규칙기준 최적화”참조)

주: 최적기는 O ra c l e의 버전에 따라 다른 결정을 내릴 수 있습니다.더 최신 버전에서 최적기는 최적기가 사용할 수 있는 더 자세한 정보를사용하여 현재 버전과는 다른 결정을 내릴 수 있습니다.

최적기 접근 방법과 목표를 설정하고 비용 기준 최적화에 사용할 통계를 모아 최적기의 선택에 영향을 줄 수 있습니다. 때때로 특정 응용 프로그램의 데이터에 대한 정보를 최적기에 사용할 수 있는 것보다 더 많이 가지고 있는 응용 프로그램 설계자는 더효율적인 방법을 선택하여 SQL 문을 실행할 수 있습니다. 응용 프로그램 설계자는SQL 문의 힌트를 사용하여 명령문 실행 방법을 지정할 수 있습니다.

추가 정보: SQL 문에 힌트를 사용하는 방법은 O racle8i Tuning을 참조하십시오.

실행 계획

DML 문을 실행하려면 O ra c l e은 여러 단계를 수행해야 합니다. 각 단계는 데이터베이스에서 데이터 행을 물리적으로 읽어 들이거나 명령문을 실행하는 사용자를 위해특별한 방법으로 데이터 행을 준비하는 단계입니다. Ora c l e이 명령문을 실행하는데사용하는 단계의 조합을 실행 계획이라고 합니다. 실행 계획은 명령문이 액세스하는각 테이블에 대한 액세스 방법과 테이블 정렬(조인 정렬)을 포함하고 있습니다. 23-34 페이지“액세스 방법”에서는 인덱스, 해시 클러스터 및 테이블 스캔을 포함한 다양한 액세스 방법을 설명합니다.

그림 2 2 - 1은 월급이 일정한 범위에 있지 않은 모든 사원의 이름, 직업, 월급 및 부서이름을 선택하는 다음 SQL 문의 실행 계획을 그림으로 나타낸 것입니다.

2 2 - 2 Oracle8i 개념 설명서, 볼륨 2

최적화란

Page 148: Oracle8 - Tistory

SELECT ename, job, sal, dnameFROM emp, dept

WHERE emp.deptno = dept.deptnoAND NOT EXISTS(SELECT *

FROM salgradeWHERE emp.sal BETWEEN losal AND hisal);

그림 22-1 실행 계획

최적기 2 2 - 3

최적화란

1

FILTER

2

NESTED LOOPS

4

TABLE ACCESS(BY ROWID)

dept

5

INDEX(UNIQUE SCAN)

pk_deptno

3

TABLE ACCESS(FULL)emp

6

TABLE ACCESS(FULL)

salgrade

Page 149: Oracle8 - Tistory

실행 계획 단계

실행 계획의 각 단계에서는 다음 단계에서 사용할 일련의 행을, 마지막 단계에서는SQL 문을 발생시킨 사용자나 응용 프로그램에 보낼 일련의 행을 돌려줍니다. 각 단계에서 되돌려지는 일련의 행을 행 소스라고 합니다.

그림 2 2 - 1은 각 단계별로 행 소스의 흐름을 나타내는 계층적 다이어그램입니다. 각단계에 있는 숫자는 다음 단원에서 설명되는 EXPLAIN PLAN 명령어에 대한 응답으로 나타나는 순서를 반영합니다. 이것은 일반적으로 각 단계가 실행되는 순서와는다릅니다. (22-5 페이지“실행 순서”참조) 실행 계획의 각 단계는 데이터베이스의행을 읽어 들이거나 하나 이상의 행 소스의 행을 입력으로 받아들이는 단계입니다.

■ 채색된 사각형은 데이터베이스에 있는 객체에서 데이터를 물리적으로 읽어 들이는단계를 나타냅니다. 이러한 단계를 액세스 경로라고 합니다.

- 3단계와 6단계에서는 각각 EMP 테이블과 SALGRADE 테이블의 모든 행을읽어 옵니다.

- 5단계에서는 3단계에서 돌려준 각각의 DEPTNO 값을 PK_DEPTNO 인덱스에서 찾습니다. 여기에서는 DEPT 테이블에서 관련된 행의 ROW I D를 찾습니다.

- 4단계에서는 DEPT 테이블로부터 5단계에서 ROW I D를 돌려준 행을 읽어 들입니다.

■ 빈 사각형은 행 소스 작동 단계를 나타냅니다.

- 2단계에서는 중첩된 루프 작업을 수행합니다. 3단계와 4단계에서 행 소스를 받아들여 3단계의 각 행을 4단계의 해당 행과 조인하여 그 결과로 얻어진 행을 1단계로 돌려줍니다.

- 1단계에서는 필터 작업을 수행합니다. 1단계에서는 2단계와 6단계의 행 소스를받아들이고 6단계에서 해당 행을 가진 2단계의 행을 제거하며 2단계에서는 남은 행을 SQL 문을 발생시킨 사용자나 응용 프로그램에 돌려줍니다.

액세스 경로는 23-33 페이지“액세스 경로 선택”단원을, Ora c l e이 행 소스를 조인하는 방법은 24-2 페이지“조인 작업”을 참조하십시오.

EXPLAIN PLAN 명령어

EXPLAIN PLAN 명령어를사용하여 SQL 문에 대해 최적기가 선택한 실행 계획을검사해 볼 수 있습니다. 이 명령어를 사용하면 최적기는 실행 계획을 선택하고 계획을 설명하는 데이터를 데이터베이스 테이블에 삽입합니다.

2 2 - 4 Oracle8i 개념 설명서, 볼륨 2

최적화란

Page 150: Oracle8 - Tistory

예를 들어, 다음 결과 테이블은 이전 단원에서 검사한 명령문에 대한 설명입니다.

ID OPERATION OPTIONS OBJECT_NAME

0 SELECT STATEMENT1 FILTER2 NESTED LOOPS3 TABLE ACCESS FULL EMP4 TABLE ACCESS BY ROWID DEPT5 INDEX UNIQUE SCAN PK_DEPTNO6 TABLE ACCESS FULL SALGRADE

그림 2 2 - 1의 사각형과 결과 테이블에 있는 각 행은 실행 계획의 한 단계에 해당합니다. 목록에 있는 각 행에 대해 ID 열에 있는 값은 그림 2 2 - 1의 해당 사각형에 나타난값입니다.

EXPLAIN PLAN 명령어를 사용한 후 결과 테이블을 질의하여 이 목록을 볼 수 있습니다.

추가 정보: EXPLAIN PLAN 명령어 사용법 및 결과를 생성하고 해석하는 방법은 O racle8i Tuning을 참조하십시오.

실행 순서

실행 계획 단계는 숫자로 표시된 순서대로 수행되지 않습니다. Ora c l e은 먼저 실행계획(그림 2 2 - 1의 3, 5, 6단계)의 트리 구조 그림에서 최하위 노드로 나타난 단계를수행합니다. 각 단계에서 돌려주는 행은 자신의 상위 단계의 행 소스가 됩니다. 그런다음 O ra c l e은 상위 단계를 수행합니다.

예를 들어, 그림 2 2 - 1에서 명령문을 실행하려면 O ra c l e은 다음 순서대로 각 단계를수행합니다.

■ 먼저 O ra c l e은 3단계를 수행하고 그 결과로 생성되는 행을 하나씩 2단계로 돌려줍니다.

■ 3단계에서 돌려준 각 행에 대해 O ra c l e은 다음 단계를 수행합니다.

- O ra c l e은 5단계를 수행하고 그 결과로 생성되는ROW I D를 4단계로돌려줍니다.

- Ora c l e은 4단계를 수행하고 그 결과로 생성되는 행을 2단계로 돌려줍니다.

- O ra c l e은 2단계를 수행하고 3단계와 4단계의 각 하나의 행을 조인하여 1단계로 단일 행을 돌려줍니다.

- O ra c l e은 6단계를 수행하고 그 결과로 생성되는 행이 있으면 1단계로 돌려줍니다.

최적기 2 2 - 5

최적화란

Page 151: Oracle8 - Tistory

- O ra c l e은 1단계를 수행하고 6단계에서 돌려준 행이 없으면 2단계의 행을 S Q L문을 발생시킨 사용자에게 돌려줍니다.

3단계에서 돌려준 각 행에 대해 5, 4, 2, 6, 1 단계를 한 번씩 수행해야 합니다. 상위 단계에서 상위 단계가 실행되기 전에 하위 단계에서 생성된 하나의 행을 필요로하면 O ra c l e은 하위 단계에서 하나의 행을 돌려주는 대로 상위 단계(그리고 가능하다면 실행 계획의 나머지 부분)를 수행합니다. 그 상위 단계의 상위 역시 하나의 행이돌려지면 활성화될 수 있고 활성화된 다음에 실행됩니다.

따라서 트리를 따라 올라가며 단계적으로 실행되어 실행 계획의 나머지 부분을 완수합니다. Ora c l e은 하위 단계에서 읽어 들인 각 행에 대해 상위 단계를 수행하고 단계적으로 되어 있는 모든 단계를 차례로 수행합니다. 하위 단계에서 돌려준 각 행에 대해 트리거되는 상위 단계로는 테이블 액세스, 인덱스 액세스, 중첩된 루프 조인, 필터등이 있습니다.

상위 단계에서 상위 단계가 실행되기 전에 하위 단계의 모든 행을 필요로 하는 경우O ra c l e은 하위 단계의 모든 행이 되돌려질 때까지 이러한 상위 단계를 수행할 수 없습니다. 이러한 상위 단계로는 정렬, 정렬-병합 조인, 집계 함수 등이 있습니다.

최적화 계획 안정성

응용 프로그램을 주의하여 조정한 다음 동일한 SQL 문이 실행될 때마다 최적기가 동일한 실행 계획을 생성하도록 할 수 있습니다. 계획 안정성을 통해 테이블 재분석, 데이터 추가 또는 삭제, 테이블 열, 제약 조건 또는 인덱스 수정, 시스템 구성 변경 또는 심지어 최적기를 새로운 버전으로 업그레이드하는 것과 같은 데이터베이스 변경사항과 관계없이 동일한 SQL 문에 대해 동일한 실행 계획을 유지 관리할 수 있습니다.

C R E ATE OUTLINE 문은저장 윤곽을 생성하는데, 이것은 최적기가 실행 계획을 생성하는데 사용하는 일련의 속성을 포함합니다. 시스템 매개변수 C R E AT E _ S T O R E D _O U T L I N E S를 T RU E로 설정하여 저장 윤곽을 자동으로 작성할 수도 있습니다.

시스템 매개변수 U S E _ S T O R E D _ O U T L I N E S를 T RU E, FALSE 또는 실행될 질의의 기존 저장 윤곽을 사용할지의 여부를 나타내는 범주 이름으로 설정할 수 있습니다.O U T L N _ P KG 패키지는 저장 윤곽을 관리하는데 사용될 프로시저를 제공합니다.

계획 안정성을 적용하면 O U T L N이라는 새로운 스키마를 생성하는데, 이것은DBA 권한으로 생성됩니다. 데이터베이스 관리자는 SYS 및 SYSTEM 스키마와 같이 O U T -LN 스키마에대한암호를 변경해야 합니다.

2 2 - 6 Oracle8i 개념 설명서, 볼륨 2

최적화란

Page 152: Oracle8 - Tistory

추가 정보: 계획 안정성 사용에 대한 내용은 O racle8i Tuning을,C R E ATE OUTLINE 문에 대한 내용은 O racle8i SQL 참조서를, 그리고 O U T L N _ P KG 패키지에 대한 내용은 O racle8i Supplied Pa c -kages Refe re n c e를 참조하십시오.

비용 기준 최적화

비용 기준 접근 방법을 사용하는 경우 최적기는 SQL 문이 액세스하는 스키마 객체(테이블 또는 인덱스)의 통계에 준한 정보 요소와 사용 가능한 액세스 경로를 고려하여 가장 효율적인 실행 계획을 결정합니다. 또한 비용 기준 접근 방법은 명령문의 설명에서 제시된 최적화 제안인 힌트를 고려합니다.

개념적으로 비용 기준 접근 방법은 다음과 같은 단계로 이루어집니다.

1 . 최적기는 사용 가능한 액세스 경로와 힌트에 준하여 SQL 문에 대한 일련의 잠재적인 실행 계획을 생성합니다.

2 . 최적기는 명령문이 액세스한 테이블, 인덱스 및 분할 영역의 데이터 분산과 저장영역 특성에 대한 데이터 딕셔너리의 통계에 준하여 각 실행 계획의 비용을 예측합니다.

비용은 특정 실행 계획을 사용하여 명령문을 실행하는데 필요한 예상되는 자원사용에 비례하는 예측 값입니다. 최적기는 계획을 사용하여 명령문을 실행하는데필요한 입출력, CPU 시간 및 메모리를 포함하여 (그러나 제한되지는 않는) 예측되는 컴퓨터 자원에 준하여 각각의 가능한 액세스 방법과 조인 정렬의 비용을 계산합니다.

더 많은 비용이 드는 직렬 실행 계획은 더 적은 비용이 드는 실행 계획보다 시간이 많이 걸립니다. 그러나 병렬 실행 계획을 사용할 경우 자원 사용이 경과 시간과 직접적으로 관련되지는 않습니다.

3 . 최적기는 실행 계획의 비용을 비교하여 비용이 가장 적게 드는 실행 계획을 선택합니다.

비용 기준 접근 방법의 목표

기본적으로 비용 기준 접근 방법의 목표는 가장 좋은 처리 능력 또는 명령문이 액세스하는 모든 행을 처리하는데 필요한 최소 자원 사용입니다.

O ra c l e은 또한 최상의 응답 시간 또는 SQL 문이 액세스하는 첫 번째 행을 처리하는데 필요한 최소 자원 사용을 목표로 명령문을 최적화할 수 있습니다. 최적기가 최적화 접근 방법과 목표를 선택하는 방법은 23-31 페이지“최적화 접근 방법 및 목표 선택”을 참조하십시오.

최적기 2 2 - 7

비용 기준 최적화

Page 153: Oracle8 - Tistory

SQL 문의 병렬 실행에서 최적기는 자원 소비 비용에서 경과 시간 최소화를 선택할수 있습니다. 초기화 매개변수 O P T I M I Z E R _ P E RC E N T _ PA R A L L E L은 최적기가실행을 병렬화할 양을 지정합니다.

추가 정보: O P T I M I Z E R _ P E RC E N T _ PARALLEL 매개변수 사용에대한 내용은 O racle8i Tuning을참조하십시오.

비용 기준 최적화에 사용되는 통계

비용 기준 접근 방법은 통계를 사용하여 술어 선택성을 계산하고 각 실행 계획의 비용을 예측합니다. 선택성은 SQL 문의 술어가 선택하는 테이블 행의 일부입니다. 최적기는 술어의 선택성을 사용하여 특정 액세스 방법의 비용을 예측하고 최적의 조인정렬을 결정합니다.

통계는 테이블, 열, 인덱스 및 분할 영역에 대한 데이터 분산이나 저장 영역 특성을정량화합니다. 최적기는 이러한 통계를 사용하여 특정 실행 계획을 사용한 SQL 문을실행하는데 필요한 입출력, CPU 시간 및 메모리 양을 예측합니다. 통계는 데이터 딕셔너리에 저장되고 한 데이터베이스에서 엑스포트되어 다른 데이터베이스로 임포트될수 있습니다. (예를 들어, 테스트 시스템은 적은 양의 데이터 표본을 가지고 있지만산출 통계를 테스트 시스템으로 전송하여 실제 환경을 시뮬레이션합니다. )

일반적인 기본 사항에 대한 통계를 모아 스키마 객체에 대한 정보를 최적기에 제공해야 합니다. 이전 통계를 부정확하게 만드는 방식으로 스키마 객체의 데이터 또는 구조를 수정한 다음 새로운 통계를 모아야 합니다. 예를 들어, 상당한 수의 행을 테이블로 로드한 후에 행의 수에 대한 새로운 통계를 수집해야 합니다. 테이블에서 데이터를 갱신한 후에는 행 수에 대한 새로운 통계를 수집할 필요가 없지만 평균 행 길이에대한 새로운 통계가 필요할 수도 있습니다. 22-11 페이지“통계 수집”을 참조하십시오.

비용 기준 최적화에 사용되는 막대 그래프

비용 기준 최적화는 데이터 값 막대 그래프를 사용하여 열 데이터 분산에 대한 정확한 예측을 얻습니다. 막대 그래프는 모든 열 값이 동일한 범위 안에서 나뉘도록 열 값을 구간으로 분할합니다. 막대 그래프는 데이터가 비대칭인 경우 개선된 선택성 예측을 제공하며 균등하지 않은 데이터 분산에 대해 최적화된 실행 계획을 생성합니다.

비용 기준 최적화의 가장 기본적인 기능 중 하나는 질의에 나타나는 술어의 선택성을결정하는 것입니다. 선택성 예측은 인덱스 사용 시기와 조인할 테이블 순서를 결정하는데 사용됩니다. 대부분의 속성 도메인(테이블 열)은 균등하게 분산되어 있지 않습니다.

2 2 - 8 Oracle8i 개념 설명서, 볼륨 2

비용 기준 최적화

Page 154: Oracle8 - Tistory

비용 기준 최적화는 특정 속성에 대한 높이 균형 막대 그래프를 사용하여 균등하게분산되어 있지 않은 도메인 분산을 설명합니다. 높이 균형 막대 그래프에서는 각 구간이 대략 동일한 수의 값을 포함하도록 열 값을 구간으로 나눕니다. 막대 그래프가제공하는 유용한 정보는 종료점에 해당하는 값의 범위 안에 있습니다.

1과 100 사이의 값을 가지는 열 C가 있고 막대 그래프는 1 0개의 구간을 가지고 있다고 합시다. C에 데이터가 균등하게 분산되어 있다면 막대 그래프는 다음과 같은 모양이 되며 숫자는 종료점의 값입니다.

각 구간에 있는 행 수는 테이블에 있는 전체 행 수의 1 0분의 1입니다. 균등하게 분산되어 있는 이 예에서 6 0과 100 사이의 값을 가지는 행은 1 0분의 4입니다.

데이터가 균등하게 분산되어 있지 않다면 막대 그래프는 다음과 같은 모양이 될 것입니다.

이러한 경우 대부분의 행은 각각의 열 값으로 5를 가집니다. 이 예에서는 행의 1 0분의 1만이 6 0과 100 사이의 값을 가집니다.

높이 균형 막대 그래프 O ra c l e은 높이 균형 막대 그래프(너비 균형 막대 그래프와대조되는)를 사용합니다.

■ 너비 균형 막대 그래프는 데이터를 고정된 수의 동일한 너비 범위로 나누고 각 범위에 해당하는 값의 수를 계산합니다.

■ 높이 균형 막대 그래프는 대략 동일한 수의 값을 각 범위에 두므로 범위의 종료점은 해당 범위에 얼마나 많은 값이 있느냐에 의해 결정됩니다.

예를 들어, 1000개의 행을 가진 테이블의 한 열의 값이 1에서 100 사이고 1 0개의 구간(막대 그래프의 범위를 구간이라고 합니다. )을 가진 막대 그래프를 생각해 봅시다.너비 균형 막대 그래프에서 구간은 동일한 너비(1-10, 11-20, 21-30 등)를 가지며

최적기 2 2 - 9

비용 기준 최적화

1 10 20 30 40 50 60 70 80 90 100

1 5 5 5 5 10 10 20 35 60 100

Page 155: Oracle8 - Tistory

각 구간은 구간의 범위에 해당하는 행의 수를 헤아립니다. 높이 균형 막대 그래프에서 각 구간은 동일한 높이를 가지며(이 경우 100 행) 각 구간에 대한 종료점은 열의상이한 값의 밀도에 의해 좌우됩니다.

데이터의 편중이 심할 경우 높이 균형 접근 방법의 이점이 부각됩니다. 1000개의 행을 가진 테이블에서 8 0 0개의 행이 값 5를 가지고, 나머지 2 0 0개의 행이 1에서 1 0 0사이의 값을 균등하게 가지는 경우를 생각해 봅시다. 너비 균형 막대 그래프는 1 - 1 0이라고 표시된 구간에 8 2 0개의 행을 가지고 나머지 다른 구간 각각에 대해 약 2 0개의행을 가질 것입니다. 높이 기준 막대 그래프는 1 - 5라고 표시된 하나의 구간과 5 - 5라고 표시된 7개의 구간, 5-50이라고 표시된 하나의 구간, 50-100이라고 표시된 하나의 구간을 가집니다.

테이블에 값이 5인 행이 얼마나 있는지 알아보려면 높이 균형 막대 그래프로부터 행의 약 8 0 %가 이러한 값을 가진다는 것을 알 수 있습니다. 그러나 너비 균형 막대 그래프는 값 5와 값 6 사이의 차이에 대한 처리 방법을 제공하지 않습니다. 사용자는너비 균형 막대 그래프에서 값 5를 가지는 행의 8 %만 계산할 수 있습니다. 따라서열 값의 선택성을 결정하는데는 높이 균형 막대 그래프가 더 적합합니다.

막대 그래프를 사용하는 경우 막대 그래프는 성능에 영향을 주고 실질적으로 질의 계획을 개선할 때만 사용되어야 합니다. 일반적으로 질의의 WHERE 절에서 가장 자주사용되고 심하게 편중된 데이터 분산을 가지는 열에 막대 그래프를 생성해야 합니다.대부분의 응용 프로그램에서 인덱스화된 열이 일반적으로 WHERE 절에 가장 자주사용되므로 인덱스화된 모든 열에 대해 막대 그래프를 작성하는 것이 적합합니다.

막대 그래프는 연속 객체이므로 막대 그래프 사용에 대한 유지 관리 및 영역 비용이듭니다. 심하게 편중된 데이터 분산을 가지고 있는 열에 대해서만 막대 그래프를 계산해야 합니다. 균등하게 분산된 데이터의 경우 비용 기준 최적화는 막대 그래프를사용하지 않고 특정 명령문을 실행하는 비용을 상당히 정확하게 추측할 수 있습니다.

막대 그래프는 다른 모든 최적기 통계와 같이 정적입니다. 막대 그래프는 주어진 열에 대해 현재 데이터 분산을 반영하는 경우에만 유용합니다. (분산이 일관성 있게 유지되는 한 열에 있는 데이터는 변경될 수 있습니다.) 열의 데이터 분산이 자주 변경되는 경우 막대 그래프를 자주 재계산해야 합니다.

막대 그래프는 다음과 같은 특성을 가진 열에는 유용하지 않습니다.

■ 열에 대한 모든 술어가 바인드 변수를 사용합니다.

■ 열 데이터가 균등하게 분산되어 있습니다.

■ 질의의 WHERE 절에서는 열을 사용하지 않습니다.

2 2 - 1 0 Oracle8i 개념 설명서, 볼륨 2

비용 기준 최적화

Page 156: Oracle8 - Tistory

■ 열은 고유하며 동등 술어와 함께 사용됩니다.

D B M S _ S TATS 패키지나 A NA LYZE 명령어를 사용하여 막대 그래프를 생성합니다.(다음의“통계 수집”참조) 테이블 또는 분할 영역의 열에 대한 막대 그래프를 생성할수 있습니다. 막대 그래프 통계를 병렬로 수집할 수 없습니다.

다음의 데이터 딕셔너리 뷰를 사용하여 막대 그래프 정보를 볼 수 있습니다.

■ U S E R _ H I S T O G R A M S, ALL_HISTOGRAMS 및D B A _ H I S T O G R A M S

■ U S E R _ PA RT _ H I S T O G R A M S, ALL_PA RT_HISTOGRAMS 및 D B A _PA RT _ H I S T O G R A M S

■ U S E R _ S U B PA RT _ H I S T O G R A M S, ALL_SUBPA RT_HISTOGRAMS 및D B A _ S U B PA RT _ H I S T O G R A M S

■ TAB_COLUMNS

추가 정보: 막대 그래프에 대한 자세한 내용은 O racle8i Tuning을 참조하십시오.

분할된 스키마 객체에 대한 통계

분할된 스키마 객체는 다수의 통계 집합을 포함할 수 있습니다. 전체 스키마 객체를전체에 대한 통계(글로벌 통계), 개별 분할 영역에 대한 통계 및 조합 분할된 객체의개별 하위 분할 영역에 대한 통계를 가질 수 있습니다.

질의 술어가 단일 분할 영역으로 질의를 좁히지 않는 경우 최적기는 글로벌 통계를사용하게 됩니다. 대부분의 질의는 이러한 제한 내용이 없으므로 정확한 글로벌 통계를 가지는 것이 가장 중요합니다. 직관적으로 분할 영역 레벨 통계에서 글로벌 통계를 생성하는 것은 쉽게 보일 수 있지만 이것은 일부 통계에 대해서만 그렇습니다. 예를 들어, 값이 중첩될 수 있으므로 각 분할 영역에 있는 서로 다른 값의 수에서 서로다른 열에 대한 값의 수를 알아내기가 매우 어렵습니다. 따라서 실제로 A NA LY Z E명령어(22-13 페이지“A NA LYZE 명령어”참조)로 계산하기 보다는 D B M S _ S TAT S패키지로 글로벌 통계를 수집할 것을 권장합니다.

주: O ra c l e은 현재 글로벌 막대 그래프 통계를 수집하지 않습니다.

통계 수집

이 단원에서는 통계를 수집하는데 사용할 수 있는 여러 가지 방법을 설명합니다.

최적기 2 2 - 1 1

비용 기준 최적화

Page 157: Oracle8 - Tistory

D B M S _ S T ATS 패키지 PL/SQL 패키지 D B M S _ S TAT S를 사용하여 비용 기준 최적화를 위한 통계를 생성하고 관리할 수 있습니다. 이 패키지를 사용하여 통계를 모으고 수정하고 보고 삭제할 수 있습니다. 이 패키지를 사용하여 통계 집합을 저장할수도 있습니다. (22-14 페이지“통계테이블”참조)

D B M S _ S TATS 패키지는 스키마 또는 데이터베이스의 모든 스키마 객체에 대한 통계뿐 아니라 인덱스, 테이블, 열 및 분할 영역에 대한 통계를 모을 수 있습니다. 이 패키지는 클러스터 통계는 모으지 않습니다. DBMS_STAT S를 사용하여 전체 클러스터대신 개별 테이블에 대한 통계를 모을 수 있습니다.

통계수집작업은 직렬또는병렬로 실행할 수 있습니다. 가능할때마다 D B M S _ S TAT S는 병렬 질의를 호출하여 지정된 병렬도로 통계 자료를 모읍니다. 그렇지 않으면 직렬질의또는A NA LYZE 문을호출합니다. 인덱스통계는 병렬로 모아지지않습니다.

통계는 행 또는 블록의 임의의 표본에서 정확하게 계산되거나 예측될 수 있습니다.(22-14 페이지“정확한통계 및 예측 통계”참조)

분할된 테이블과 인덱스에 대해 D B M S _ S TAT S는 전체 테이블이나 인덱스에 대한 글로벌 통계뿐만 아니라 각 분할 영역에 대한 개별 통계를 모을 수 있습니다. 마찬가지로 조합 분할에 대해 D B M S _ S TAT S는 하위 분할 영역, 분할 영역 및 전체 테이블또는 인덱스에 대한 개별 통계를 모을 수 있습니다. 최적화될 SQL 문에 따라 최적기는 분할 영역(또는 하위 분할 영역) 통계 또는 글로벌 통계 중 하나를 선택하여 사용합니다.

D B M S _ S TAT S는 비용 기준 최적화의 경우에만 통계를 모으며 다른 통계는 모으지않습니다. 예를 들어, DBMS_STAT S가 모은 테이블 통계에는 행 수, 현재 데이터를포함하고 있는 블록 수와 평균 행 길이는 포함되지만 체인화된 행 수, 평균 사용 가능영역 또는 사용되지 않은 데이터 블록 수는 포함되지 않습니다.

추가 정보: D B M S _ S TATS 패키지로 통계를 모으는 방법에 대한 예는O racle8i Tuning을참조하십시오.

인덱스에 대한 COMPUTE STATISTICS 옵션 O ra c l e은 B* 트리 또는 비트맵 인덱스를 생성하거나 재구축하는 동안 일부 통계를 자동으로 모읍니다. CREATE INDEX또는 A LTER INDEX. . . R E B U I L D의 COMPUTE STATISTICS 옵션을 사용하여해당 통계를 모을 수 있습니다.

O ra c l e이 COMPUTE STATISTICS 옵션으로 모으는 통계는 인덱스 분할 여부에따라 다릅니다.

■ 분할되지 않은 인덱스의 경우 O ra c l e은 인덱스를 생성하거나 재구축하면서 인덱스, 테이블 및 열 통계를 모읍니다. 연결된 키 인덱스의 경우 열 통계는 키의 선행열만을 참조합니다.

2 2 - 1 2 Oracle8i 개념 설명서, 볼륨 2

비용 기준 최적화

Page 158: Oracle8 - Tistory

■ 분할된 인덱스의 경우 O ra c l e은 인덱스를 생성하거나 분할 영역을 재구축하면서테이블이나 열 통계를 모으지 않습니다.

- 분할된 인덱스를 생성하는 동안 O ra c l e은 각 분할 영역과 전체 인덱스에 대한인덱스 통계를 모읍니다. 인덱스가 조합 분할을 사용하면 O ra c l e은 각 하위 분할 영역에 대한 통계도 모읍니다.

- 인덱스의 분할 영역 또는 하위 분할 영역을 재구축하는 동안 O ra c l e은 분할 영역 또는 하위 분할 영역에 대해서만 인덱스 통계를 모읍니다.

통계의 정확성을 확인하기 위해 인덱스를 생성하는데 사용될 수 있는 다른 인덱스가사용 가능한 경우에도 O ra c l e은 COMPUTE STATISTICS 옵션으로인덱스를 생성할 때 항상 기본 테이블을 사용합니다.

추가 정보: C R E ATE INDEX 및 A LTER INDEX 명령어의 C O M -PUTE STATISTICS 옵션에 대한 자세한 내용은 O racle8i SQL 참조서를 참조하십시오.

ANALYZE 명령어 A NA LYZE 명령어 또한 비용 기준 최적화에 대한 통계를 생성할 수 있습니다. 그러나 다음과 같은 다양한 제한 사항으로 인해 이러한 목적으로A NA LY Z E를 사용하는 것을 권장하지 않습니다.

■ A NA LY Z E는 항상 순차적으로 실행됩니다.

■ A NA LY Z E는 통계를 직접 모으지 않고 분할된 테이블과 인덱스에 대한 글로벌통계를 계산합니다. 이것은 서로 다른 개별 값의 수와 같은 일부 통계를 부정확하게 계산할 수 있습니다.

- 분할된 테이블 및 인덱스에 대해 A NA LY Z E는 개별 분할에 대한 통계를 모은다음 분할 영역 통계에서 글로벌 통계를 계산합니다.

- 조합 분할에 대해 A NA LY Z E는 하위 분할 영역에 대한 통계를 모은 다음 하위분할 영역 통계에서 분할 영역 통계와 글로벌 통계를 계산합니다.

■ A NA LY Z E는 D B M S _ S TAT S로 모은 통계 값의 일부를 겹쳐 쓰거나 삭제할 수없습니다.

A NA LY Z E는 인덱스, 테이블 및 클러스터의 체인화된 행 및 구조적 무결성에 대한정보와 같은 최적기가 사용하지 않는 추가 정보를 모을 수 있습니다. DBMS-S TAT S는 이런 정보를 모으지 않습니다.

추가 정보: A NA LYZE 문에 대한 자세한 내용은 O racle8i SQL 참조서를 참조하십시오.

최적기 2 2 - 1 3

비용 기준 최적화

Page 159: Oracle8 - Tistory

정확한 통계 및 예측 통계 D B M S _ S TATS 패키지 또는 A NA LYZE 문은 정확한 통계 또는 예측 통계를 모을 수 있습니다. (인덱스를 생성하거나 재구축하는 C O M P -UTE STATISTICS 옵션은항상 정확한 통계를 모읍니다. )

정확한 통계를 계산하려면 O ra c l e은 인덱스, 테이블, 분할 영역 또는 스키마의 모든데이터를 읽어야 합니다. 테이블에서 현재 데이터를 포함하고 있는 데이터 블록 수또는 루트 블록에서 최하위 블록까지의 인덱스 깊이와 같은 일부 통계는 정확하게 계산됩니다.

O ra c l e은 임의의 데이터 표본을 선택하여 통계를 예측합니다. 표본 추출 백분율과 표본 추출 기준을 행 또는 블록으로 지정할 수 있습니다.

행 표본 추출은 디스크 상의 행의 물리적 위치에 관계없이 행을 읽습니다. 이렇게 하여 예측을 위한 가장 임의적인 데이터를 제공합니다. 그러나 이 방법을 사용하면 필요한 것보다 많은 데이터를 읽게 됩니다. 예를 들어, 최악의 경우에 행 표본 추출은각 블록에서 한 행을 선택하여 테이블과 인덱스를 전체 스캔해야 할 수도 있습니다.

블록 표본 추출은 임의의 블록 표본을 읽고 블록의 모든 행을 사용하여 예측합니다.이 작업은 주어진 표본 크기에 대한 입출력 작업 양을 줄이는 반면 행이 디스크에 임의로 분산되지 않은 경우 표본의 임의성을 줄일 수 있습니다. 블록 표본 추출은 인덱스 통계에는 사용할 수 없습니다.

통계 관리

이 단원에서는 통계 테이블을 설명하고 데이터 딕셔너리에 저장된 통계에 대한 내용을 표시하는 뷰를 나열합니다.

통계 테이블 D B M S _ S TATS 패키지를 사용하여 통계 테이블에 통계 내용을 저장할수 있습니다. 열, 테이블, 인덱스 또는 스키마에 대한 통계를 통계 테이블로 전송하고이 통계를 순차적으로 데이터 딕셔너리로 복원합니다. 최적기는 통계 테이블에 저장된 통계를 사용하지 않습니다.

통계 테이블을 사용하여 다른 집합의 통계로 실험할 수 있습니다. 예를 들어, 통계 집합을 삭제 또는 수정하거나 새로운 통계를 생성하기 전에 백업할 수 있습니다. 최적화된 SQL 문의 성능을 다른 통계 집합과 비교할 수 있고 테이블에 저장된 통계가 최고 성능을 발휘하는 경우 이 통계를 데이터 딕셔너리에 복원할 수 있습니다.

통계 테이블은 여러 개의 다른 통계 집합을 보유하거나 여러 개의 통계 테이블을 생성하여 각각 다른 통계 집합을 저장할 수 있습니다.

통계 보기 D B M S _ S TATS 패키지를 사용하여 데이터 딕셔너리 또는 통계 테이블에저장된 통계를 볼 수 있습니다.

또한 데이터 딕셔너리에 있는 통계에 대한 다음과 같은 데이터 딕셔너리 뷰를 질의할수 있습니다.

2 2 - 1 4 Oracle8i 개념 설명서, 볼륨 2

비용 기준 최적화

Page 160: Oracle8 - Tistory

■ U S E R _ TA B L E S, ALL_TA B L E S, DBA_TA B L E S

■ U S E R _ TA B _ C O L U M N S, ALL_TA B _ C O L U M N S, DBA_TA B _ C O L U M N S

■ U S E R _ I N D E X E S, ALL_INDEXES, DBA_INDEXES

■ U S E R _ C L U S T E R S, DBA_CLUSTERS

■ U S E R _ TA B _ PA RT I T I O N S, ALL_TA B _ PA RT I T I O N S, DBA_TA B _ PA RT I T -I O N S

■ U S E R _ TA B _ S U B PA RT I T I O N S, ALL_TA B _ S U B PA RT I T I O N S, DBA_TA B _S U B PA RT I T I O N S

■ U S E R _ I N D _ PA RT I T I O N S, ALL_IND_PA RT I T I O N S, DBA_IND_PA RT I -T I O N S

■ U S E R _ I N D _ S U B PA RT I T I O N S, ALL_IND_SUBPA RT I T I O N S, DBA_IND_S U B PA RT I T I O N S

■ U S E R _ PA RT _ C O L _ S TAT I S T I C S, ALL_PA RT _ C O L _ S TAT I S T I C S, DBA_PA RT _ C O L _ S TAT I S T I C S

■ U S E R _ S U B PA RT _ C O L _ S TAT I S T I C S, ALL_SUBPA RT _ C O L _ S TAT I S T I C S,D B A _ S U B PA RT _ C O L _ S TAT I S T I C S

추가 정보: 이러한 뷰의 통계에 대한 내용은 O racle8i Refe re n c e를 참조하십시오.

비용 기준 접근 방법 사용 시기

일반적으로 새로운 모든 응용 프로그램에 대해서는 비용 기준 접근 방법을 사용해야합니다. 비용 기준 최적화가 사용 가능하기 전에 작성된 응용 프로그램에 대해서는규칙 기준 접근 방법이 제공됩니다. 비용 기준 최적화는 관계형 데이터와 객체 유형모두에 사용될 수 있습니다.

다음 기능은 비용 기준 최적화만을 사용할 수 있습니다.

■ 분할된 테이블

■ 분할 영역 뷰

■ 인덱스 구성 테이블

■ 역방향 키 인덱스

■ 비트맵 인덱스

■ 함수 기준 인덱스

최적기 2 2 - 1 5

비용 기준 최적화

Page 161: Oracle8 - Tistory

■ SELECT 문의 SAMPLE 절

■ 병렬 질의와 병렬 D M L

■ 스타 변환

■ 스타 조인

■ 확장 가능한 최적화

추가 정보: 비용 기준 접근 방법을 사용하는 경우에 대한 자세한 내용은 O racle8i Tuning을참조하십시오.

확장 가능한 최적화

확장 가능한 최적화를 통해 사용자 정의 함수와 도메인 인덱스의 저자는 비용 기준최적화가 실행 계획을 선택하는데 사용하는 세 가지 기본 구성 요소 즉, 통계, 선택성및 비용 평가를 제어할 수 있습니다.

확장 가능한 최적화를 사용하여 다음을 수행할 수 있습니다.

■ 비용 함수 및 기본 비용을 도메인 인덱스, 인덱스 유형, 패키지 및 독립형 함수와관련시킵니다.

■ 선택성 함수 및 기본 선택성을 객체 유형, 패키지 함수 및 독립형 함수 방식과 관련시킵니다.

■ 통계 수집 함수를 도메인 인덱스 및 테이블의 열과 관련시킵니다.

■ 비용에 준하는 함수로 술어를 정렬합니다.

■ 액세스 비용에 준하여 테이블에 대한 사용자 정의 액세스 방법(도메인 인덱스)을선택합니다.

■ A NA LYZE 명령어를사용하여 사용자 정의 통계수집 및 삭제함수를 호출합니다.

■ 열, 도메인 인덱스, 인덱스 유형 또는 함수와 연결된 통계 수집, 비용 또는 선택성 함수에 대한 내용을 포함하는 새로운 데이터 딕셔너리 뷰를 사용합니다.

■ 힌트를 추가하여 함수 술어에 대한 평가 순서를 보존합니다.

추가 정보: 확장 가능한 최적화에 대한 자세한 내용은 O racle8i DataCartridge Dev e l o p e r’s Guide를 참조하십시오.

2 2 - 1 6 Oracle8i 개념 설명서, 볼륨 2

확장 가능한 최적화

Page 162: Oracle8 - Tistory

사용자 정의 통계

도메인 인덱스, 테이블의 개별 열 및 사용자 정의 데이터 유형에 대한 통계 수집 함수를 정의할 수 있습니다.

도메인 인덱스가 통계를 모으기 위해 분석될 때마다 O ra c l e은 관련 통계 수집 함수를호출합니다. 테이블의 열이 분석될 때마다 O ra c l e은 해당 열에 대한 표준 통계를 수집하고 관련된 통계 수집 함수를 호출합니다. 데이터 유형에 대한 통계 수집 함수가있는 경우 O ra c l e은 분석되는 테이블의 해당 데이터 유형을 가진 각 열에 대한 통계수집 함수를 호출합니다.

사용자 정의 선택성

SQL 문에서 술어의 선택성은 특정 액세스 방법의 비용을 예측하는데 사용되며 최적의 조인 순서를 결정하는데도 사용됩니다. 최적기는 사용자 정의 연산자에 대한 정보가 없어 사용자 정의 연산자를 가진 술어의 선택성을 정확하게 계산할 수 없습니다.

사용자 정의 연산자, 독립형 함수, 패키지 함수 또는 유형 방법을 포함하는 술어에 대한 선택성 함수를 정의할 수 있습니다. 최적기는 연산자, 함수 또는 상수와의 관계 < ,<=, =, >=, > 또는 LIKE 중 하나의 방법을 포함하는 술어가 발생할 때마다 사용자정의 선택성 함수를 호출합니다.

사용자 정의 비용

최적기는 인덱스의 내부 저장 구조를 알지 못하므로 도메인 인덱스 비용의 예측 값을정확하게 계산할 수 없습니다. 또한 최적기는 P L / S Q L을 호출하고 재귀적 S Q L을 사용하고 B F I L E을 액세스하며 CPU 집중적인 사용자 정의 함수 비용을 실제보다 낮게예측할 수 있습니다.

도메인 인덱스와 사용자 정의 독립형 함수, 패키지 함수 및 유형 방법에 대해 비용을정의할 수 있습니다. 이러한 사용자 정의 비용은 최적기가 간단히 찾을 수 있는 기본비용의 형식이거나 최적기가 비용을 계산하기 위해 호출하는 완전한 비용 함수가 될수 있습니다.

최적기 2 2 - 1 7

확장 가능한 최적화

Page 163: Oracle8 - Tistory

규칙 기준 최적화

규칙 기준 접근 방법을 사용하는 경우 최적기는 사용 가능한 액세스 경로와 이러한액세스 경로의 등급에 준하여 실행 계획을 선택합니다. (23-37 페이지의 표 23-1 참조) 규칙 기준 최적화를 사용하여 관계형 데이터와 객체 유형을 모두 액세스할 수 있습니다.

O ra c l e의 액세스 경로 등급 결정은 경험적입니다. SQL 문을 실행하는 하나 이상의방법이 있는 경우 규칙 기준 접근 방법은 항상 낮은 등급을 가진 연산을 사용합니다.일반적으로 낮은 등급의 연산은 높은 등급과 관련된 연산보다 빨리 실행됩니다.

자세한 내용은 23-54 페이지“규칙 기준 접근 방법을 사용한 액세스 경로 선택”을 참조하십시오.

주: 규칙 기준 최적화는 O ra c l e 8 i의 일부 고급 기능에는 사용할 수 없습니다. 이러한 기능 목록은 22-15 페이지“비용 기준 접근 방법 사용시기”를 참조하십시오.

2 2 - 1 8 Oracle8i 개념 설명서, 볼륨 2

규칙 기준 최적화

Page 164: Oracle8 - Tistory

23최적기 작업

이 장에서는 O racle 최적기가 SQL 문 실행 방법을 선택하는 방법에 대해 설명하며 다음내용을 다룹니다.

■ 최적기 작업 개요

■ 표현식과 조건 평가

■ 명령문 변환 및 최적화

■ 최적화 접근 방법 및 목표 선택

■ 액세스 경로 선택

추가 정보: 최적기에 대한자세한 내용은 O racle8i Tuning을참조하십시오.

최적기 연산 2 3 - 1

Page 165: Oracle8 - Tistory

최적기 작업 개요

이 단원에서는 O racle 최적기가 수행하는 작업을 요약 설명하고 최적화될 수 있는SQL 문 유형에 대해 설명합니다.

최적기 작업

최적기는 O ra c l e이 처리하는 모든 SQL 문에 대해 다음 작업을 수행합니다.

표현식과 조건 최적기는 가능하다면 먼저 상수를 포함하는 표현식과 조건을 평가합니다. (23-4 페이지“표현식과조건 평가”참조)

명령문 변환 최적기는 예를 들어, 상호 관련된 하위 질의를 포함하는 복잡한 명령문에 대해 원래의 명령문을 동등한 조인문으로 변환합니다. (23-10 페이지“명령문변환 및 최적화”참조)

뷰 병합 뷰를 액세스하는 SQL 문에 대해 최적기는 명령문의 질의를뷰에 있는 질의와 병합하여 결과를 최적화합니다. (23-15 페이지“뷰를 액세스하는 명령문 최적화”참조)

최적화 접근 최적기는 규칙 기준 또는 비용 기준 접근 방법을 최적화 방법으방법 선택 로 선택하고 최적화의 목표를 결정합니다. (23-31 페이지“최

적화 접근 방법 및 목표 선택”참조)

액세스 경로 최적기는 명령문이 액세스하는 각 테이블에 대해 테이블의 데이터를 획득하는데 사용할 수 있는 하나 이상의 액세스 경로를 선택합니다. (23-33 페이지“액세스경로 선택”참조)

조인 순서 선택 최적기는 2개 이상의 테이블을 조인하는 조인문에 대해 먼저 조인되어야 할 두 테이블을 선택한 후 그 결과와 조인될 테이블을선택합니다. (24-2 페이지“조인문최적화”참조)

조인 작업 선택 조인문에 대해 최적기는 조인을 수행하는데 사용할 작업을 선택합니다. (24-2 페이지“조인문최적화”참조)

2 3 - 2 Oracle8i 개념 설명서, 볼륨 2

최적기 작업 개요

평가

선택

Page 166: Oracle8 - Tistory

SQL 문 유형

O ra c l e은 다음과 같은 서로 다른 유형의 SQL 문을 최적화합니다.

단순 명령문 단일 테이블에만 관련된 I N S E RT, UPDAT E, DELETE 또는 SELECT 문이 있습니다.

단순 질의 SELECT 문의 다른 이름입니다.

조인 하나 이상의 테이블에서 데이터를 선택하는 질의입니다. 조인은F ROM 절에서 여러 테이블을 사용하는 특성을 가집니다.O ra c l e은 WHERE 절에 지정한 조건을 사용하여 테이블의 행을 짝지워 그 결과로 생성되는 행을 돌려줍니다. 이러한 조건을조인 조건이라고 하며 보통 모든 조인된 테이블의 열을 비교합니다.

등가 조인 등가 연산자를 포함하는 조인 조건을 가집니다.

비등가 조인 등가 연산자 외의 다른 사항을 포함하는 조인 조건을 가집니다.

외부 조인 한 테이블에 있는 하나 이상의 열을 가진 외부 조인 연산자( + )를 사용하는 조인 조건. Ora c l e은 조인 조건을 만족하는 모든행을 돌려줍니다. Ora c l e은 또한 외부 조인 연산자에 해당되는행이 전혀 없는 테이블로부터 외부 조인 연산자 없이 테이블의모든 행을 돌려줍니다.

카티시안 곱 조인 조건 없이 조인하면 카티시안 곱 즉, 상호 곱이 됩니다.카티시안 곱은 각 테이블에서 하나씩 가져온 행에 대해 가능한모든 조합의 집합입니다. 즉, 두 테이블의 조인은 한 테이블의각 행이 다른 테이블의 모든 행과 대응되는 것을 의미합니다.둘 이상의 테이블에 대한 카티시안 곱은 한 테이블의 각 행을나머지 테이블의 카티시안 곱의 결과로 생기는 각 행과 짝지운것입니다.

다른 종류의 조인은 모두 카티시안 곱의 부분 집합이며 카티시안 곱에서 조인 조건을 만족하지 않는 행을 제외시킨 것입니다.

복합 명령문 하위 질의를 포함하는 I N S E RT, UPDAT E, DELETE,SELECT 문입니다. 하위 질의는 명령문 내에서 다음 처리를위해 일련의 값을 생성하는 다른 명령문 내에 있는 S E L E C T문 형태입니다. 하위 질의를 포함하는 복합 명령문의 외부를 상위 명령문이라고 합니다.

최적기 작업 2 3 - 3

최적기 작업 개요

Page 167: Oracle8 - Tistory

혼합 질의 혼합 질의는 집합 연산자(UNION, UNION ALL, INTER-S E C T, MINUS)를 사용하여 두 개 이상의 단순 명령문이나복합 명령문을 조합하는 질의입니다. 혼합 질의에 포함되어 있는 단순 명령문이나 복합 명령문을 구성 요소 질의라고 합니다.

뷰를 액세스하는 테이블뿐아니라 하나이상의 뷰를액세스하는단순, 조인, 복합,명령문 혼합명령문을 작성할 수 있습니다.

분산 명령문 분산 명령문은 분산 데이터베이스의 둘 이상의 다른 노드의 데이터를 액세스하는 명령문입니다. 원격 명령문은 분산 데이터베이스의 한 원격 노드의 데이터를 액세스합니다. 33-11 페이지

“원격 및 분산 SQL 문”을 참조하십시오.

표현식과 조건 평가

최적기는 가능한 모든 경우 표현식을 완전히 평가하며 문법적인 구조를 동일한 구조로 변환합니다. 이렇게 하는 이유는 O ra c l e이 원래의 표현식보다 결과 표현식을 더신속하게 평가할 수 있거나 원래의 표현식이 결과 표현식과 문법적으로 동등하기 때문입니다. 때때로 상이한 SQL 구조가 동일한 작업을 수행할 수 있습니다. (예를 들어, = ANY(하위 질의)와 I N (하위 질의)) Ora c l e은 이러한 것을 단일 구조로 매핑합니다.

다음 단원에서는 최적기가 다음을 포함하는 표현식과 조건을 평가하는 방법에 대해설명합니다.

■ 상수

■ LIKE 연산자

■ IN 연산자

■ ANY 또는 SOME 연산자

■ ALL 연산자

■ BETWEEN 연산자

■ NOT 연산자

■ 추이성

■ DETERMINISTIC 함수

2 3 - 4 Oracle8i 개념 설명서, 볼륨 2

표현식과 조건 평가

Page 168: Oracle8 - Tistory

상수

상수 계산은 명령문이 실행될 때마다 수행되는 것이 아니라 명령문이 최적화될 때 한번만 수행됩니다.

월급이 2 0 0 0보다 크다는 것을 테스트하는 다음 조건을 생각해 봅시다.

sal > 24000/12

sal > 2000

sal*12 > 24000

SQL 문이 첫 번째 조건을 포함하고 있다면 최적기는 이를 두 번째 조건으로 단순화합니다.

최적기는 비교 연산자가 있는 표현식을 단순화하지는 않습니다. 위의 예에서 최적기는 세 번째 표현식을 두 번째 표현식으로 단순화하지 않습니다. 이러한 이유로 응용프로그램 개발자는 가능한 열과 관련된 표현식을 가진 조건보다는 열과 상수를 비교하는 조건을 작성하는 것이 바람직합니다.

LIKE 연산자

최적기는 대체 문자를 사용하지 않고 표현식을 비교하는 LIKE 비교 연산자를 사용하는 조건을 등가 연산자를 사용하는 동등 조건으로 단순화합니다. 예를 들어, 다음에서와 같이 최적기는 첫 번째 조건을 두 번째 조건으로 단순화합니다.

ename LIKE ’SMITH’

ename = ’SMITH’

최적기는 비교가 가변 길이 데이터 유형과 관련된 경우에만 이러한 표현식을 단순화할 수 있습니다. 예를 들어, ENA M E이 CAHR(10) 유형인 경우 등가 연산자는 공백 채움 의미를 따르지만 LIKE 연산자는 따르지 않으므로 최적기는 LIKE 연산자를등가 연산자로 변환할 수 없습니다.

IN 연산자

최적기는 IN 비교 연산자를 사용하는 조건을 등가 비교 연산자와 OR 논리 연산자를사용하는 동등한 조건으로 확장합니다. 예를 들어, 최적기는 다음의 첫 번째 조건을

최적기 작업 2 3 - 5

표현식과 조건 평가

Page 169: Oracle8 - Tistory

두 번째 조건으로 확장합니다.

ename IN (’SMITH’, ’KING’, ’JONES’)

ename = ’SMITH’ OR ename = ’KING’ OR ename = ’JONES’

자세한 내용은 23-18 페이지“예 2: IN 하위 질의”를 참조하십시오.

ANY 또는 SOME 연산자

최적기는 ANY 또는 SOME 연산자와 그 뒤에 나오는 괄호로 묶인 값 목록을 사용하는 조건을 등가 비교 연산자와 OR 논리 연산자를 사용하는 동등한 조건으로 확장합니다. 예를 들어, 최적기는 다음의 첫 번째 조건을 두 번째 조건으로 확장합니다.

sal > ANY (:first_sal, :second_sal)

sal > :first_sal OR sal > :second_sal

최적기는 ANY 또는 SOME 연산자와 그 뒤에 나오는 하위 질의를 사용하는 조건을EXISTS 연산자와 상호 관련된 하위 질의를 포함하는 조건으로 변환합니다. 예를 들어, 최적기는 다음의 첫 번째 조건을 두 번째 조건으로 변환합니다.

x > ANY (SELECT salFROM empWHERE job = ’ANALYST’)

EXISTS (SELECT salFROM empWHERE job = ’ANALYST’

AND x > sal)

ALL 연산자

최적기는 ALL 비교 연산자와 그 뒤에 나오는 괄호로 묶인 값 목록을 사용하는 조건을 등가 비교 연산자와 AND 논리 연산자를 사용하는 동등한 조건으로 확장합니다.예를 들어, 최적기는 다음의 첫 번째 조건을 두 번째 조건으로 확장합니다.

sal > ALL (:first_sal, :second_sal)

sal > :first_sal AND sal > :second_sal

2 3 - 6 Oracle8i 개념 설명서, 볼륨 2

표현식과 조건 평가

Page 170: Oracle8 - Tistory

최적기는 ALL 비교 연산자와 그 뒤에 나오는 하위 질의를 사용하는 조건을 A N Y비교 연산자와 보충적인 비교 연산자를 사용하는 동등한 조건으로 변환합니다. 예를들어, 최적기는 다음의 첫 번째 조건을 두 번째 조건으로 확장합니다.

x > ALL (SELECT salFROM empWHERE deptno = 10)

NOT (x <= ANY (SELECT salFROM empWHERE deptno = 10) )

이후 최적기는 ANY 비교 연산자와 상호 관련된 하위 질의를 가진 조건으로 변환하는 규칙을 사용하여 두 번째 질의를 다음과 같은 질의로 변환합니다.

NOT EXISTS (SELECT salFROM empWHERE deptno = 10AND x <= sal)

BETWEEN 연산자

최적기는 항상 BETWEEN 비교 연산자를 사용하는 조건을 >=와 <= 비교 연산자를사용하는 동등한 조건으로 변환합니다. 예를 들어, 최적기는 다음의 첫 번째 조건을두 번째 조건으로 변환합니다.

sal BETWEEN 2000 AND 3000

sal >= 2000 AND sal <= 3000

N OT 연산자

최적기는 NOT 논리 연산자를 제거하여 조건을 단순화합니다. 즉, NOT 논리 연산자를 제거하고 비교 연산자를 반대되는 비교 연산자로 바꿉니다. 예를 들어, 최적기는 다음의 첫 번째 조건을 두 번째 조건으로 단순화합니다.

NOT deptno = (SELECT deptno FROM emp WHERE ename = ’TAYLOR’)

deptno <> (SELECT deptno FROM emp WHERE ename = ’TAYLOR’)

최적기 작업 2 3 - 7

표현식과 조건 평가

Page 171: Oracle8 - Tistory

NOT 논리 연산자를 포함하는 조건은 종종 여러 가지 다른 방법으로 작성될 수 있습니다. 최적기는 결과로 생성되는 조건이 더 많은 N O T을 포함해도 N O T에 의해 부정되는 하위 조건이 가능한 단순해지도록 이러한 조건을 변환합니다. 예를 들어, 최적기는 다음의 첫 번째 조건을 두 번째 조건으로 단순화한 후 세 번째 조건으로 단순화합니다.

NOT (sal < 1000 OR comm IS NULL)

NOT sal < 1000 AND comm IS NOT NULL

sal >= 1000 AND comm IS NOT NULL

추이성

WHERE 절에 있는 두 개의 조건이 공통된 열과 관련되어 있다면 최적기는 추이성원칙을 사용하여 세 번째 조건을 유추할 수 있습니다. 이후 최적기는 명령문을 최적화하기 위해 유추된 조건을 사용할 수 있습니다. 유추된 조건은 원래의 조건에서 사용 가능하지 않은 인덱스 액세스 경로를 잠재적으로 사용 가능하도록 합니다.

주: 비용 기준 접근 방법으로만 추이성을 사용할 수 있습니다.

다음과 같은 형태의 두 개의 조건을 포함하는 WHERE 절을 생각해 봅시다.

WHERE column1 comp_oper constantAND column1 = column2

이 경우 최적기는 다음 조건을 유추합니다.

column2 comp_oper constant

설명:

c o m p _ o p e r =, !=, ^=, <, <>, >, <=, >= 등의비교 연산자입니다.

c o n s t a n t 연산자, SQL 함수, 리터럴, 바인드 변수, 상관 변수와 관련된상수 표현식입니다.

예: WHERE 절이 두 개의 조건을 포함하고 있고 각 조건은 E M P.DEPTNO 열을사용하는 질의를 생각해 봅시다.

SELECT *FROM emp, deptWHERE emp.deptno = 20

2 3 - 8 Oracle8i 개념 설명서, 볼륨 2

표현식과 조건 평가

Page 172: Oracle8 - Tistory

AND emp.deptno = dept.deptno;

추이성을 사용하여 최적기는 다음 조건을 유추합니다.

dept.deptno = 20

인덱스가 D E P T.DEPTNO 열에 있는 경우 이 조건은 해당 인덱스를 사용하여 액세스 경로를 사용 가능하도록 합니다.

주: 최적기는 열과 다른 열을 관련짓는 조건이 아니라 열과 상수 표현식을 관련짓는 조건을 유추합니다. 다음과 같은 형태의 두 개의 조건을포함하는 WHERE 절을 생각해 봅시다.

WHERE column1 comp_oper column3AND column1 = column2

이 경우 최적기는 다음 조건을 유추할 수 없습니다.

column2 comp_oper column3

DETERMINISTIC 함수

일부의 경우 최적기는 사용자가 작성한 함수를 실행하지 않고 미리 계산된 값을 사용할 수 있습니다. 이것은 제한된 방법으로 작업하는 함수에 대해서만 안전합니다. 함수는 주어진 입력 인수 값 집합에 대해 동일한 출력 반환 값을 되돌려 주어야 합니다.

패키지 변수나 데이터베이스의 내용 또는 NLS 매개변수와 같은 세션 매개변수의 차이점으로 인해 함수의 결과가 달라져서는 안됩니다. 이후 함수가 다시 정의되면 함수의 출력 반환 값은 주어진 입력 인수 값 집합에 대해 이전 정의로 계산된 값과 동일해야 합니다. 마지막으로, 함수를 다시 실행하는 대신 미리 계산된 값을 사용해도 응용프로그램의 정확성에 문제가 될 정도의 의미 있는 부작용은 없어야 합니다.

함수 생성자는 C R E ATE FUNCTION 문으로 또는 C R E ATE PAC K AG E나C R E ATE TYPE 문으로 함수를 선언할 때 키워드 D E T E R M I N I S T I C을 사용하여이러한 제약 조건에 따라 함수가 작업한다는 것을 O racle 서버에 약속할 수 있습니다. 서버는 이 선언을 검증하지 않으며 데이터베이스 또는 패키지 변수를 명백하게조작하는 함수에서도 D E T E R M I N I S T I C으로 선언될 수 있습니다. (21-8 페이지

“DETERMINISTIC 함수”참조) 프로그래머는해당 시점에만 이 키워드를 사용해야합니다.

최적기 작업 2 3 - 9

표현식과 조건 평가

Page 173: Oracle8 - Tistory

동일한 질의 내에서 함수가 여러 번 호출될 때 또는 함수에 대한 관련 호출을 포함하는 함수 기준 인덱스나 구체화된 뷰가 정의되어 있는 경우 DETERMINISTIC 함수를 호출하는 대신 미리 계산된 값을 사용할 수 있습니다.

추가 정보: R E S T R I C T _ R E F E R E N C E S에 대한 내용은 O ra c l e 8 iApplication Dev e l o p e r’s Guide - Fundamentals를, CREAT EFUNCTION, CREATE INDEX 및 C R E ATE MAT E R I A L I Z E DV I E W에 대한 내용은 O racle8i SQL 참조서를참조하십시오. 또한 함수 기준 인덱스에 대한 내용은 10-24 페이지“함수 기준 인덱스”를, 구체화된 뷰에 대한 자세한 내용은 O racle8i Tuning을참조하십시오.

명령문 변환 및 최적화

S Q L은 매우 융통성 있는 질의 언어로 동일한 목표를 달성하기 위해 구성할 수 있는명령문은 매우 많습니다. 최적기는 종종 다른 명령문이 더 효율적으로 실행될 수 있는경우 이러한 명령문을 동일한 목표를 달성할 수 있는 다른 명령문으로 변환합니다.

이 단원에서는 다음 내용을 설명합니다.

■ O R를 혼합 질의로 변환

■ 복합 명령문을 조인문으로 변환

■ 뷰를 액세스하는 명령문 최적화

■ 혼합 질의 최적화

■ 분산 명령문 최적화

조인, 세미 조인 또는 반대 조인을 포함하여 명령문 최적화에 대한 자세한 내용은 2 4장“조인의 최적화”를 참조하십시오.

O R를 혼합 질의로 변환

질의가 OR 연산자로 연결된 여러 조건을 가진 WHERE 절을 포함하고 있다면 실행의 효율성이 높아지는 경우 최적기는 이를 UNION ALL 집합 연산자를 사용하는 동일한 혼합 질의로 변환합니다.

■ 각 조건이 개별적으로 인덱스 액세스 경로를 사용 가능하도록 하는 경우 최적기는변환을 수행할 수 있습니다. 최적기는 다른 인덱스를 사용하여 테이블에 여러 번액세스하는 결과 명령문에 대한 실행 계획을 선택한 다음 결과를 합치게 됩니다.

2 3 - 1 0 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

Page 174: Oracle8 - Tistory

■ 어떤 조건이 인덱스를 사용 가능하게 하지 않기 때문에 전체 테이블 스캔이 필요하다면 최적기는 명령문을 변환하지 않습니다. 최적기는 명령문을 실행하기 위해전체 테이블 스캔을 선택하고 O ra c l e은 테이블에 있는 각 행을 테스트하여 각 행이 조건 중 하나를 만족시키는지를 결정합니다.

■ 비용 기준 접근 방법을 사용하는 명령문에 대해 최적기는 원래의 명령문과 결과명령문의 실행 비용을 예측하고 비교하여 변환할 것인지의 여부를 결정하기 위해통계를 사용할 수 있습니다.

■ 비용 기준 최적화는 동일한 열에 대한 목록이나 O R에 대해서는 OR 변환을 사용하지 않습니다. 대신 최적기는 inlist 반복 연산자를 사용합니다.

추가 정보: 자세한 내용은 O racle8i Tuning을 참조하십시오.

액세스 경로와 인덱스가 이를 사용 가능하도록 하는 방법에 대한 내용은 23-37 페이지의 표 2 3 - 1과 그 다음에 있는 단원을 참조하십시오.

예: OR 연산자와 결합된 두 개의 조건을 포함하는 WHERE 절을 가진 다음과 같은질의를 생각해 봅시다.

SELECT *FROM empWHERE job = ’CLERK’

OR deptno = 10;

J O B과 DEPTNO 열에 모두 인덱스가 있는 경우 최적기는 이 질의를 다음과 같은등가 질의로 변환합니다.

SELECT *FROM empWHERE job = ’CLERK’

UNION ALLSELECT *

FROM empWHERE deptno = 10

AND job <> ’CLERK’;

비용 기준 접근 방법을 사용하는 경우 변환할 것인지의 여부를 결정할 때 최적기는전체 테이블 스캔을 사용하여 원래의 질의를 실행하는 비용과 변환된 질의를 실행하는 비용을 비교합니다.

규칙 기준 접근 방법을 사용하는 경우 변환된 혼합 질의의 각 구성 요소 질의가 인덱스를 사용하여 실행될 수 있으므로 최적기는 이러한 UNION ALL 변환을 수행하게 됩니다. 규칙 기준 접근 방법은 두 개의 인덱스 스캔을 사용하여 혼합 질의를 실행하는

최적기 작업 2 3 - 1 1

명령문 변환 및 최적화

Page 175: Oracle8 - Tistory

것이 전체 테이블 스캔을 사용하여 원래의 질의를 실행하는 것보다 빠르다고 가정합니다.

변환된 명령문에 대한 실행 계획은 그림 2 3 - 1과 같이 도식화될 수 있습니다.

그림 23-1 OR를 포함하는 변환된 질의에 대한 실행 계획

O ra c l e은 다음 단계를 수행하여 변환된 질의를 실행합니다.

■ 3단계와 5단계는 구성 요소 질의의 조건을 사용하여 J O B과 DEPTNO 열에 있는인덱스를 스캔합니다. 이러한 단계에서 구성 요소 질의를 만족하는 행의 ROW I D를 얻습니다.

■ 2단계와 4단계는 각 구성 요소 질의를 만족하는 행의 위치를 정하기 위해 3단계와5단계에서 얻은 ROW I D를 사용합니다.

■ 1단계는 2단계와 4단계에서 돌려준 행 소스를 합칩니다.

2 3 - 1 2 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

1

C O N C A T E N A T I O N

2

TABLE ACCESS(BY ROWID)

emp

3

INDEX(RANGE SCAN)deptno_index

4

TABLE ACCESS(BY ROWID)

emp

5

INDEX(RANGE SCAN)

job_index

Page 176: Oracle8 - Tistory

J O B이나 DEPTNO 열이 인덱스화되지 않는 경우 결과 혼합 질의에서 그 구성 요소질의 중 하나를 실행하려면 전체 테이블 스캔이 필요하므로 최적기는 변환을 고려하지 않습니다. 인덱스 스캔뿐 아니라 전체 테이블 스캔을 가진 혼합 질의를 실행하는것은 전체 테이블 스캔을 가진 원래의 질의를 수행하는 것보다 빠를 수 없습니다.

예: 다음과 같은 질의에 대해 E NAME 열에만 인덱스가 있다고 생각해 봅시다.

SELECT *FROM empWHERE ename = ’SMITH’

OR sal > comm;

위의 질의를 변환하면 아래와 같은 혼합 질의가 됩니다.

SELECT *FROM empWHERE ename = ’SMITH’

UNION ALLSELECT *

FROM empWHERE sal > comm;

두 번째 구성 요소 질의의 WHERE 절에 있는 조건( SAL > COMM)은 인덱스를 사용할 수 없으므로 혼합 질의에는 전체 테이블 스캔이 필요합니다. 이러한 이유로 최적기는 변환을 수행하지 않으며 원래의 명령문을 실행하기 위해 전체 테이블 스캔을선택합니다.

복합 명령문을 조인문으로 변환

최적기는 다음 대안 중 하나를 선택하여 복합 명령문을 최적화합니다.

■ 복합 명령문을 등가 조인문으로 변환한 다음 조인문을 최적화합니다.

■ 복합 명령문 자체를 최적화합니다.

변환된 조인문이 복합 명령문과 동일한 행을 돌려준다는 것이 보장되면 최적기는 복합명령문을 조인문으로 변환합니다. 변환을 사용하여 O ra c l e은 24-2 페이지“조인문 최적화”에 설명된 조인 최적화 기법의 장점을 이용하여 명령문을 실행할 수 있습니다.

최적기 작업 2 3 - 1 3

명령문 변환 및 최적화

Page 177: Oracle8 - Tistory

ACCOUNTS 테이블에서 계정 소유자가 CUSTOMERS 테이블에 있는 모든 행을선택하는 복합 명령문을 생각해 봅시다.

SELECT *FROM accountsWHERE custno IN

(SELECT custno FROM customers);

CUSTOMERS 테이블의 CUSTNO 열이 기본 키이거나 UNIQUE 제약 조건을 가지는 경우 최적기는 이 복합 질의를 동일한 데이터를 돌려주도록 되어 있는 조인문으로 변환할 수 있습니다.

SELECT accounts.*FROM accounts, customersWHERE accounts.custno = customers.custno;

이 명령문에 대한 실행 계획은 그림 2 3 - 2와 같습니다.

그림 23-2 중첩 루프 조인에 대한 실행 계획

O ra c l e은 중첩 루프 조인 작업을 수행하여 이 명령문을 실행합니다. 중첩 루프 조인에 대한 내용은 24-2 페이지“조인 작업”을 참조하십시오.

최적기가 복합 명령문을 조인문으로 변환할 수 없는 경우 최적기는 상위 명령문과 하위질의가 독립된 명령문이더라도 이에 대한 실행 계획을 선택합니다. 이후 O ra c l e은 하

2 3 - 1 4 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

1

NESTED LOOPS

2

TABLE ACCESS(FULL)

accounts

3

INDEX ACCESS(UNIQUE SCAN)pk_customers

Page 178: Oracle8 - Tistory

위 질의를 실행하고 상위 질의를 실행하기 위해 하위 질의가 돌려준 행을 사용합니다.

ACCOUNTS 테이블에서 평균 계정 잔고보다 큰 잔고를 가지는 모든 행을 돌려주는다음과 같은 복합 명령문을 생각해 봅시다.

SELECT *FROM accountsWHERE accounts.balance >

(SELECT AVG(balance) FROM accounts);

어떤 조인문도 이 명령문의 함수를 수행할 수 없으며 따라서 최적기는 명령문을 변환하지 않습니다. AVG와 같은 집계 함수를 포함하는 하위 질의를 가진 복합 질의는 조인문으로 변환될 수 없습니다.

뷰를 액세스하는 명령문 최적화

최적기는 다음 대안 중 하나를 선택하여 뷰를 액세스하는 명령문을 최적화합니다.

■ 명령문을 뷰의 기본 테이블에 액세스하는 동일한 명령문으로 변환한 다음 결과 명령문을 최적화합니다. 최적기는 다음 중 하나의 기술을 사용하여 명령문을 변환합니다.

- 액세스하는 명령문의 참조 질의 블록에 뷰의 질의를 병합합니다.

- 참조 질의 블록의 술어를 뷰에 넣습니다. (병합할 수 없는 뷰의 경우)

■ 뷰의 질의를 실행하여 반환되는 모든 행을 수집한 다음 원래의 명령문으로 이러한행의 집합이 테이블인 것처럼 액세스합니다. (23-25 페이지“원래의 명령문으로뷰의 행 액세스”참조)

명령문에 뷰의 질의 병합

액세스하는 명령문의 참조 질의 블록에 뷰의 질의를 병합하려면 최적기는 뷰 이름을질의 블록의 기본 테이블 이름으로 바꾸고 뷰 질의에 있는 WHERE 절의 조건을 액세스하는 질의 블록의 WHERE 절에 추가합니다.

이 최적화는 선택 투영 조인 뷰에 적용되며 선택 투영 조인 뷰는 선택, 투영 및 조인만을 포함하는 뷰입니다. 즉, 집합 연산자, 집계 함수, DISTINCT, GROUP BY,CONNECT BY 등은 포함하지 않습니다. (23-16 페이지“병합 가능한 뷰와 병합할수 없는 뷰”에서 설명)

최적기 작업 2 3 - 1 5

명령문 변환 및 최적화

Page 179: Oracle8 - Tistory

예: 부서 1 0에서 근무하는 모든 사원의 뷰를 생각해 봅시다.

CREATE VIEW emp_10AS SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno

FROM empWHERE deptno = 10;

뷰에 액세스하는 질의를 생각해 봅시다. 이 질의는 부서 1 0에서 근무하는 사원 중에서 I D가 7 8 0 0보다 큰 것을 선택합니다.

SELECT empnoFROM emp_10WHERE empno > 7800;

최적기는 이 질의를 뷰의 기본 테이블에 액세스하는 다음과 같은 질의로 변환합니다.

SELECT empnoFROM empWHERE deptno = 10AND empno > 7800;

DEPTNO 또는EMPNO 열에인덱스가 있는경우결과 WHERE 절은이를사용합니다.

병합 가능한 뷰와 병합할 수 없는 뷰 뷰가 다음 사항을 포함하지 않는 하나 이상의기본 테이블을 가지고 있으면 최적기는 뷰를 참조 질의 블록에 병합할 수 있습니다.

■ 집합 연산자(UNION, UNION ALL, INTERSECT, MINUS)

■ CONNECT BY 절

■ ROWNUM 의사 열

■ 선택 목록에 있는 집계 함수( AVG, COUNT, MAX, MIN, SUM)

뷰가 다음 구조 중 하나를 포함하면 복합 뷰 병합 기능이 활성화된 경우에만 뷰를 참조 질의 블록에 병합할 수 있습니다.

■ G ROUP BY 절

■ 선택 목록에 있는 DISTINCT 연산자

여러 개의 기본 테이블을 가진 뷰가 외부 조인의 오른쪽에 있는 경우 뷰 병합을 수행할 수 없습니다. 그러나 외부 조인의 오른쪽에 있는 뷰가 단 하나의 기본 테이블을 가지고 있는 경우 최적기는 뷰의 표현식이 N U L L에 대해 널이 아닌 값을 반환

2 3 - 1 6 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

Page 180: Oracle8 - Tistory

할 수 있는 경우에도 복합 뷰 병합 기능을 사용할 수 있습니다. 자세한 내용은 2 4 - 1 1페이지“외부 조인의 뷰”를 참조하십시오.

복합 뷰 병합 뷰의 질의가 선택 목록에 G ROUP BY 절 또는 DISTINCT 연산자를포함하면 최적기는 복합 뷰 병합 기능이 활성화된 경우에만 뷰의 질의를 액세스하는명령문에 병합할 수 있습니다. 하위 질의가 상호 관련성이 없으면 복합 병합은 IN 하위 질의를 액세스하는 명령문에 병합하는데 사용할 수 있습니다. (23-18 페이지“예2: IN 하위 질의”참조)

복합 병합은 비용 기준 방식이 아니므로 초기화 매개변수 O P T I M I Z E R _ F E AT U R E S _E NABLE 또는 M E RGE 힌트로 활성화되어야 합니다. 즉, COMPLEX_VIEW_M E RGING 매개변수가 T RU E로 설정되거나 액세스하는 질의 블록이 M E RGE 힌트를 포함해야 합니다. 이러한 힌트 또는 매개변수 설정이 없으면 최적기는 다른 접근 방법을 사용합니다. (23-18 페이지“뷰에술어 넣기”참조)

추가 정보: M E RGE 및 N O _ M E RGE 힌트에 대한 자세한 내용은O racle8i Tuning을 참조하십시오.

예 1: GROUP BY 절이 있는 뷰 각 부서의 평균 월급을 포함하는 뷰 AVG _ SA L -A RY _ V I E W를 생각해 봅시다.

CREATE VIEW avg_salary_view ASSELECT deptno, AVG(sal) AS avg_sal_dept,

FROM empGROUP BY deptno;

복합 뷰 병합 기능이 활성화되어 있으면 최적기는 런던에 있는 부서의 평균 월급을검색하는 다음 질의를

SELECT dept.deptloc, avg_sal_deptFROM dept, avg_salary_viewWHERE dept.deptno = avg_salary_view.deptnoAND dept.deptloc = ’London’;

다음 질의로 변환할 수 있습니다.

SELECT dept.deptloc, AVG(sal)FROM dept, empWHERE dept.deptno = emp.deptno

AND dept.deptloc = ’London’GROUP BY dept.rowid, dept.deptloc;

최적기 작업 2 3 - 1 7

명령문 변환 및 최적화

Page 181: Oracle8 - Tistory

변환된 질의는 런던에서 근무하는 사원 행만 선택하고 부서로 그룹화하여 뷰의 기본테이블에 액세스합니다.

예 2: IN 하위 질의 복합 병합 기능은 상호 관련성이 없는 하위 질의가 있는 IN 절과 뷰에사용될 수 있습니다. 각부서의 최소월급이 있는뷰 MIN_ SA L A RY _ V I E W를생각해 봅시다.

SELECT deptno, MIN(sal)FROM empGROUP BY deptno;

복합 병합 기능이 활성화되어 있으면 최적기는 런던에 있는 부서에서 최소 월급을 받는 모든 사원을 검색하는 다음 질의를

SELECT emp.ename, emp.salFROM emp, deptWHERE (emp.deptno, emp.sal) IN min_salary_view

AND emp.deptno = dept.deptnoAND dept.deptloc = ’London’;

다음 질의로 변환할 수 있습니다. (E1 및 E 2는 각각 액세스하는 질의 블록과 뷰의질의 블록에서 참조되는 EMP 테이블을 나타냅니다. )

SELECT e1.ename, e1.salFROM emp e1, dept, emp e2WHERE e1.deptno = dept.deptno

AND dept.deptloc = ’London’AND e1.deptno = e2.deptno

GROUP BY e1.rowid, dept.rowid, e1.ename, e1.salHAVING e1.sal = MIN(e2.sal);

뷰에 술어 넣기

최적기는 질의 블록의 술어를 뷰의 질의에 넣어 병합할 수 없는 뷰를 액세스하는 질의 블록을 변환할 수 있습니다.

예 1 : 두 개의 사원 테이블의 합집합인 T W O _ E M P _ TABLES 뷰를 생각해 봅시다.뷰는 UNION 집합 연산자를 사용하는 혼합 질의로 정의됩니다.

CREATE VIEW two_emp_tables(empno, ename, job, mgr, hiredate, sal, comm, deptno) ASSELECT empno, ename, job, mgr, hiredate, sal, comm, deptnoFROM emp1

UNIONSELECT empno, ename, job, mgr, hiredate, sal, comm, deptno

2 3 - 1 8 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

Page 182: Oracle8 - Tistory

FROM emp2;

뷰를 액세스하는 다음 질의를 생각해 봅시다. 이 질의는 두 테이블에서 부서 2 0에서작업하는 모든 사원의 I D와 이름을 선택합니다.

SELECT empno, enameFROM two_emp_tablesWHERE deptno = 20;

뷰는 혼합 질의로 정의되어 있으므로 최적기는 뷰 질의를 액세스하는 질의 블록에 병합할 수 없습니다. 대신 최적기는 술어인 WHERE 절 조건( D E P T N O= 2 0 )을 뷰의혼합 질의에 넣어 액세스하는 명령문을 변환할 수 있습니다.

최종 명령문은 다음과 같습니다.

SELECT empno, enameFROM ( SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno

FROM emp1WHERE deptno = 20

UNIONSELECT empno, ename, job, mgr, hiredate, sal, comm, deptnoFROM emp2WHERE deptno = 20 );

DEPTNO 열에 인덱스가 있는 경우 결과 WHERE 절은 이를 사용할 수 있습니다.

그림 2 3 - 3은 최종 명령문의 실행 계획을 보여줍니다.

최적기 작업 2 3 - 1 9

명령문 변환 및 최적화

Page 183: Oracle8 - Tistory

그림 23-3 UNION 집합연산자로 정의된 뷰 액세스

2 3 - 2 0 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

4

UNION-ALL

3

SORT(UNIQUE)

2

PROJECTION

1

VIEWtwo_emp_tables

5

TABLE ACCESS(FULL)emp1

6

TABLE ACCESS(FULL)emp2

Page 184: Oracle8 - Tistory

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 5단계와 6단계는 E M P 1과 EMP2 테이블의 전체 스캔을 수행합니다.

■ 4단계는 모든 중복 복사본을 포함하여 5단계나 6단계에서 돌려준 모든 행을 돌려주는 UNION-ALL 작업을 수행합니다.

■ 3단계는 4단계의 결과를 정렬하고 중복 행을 제거합니다.

■ 2단계는 3단계의 결과에서 원하는 열을 추출합니다.

■ 1단계는 뷰의 질의가 액세스하는 질의에 병합되지 않았음을 나타냅니다.

예 2 : 사원이 있는 모든 부서의 부서 번호, 평균 월급, 최소 월급, 최대 월급을 포함하는 E M P _ G RO U P _ BY_DEPTNO 뷰를 생각해 봅시다.

CREATE VIEW emp_group_by_deptnoAS SELECT deptno,

AVG(sal) avg_sal,MIN(sal) min_sal,MAX(sal) max_sal

FROM empGROUP BY deptno;

E M P _ G RO U P _ BY_DEPTNO 뷰의 부서 1 0의 평균 월급, 최소 월급, 최대 월급을선택하는 다음 질의를 생각해 봅시다.

SELECT *FROM emp_group_by_deptnoWHERE deptno = 10;

최적기는 술어(WHERE 절 조건)를 뷰의 질의에 넣어 명령문을 변환할 수 있습니다.변환된 명령문은 다음과 같습니다.

SELECT deptno,AVG(sal) avg_sal,MIN(sal) min_sal,MAX(sal) max_sal,

FROM empWHERE deptno = 10GROUP BY deptno;

DEPTNO 열에 인덱스가 있으면 변환된 WHERE 절은 이를 사용할 수 있습니다.

최적기 작업 2 3 - 2 1

명령문 변환 및 최적화

Page 185: Oracle8 - Tistory

그림 2 3 - 4는 최종 명령문에 대한 실행 계획을 보여줍니다. 실행 계획은 D E P T N O열의 인덱스를 사용합니다.

그림 23-4 GROUP BY 절로정의된 뷰 액세스

2 3 - 2 2 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

4

INDEX(RANGE SCAN)emp_deptno

_index

3

TABLE ACCESS(BY ROWID)

emp

2

SORT(GROUP BY)

1

VIEWemp_group_by

_deptno

Page 186: Oracle8 - Tistory

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 4단계는 EMP 테이블에서 DEPTNO 값이 1 0인 모든 행의 ROW I D를 읽어 들이기 위해 인덱스 EMP_DEPTNO_INDEX(EMP 테이블의 DEPTNO 열에 대한인덱스)에 대해 범위 스캔을 수행합니다.

■ 3단계는 4단계에서 읽어 들인 ROW I D를 사용하여 EMP 테이블에 액세스합니다.

■ 2단계는 평균, 최소, 최대 SAL 값을 계산하기 위해 3단계에서 돌려준 행을 정렬합니다.

■ 1단계는 뷰의 질의가 액세스하는 질의에 병합되지 않았음을 나타냅니다.

뷰에 집계 함수 적용 최적기는 함수를 뷰의 질의에 적용하여 집계 함수( AVG,C O U N T, MAX, MIN, SUM)를 포함하는 질의를 변환할 수 있습니다.

예: 앞의 예에서 정의된 E M P _ G RO U P _ BY_DEPTNO 뷰에 액세스하는 질의를 생각해 봅시다. 이 질의는 사원 테이블에서 부서 평균 월급, 부서 최소 월급, 부서 최대월급에 대한 평균을 얻어냅니다.

SELECT AVG(avg_sal), AVG(min_sal), AVG(max_sal)FROM emp_group_by_deptno;

최적기는 AVG 집계 함수를 뷰 질의의 선택 목록에 적용하여 이 명령문을 변환합니다.

SELECT AVG(AVG(sal)), AVG(MIN(sal)), AVG(MAX(sal))FROM empGROUP BY deptno;

그림 2 3 - 5는 결과 명령문의 실행 계획을 보여줍니다.

최적기 작업 2 3 - 2 3

명령문 변환 및 최적화

Page 187: Oracle8 - Tistory

그림 23-5 집계 함수를 GROUP BY 절로정의된 뷰에 적용

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 4단계는 EMP 테이블의 전체 스캔을 수행합니다.

■ 3단계는 DEPTNO 값에 준하여 4단계에서 돌려준 행을 그룹에 정렬하며 각 그룹의 평균, 최소, 최대 SAL 값을 계산합니다.

2 3 - 2 4 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

4

TABLE ACCESS(FULL)emp

3

SORT(GROUP BY)

2

VIEWemp_group_by

_deptno

1

AGGREGATE(GROUP BY)

Page 188: Oracle8 - Tistory

■ 2단계는 뷰의 질의가 액세스하는 질의에 병합되지 않았음을 나타냅니다.

■ 1단계는 2단계에서 돌려준 값의 평균을 계산합니다.

원래의 명령문으로 뷰의 행 액세스

최적기는 뷰를 액세스하는 모든 명령문을 기본 테이블에 액세스하는 동일한 명령문으로 변환할 수 없습니다. 예를 들어, 질의가 뷰에서 ROWNUM 의사 열에 액세스하면 뷰를 질의에 병합하거나 질의의 술어를 뷰에 넣을 수 없습니다.

기본 테이블에 액세스하는 질의로 변환될 수 없는 명령문을 실행하기 위해 O ra c l e은뷰의 질의를 수행하여 결과 행 집합을 모은 다음 원래의 명령문으로 이러한 행 집합이 테이블인 것처럼 액세스합니다.

예: 이전 단원에서 정의된 E M P _ G RO U P _ BY_DEPTNO 뷰를 생각해 봅시다.

CREATE VIEW emp_group_by_deptnoAS SELECT deptno,

AVG(sal) avg_sal,MIN(sal) min_sal,MAX(sal) max_sal

FROM empGROUP BY deptno;

뷰에 액세스하는 다음 질의를 생각해 봅시다. 이 질의는 해당 뷰에 나타낸 각 부서의평균, 최소, 최대 월급을 DEPT 테이블에 있는 부서의 이름과 위치에 조인합니다.

SELECT emp_group_by_deptno.deptno, avg_sal, min_sal,max_sal, dname, loc

FROM emp_group_by_deptno, deptWHERE emp_group_by_deptno.deptno = dept.deptno;

기본 테이블에만 액세스하는 동등한 명령문이 없으므로 최적기는 이 명령문을 변환할수 없습니다. 대신 최적기는 뷰의 질의를 수행하는 실행 계획을 선택한 다음 결과 행집합을 테이블 액세스로부터 얻어진 행인 것처럼 사용합니다.

그림 2 3 - 6은 이러한 명령문에 대한 실행 계획을 보여줍니다. Ora c l e이 중첩 루프 조인 작업을 수행하는 방법에 대한 자세한 내용은 24-2 페이지“조인 작업”을 참조하십시오.

최적기 작업 2 3 - 2 5

명령문 변환 및 최적화

Page 189: Oracle8 - Tistory

그림 23-6 GROUP BY 절로정의된 뷰와 테이블 조인

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 4단계는 EMP 테이블의 전체 스캔을 수행합니다.

■ 3단계는 4단계의 결과를 정렬하고 E M P _ G RO U P _ BY_DEPTNO 뷰의 질의에의해 선택된 평균, 최소, 최대 SAL 값을 계산합니다.

■ 2단계는 뷰에 대해 이전 두 단계에서 얻은 데이터를 사용합니다.

2 3 - 2 6 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

1

NESTED LOOPS

2

VIEWemp_group_by

_deptno

3

SORT(GROUP BY)

4

TABLE ACCESS(FULL)emp

5

TABLE ACCESS(BY ROWID)

dept

6

INDEX(UNIQUE SCAN)

pk_dept

Page 190: Oracle8 - Tistory

■ 2단계에서 돌려준 각 행에 대해 6단계는 PK_DEPT 인덱스의 고유 스캔을 수행하기 위해 DEPTNO 값을 사용합니다.

■ 5단계는 DEPTNO 테이블에서 일치하는 DEPTNO 값을 가진 행의 위치를 정하기 위해 6단계에서 돌려준 각 ROW I D를 사용합니다.

■ O ra c l e은 2단계에서 돌려준 각 행을 5단계에서 돌려준 일치하는 행과 조합하여결과를 돌려줍니다.

혼합 질의 최적화

최적기는 혼합 질의에 대한 실행 계획을 선택하기 위해 혼합 질의의 구성 요소 질의각각에 대해 실행 계획을 선택한 다음 혼합 질의에 사용되는 집합 연산자에 따라 결과 행 소스를 합집합, 교집합, 차집합 작업과 조합합니다.

그림 2 3 - 7은 이러한 명령문의 실행 계획을 나타내며 이것은 ORDERS1 테이블 또는ORDERS2 테이블의 모든 부품의 모든 발생을 선택하기 위해 UNION ALL 연산자를 사용합니다.

SELECT part FROM orders1UNION ALLSELECT part FROM orders2;

그림 23-7 UNION ALL 집합연산자를 가진 혼합 질의

최적기 작업 2 3 - 2 7

명령문 변환 및 최적화

1

U N I O N - A L L

2

TABLE ACCESS(FULL)orders1

3

TABLE ACCESS(FULL)orders2

Page 191: Oracle8 - Tistory

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 2단계와 3단계는 O R D E R S 1과 ORDERS2 테이블에 대한 전체 테이블 스캔을 수행합니다.

■ 1단계는 모든 중복 복사본을 포함하여 2단계나 3단계에서 돌려준 모든 행을 돌려주는 UNION-ALL 연산을 수행합니다.

그림 2 3 - 8은 다음 명령문의 실행 계획을 나타내며 이것은 ORDERS1 또는 O R D E -RS2 테이블의 모든 부품을 선택하기 위해 UNION 연산자를 사용합니다.

SELECT part FROM orders1UNIONSELECT part FROM orders2;

그림 23-8 UNION 집합연산자를 가진 혼합 질의

2 3 - 2 8 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

2

U N I O N - A L L

1

S O R T( U N I Q U E )

3

TABLE ACCESS(FULL)orders1

4

TABLE ACCESS(FULL)orders2

Page 192: Oracle8 - Tistory

이 경우 실행 계획은 O ra c l e이 UNION-ALL 연산이 돌려준 중복 행을 제거하기 위해 S O RT 연산을 사용한다는 점을 제외하고는 23-27 페이지의 그림 2 3 - 7에 나타난UNION-ALL 연산자와 동일합니다.

그림 2 3 - 9는 이러한 명령문의 실행 계획을 나타내며 이것은 ORDERS1 및 O R D E -RS2 테이블 모두에 있는 부품만을 선택하기 위해 INTERSECT 연산자를 사용합니다.

SELECT part FROM orders1INTERSECTSELECT part FROM orders2;

그림 23-9 INTERSECT 집합연산자를 가진 혼합 질의

최적기 작업 2 3 - 2 9

명령문 변환 및 최적화

1

I N T E R S E C T I O N

2

SORT(UNIQUE)

4

SORT(UNIQUE)

3

TABLE ACCESS(FULL)orders1

5

TABLE ACCESS(FULL)orders2

Page 193: Oracle8 - Tistory

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 3단계와 5단계는 O R D E R S 1과 ORDERS2 테이블에 대한 전체 테이블 스캔을 수행합니다.

■ 2단계와 4단계는 3단계와 5단계의 결과를 정렬하여 각 행 소스에서 중복되는 행을제거합니다.

■ 1단계는 2단계와 4단계 모두에서 돌려준 행만을 돌려주기 위해 INTERSECT 연산을 수행합니다.

분산 명령문 최적화

최적기는 로컬 데이터에만 액세스하는 명령문 실행을 선택하는 것과 거의 유사한 방법으로 원격 데이터베이스에 있는 데이터에 액세스하는 SQL 문에 대한 실행 계획을선택합니다.

■ SQL 문이 액세스하는 모든 테이블이 동일한 원격 데이터베이스에 배치되어 있는경우 O ra c l e은 해당 원격 데이터베이스에 SQL 문을 전송합니다. 원격 O racle 인스턴스는 해당 명령문을 실행하며 결과를 로컬 데이터베이스로 다시 전송합니다.

■ SQL 문이 서로 다른 데이터베이스에 위치한 테이블에 액세스하는 경우 O ra c l e은명령문을 개별 부분으로 분해하는데 각각은 단일 데이터베이스에 있는 테이블에액세스합니다. Ora c l e은 각 부분을 이것이 액세스하는 데이터베이스에 전송합니다. 이러한 각 데이터베이스에 대한 원격 O racle 인스턴스는 자신의 부분을 실행하고 그 결과를 로컬 데이터베이스로 돌려주며, 여기서 로컬 O racle 인스턴스는명령문이 필요로 하는 추가 처리를 수행할 수 있습니다.

분산 명령문에 대해 비용 기준 실행 계획을 선택한 경우 최적기는 로컬 데이터베이스에서 인덱스를 고려하는 것과 마찬가지로 원격 데이터베이스에서 사용 가능한 인덱스를 고려합니다. 또한 최적기는 비용 기준 최적화를 위해 원격 데이터베이스에 있는통계를 고려합니다. 또한 최적기는 데이터에 액세스하는 비용을 평가하는 경우 데이터의 위치를 고려합니다. 예를 들어, 원격 테이블의 전체 스캔은 동일한 로컬 테이블의 전체 스캔보다 예측 비용이 더 높습니다.

규칙 기준 실행 계획에 대해 최적기는 원격 테이블의 인덱스를 고려하지 않습니다.

2 3 - 3 0 Oracle8i 개념 설명서, 볼륨 2

명령문 변환 및 최적화

Page 194: Oracle8 - Tistory

최적화 접근 방법 및 목표 선택

SQL 문에 대한 최적화 접근 방법과 목표를 선택하는 경우 최적기의 기능은 다음과같은 요인의 영향을 받습니다.

■ OPTIMIZER_MODE 초기화매개변수

■ 데이터 딕셔너리에 있는 통계

■ A LTER SESSION 명령어의O P T I M I Z E R _ G OAL 매개변수

■ SQL 문의 힌트(주석)

■ PL/SQL 블록에서 실행 중인 명령문

OPTIMIZER_MODE 초기화 매개변수

OPTIMIZER_MODE 초기화매개변수는 인스턴스에 대해 최적화 접근 방법을 선택하기 위한 기본 기능을 설정합니다. 이매개변수는 다음과 같은 값을 가질 수 있습니다.

C H O O S E 최적기는 비용 기준 접근 방법에 통계를 사용할 수 있는지의 여부에 따라 비용 기준 접근 방법과 규칙 기준 접근 방법을 선택합니다. 데이터 딕셔너리가 액세스되는 테이블 중 적어도 하나에 대한 통계를 포함하는 경우 최적기는 비용 기준 접근 방법을사용하며 최고의 처리량을 목표로 하여 최적화합니다. 데이터딕셔너리가 액세스되는 테이블에 대한 통계를 포함하고 있지 않은 경우 최적기는 규칙 기준 접근 방법을 사용합니다. 이것은매개변수에 대한 기본값입니다.

A L L _ ROW S 최적기는 통계의 존재 여부에 관계없이 모든 SQL 문에 대해비용 기준 접근 방법을 사용하며 최고의 처리량을 목표로 하여최적화합니다. (전체 명령문을 완료하기 위해 최소 자원 사용)

F I R S T _ ROW S 최적기는 통계의 존재 여부에 관계없이 모든 SQL 문에 대해비용 기준 접근 방법을 사용하며 최고의 응답 시간을 목표로 하여 최적화합니다. (결과 집합의 첫 번째 행을 돌려주기 위해 최소 자원 사용)

RU L E 최적기는 통계의 존재 여부에 관계없이 모든 SQL 문에 대해규칙 기준 접근 방법을 선택합니다.

최적기가 SQL 문에 대해 비용 기준 접근 방법을 사용하고 명령문이 액세스하는 일부테이블에 통계가 없다면 최적기는 이러한 테이블에 대해 다른 통계를 예측하기 위해내부 정보(이러한 테이블에 할당된 데이터 블록 수와 같은)를 사용합니다.

최적기 작업 2 3 - 3 1

최적화 접근 방법 및 목표 선택

Page 195: Oracle8 - Tistory

데이터 딕셔너리에 있는 통계

O ra c l e은 비용 기준 최적화를 위해 데이터 딕셔너리에 열, 테이블, 클러스터, 인덱스, 분할 영역에 대한 통계를 저장합니다. DBMS_STATS 패키지, ANA LYZE 명령어 또는 C R E ATE 또는 A LTER INDEX 명령어의 COMPUTE STATISTICS 절을 사용하여 이러한 스키마 객체에 물리적 저장 영역 특성과 데이터 분산에 대한 정확한 통계나 예측 통계를 수집할 수 있습니다.

최적기에 최신 통계를 제공하려면 스키마 객체의 데이터 또는 구조를 통계에 영향을줄 수 있는 방법으로 수정한 후에 새로운 통계를 수집해야 합니다. 통계에 대한 자세한 내용은 22-8 페이지“비용 기준 최적화에 사용되는 통계”를 참조하십시오.

A LTER SESSION 명령어의 OPTIMIZER_GOAL 매개변수

A LTER SESSION 명령어의 O P T I M I Z E R _ G OAL 매개변수는 개별 세션의 O P T I -MIZER_MODE 초기화 매개변수가 설정한 최적화 접근 방법과 목표를 무효화합니다.

이 매개변수의 값은 세션 동안 호출되는 내장 프로시저와 함수에서 실행되는 SQL 문의 최적화에는 영향을 주지만 세션 동안 O ra c l e이 실행하는 재귀 SQL 문의 최적화에는 영향을 주지 않습니다. 재귀 SQL 문에 대한 최적화 접근 방법은 O P T I M I Z E R _MODE 초기화 매개변수의 값에 의해서만 영향을 받습니다.

O P T I M I Z E R _ G OAL 매개변수는 다음과 같은 값을 가질 수 있습니다.

C H O O S E 최적기는 비용 기준 접근 방법에 통계를 이용할 수 있는지의 여부에 따라 비용 기준 접근 방법과 규칙 기준 접근 방법을 선택합니다. 데이터 딕셔너리가 액세스되는 테이블 중 적어도 하나에 대한 통계를 포함하는 경우 최적기는 비용 기준 접근 방법을사용하며 최고의 처리량을 목표로 하여 최적화합니다. 데이터디렉토리가 액세스되는 테이블에 대한 통계를 포함하고 있지 않은 경우 최적기는 규칙 기준 접근 방법을 사용합니다.

A L L _ ROW S 최적기는 통계의 존재 여부에 관계없이 세션에 있는 모든 S Q L문에 대해 비용 기준 접근 방법을 사용하며 최고의 처리량을 목표로 하여 최적화합니다. (전체 명령문을 완료하기 위해 최소자원 사용)

F I R S T _ ROW S 최적기는 통계의 존재 여부에 관계없이 세션에 있는 모든 S Q L문에 대해 비용 기준 접근 방법을 사용하며 최고의 응답 시간을목표로 하여 최적화합니다. (결과 집합의 첫 번째 행을 돌려주기 위해 최소 자원 사용)

2 3 - 3 2 Oracle8i 개념 설명서, 볼륨 2

최적화 접근 방법 및 목표 선택

Page 196: Oracle8 - Tistory

RU L E 최적기는 통계의 존재 여부에 관계없이 O racle 인스턴스에 실행된 모든 SQL 문에 대해 규칙 기준 접근 방법을 선택합니다.

F I R S T _ R O WS, ALL_ROWS, CHOOSE 및 RULE 힌트

개별 SQL 문의 F I R S T _ ROW S, ALL_ROW S, CHOOSE 및 RULE 힌트는 O P T I -MIZER_ MODE 초기화 매개변수와 A LTER SESSION 명령어의 O P T I M I Z E R _G OAL 매개변수의 효력을 무효화합니다.

추가 정보: 힌트 사용 방법에 대한 내용은 O racle8i Tuning을 참조하십시오.

PL/SQL 및 최적기 목표

최적기의 목표는 PL/SQL 내에서 제출된 질의가 아니라 직접 제출된 질의에만 적용됩니다.

■ A LTER SESSION OPTIMIZER_GOAL 문은 PL/SQL 내에서 실행되는 S Q L에 영향을 주지 않습니다.

■ P L / S Q L은 초기화 매개변수 O P T I M I Z E R _ M O D E=F I R S T _ ROW S를 무시합니다.

힌트를 사용하여 PL/SQL 내에서 제출된 SQL 문에 대한 액세스 경로를 결정할 수있습니다.

액세스 경로 선택

실행 계획을 형식화할 경우 최적기가 선택하는 가장 중요한 선택 중 하나는 데이터베이스에서 데이터를 읽어 들이는 방법입니다. SQL 문이 액세스하는 모든 테이블의 행에 대해 행을 찾고 읽어 들이는 방법에 따라 여러 가지 액세스 경로가 있습니다. 최적기는 이 경로 중 하나를 선택합니다.

이 단원에서는 다음 내용을 다룹니다.

■ O ra c l e이 데이터를 액세스하는 기본 방법

■ 각 액세스 경로와 최적기가 사용할 수 있는 경우

■ 최적기가 사용 가능한 여러 액세스 경로 중 하나를 선택하는 방법

최적기 작업 2 3 - 3 3

액세스 경로 선택

Page 197: Oracle8 - Tistory

액세스 방법

이 단원에서는 O ra c l e이 데이터에 액세스하는 기본 방법을 설명합니다.

전체 테이블 스캔

전체 테이블 스캔은 테이블에서 행을 읽어 들입니다. Ora c l e은 테이블에 있는 모든행을 읽어 각 행이 명령문의 WHERE 절을 만족하는지의 여부를 검사하여 전체 테이블 스캔을 수행합니다. Ora c l e은 테이블에 할당되어 있는 각 데이터 블록을 차례대로읽습니다. 따라서 다중 블록 읽기를 사용하면 전체 테이블 스캔을 매우 효율적으로수행할 수 있습니다. Ora c l e은 각 데이터 블록을 한 번만 읽습니다.

표본 테이블 스캔

표본 테이블 스캔은 테이블에서 임의로 데이터의 표본을 읽어 들입니다. 이 액세스방법은 명령문의 F ROM 절이 SAMPLE 옵션 또는 SAMPLE BLOCK 옵션을 포함하는 경우에 사용됩니다. 행에 의한 표본 추출 시( SAMPLE 옵션) 표본 테이블 스캔을 수행하기 위해 O ra c l e은 테이블에서 지정된 백분율만큼의 행을 읽고 각 행을 검사하여 이 행이 명령문의 WHERE 절을 충족시키는지를 결정합니다. 블록에 의한 표본 추출 시( SAMPLE BLOCK 옵션) 표본 테이블 스캔을 수행하기 위해 O ra c l e은테이블에서 지정된 백분율만큼의 블록을 읽고 표본 추출된 블록의 각 행을 검사하여이 블록이 명령문의 WHERE 절을 충족시키는지를 결정합니다.

질의가 조인 또는 원격 테이블을 포함하면 O ra c l e은 표본 테이블 스캔을 지원하지 않습니다. 조인 및 분산 명령문에 대한 내용은 23-3 페이지“SQL 문 유형”을 참조하십시오.

R O W I D를 사용한 테이블 액세스

ROW I D를 사용한 테이블 액세스도 테이블에서 행을 읽어 들입니다. 행의 ROW I D는행을 포함하는 데이터 파일과 데이터 블록 및 해당 블록 내에서의 행 위치를 지정합니다. ROW I D로 행을 찾는 것은 O ra c l e이 단일 행을 찾는 가장 빠른 방법입니다.

O ra c l e은 ROW I D를 사용하여 테이블을 액세스하기 위해 먼저 명령문의 W H E R E절로부터 또는 하나 이상의 테이블의 인덱스 중 인덱스를 스캔하여 선택한 행의ROW I D를 획득한 후 행의 ROW I D에 준하여 테이블 내에서 선택한 각 행의 위치를파악합니다.

클러스터 스캔

클러스터 스캔은 인덱스화된 클러스터에 저장된 테이블에서 동일한 클러스터 키 값을가지고 있는행을 읽어들입니다. 인덱스화된클러스터에서동일한 클러스터 키 값을가

2 3 - 3 4 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 198: Oracle8 - Tistory

지고 있는 모든 행은 동일한 데이터 블록에 저장됩니다. 클러스터 스캔을 수행하기위해 O ra c l e은 먼저 클러스터 인덱스를 스캔하여 선택된 행 중 하나의 ROW I D를 획득한 후 행의 ROW I D에 준하여 행의 위치를 파악합니다.

해시 스캔

O ra c l e은 해시 스캔을 사용하여 해시 값에 준하여 해시 클러스터에서 행을 찾을 수있습니다. 해시 클러스터에서 동일한 해시 값을 가진 모든 행은 동일한 데이터 블록에 저장됩니다. 해시 스캔을 수행하기 위해 O ra c l e은 먼저 명령문에 지정한 클러스터키 값에 해시 함수를 적용하여 해시 값을 획득한 후 해시 값을 가진 행을 포함하는 데이터 블록을 스캔합니다.

인덱스 스캔

인덱스 스캔은 하나 이상의 인덱스 열 값에 준하여 인덱스로부터 데이터를 읽어 들입니다. 인덱스 스캔을 수행하기 위해 O ra c l e은 명령문이 액세스하는 인덱스화된 열 값에 대한 인덱스를 검색합니다. 명령문이 인덱스 열만을 액세스한다면 O ra c l e은 테이블이 아닌 인덱스에서 인덱스화된 열 값을 직접 읽습니다.

인덱스는 인덱스화된 값뿐 아니라 해당 값을 보유하는 테이블에 있는 행의 ROW I D도포함합니다. 따라서 명령문이 인덱스화된 열 외의 다른 열을 액세스한다면 O ra c l e은ROW I D나 클러스터 스캔으로 테이블을 액세스하여 테이블에 있는 행을 찾을 수 있습니다.

인덱스 스캔은 다음 유형 중 하나입니다.

고유 스캔 인덱스의 고유 스캔은 하나의 ROW I D를 돌려줍니다. Ora c l e은 여러 ROW I D가 아닌 하나의 ROW I D가 필요한 경우에만고유 스캔을 수행합니다. 예를 들어, 명령문이 하나의 행만을액세스하는 것을 보장하는 UNIQUE 또는 P R I M A RY KEY제약 조건이 있다면 고유 스캔을 수행합니다.

범위 스캔 인덱스의 범위 스캔은 명령문이 액세스하는 행의 수에 따라 0개이상의 ROW I D를 돌려줄 수 있습니다.

전체 스캔 술어가 인덱스의 열 중 하나를 참조할 경우 전체 인덱스 스캔을사용할 수 있습니다. 술어가 인덱스 드라이버일 필요는 없습니다. 질의에서 참조하는 테이블 내의 모든 열이 인덱스에 포함되어 있고 적어도 하나의 인덱스 열이 널이 될 수 없는 경우 술어가 없어도 전체 스캔을 사용할 수 있습니다. 전체 스캔은 정렬작업을 제거하기 위해 사용될 수 있습니다. 전체 스캔은 블록을개별적으로 읽습니다.

최적기 작업 2 3 - 3 5

액세스 경로 선택

Page 199: Oracle8 - Tistory

빠른 전체 스캔 인덱스가 질의에 필요한 모든 열을 포함하는 경우 빠른 전체 인덱스 스캔을 전체 테이블 스캔 대신 사용할 수 있고 인덱스 키에 있는 적어도 하나의 열은 NOT NULL 제약 조건을 가집니다. 빠른 전체 스캔은 테이블을 액세스하지 않고 인덱스 자체데이터를 액세스합니다. 정렬 작업 제거를 위해 사용할 수는 없습니다. 이는(전체 인덱스 스캔과 달리) 다중 블록 읽기를 사용하여 전체 인덱스를 읽고 병렬화할 수 있습니다.

빠른 전체 스캔은 비용 기준 최적화에서만 사용할 수 있고 초기화 매개변수 O P T I M I Z E R _ F E AT U R E S _ E NABLE 또는INDEX_FFS 힌트로 지정할 수 있습니다.

인덱스 조인 인덱스 조인은 질의에서 참조되는 테이블의 모든 열을 함께 포함하는 여러 인덱스의 해시 조인입니다. 인덱스 조인을 사용하면 모든 관련 열 값을 인덱스에서 읽어 들일 수 있으므로 테이블을 액세스할 필요가 없습니다. 인덱스 조인은 정렬 작업 제거를 위해 사용할 수는 없습니다.

인덱스 조인은 비용 기준 최적화에서만 사용할 수 있고 초기화매개변수 O P T I M I Z E R _ F E AT U R E S _ E NABLE 또는 I N D E X _JOIN 힌트로 지정할 수 있습니다.

비트맵 비트맵 인덱스는 각 비트 위치를 ROW I D로 변환하는 매핑 함수 및 키 값에 대해 비트맵을 사용합니다. 비트맵은 AND 및OR 조건을 해결하기 위해 부울 작업을 사용하여 WHERE 절의 여러 가지 조건에 해당하는 인덱스를 효율적으로 병합할 수있습니다. (10-32 페이지“비트맵인덱스”참조)

비트맵 액세스는 비용 기준 최적화에서만 사용할 수 있습니다.

주의: 비트맵 인덱스는 O racle8i Enterprise Edition을구입한 경우에만 사용할 수 있습니다. 자세한 내용은 O racle8i 입문서를 참조하십시오.

액세스 경로

표 2 3 - 1은 데이터 액세스 경로를 나열합니다. 최적기는 명령문이 액세스 경로를 사용할 수 있도록 하는 WHERE 절 조건이나 다른 구조를 포함하는 경우 테이블에 대한특정 액세스 경로만을 사용할 수 있습니다.

■ 비용 기준 접근 방법은 자원 사용에 준하여 경로를 선택합니다. (23-50 페이지“비용 기준 접근 방법을 사용한 액세스 경로 선택”참조)

2 3 - 3 6 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 200: Oracle8 - Tistory

■ 하나 이상의 경로를 사용할 수 있다면 규칙 기준 접근 방법은 각 경로의 등급을사용하여 경로를 선택합니다. (23-54 페이지“규칙기준 접근 방법을 사용한 액세스 경로 선택”참조)

표 23-1 액세스 경로

등급 액세스 경로

1 R O W I D에 의한 단일 행

2 클러스터 조인에 의한 단일 행

3 고유 키나 기본 키를 가진 해시 클러스터 키에 의한 단일 행

4 고유 키나 기본 키에 의한 단일 행

5 클러스터 조인

6 해시 클러스터 키

7 인덱스화된 클러스터 키

8 조합 인덱스

9 단일 열 인덱스

1 0 인덱스화된 열의 제한된 범위 검색

1 1 인덱스화된 열의 제한되지 않은 범위 검색

1 2 정렬 병합 조인

1 3 인덱스화된 열의 MAX 또는 M I N

1 4 인덱스화된 열의 ORDER BY

1 5 전체 테이블 스캔

등급이 없는 액세스 경로

─ 표본 테이블 스캔(규칙 기준 최적화에서는 사용 불가능). 23-49 페이지“표본 테이블 스캔

(등급이 없는 액세스 경로)”을 참조하십시오.

─ 빠른 전체 인덱스 스캔(규칙 기준 최적화에서는 사용 불가능). Oracle8i Tuning을참조하십

시오.

─ 인덱스 조인(규칙 기준 최적화에서는 사용 불가능). 23-49 페이지“인덱스조인(등급이 없는

액세스 경로)”을 참조하십시오.

─ 비트맵 인덱스 스캔(규칙 기준 최적화에서는 사용 불가능). 24-16 페이지“스타변환”을 참

조하십시오.

최적기 작업 2 3 - 3 7

액세스 경로 선택

Page 201: Oracle8 - Tistory

다음 각 단원은 액세스 경로를 설명하며 액세스 경로가 사용 가능한 시점, Ora c l e이액세스 경로로 데이터를 액세스하는데 사용하는 방법 및 EXPLAIN PLAN 명령어를 사용하여 생성된 결과에 대해 설명합니다.

경로 1: ROWID에 의한 단일 행

명령문의 WHERE 절이 ROW I D나 O racle 선행 컴파일러가 지원하는 C U R R E N TOF CURSOR라는 내장 SQL 구문에 의해 선택된 행을 인식하는 경우에만 이 액세스 경로를 사용할 수 있습니다.

예: 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT * FROM emp WHERE ROWID = ’AAAA7bAA5AAAA1UAAA’;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMP

경로 2: 클러스터 조인에 의한 단일 행

다음과 같은 조건이 모두 참일 경우 동일한 클러스터에 저장되어 있는 테이블을 조인하는 명령문에 대해 이 액세스 경로를 사용할 수 있습니다.

■ 명령문의 WHERE 절이 한 테이블에 있는 클러스터 키의 각 열을 다른 테이블에있는 해당 열과 동등하게 하는 조건을 포함하고 있습니다.

■ 명령문의 WHERE 절이 조인에 의해 한 행만을 돌려준다는 것을 보장하는 조건을 포함하고 있습니다. 이러한 조건은 고유 키나 기본 키 열에 대한 동등 조건일가능성이 높습니다.

이러한 조건은 AND 연산자로 결합되어야 합니다. 명령문을 실행하기 위해 O ra c l e은 중첩 루프 작업을 수행합니다. (중첩 루프 작업에 대한 내용은 24-2 페이지“조인작업”을 참조하십시오. )

예: E M P와 DEPT 테이블이 DEPTNO 열에서 클러스터화되어 있고 EMPNO 열이EMP 테이블의기본 키인 다음명령문에서이러한 액세스 경로를 사용할 수 있습니다.

SELECT *FROM emp, deptWHERE emp.deptno = dept.deptno

2 3 - 3 8 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 202: Oracle8 - Tistory

AND emp.empno = 7900;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTNESTED LOOPS

TABLE ACCESS BY ROWID EMPINDEX UNIQUE SCAN PK_EMPTABLE ACCESS CLUSTER DEPT

P K _ E M P는 기본 키를 강제로 수행하는 인덱스 이름입니다.

경로 3: 고유 키나 기본 키를 가진 해시 클러스터 키에 의한 단일 행

다음과 같은 조건이 모두 참일 경우 이 액세스 경로를 사용할 수 있습니다.

■ 명령문의 WHERE 절이 동등 조건에 있는 해시 클러스터 키의 모든 열을 사용합니다. 복합 클러스터 키의 경우에는 동등 조건이 AND 연산자로 결합되어야 합니다.

■ 해시 클러스터 키를 구성하는 열이 고유 키나 기본 키를 구성하고 있으므로 이 명령문은 하나의 행만을 돌려줍니다.

이 명령문을 실행하기 위해 O ra c l e은 클러스터의 해시 함수를 해시 값을 얻기 위해명령문에 지정된 해시 클러스터 키 값에 적용합니다. 그러면 O ra c l e은 해시 값을 사용하여 테이블에서 해시 스캔을 수행합니다.

예: O R D E R S와 LINE_ITEMS 테이블이 해시 클러스터에 저장되어 있고 O R D E R -NO 열이 ORDERS 테이블의 클러스터 키면서 기본 키인 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM ordersWHERE orderno = 65118968;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS HASH ORDERS

최적기 작업 2 3 - 3 9

액세스 경로 선택

Page 203: Oracle8 - Tistory

경로 4: 고유 키나 기본 키에 의한 단일 행

명령문의 WHERE 절이 동등 조건에서 고유 키나 기본 키의 모든 열을 사용하는 경우 이 액세스 경로를 사용할 수 있습니다. 복합 키의 경우에는 동등 조건이 AND 연산자로 결합되어야 합니다. 이 명령문을 실행하기 위해 O ra c l e은 단일 ROW I D를 읽어 들이는 고유 키나 기본 키의 인덱스에 고유 스캔을 수행한 다음 해당 ROW I D를사용하여 테이블에 액세스합니다.

예: EMPNO 열이 EMP 테이블의 기본 키인 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM empWHERE empno = 7900;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMP

INDEX UNIQUE SCAN PK_EMP

P K _ E M P는 기본 키를 강제로 수행하는 인덱스 이름입니다.

경로 5: 클러스터 조인

명령문의 WHERE 절이 한 테이블에 있는 클러스터 키의 각 열을 다른 테이블에 있는 해당 열과 동등하게 하는 조건을 포함하는 경우 동일한 클러스터에 저장된 테이블을 조인하는 명령문은 이 액세스 경로를 사용할 수 있습니다. 복합 클러스터 키의 경우에는 동등 조건이 AND 연산자로 결합되어야 합니다. Ora c l e은 중첩 루프 작업을수행하여 이 명령문을 실행합니다. (중첩 루프 작업에 대한 내용은 24-2 페이지“조인 작업”을 참조하십시오. )

예: E M P와 DEPT 테이블이 DEPTNO 열에 대해 클러스터화된 다음 명령문에서이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM emp, deptWHERE emp.deptno = dept.deptno;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENT

2 3 - 4 0 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 204: Oracle8 - Tistory

NESTED LOOPSTABLE ACCESS FULL DEPTTABLE ACCESS CLUSTER EMP

경로 6: 해시 클러스터 키

명령문의 WHERE 절이 동등 조건에서 해시 클러스터 키의 모든 열을 사용하는 경우이 액세스 경로를 사용할 수 있습니다. 복합 클러스터 키의 경우에는 동등 조건이AND 연산자로 결합되어야 합니다. 이 명령문을 실행하기 위해 O ra c l e은 클러스터의 해시 함수를 명령문에 지정된 해시 클러스터 키 값에 적용하여 해시 값을 얻습니다. 그런 다음 O ra c l e은 이 해시 값을 사용하여 테이블에서 해시 스캔을 수행합니다.

예: O R D E R S와 LINE_ITEMS 테이블이 해시 클러스터에 저장되어 있고ORDERNO 열이 클러스터 키인 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM line_itemsWHERE orderno = 65118968;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS HASH LINE_ITEMS

경로 7: 인덱스화된 클러스터 키

명령문의 WHERE 절이 동등 조건에서 인덱스화된 클러스터 키의 모든 열을 사용하는 경우 이 액세스 경로를 사용할 수 있습니다. 복합 클러스터 키의 경우에는 동등 조건이 AND 연산자로 결합되어야 합니다. 이 명령문을 실행하기 위해 O ra c l e은 클러스터 인덱스에 대해 고유 스캔을 수행하여 지정된 클러스터 키 값을 가진 행의 RO -W I D를 읽어 들입니다. 그런 다음 O ra c l e은 해당 ROW I D를 사용하여 클러스터 스캔으로 테이블에 액세스합니다. 동일한 클러스터 키 값을 가진 모든 행은 함께 저장되어 있으므로 클러스터 스캔은 이 모두를 찾기 위해 하나의 ROW I D만 필요로 합니다.

예: EMP 테이블이 인덱스화된 클러스터에 저장되어 있고 DEPTNO 열이 클러스터키인 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT * FROM empWHERE deptno = 10;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

최적기 작업 2 3 - 4 1

액세스 경로 선택

Page 205: Oracle8 - Tistory

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS CLUSTER EMPINDEX UNIQUE SCAN PERS_INDEX

P E R S _ I N D E X는 클러스터 인덱스 이름입니다.

경로 8: 조합 인덱스

명령문의 WHERE 절이 AND 연산자로 결합된 동등 조건에 있는 조합 인덱스의 모든 열을 사용하는 경우 이 액세스 경로를 사용할 수 있습니다. Ora c l e은 인덱스에서범위 스캔을 수행하여 선택된 행의 ROW I D를 읽어 들인 다음 이러한 ROW I D로 테이블에 액세스하여 이 명령문을 실행합니다.

예: J O B과 DEPTNO 열에 조합 인덱스가 있는 다음 명령문에서 이 액세스 경로를사용할 수 있습니다.

SELECT *FROM empWHERE job = ’CLERK’AND deptno = 30;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMPINDEX RANGE SCAN JOB_DEPTNO_INDEX

J O B _ D E P T N O _ I N D E X는 J O B과 DEPTNO 열에 대한 조합 인덱스 이름입니다.

경로 9: 단일 열 인덱스

명령문의 WHERE 절이 동등 조건에 있는 하나 이상의 단일 열 인덱스의 열을 사용하는 경우 이 액세스 경로를 사용할 수 있습니다. 여러 단일 열 인덱스의 경우 조건은AND 연산자로 결합되어야 합니다.

WHERE 절이 하나의 인덱스 열을 사용하는 경우 O ra c l e은 선택된 행의 ROW I D를읽어 들이기 위해 인덱스에서 범위 스캔을 수행한 다음 이러한 ROW I D로 테이블에액세스하여 이 명령문을 실행합니다.

2 3 - 4 2 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 206: Oracle8 - Tistory

예: EMP 테이블의 JOB 열에 인덱스가 있는 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM empWHERE job = ’ANALYST’;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN JOB_INDEX

J O B _ I N D E X는 E M P. J O B에 대한 인덱스입니다.

WHERE 절이 여러 단일 열 인덱스의 열을 사용하는 경우 O ra c l e은 각 조건을 만족시키는 행의 ROW I D를 읽어 들이기 위해 각 인덱스에 대해 범위 스캔을 수행하여 명령문을 실행합니다. 그런 다음 O ra c l e은 ROWID 집합을 병합하여 모든 조건을 만족시키는 행의 ROWID 집합을 얻은 후 이러한 ROW I D를 사용하여 테이블에 액세스합니다.

O ra c l e은 5개까지 인덱스를 병합할 수 있습니다. WHERE 절이 5개 이상의 단일 열인덱스의 열을 사용하는 경우 O ra c l e은 이들 중 5개를 병합하고 ROW I D로 테이블에액세스한 다음 결과 행을 돌려주기 전에 이것이 나머지 조건을 만족하는지 알아보기위해 이를 테스트합니다.

예: EMP 테이블의 J O B과 DEPTNO 열 모두에 인덱스가 있는 다음 명령문에서 이액세스 경로를 사용할 수 있습니다.

SELECT *FROM empWHERE job = ’ANALYST’

AND deptno = 20;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMPAND-EQUALINDEX RANGE SCAN JOB_INDEXINDEX RANGE SCAN DEPTNO_INDEX

최적기 작업 2 3 - 4 3

액세스 경로 선택

Page 207: Oracle8 - Tistory

A N D - E Q UAL 작업은 J O B _ I N D E X와 D E P T N O _ I N D E X를 스캔하여 얻은 ROW -I D를 병합하고 질의를 만족하는 행의 ROWID 집합을 생성합니다.

경로 10: 인덱스화된 열의 제한된 범위 검색

WHERE 절이 단일 열 인덱스의 열을 사용하거나 조합 인덱스의 앞부분을 구성하는하나 이상의 열을 사용하는 경우 이 액세스 경로를 사용할 수 있습니다.

column = expr

column >[=] expr AND column <[=] expr

column BETWEEN expr AND expr

column LIKE ’c%’

이들 각 조건은 명령문이 액세스하는 인덱스화된 값의 제한된 범위를 지정합니다. 조건이범위의 최소값과 최대값을 모두 지정하므로 범위가 제한되어 있다고 합니다. Ora -c l e은 인덱스에 대해 범위 스캔을 수행한 다음 ROW I D로 테이블에 액세스하여 이 명령문을 실행합니다.

표현식 ex p r이 인덱스화된 열을 참조하는 경우 이 액세스 경로를 사용할 수 없습니다.

예: EMP 테이블의 SAL 열에 인덱스가 있는 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM empWHERE sal BETWEEN 2000 AND 3000;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN SAL_INDEX

SA L _ I N D E X는 E M P. SA L에 대한 인덱스 이름입니다.

예: EMP 테이블의 E NAME 열에 인덱스가 있는 다음 명령문에도 이 액세스 경로를사용할 수 있습니다.

2 3 - 4 4 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 208: Oracle8 - Tistory

SELECT *FROM empWHERE ename LIKE ’S%’;

경로 11: 인덱스화된 열의 제한되지 않은 범위 검색

명령문의 WHERE 절이 단일 열 인덱스의 열을 사용하거나 조합 인덱스의 앞부분을구성하는 하나 이상의 열을 사용하는 경우 이 액세스 경로를 사용할 수 있습니다.

WHERE column >[=] expr

WHERE column <[=] expr

이들 각 조건은 명령문이 액세스하는 인덱스 값의 제한되지 않은 범위를 지정합니다.조건이 범위의 최소값이나 최대값 중 하나를 지정하지만 모두를 지정하지는 않으므로범위에 제한이 없다고 합니다. Ora c l e은 인덱스에 대해 범위 스캔을 수행한 다음ROW I D로 테이블에 액세스하여 이 명령문을 실행합니다.

예: EMP 테이블의 SAL 열에 인덱스가 있는 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM empWHERE sal > 2000;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN SAL_INDEX

예: LINE_ITEMS 테이블의 O R D E R와 LINE 열에 조합 인덱스가 있는 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM line_itemsWHERE order > 65118968;

WHERE 절이 인덱스의 앞부분인 ORDER 열을 사용하므로 이 액세스 경로를 사용할 수 있습니다.

최적기 작업 2 3 - 4 5

액세스 경로 선택

Page 209: Oracle8 - Tistory

예: O R D E R와 LINE 열에 인덱스가 있는 다음 명령문에서는 이 액세스 경로를 사용할 수 없습니다.

SELECT *FROM line_itemsWHERE line < 4;

WHERE 절이 인덱스의 앞부분이 아닌 LINE 열만을 사용하므로 이 액세스 경로를사용할 수 없습니다.

경로 12: 정렬 병합 조인

명령문의 WHERE 절이 동등 조건에 있는 각 테이블의 열을 사용하는 경우 클러스터에 함께 저장되어 있지 않은 테이블을 조인하는 명령문에 대해 이 액세스 경로를 사용할 수 있습니다. Ora c l e은 정렬 병합 작업을 사용하여 이 명령문을 실행합니다.O ra c l e은 또한 조인문을 실행하기 위해 중첩 루프 작업을 사용할 수 있습니다. (이러한 작업에 대한 내용은 24-2 페이지“조인문 최적화”를 참조하십시오. )

예: E M P와 DEPT 테이블이 동일한 클러스터에 저장되어 있지 않은 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT *FROM emp, deptWHERE emp.deptno = dept.deptno;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTMERGE JOIN

SORT JOINTABLE ACCESS FULL EMP

SORT JOINTABLE ACCESS FULL DEPT

경로 13: 인덱스화된 열의 MAX 또는 M I N

다음과 같은 조건이 모두 참인 SELECT 문에 대해 이 액세스 경로를 사용할 수 있습니다.

■ 질의가 단일 열 인덱스 열이나 조합 인덱스의 앞부분 열의 최대값이나 최소값을선택하는 MAX 또는 MIN 함수를 사용합니다. 인덱스는 클러스터 인덱스일 수없습니다. MAX 또는MIN 함수의인수는열, 상수, 덧셈연산자(+), 연결작업( | |),

2 3 - 4 6 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 210: Oracle8 - Tistory

또는 C O N CAT 함수와 관련된 표현식이면 됩니다.

■ 선택 목록에는 다른 표현식이 없습니다.

■ 명령문에 WHERE 절이나 G ROUP BY 절이 없습니다.

O ra c l e은 범위 스캔을 수행하여 최대 또는 최소 인덱스 값을 찾아 질의를 실행합니다. 이러한 값만이 선택되므로 O ra c l e은 인덱스를 스캔한 다음 테이블에 액세스하지않아도 됩니다.

예: EMP 테이블의 SAL 열에 인덱스가 있는 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

SELECT MAX(sal) FROM emp;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTAGGREGATE GROUP BY

INDEX RANGE SCAN SAL_INDEX

경로 14: 인덱스화된 열의 ORDER BY

다음과 같은 조건이 모두 참인 SELECT 문은 이 액세스 경로를 사용할 수 있습니다.

■ 질의에 단일 열 인덱스 열이나 조합 인덱스의 앞부분 열을 사용하는 ORDER BY절이 있습니다. 인덱스는 클러스터 인덱스일 수 없습니다.

■ ORDER BY 절에 나열된 인덱스화된 열 중 적어도 하나가 널을 포함하고 있지않다는 것을 보장하는 P R I M A RY KEY 또는 NOT NULL 무결성 제약 조건이있어야 합니다.

■ N L S _ S O RT 매개변수를 B I NA RY로 설정합니다.

O ra c l e은 인덱스의 범위 스캔을 수행하여 정렬된 순서로 선택된 행의 ROW I D를 읽어 들입니다. 그런 다음 O ra c l e은 이러한 ROW I D로 테이블에 액세스하여 질의를 실행합니다.

예: EMP 테이블의 EMPNO 열에 기본 키가 설정되어 있는 다음 명령문에서 이 액세스 경로를 사용할 수 있습니다.

최적기 작업 2 3 - 4 7

액세스 경로 선택

Page 211: Oracle8 - Tistory

SELECT *FROM empORDER BY empno;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS BY ROWID EMP

INDEX RANGE SCAN PK_EMP

P K _ E M P는 기본 키를 강제로 수행하는 인덱스 이름입니다. 기본 키는 열이 널을 포함하지 않는다는 것을 보장합니다.

경로 15: 전체 테이블 스캔

WHERE 절 조건에 관계없이 모든 SQL 문은 이 액세스 경로를 사용할 수 있지만F ROM 절이 SAMPLE 또는 SAMPLE BLOCK을포함하는 경우는 제외됩니다.

다음과 같은 조건은 인덱스 액세스 경로를 사용할 수 없습니다.

■ 열1 > 열2

■ 열1 < 열2

■ 열1 >= 열2

■ 열1 <= 열2

열1과 열2는 동일한 테이블에 있습니다.

■ 열 IS NULL

■ 열 IS NOT NULL

■ 열 NOT IN

■ 열 != ex p r

■ 열 LIKE ‘% p a t t e r n’

열의 인덱스화 여부와 관계 없습니다.

■ expr = ex p r 2

ex p r은 열의 인덱스화 여부에 관계없이 연산자나 함수로 열에 대해 작업하는 표현식입니다.

■ NOT EXISTS 하위 질의

2 3 - 4 8 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 212: Oracle8 - Tistory

■ 뷰의 ROWNUM 의사 열

■ 인덱스화되지 않은 열을 포함하는 모든 조건

이러한 구조만을 포함하고 인덱스 액세스 경로를 사용 가능하도록 하는 다른 조건은포함하고 있지 않은 모든 SQL 문은 전체 테이블 스캔을 사용해야 합니다.

예: 이 명령문은 전체 테이블 스캔을 사용하여 EMP 테이블에 액세스합니다.

SELECT *FROM emp;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS FULL EMP

표본 테이블 스캔(등급이 없는 액세스 경로)

F ROM 절에서 SAMPLE 또는 SAMPLE BLOCK 옵션을 포함하는 SELECT 문은 이 액세스 경로를 사용할 수 있습니다. 표본 테이블 스캔은 비용 기준 최적화를 필요로 합니다.

예: 이 명령문은 표본 테이블 스캔을 사용하여 EMP 테이블 중 1 %를 액세스하여 블록에 의한 표본을 추출합니다.

SELECT *FROM emp SAMPLE BLOCK (1);

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTTABLE ACCESS SAMPLE EMP

인덱스 조인(등급이 없는 액세스 경로)

테이블의 두 개 이상의 인덱스화된 열에서 발견되는 데이터를 액세스하는 S E L E C T문은 이 액세스 경로를 사용할 수 있습니다. 모든 관련 열 값을 인덱스에서 읽어 들일수 있으므로 테이블을 액세스할 필요가 없습니다. 인덱스 조인은 비용 기준 최적화를필요로 합니다.

최적기 작업 2 3 - 4 9

액세스 경로 선택

Page 213: Oracle8 - Tistory

예: 이 명령문은 인덱스 조인을 사용하여 EMP 테이블의 EMPNO 및 SAL 열을 액세스합니다.

SELECT empno, salFROM empWHERE sal > 2000;

이 명령문에 대한 EXPLAIN PLAN 결과는다음과 같습니다.

OPERATION OPTIONS OBJECT_NAME

SELECT STATEMENTVIEW index$_join$_001

HASH JOININDEX RANGE SCAN EMP_SALINDEX FAST FULL SCAN EMP_EMPNO

액세스 경로 선택

이 단원에서는 비용 기준 접근 방법을 사용하는 경우 또는 규칙 기준 접근 방법을 사용하는 경우 최적기가 사용 가능한 액세스 경로를 선택하는 방법에 대해 설명합니다.

비용 기준 접근 방법을 사용한 액세스 경로 선택

최적기는 비용 기준 접근 방법을 사용하여 다음 요소에 준하여 액세스 경로를 선택합니다.

■ 명령문에 대해 사용 가능한 액세스 경로

■ 각 액세스 경로나 경로 조합을 사용하여 명령문을 실행할 때 예측되는 비용

최적기는 먼저 WHERE 절(및 SAMPLE 또는 SAMPLE BLOCK 옵션에 대한F ROM 절)에 있는 조건을 검사하여 사용 가능한 액세스 경로를 알아내어 액세스 경로를 선택합니다. 그 다음 최적기는 사용 가능한 액세스 경로를 사용하여 가능한 실행 계획 집합을 생성하고 명령문에 액세스할 수 있는 인덱스, 열, 테이블에 대한 통계를 사용하여 각 계획의 비용을 예측합니다. 최적기는 최소의 예측 비용을 가진 실행계획을 선택합니다.

사용 가능한 액세스 경로 중에서 최적기가 선택한 것은 힌트에 의해 무효화될 수 있지만 명령문의 F ROM 절이 SAMPLE 또는 SAMPLE BLOCK을 포함하는 경우는제외됩니다.

추가 정보: SQL 문의 힌트에 대한 내용은 O racle8i Tuning을 참조하십시오.

2 3 - 5 0 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 214: Oracle8 - Tistory

최적기는 다음과 같은 요소를 고려하여 사용 가능한 액세스 경로를 선택합니다.

■ 선택도: 선택도는 테이블에서 질의가 선택한 행의 백분율입니다. 테이블에 있는행을 높은 비율로 선택한 질의는 선택도가 낮은 반면 낮은 백분율로 선택한 질의는 선택도가 높습니다.

최적기는 선택도가 낮은 질의보다는 선택도가 높은 질의에 대해 전체 테이블 스캔보다 인덱스 스캔을 선택할 가능성이 높습니다. 일반적으로 선택도가 낮은 질의에대해 전체 테이블 스캔이 더 빠르지만 선택도가 높은 질의에서는 인덱스 스캔이 전체 테이블 스캔보다 효율적입니다.

최적기는 다음과 같은 정보 소스를 고려하여 질의의 선택도를 결정합니다.

- WHERE 절에서 사용되는 연산자

- WHERE 절에서 사용되는 고유 키 열과 기본 키 열

- 테이블에 대한 통계

다음 예는 최적기가 선택도를 사용하는 방법을 설명합니다.

■ D B _ F I L E _ M U LT I B L O C K _ R E A D _ C O U N T : 전체 테이블 스캔은 다중 블록 읽기를 사용합니다. 따라서 전체 테이블 스캔의 비용은 전체 테이블을 읽는데 필요한다중 블록 읽기 수에 따라 다르며 다중 블록 읽기 수는 초기화 매개변수 D B _F I L E _ M U LT I B L O C K _ R E A D _ C O U N T에서 지정한 단일 다중 블록 읽기를 수행할 경우 읽혀지는 블록 수에 따라 다릅니다. 이러한 이유로 최적기는 이 매개변수의 값이 크면 전체 테이블 스캔을 선택할 가능성이 높습니다.

예: WHERE 절에 동등 조건을 사용하여 J a c k s o n이라는 사원을 모두 선택하는 다음과 같은 질의를 생각해 봅시다.

SELECT *FROM empWHERE ename = ’JACKSON’;

E NAME 열이 고유 키나 기본 키라면 최적기는 J a c k s o n이라는 사원이 한 사람이라고 생각하여 질의는 하나의 행만 돌려줍니다. 이 경우 질의는 선택도가 매우 높으며,최적기는 고유 키나 기본 키를 강제로 수행하는 인덱스에 대해 고유 스캔을 사용하여테이블을 액세스할 가능성이 높습니다. (액세스 경로 4 )

최적기 작업 2 3 - 5 1

액세스 경로 선택

Page 215: Oracle8 - Tistory

예: 앞의 예에 있던 질의를 다시 생각해 봅시다. ENAME 열이 고유 키나 기본 키가아니라면 최적기는 다음과 같은 통계를 사용하여 질의의 선택도를 예측할 수 있습니다.

■ U S E R _ TA B _ C O L U M N S. N U M _ D I S T I N C T는 테이블에 있는 각 열에 대한 값의 수입니다.

■ U S E R _ TA B L E S. N U M _ ROW S는 각 테이블에 있는 행의 수입니다.

최적기는 EMP 테이블에 있는 행의 수를 E NAME 열에 있는 서로 다른 값의 수로나누어 동일한 이름을 가진 사원이 몇 퍼센트나 되는지를 예측할 수 있습니다.E NAME 값이 균등하게 분포되었다고 가정한 경우 최적기는 이 비율을 질의의 예측선택도로 사용할 수 있습니다.

예: 사원 ID 번호가 7500 미만인 모든 사원을 선택하는 다음 질의를 생각해 봅시다.

SELECT *FROM empWHERE empno < 7500;

최적기는 WHERE 절 조건에 있는 경계 값인 7 5 0 0과 가능하다면 EMPNO 열에 대한 H I G H _ VALUE 및 L OW _ VALUE 통계 값을 사용하여 질의의 선택도를 예측합니다. 이러한 통계는 U S E R _ TA B _ C O L _ S TATISTICS 뷰(또는 U S E R _ TA B _ C O L -UMNS 뷰)에 있습니다. 최적기는 EMPNO 값이 최소값과 최대값 사이에 균등하게분포한다고 가정한 후 이 범위의 몇 퍼센트가 7 5 0 0보다 작은지를 판별하고 질의의 예측 선택도로 이 값을 사용합니다.

예: 다음 질의를 생각해 봅시다. 이 질의는 WHERE 절 조건에 있는 경계 값으로 문자 대신 바인드 변수를 사용합니다.

SELECT *FROM empWHERE empno < :e1;

최적기는 바인드 변수 E 1의 값을 알지 못합니다. 실제로 E 1의 값은 질의를 실행할때마다 다릅니다. 이러한 이유로 최적기는 이러한 질의의 선택도를 결정하기 위해 이전 예에서 설명한 수단을 사용할 수 없습니다. 이러한 경우 최적기는 인덱스화되어있으므로 경험적으로 열의 선택도에 대해 작은 값을 예측합니다. 최적기는 바인드 변수가 조건에서 연산자 <, >, <=, >= 중 하나와 함께 경계 값으로 사용되는 경우에는언제나 이러한 가정을 하게 됩니다.

2 3 - 5 2 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 216: Oracle8 - Tistory

최적기가 바인드 변수를 다루는 방법으로 인해 상수 대신 바인드 변수를 사용한다는점에서만 차이가 있는 동일한 SQL 문에 대해 다른 실행 계획을 선택하게 됩니다. 이러한 차이점이 명확하게 나타나는 예는 최적기가 O racle Precompiler 프로그램에있는 바인드 변수를 가진 내장 SQL 문과 S Q L * P l u s에 있는 상수를 가진 동일한SQL 문에 대해 다른 실행 계획을 선택하는 경우입니다.

예: 다음과 같은 질의를 생각해 봅시다. 이 질의는 BETWEEN 연산자를 가진 조건에서 경계 값으로 두 개의 바인드 변수를 사용합니다.

SELECT *FROM empWHERE empno BETWEEN :low_e AND :high_e;

최적기는 BETWEEN 조건을 두 개의 조건으로 분해합니다.

empno >= :low_eempno <= :high_e

최적기는 경험적으로 인덱스를 사용하기 위해 인덱스화된 열에 대한 작은 선택도를예측합니다.

예: 다음과 같은 질의를 생각해 봅시다. 이 질의는 7 5 0 0과 7800 사이의 사원 I D를가진 모든 사원을 선택하기 위해 BETWEEN 연산자를 사용합니다.

SELECT *FROM empWHERE empno BETWEEN 7500 AND 7800;

이 질의의 선택도를 결정하기 위해 최적기는 WHERE 절 조건을 다음과 같은 두 개의 조건으로 분해합니다.

empno >= 7500empno <= 7800

최적기는 앞의 예에서 설명한 수단을 사용하여 각 조건의 개별 선택도를 예측합니다.그런 다음 최적기는 BETWEEN 조건의 선택도( S )를 예측하기 위해 다음 공식에서개별 선택도( S 1과 S 2 )와 절대 값 함수( A B S )를 사용합니다.

S = ABS( S1 + S2 - 1 )

최적기 작업 2 3 - 5 3

액세스 경로 선택

Page 217: Oracle8 - Tistory

규칙 기준 접근 방법을 사용한 액세스 경로 선택

최적기는 규칙 기준 접근 방법을 사용하여 다음 요소에 준하여 액세스 경로 사용 여부를 결정합니다.

■ 명령문에 대해 사용 가능한 액세스 경로

■ 23-37 페이지의 표 2 3 - 1에 있는 액세스 경로 등급

최적기는 먼저 명령문의 WHERE 절의 조건을 검사하여 사용 가능한 액세스 경로를알아낸 후 가장 높은 등급을 가진 액세스 경로를 선택합니다.

전체 테이블 스캔이 목록에서 가장 낮은 등급을 가진 액세스 경로입니다. 이것은 전체 테이블 스캔이 보다 빨리 실행될 수 있다 해도 규칙 기준 접근 방법은 항상 인덱스를 사용하는 액세스 경로를 선택한다는 것을 의미합니다.

WHERE 절에 있는 조건의 순서는 일반적으로 최적기가 액세스 경로를 선택하는데영향을 주지 않습니다.

예: EMP 테이블에서 E NAME 값이‘C H U N G’이고 SAL 값이 2 0 0 0보다 큰 모든사원의 사원 번호를 선택하는 다음 SQL 문을 생각해 봅시다.

SELECT empnoFROM empWHERE ename = ’CHUNG’

AND sal > 2000;

또한 EMP 테이블이 무결성 제약 조건과 인덱스를 가지고 있다고 합시다.

■ EMPNO 열에 PK_EMPNO 인덱스에 의해 강제로 수행된 P R I M A RY KEY 제약 조건이 있습니다.

■ E NAME 열에 E NA M E _ I N D라는 인덱스가 있습니다.

■ SAL 열에 SA L _ I N D라는 인덱스가 있습니다.

SQL 문의 WHERE 절에 있는 조건, 무결성 제약 조건, 인덱스에 준하여 다음과 같은 액세스 경로를 사용할 수 있습니다.

■ E NAME_IND 인덱스를 사용하는 단일 열 인덱스 액세스 경로는 E NAME =‘C H U N G’이라는 조건을 주면 사용할 수 있게 됩니다. 이 액세스 경로의 등급은9입니다.

■ SAL_IND 인덱스를 사용하는 제한되지 않은 범위의 스캔은 SA L >2 0 0 0이라는조건을 주면 사용할 수 있게 됩니다. 이 액세스 경로의 등급은 1 1입니다.

■ 전체 테이블 스캔은 모든 SQL 문에 자동으로 사용할 수 있습니다. 이 액세스 경로의 등급은 1 5입니다.

2 3 - 5 4 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 218: Oracle8 - Tistory

P K-EMPNO 인덱스로 인해 인덱스화된 열이 WHERE 절에 있는 조건에 나타나지않으므로 기본 키에 의한 단일 행 액세스 경로를 사용할 수 없습니다.

최적기는 규칙 기준 접근 방법을 사용하여 명령문을 실행시키기 위해 E NA M E _ I N D인덱스를 사용하는 액세스 경로를 선택합니다. 최적기가 이 경로를 선택하는 이유는이 경로의 등급이 가장 높기 때문입니다.

최적기 작업 2 3 - 5 5

액세스 경로 선택

Page 219: Oracle8 - Tistory

2 3 - 5 6 Oracle8i 개념 설명서, 볼륨 2

액세스 경로 선택

Page 220: Oracle8 - Tistory

조인의 최적화 2 4 - 1

24조인의 최적화

이 장에서는 O racle 최적기가 조인, 반대 조인 및 세미 조인을 포함하는 SQL 문을 실행하는 방법과 사실 테이블을 다중 차원 테이블로 조인하는 스타 질의를 실행할 때 비트맵인덱스를 사용할 수 있는 방법을 설명하며 다음 내용을 다룹니다.

■ 조인문 최적화

■ 반대 조인과 세미 조인 최적화

■ “스타”질의 최적화

추가 정보: 최적기에 대한 자세한 내용은 O racle8i Tuning을참조하십시오.

Page 221: Oracle8 - Tistory

조인문 최적화

최적기는 조인문에 대한 실행 계획선택을 위해상호 연관된 다음사항을 결정합니다.

액세스 경로 단순한 명령문에 대해 최적기는 조인문에 있는 각 테이블의 데이터를 읽어 들이는 액세스 경로를 선택해야 합니다. (23-33페이지“액세스 경로 선택”참조)

조인 작업 O ra c l e은 다음 작업 중 하나를 수행하여 각 행 소스의 쌍을 조인합니다.

■ 중첩 루프

■ 정렬 병합

■ 클러스터

■ 해시 조인(규칙 기준 최적화에서 사용할 수 없음)

조인 순서 O ra c l e은 두 개의 테이블을 조인하고 결과 행 소스를 다음 테이블과 조인하여 둘 이상의 테이블을 조인하는 명령문을 실행합니다. 이 과정은 모든 테이블이 조인되어 결과를 생성할 때까지계속됩니다.

조인 작업

최적기는 다음 작업을 사용하여 두 개의 행 소스를 조인합니다.

■ 중첩 루프 조인

■ 정렬 병합 조인

■ 클러스터 조인

■ 해시 조인

중첩 루프 조인

O ra c l e은 다음 단계를 수행하여 중첩 루프 조인을 수행합니다.

1. 최적기는 테이블 중 하나를 외부 테이블 또는 드라이빙 테이블로 선택합니다. 다른 테이블은 내부 테이블이라 합니다.

2. 외부 테이블의 각 행에 대해 O ra c l e은 조인 조건을 만족하는 내부 테이블에 있는모든 행을 찾습니다.

3. O ra c l e은 조인 조건을 만족하는 각 행의 쌍에 있는 데이터를 조합하고 결과 행을돌려줍니다.

2 4 - 2 Oracle8i 개념 설명서, 볼륨 2

조인문 최적화

Page 222: Oracle8 - Tistory

그림 2 4 - 1은 중첩 루프 조인을 사용하는 명령문에 대한 실행 계획을 보여줍니다.

SELECT *FROM emp, deptWHERE emp.deptno = dept.deptno;

그림 24-1 중첩 루프 조인

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 2단계에서 전체 테이블 스캔으로 외부 테이블( E M P )에 액세스합니다.

■ 2단계에서 돌려준 각 행에 대해 4단계는 E M P.DEPTNO 값을 사용하여 P K _ D -EPT 인덱스에 대한 고유 스캔을 수행합니다.

조인의 최적화 2 4 - 3

조인문 최적화

1

NESTED LOOPS

2

4

INDEN(UNQUE SCAN)

pk_dept

3

TABLE ACCESS(FULL)emp

TABLE ACCESS(BY ROWID)

dept

Page 223: Oracle8 - Tistory

■ 3단계는 4단계의 ROW I D를 사용하여 내부 테이블( D E P T )에 있는 일치하는 행의위치를 파악합니다.

■ O ra c l e은 2단계에서 돌려준 행과 4단계에서 돌려준 일치하는 행을 결합하여 결과를 돌려줍니다.

정렬 병합 조인

O ra c l e은 동등 조인에 한해 정렬 병합 조인을 수행할 수 있습니다. Ora c l e은 다음단계를 수행하여 정렬 병합 조인을 수행합니다.

1. 이전 작업에서 정렬되지 않은 경우 O ra c l e은 조인될 각 행 소스를 정렬합니다.행은 조인 조건에서 사용되는 열 값을 기준으로 정렬됩니다.

2. O ra c l e은 조인 조건에서 사용되는 열에 대해 일치하는 값을 가지는 각 소스에서얻은 행으로 구성된 각 행의 쌍을 결합하여 두 개의 소스를 병합하고 결과 행 소스를 돌려줍니다.

그림 2 4 - 2는 정렬 병합 조인을 사용하는 명령문에 대한 실행 계획을 나타냅니다.

SELECT *FROM emp, deptWHERE emp.deptno = dept.deptno;

2 4 - 4 Oracle8i 개념 설명서, 볼륨 2

조인문 최적화

Page 224: Oracle8 - Tistory

그림 24-2 정렬 병합 조인

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 3단계와 5단계는 E M P와 DEPT 테이블의 전체 테이블 스캔을 수행합니다.

■ 2단계와 4단계는 각 행 소스를 독립적으로 정렬합니다.

■ 1단계는 2단계의 각 행과 4단계의 일치하는 각 행을 결합하여 2단계와 4단계의소스를 병합하고 결과 행 소스를 돌려줍니다.

클러스터 조인

O ra c l e은 동일한 클러스터에 있는 두 테이블의 클러스터 키 열을 동등하게 하는 동등조인에 대해서만 클러스터 조인을 수행할 수 있습니다. 클러스터에서 동일한 클러스터 키 값을 가진 두 테이블의 행은 동일한 블록에 저장되어 있으며 따라서 O ra c l e은이러한 블록에만 액세스합니다.

조인의 최적화 2 4 - 5

조인문 최적화

1

MERGE JOIN

2

SORT(JOIN)

5

TABLE ACCESS(FULL)emp

3

TABLE ACCESS(FULL)dept

4

SORT(JOIN)

Page 225: Oracle8 - Tistory

추가 정보: 최적의 성능을 위해 클러스터화할 테이블을 결정하는 지침은 O racle8i Tuning을참조하십시오.

그림 2 4 - 3은 E M P와 DEPT 테이블이 동일한 클러스터에 저장되어 있는 다음 명령문에 대한 실행 계획을 보여줍니다.

SELECT *FROM emp, deptWHERE emp.deptno = dept.deptno;

그림 24-3 클러스터조인

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 2단계는 전체 테이블 스캔으로 외부 테이블( D E P T )에 액세스합니다.

■ 2단계에서 돌려준 각 행에 대해 3단계는 D E P T.DEPTNO 값을 사용하여 클러스터 스캔으로 내부 테이블( E M P )에 있는 일치하는 행을 찾습니다.

클러스터 조인은 클러스터에 함께 저장되어 있는 두 개의 테이블과 관련된 중첩 루프조인입니다. DEPT 테이블의 각 행은 EMP 테이블에 있는 일치하는 행과 동일한 데이터 블록에 저장되어 있으므로 O ra c l e은 매우 효율적으로 일치하는 행에 액세스할수 있습니다.

2 4 - 6 Oracle8i 개념 설명서, 볼륨 2

조인문 최적화

1

NESTED LOOPS

2

TABLE ACCESS(FULL)dept

3

TABLE ACCESS(CLUSTER)

emp

Page 226: Oracle8 - Tistory

해시 조인

O ra c l e은 동등 조인에 한해 해시 조인을 수행할 수 있습니다. 해시 조인은 규칙 기준최적화에서는 사용할 수 없습니다. 초기화 매개변수 H A S H _ J O I N _ E NA B L E D( A LTER SESSIOM 명령어로 설정 가능) 또는 USE_HASH 힌트를 사용하여 해시조인을 활성화해야 합니다.

O ra c l e은 다음 단계를 수행하여 해시 조인을 수행합니다.

1. O ra c l e은 각 테이블에 전체 테이블 스캔을 수행하며 각각은 사용 가능한 메모리에 근거하여 가능한 많은 분할 영역으로 분할됩니다.

2. O ra c l e은 하나의 분할 영역에서 해시 테이블을 작성합니다. (가능하다면 O ra c l e은 사용 가능한 메모리에 적합한 분할 영역을 선택합니다.) 그런 다음 O ra c l e은다른 테이블에서 해당 분할 영역을 사용하여 해시 테이블을 탐색합니다. 메모리에 저장될 수 없는 모든 분할 영역 쌍은 디스크에 저장됩니다.

3. 각 분할 영역 쌍에 대해 (각각은 각 테이블에 속한 분할 영역임) Ora c l e은 더 작은 분할 영역을 사용하여 해시 테이블을 작성하고 더 큰 분할 영역을 사용하여해시 테이블을 탐색합니다.

그림 2 4 - 4는 해시 조인을 사용하는 명령문에 대한 실행 계획을 보여줍니다.

SELECT *FROM emp, deptWHERE emp.deptno = dept.deptno;

그림 24-4 해시 조인

조인의 최적화 2 4 - 7

조인문 최적화

1

HASH JOIN

2

TABLE ACCESS(FULL)dept

3

TABLE ACCESS(FULL)emp

Page 227: Oracle8 - Tistory

O ra c l e은 다음 단계를 수행하여 이 명령문을 실행합니다.

■ 2단계와 3단계는 E M P와 DEPT 테이블의 전체 테이블 스캔을 수행합니다.

■ 1단계는 2단계에서 얻은 행으로부터 해시 테이블을 작성하고 3단계의 각 행으로이를 탐색합니다.

초기화 매개변수 H A S H _ A R E A _ S I Z E는 해시 조인 작업에 사용되는 메모리 양을 제어하며 초기화 매개변수 H A S H _ M U LT I B L O C K _ I O _ C O U N T는 해시 조인 작업이동시에 읽고 쓰는 블록 수를 제어합니다.

추가 정보: 이러한 초기화 매개변수와 USE_HASH 힌트에 대한 자세한 내용은 O racle8i Tuning을 참조하십시오.

조인문에 대한 실행 계획 선택

이 단원에서는 최적기가 조인문에 대해 실행 계획을 선택하는 방법을 설명합니다.

■ 비용 기준 접근 방법을 사용하는 경우

■ 규칙 기준 접근 방법을 사용하는 경우

비용 기준 접근 방법과 규칙 기준 접근 방법에 적용되는 다음 사항을 고려합니다.

■ 최적기는 먼저 두 개 이상의 테이블을 조인한 결과가 적어도 한 행을 포함하는 행소스인지를 판별합니다. 최적기는 테이블에 대한 U N I Q U E와 P R I M A RY KEY제약 조건에 근거하여 이러한 상황을 인식합니다. 이러한 상황이 존재하는 경우최적기는 조인 순서 첫 번째에 이러한 테이블을 둡니다. 그런 다음 최적기는 나머지 테이블 집합의 조인을 최적화합니다.

■ 외부 조인 조건을 가진 조인문에 대해 외부 조인 연산자를 가진 테이블은 조인 순서에서 조건에 있는 다른 테이블 다음에 와야 합니다. 최적기는 이러한 규칙을 위반하는 조인 순서를 고려하지 않습니다.

비용 기준 접근 방법으로 조인에 대한 실행 계획 선택

비용 기준 접근 방법으로 최적기는 가능한 조인 순서, 조인 작업, 사용 가능한 액세스경로에 근거하여 실행 계획을 생성합니다. 그런 다음 최적기는 각 계획의 비용을 예측하고 가장 낮은 비용을 가진 계획을 선택합니다. 최적기는 다음과 같은 방법으로비용을 예측합니다.

■ 중첩 루프 작업 비용은 외부 테이블에서 선택한 각 행과 내부 테이블에서 이와 일

2 4 - 8 Oracle8i 개념 설명서, 볼륨 2

조인문 최적화

Page 228: Oracle8 - Tistory

치하는 각 행을 메모리로 읽어 들이는 비용에 준합니다. 최적기는 데이터 딕셔너리에 있는 통계를 사용하여 이러한 비용을 예측합니다.

■ 정렬 병합 조인의 비용은 모든 소스를 메모리로 읽어 들여 이를 정렬하는 비용에준합니다.

■ 최적기는 또한 각 작업의 비용을 결정할 때 다른 요인도 고려합니다. 예를 들어,다음과 같습니다.

- 더 작은 정렬 영역 크기를 사용하는 경우 소규모 정렬 영역에서 정렬이 더 많은CPU 시간과 입출력을 점유하므로 정렬 병합 조인의 비용이 증가합니다. 정렬영역의 크기는 초기화 매개변수 S O RT _ A R E A _ S I Z E에 의해 지정됩니다.

- 대규모 다중 블록 읽기 계수를 사용하면 중첩 루프 조인에 비해 정렬 병합 조인에 대한 비용이 감소됩니다. 많은 순차 블록을 단일 입출력에 있는 디스크에서읽을 수 있는 경우 중첩 루프 조인에 대한 내부 테이블의 인덱스는 전체 테이블스캔에 비해 성능이 향상될 가능성이 적습니다. 다중 블록 읽기 계수는 초기화매개변수 D B _ F I L E _ M U LT I B L O C K _ R E A D _ C O U N T에 의해 지정됩니다.

- 외부 조인 조건을 가진 조인문에 대해 외부 조인 연산자를 가진 테이블은 조인순서에서 조건에 있는 다른 테이블 다음에 와야 합니다. 최적기는 이러한 규칙을 위반하는 조인 순서를 고려하지 않습니다.

비용 기준 접근 방법을 사용하는 경우 조인 순서에 대한 최적기의 선택은 O R D E R -ED 힌트에 의해 무효화될 수 있습니다. ORDERED 힌트가 외부 조인에 대한 규칙을 위반하는 조인 순서를 지정하는 경우 최적기는 힌트를 무시하고 순서를 선택합니다. 또한 힌트를 사용하여 최적기가 선택한 조인 작업을 무효화할 수 있습니다.

추가 정보: 힌트 사용에 대한 내용은 O racle8i Tuning을 참조하십시오.

규칙 기준 접근 방법으로 조인에 대한 실행 계획 선택

규칙 기준 접근 방법을 사용하여 최적기는 R 테이블을 조인하는 명령문에 대한 실행계획을 선택하기 위해 다음 단계를 수행합니다.

1. 최적기는 R 조인 순서 집합을 생성하며 각각은 첫 번째 테이블로 서로 다른 테이블을 가지고 있습니다. 최적기는 다음 알고리즘을 사용하여 잠재적인 조인 순서를 생성합니다.

a. 최적기는 23-37 페이지의 표 2 3 - 1에 나타난 액세스 경로에 대한 등급에 따라가장 높은 등급의 사용 가능한 액세스 경로를 가진 테이블을 선택하여 조인순서의 각 위치를 채웁니다. 최적기는 조인 순서에서 다음 각 위치가 모두 채워질 때까지 이 단계를 반복합니다.

조인의 최적화 2 4 - 9

조인문 최적화

Page 229: Oracle8 - Tistory

b . 조인 순서에 있는 각 테이블에 대해 최적기는 순서에서 이전 테이블이나 행소스에 조인할 작업을 선택합니다. 최적기는 정렬 병합 작업을 액세스 경로1 2의“등급”으로 정하고 이러한 규칙을 적용하여 이 작업을 수행합니다.

- 선택된 테이블에 대한 액세스 경로가 11 이상으로 등급이 정해지면 최적기는조인 순서에서 이전 테이블이나 행 소스를 외부 테이블로 사용하여 중첩 루프작업을 선택합니다.

- 이 테이블에 대한 액세스 경로가 12 이하로 등급이 정해지고 선택된 테이블과조인 순서에서 이전 테이블이나 행 소스 간에 동등 조인 조건이 존재하면 최적기는 정렬 병합 작업을 선택합니다.

- 선택된 테이블에 대한 액세스 경로가 12 이하로 등급이 정해지고 동등 조인조건이 존재하지 않는 경우 최적기는 조인 순서에서 이전 테이블이나 행 소스를 외부 테이블로 하여 중첩 루프 작업을 선택합니다.

2. 그런 다음 최적기는 최종 실행 계획 중에서 선택합니다. 최적기의 선택 목표는인덱스 스캔을 사용하여 내부 테이블이 액세스되는 중첩 루프 조인 작업 수를 최대로 하는 것입니다. 중첩 루프 조인은 내부 테이블에 대한 여러 번의 액세스를포함하므로 내부 테이블의 인덱스는 중첩 루프 조인의 성능을 크게 향상시킵니다.

일반적으로 최적기는 실행 계획을 선택하는 경우 F ROM 절에 나타나는 테이블의 순서를 고려하지 않습니다. 최적기는 다음 규칙을 차례대로 적용하여 이러한선택을 수행합니다.

a. 최적기는 전체 테이블 스캔으로 내부 테이블이 액세스되는 가장 적은 수의 중첩 루프 작업을 가진 계획을 선택합니다.

b. 동일한 사항이 있다면 최적기는 가장 적은 수의 정렬 병합 작업을 가진 실행계획을 선택합니다.

c. 여전히 동일한 사항이 있다면 최적기는 조인 순서에서 첫 번째 테이블이 가장높은 등급의 액세스 경로를 가지는 실행 계획을 선택합니다.

- 계획의 첫 번째 테이블이 단일 열 인덱스 액세스 경로로 액세스되는 여러 계획 중 동일한 사항이 있는 경우 최적기는 가장 많이 병합된 인덱스로 액세스되는 첫 번째 테이블을 가진 계획을 선택합니다.

- 계획의 첫 번째 테이블이 제한된 범위 스캔에 의해 액세스되는 여러 계획 중동일한 사항이 있는 경우 최적기는 복합 인덱스의 앞 열의 가장 큰 번호로 액세스되는 첫 번째 테이블을 가진 계획을 선택합니다.

d. 여전히 동일한 사항이 있다면 최적기는 첫 번째 테이블이 질의의 F ROM 절에서 나중에 나타나는 실행 계획을 선택합니다.

2 4 - 1 0 Oracle8i 개념 설명서, 볼륨 2

조인문 최적화

Page 230: Oracle8 - Tistory

외부 조인의 뷰

외부 조인 오른쪽에 있는 뷰의 경우 최적기는 뷰가 액세스하는 기본 테이블의 수에따라 다음 두 방법 중 하나를 사용할 수 있습니다.

■ 뷰에 하나의 기본 테이블만 있는 경우 최적기는 뷰 병합을 사용할 수 있습니다.

■ 뷰에 여러 기본 테이블이 있는 경우 최적기는 뷰에 조인 술어를 넣을 수 있습니다.

단일 기본 테이블을 가지는 뷰 병합

하나의 기본 테이블을 가지며 외부 조인 오른쪽에 있는 뷰는 액세스하는 명령문의 질의 블록으로 병합될 수 있습니다. (23-15 페이지“명령문에 뷰의 질의 병합”을 참조하십시오.) 뷰에 있는 표현식이 N U L L에 대해 널이 아닌 값을 반환할 수 있는 경우에도 뷰 병합이 가능합니다.

예: EMP 테이블의 첫 번째 이름과 마지막 이름을 연결하는 NAME_VIEW 뷰를 생각해 봅시다.

CREATE VIEW name_viewAS SELECT emp.firstname || emp.lastname AS emp_fullname, emp.deptno

FROM emp;

런던에 있는 모든 사원 이름 및 해당 부서와 사원이 없는 부서까지도 포함하는 외부조인문을 생각해 봅시다.

SELECT dept.deptno, name_view.emp_fullnameFROM emp_fullname, deptWHERE dept.deptno = name_view.deptno(+)

AND dept.deptloc = ’London’;

최적기는 뷰 질의를 외부 조인문으로 병합합니다. 결과적으로 명령문은 다음과 같습니다.

SELECT dept.deptno, DECODE(emp.rowid, NULL, NULL, emp.firstname || emp.lastname)FROM emp, deptWHERE dept.deptno = emp.deptno(+)

AND dept.deptloc = ’London’;

변환된 명령문은 런던에서 일하는 사원만을 선택합니다.

여러 기본 테이블을 가진 뷰에 조인 술어 넣기

외부 조인 오른쪽에 있는 여러 기본 테이블을 가진 뷰의 경우 초기화 매개변수 O P T -I M I Z E R _ F E AT U R E S _ E NA B L E이 T RU E로 설정되어 있거나 액세스하는 질의 제

조인의 최적화 2 4 - 1 1

조인문 최적화

Page 231: Oracle8 - Tistory

약 조건이 PUSH_JOIN_PRED 힌트를 포함하면 최적기는 조인 술어를 뷰에 넣을수 있습니다. (23-18 페이지“뷰에술어 넣기”참조)

조인 술어 넣기 작업은 보다 효율적인 액세스 경로와 해시 조인을 중첩 루프 조인으로 변환하는 것과 같은 조인 방법 및 인덱스 스캔에 대한 전체 테이블 스캔을 사용 가능하게 하는 비용 기준 변환입니다.

추가 정보: 최적기 힌트에 대한 내용은 O racle8i Tuning을 참조하십시오.

예: 런던에서 근무하는 사원을 선택하는 LONDON_EMP 뷰를 생각해 봅시다.

CREATE VIEW london_empAS SELECT emp.ename

FROM emp, deptWHERE emp.deptno = dept.deptno

AND dept.deptloc = ’London’;

런던에서 근무하는 사원 중 보너스를 받는 엔지니어와 회계사를 찾는 외부 조인문을생각해 봅시다.

SELECT bonus.job, london_emp.enameFROM bonus, london_empWHERE bonus.job IN (’engineer’, ’accountant’)

AND bonus.ename = london_emp.ename(+);

최적기는 외부 조인 술어를 뷰에 넣습니다. 결과적으로 명령문(표준 SQL 구문에 따르지 않는)은 다음과 같습니다.

SELECT bonus.job, london_emp.enameFROM bonus, (SELECT emp.ename FROM emp, dept

WHERE bonus.ename = london_emp.ename(+)AND emp.deptno = dept.deptnoAND dept.deptloc = ’London’)

WHERE bonus.job IN (’engineer’, ’accountant’);

2 4 - 1 2 Oracle8i 개념 설명서, 볼륨 2

조인문 최적화

Page 232: Oracle8 - Tistory

반대 조인과 세미 조인 최적화

반대 조인은 술어 오른쪽에 해당하는 행이 없는 행에 대해 술어 왼쪽에서 행을 돌려줍니다. 즉, 반대 조인은 오른쪽에 있는 하위 질의와 일치하지 않는(NOT IN) 행을돌려줍니다. 예를 들어, 반대 조인은 특정 부서 집합에 속하지 않는 사원 목록을 선택할 수 있습니다.

SELECT * FROM empWHERE deptno NOT IN

(SELECT deptno FROM deptWHERE loc = ’HEADQUARTERS’);

초기화 매개변수 A LWAY S _ A N T I _ J O I N이 M E RGE 또는 H A S H로 설정되어 있지않으며 NOT IN 하위 질의를 정렬 병합 또는 해시 반대 조인으로 변환하는 필요한여러 조건이 만족되지 않으면 최적기는 기본적으로 NOT IN 하위 질의에 대한 중첩루프 알고리즘을 사용합니다. MERG E _ AJ 또는 H A S H _ AJ 힌트를 NOT IN 하위질의에 넣어 최적기가 사용할 알고리즘을 지정할 수 있습니다.

세미 조인은 오른쪽에 있는 여러 행이 하위 질의 기준을 만족할 때 술어의 왼쪽에서행을 복제하지 않고도 EXISTS 하위 질의와 일치하는 행을 돌려줍니다. 예를 들어:

SELECT * FROM deptWHERE EXISTS(SELECT * FROM empWHERE dept.ename = emp.enameAND emp.bonus > 5000);

위의 질의에서 E M P에 있는 많은 행이 하위 질의에 일치하는 경우에도 D E P T에서는하나의 행만 반환되어야 합니다. EMP의 BONUS 열에 인덱스가 없으면 세미 조인을 사용하여 질의 성능을 향상시킬 수 있습니다.

초기화 매개변수 A LWAY S _ S E M I _ J O I N이 M E RGE 또는 H A S H로 설정되어 있지않고 필요한 여러 조건이 만족되지 않으면 최적기는 기본적으로 EXISTS 하위 질의에 대한 중첩 루프 알고리즘을 사용합니다. MERGE_SJ 또는 HASH_SJ 힌트를EXISTS 하위 질의에 넣어 최적기가 사용할 알고리즘을 지정할 수 있습니다.

추가 정보: 최적기 힌트에 대한 내용은 O racle8i Tuning을 참조하십시오.

조인의 최적화 2 4 - 1 3

반대 조인과 세미 조인 최적화

Page 233: Oracle8 - Tistory

“스타”질의 최적화

데이터 웨어하우스 설계 유형 중 하나는“스타”스키마를 중심으로 하며, 이는 데이터웨어하우스의 기본 정보를 포함하는 하나 이상의 큰 사실 테이블과 많은 수의 작은차원 테이블(또는“조회”테이블)로 특성화됩니다. 각 차원 테이블은 사실 테이블에있는 특정 속성 항목에 대한 정보를 포함하고 있습니다.

스타 질의는 사실 테이블과 여러 조회 테이블 간의 조인입니다. 각 조회 테이블은 기본 키 대 외래 키 조인을 사용하여 사실 테이블에 조인되지만 조회 테이블은 서로 조인되지 않습니다.

비용 기준 최적화는 스타 질의를 인식하고 이를 위해 효율적인 실행 계획을 생성합니다. (스타 질의는 규칙 기준 최적화로는 인식되지 않습니다. )

일반적인 사실 테이블은 키와 측정 단위를 가지고 있습니다. 예를 들어, 단순한 사실테이블은 판매라는 측정 단위와 시간, 제품, 시장이라는 키를 가집니다. 이러한 경우시간, 제품, 시장에 해당하는 차원 테이블이 있습니다. 예를 들어, 제품 차원 테이블에는 사실 테이블에 나타나는 각 제품 번호에 대한 정보가 있습니다.

스타 조인은 사실 테이블에 차원 테이블의 외래 키 조인을 수행하는 기본 키입니다.사실 테이블은 대개 이러한 유형의 조인을 쉽게 하도록 키 열에 연결된 인덱스를 가집니다.

추가 정보: 차원과 데이터 웨어하우스에 대한 자세한 내용은 O ra c l e 8 iT u n i n g을 참조하십시오.

스타 질의 예

이 단원에서는 다음과 같은 예를 참조로 스타 질의를 설명합니다.

SELECT SUM(dollars)FROM facts, time, product, marketWHERE market.stat = ’New York’

AND product.brand = ’MyBrand’AND time.year = 1995AND time.month = ’March’/* Joins*/AND time.key = facts.tkeyAND product.pkey = facts.pkeyAND market.mkey = facts.mkey;

2 4 - 1 4 Oracle8i 개념 설명서, 볼륨 2

“스타”질의 최적화

Page 234: Oracle8 - Tistory

스타 질의 조정

스타 질의를 효율적으로 실행하려면 비용 기준 최적화를 사용해야 합니다. 질의가 액세스하는 각 테이블에 대해 ( D B M S _ S TATS 패키지 또는 A NA LYZE 명령어를 사용하여) 통계를 수집합니다.

인덱싱

위의 예에서 열 t key, pkey 및 m key에 대해 연결된 인덱스를 구성합니다. 인덱스에서 열 순서는 성능에 매우 중요한 요소입니다. 인덱스에 있는 열은 데이터의 순서화를 이용할 수 있습니다. 행이 시간 순서로 큰 테이블에 추가되면 t key가 인덱스의 첫번째 키가 됩니다. 데이터가 다른 데이터베이스에서 정적으로 추출되는 경우 이를 로드하기 전에 키 열에 대해 데이터를 정렬해야 합니다.

모든 질의가 각 소규모 테이블에 대한 술어를 지정하는 경우 하나의 연결된 인덱스로충분합니다. 연결된 인덱스의 앞 열을 생략하는 질의가 자주 사용되는 경우에는 추가인덱스가 유용합니다. 이 예에서 시간 테이블을 생략하는 질의가 자주 사용되는 경우p key와 m key에 대한 인덱스가 추가될 수 있습니다.

힌트

일반적으로 테이블을 분석하는 경우 최적기는 효율적인 스타 질의를 선택할 것입니다. 계획을 개선하기 위해 힌트를 사용할 수 있습니다. 가장 정교한 방법은 큰 테이블을 가장 나중에 두고 인덱스 키의 순서로 F ROM 절에 있는 테이블 순서를 정하는 것입니다. 그런 다음 힌트를 사용합니다.

/*+ ORDERED USE_NL(facts) INDEX(facts fact_concat) */

보다 일반적인 방법은 S TAR 힌트 /*+ STAR */를사용하는 것입니다.

확장된 스타 스키마

각각의 작은 테이블은 여러 개의 더 작은 테이블의 조인으로 바뀔 수 있습니다. 예를들어, 제품 테이블은 상표와 제조업자 테이블로 정규화될 수 있습니다. 모든 작은 테이블에 대한 정규화는 성능 문제를 발생시킬 수도 있습니다. 최적기가 고려해야 할한 가지 문제는 순열의 수 증가에 의해 발생하는 문제입니다. 다른 문제는 작은 테이블 조인에 대한 다중 실행의 결과입니다.

두 문제 모두 비정규화된 뷰를 사용하여 해결할 수 있습니다. 예를 들어:

CREATE VIEW prodview AS SELECT /*+ NO_MERGE */ *FROM brands, mfgrs WHERE brands.mfkey = mfgrs.mfkey;

조인의 최적화 2 4 - 1 5

“스타”질의 최적화

Page 235: Oracle8 - Tistory

이러한 힌트는 최적기의 검색 공간을 줄여 주고 뷰의 결과를 캐시에 저장해 줍니다.

스타 변환

스타 변환은 스타 질의의 효율적 실행을 목표로 하는 비용 기준 질의 변환입니다. 스타 최적화는 적은 수의 차원과 조밀한 사실 테이블을 가진 스키마에 대해서는 제대로작동하지만 스타 변환은 다음 내용이 참인 경우 대안으로 고려할 수 있습니다.

■ 차원 수가 많은 경우

■ 사실 테이블이 조밀하지 않은 경우

■ 모든 차원 테이블에 제한된 술어가 없는 질의가 있는 경우

스타 변환은 차원 테이블의 카티시안 곱을 계산하는데 의존하지 않으며 따라서 사실테이블이 조밀하지 않거나 차원 수가 많아 큰 카티시안 곱이 사실 테이블에서 실제로일치하는 행이 별로 없는 경우에 적합합니다. 또한 연결된 인덱스에 의존하지 않으며스타 변환은 개별 사실 테이블 열에 대한 비트맵 인덱스를 조합하는데 준합니다.

따라서 변환은 제한된 차원에 정확하게 대응하는 인덱스를 조합하기 위해 선택할 수있습니다. 다른 열 순서가 다른 질의에서 제한된 차원에 대한 다른 패턴을 일치시키는 여러 개의 연결된 인덱스를 생성하지 않아도 됩니다.

주의 사항: 비트맵 인덱스는 O racle8i Enterprise Edition을 구입한경우에만 사용할 수 있습니다. Ora c l e 8 i에서는 비트맵 인덱스를 사용할 수 없으며 스타 질의 프로세싱은 B* 트리 인덱스를 사용합니다.O racle8i Enterprise Edition에서는스타 질의 프로세싱에 병렬 비트맵 인덱스 조인 알고리즘을 사용할 수도 있습니다.

O ra c l e 8 i와 O racle8i Enterprise Edition에서사용 가능한 기능에 대한 자세한 내용은 O racle8i 입문서를 참조하십시오.

스타 변환은 사실 테이블에 대한 비트맵 인덱스 액세스 경로를 유도하기 위해 사용될수 있는 새로운 하위 질의를 생성하여 작동합니다.

세 개의 차원 테이블“d 1”, “d 2”, “d 3”과 사실 테이블“fa c t”를 가진 간단한 경우를생각해 봅시다.

2 4 - 1 6 Oracle8i 개념 설명서, 볼륨 2

“스타”질의 최적화

Page 236: Oracle8 - Tistory

EXPLAIN PLAN FORSELECT * FROM fact, d1, d2, d3

WHERE fact.c1 = d1.c1 AND fact.c2 = d2.c1 AND fact.c3 = d3.c1AND d1.c2 IN (1, 2, 3, 4)AND d2.c2 < 100AND d3.c2 = 35

이 질의는 세 개의 하위 질의를 추가하여 다음과 같이 변환됩니다.

SELECT * FROM fact, d1, d2, d3WHERE fact.c1 = d1.c1 AND fact.c2 = d2.c1 AND fact.c3 = d3.c3

AND d1.c2 IN (1, 2, 3, 4)AND d2.c2 < 100AND d3.c2 = 35AND fact.c1 IN (SELECT d1.c1 FROM d1 WHERE d1.c2 IN (1, 2, 3, 4))AND fact.c2 IN (SELECT d2.c1 FROM d2 WHERE d2.c2 < 100)AND fact.c3 IN (SELECT d3.c1 FROM d3 WHERE d3.c2 = 35)

또한 비용을 효율적으로 사용할 경우 하나 이상의 하위 질의를 임시 테이블의 결과를저장하여 상세히 최적화할 수 있습니다. 그러면 하위 질의는 임시 테이블의 하위 질의로 바뀝니다. 예를 들어, 위의 첫 번째 하위 질의가 임시 테이블 변환에 대해 선택되었으면 O R A _ T E M P _ 1 _ 1 2 3이라는 임시 테이블이 생성되어 하위 질의의 결과로 채워집니다.

SELECT d1.c1 from d1 where d1.c2 in (1, 2, 3, 4)

완전히 변환된 질의는 다음과 같습니다.

SELECT * FROM fact, ORA_TEMP_1_123, d2, d3WHERE fact.c1 = ORA_TEMP_1_123.c1 AND fact.c2 = d2.c1 and fact.c3 =d3.c1

AND ORA_TEMP_1_123.c1 IN (1, 2, 3, 4)AND d2.c2 < 100AND d3.c2 = 35AND fact.c1 IN (SELECT ORA_TEMP_1_123.c1 FROM ORA_TEMP_1_123)AND fact.c2 IN (SELECT d2.c1 FROM d2 WHERE d2.c2 < 100)AND fact.c3 IN (SELECT d3.c1 FROM d3 WHERE d3.c2 = 35)

fact.c1, fact.c2, fa c t . c 3에 대해 비트맵 인덱스가 있는 경우 새로 생성된 하위 질의는 다음과 같은 방법으로 비트맵 인덱스 액세스 경로를 유도하기 위해 사용될 수 있습니다.

첫 번째 하위 질의에서 읽어 들인 c 1의 각 값에 대해 해당 값에 대한 비트맵은fa c t . c 1의 인덱스에서 읽혀지며 이러한 비트맵은 병합됩니다. 결과는 하위 질의WHERE 절에 있는 d 1에 대한 조건과 실제로 일치하는 행에 대한 비트맵입니다.

조인의 최적화 2 4 - 1 7

“스타”질의 최적화

Page 237: Oracle8 - Tistory

마찬가지로 두 번째 하위 질의의 값은 fa c t . c 2에 대한 비트맵 인덱스와 함께 사용되어 두 번째 하위 질의에서 d 2에 대한 조건과 실제로 일치하는 행에 해당하는 병합된비트맵을 생성합니다. 동일한 작업이 세 번째 하위 질의에도 적용됩니다. 세 개의 병합된 비트맵은 A N D로 연결되어 세 개의 모든 하위 질의에 있는 조건을 동시에 만족하는 행에 해당하는 비트맵을 생성합니다.

이러한 비트맵은 사실에 액세스하여 관련된 열을 읽어 들이는데 사용될 수 있습니다.그런 다음 이러한 열은 d1, d2, d3에 조인되어 질의에 대한 답을 생성합니다. 이때카티시안 곱은 필요하지 않습니다.

실행 계획

다음 실행 계획은 위의 질의 결과입니다.

SELECT STATEMENTTEMP TABLE GENERATIONTEMP TABLE GENERATIONHASH JOINHASH JOINHASH JOINTABLE ACCESS FACT BY INDEX ROWIDBITMAP CONVERSION TO ROWIDSBITMAP ANDBITMAP MERGEBITMAP KEY ITERATIONTABLE ACCESS D3 FULLBITMAP INDEX FACT_C3 RANGE SCAN

BITMAP MERGEBITMAP KEY ITERATIONTABLE ACCESS ORA_TEMP_1_123 FULLBITMAP INDEX FACT_C1 RANGE SCAN

BITMAP MERGEBITMAP KEY ITERATIONTABLE ACCESS D2 FULLBITMAP INDEX FACT_C2 RANGE SCAN

TABLE ACCESS ORA_TEMP_1_123 FULLTABLE ACCESS D2 FULLTABLE ACCESS D3 FULL

이 계획에서 사실 테이블은 세 개의 병합된 비트맵의 비트맵 A N D에 준한 비트맵 액세스 경로를 통해 액세스됩니다. 세 개의 비트맵은 행 소스 트리에서 얻은 비트맵으로 이루어진 BITMAP MERGE 행 소스에 의해 생성됩니다. 이러한 각 행 소스 트리는 BITMAP KEY ITERATION 행 소스로 구성되고 이것은 하위 질의 행 소스에서 값을 가져옵니다. 이 예에서 행 소스 트리는 전체 테이블 액세스이며 이러한 값

2 4 - 1 8 Oracle8i 개념 설명서, 볼륨 2

“스타”질의 최적화

Page 238: Oracle8 - Tistory

은 비트맵 인덱스에서 비트맵을 읽어 들입니다. 관련된 사실 테이블 행이 이 액세스경로를 사용하여 읽혀지면 이들은 질의에 대한 답을 생성하기 위해 차원 테이블 및임시 테이블과 조인됩니다. “TEMP TABLE GENERAT I O N”이라는 실행 계획에있는 두 행은 임시 테이블을 생성하여 채우는데 사용되는 SQL 명령어를 포함하고 있습니다. 이러한 명령어는 실행 계획의 OTHER 열에 있으며 위의 예에서는 표시되지않았습니다.

스타 변환은 다음과 같은 의미에서 비용 기준 변환입니다. 최적기는 변환하지 않고생성할 수 있는 최적의 계획을 생성하고 저장합니다. 변환이 활성화되면 최적기는 적용 가능한 경우 이를 질의에 적용하고 변환된 질의를 사용하여 최적의 계획을 생성합니다. 질의 중 두 버전의 최적 계획 간 비용 예측을 비교하여 최적기는 변환된 버전또는 변환되지 않은 버전의 최적 계획 중 어떤 것을 사용할지를 결정합니다.

질의가 사실 테이블에 있는 대부분의 행에 액세스해야 하는 경우 변환을 사용하지 않고 전체 테이블 스캔을 사용하는 것이 더 좋습니다. 하지만 차원 테이블에 대한 제한술어가 사실 테이블의 일부분만 읽어 들여야 할 정도로 충분한 선택도가 있다면 변환에 준한 계획이 더 좋습니다.

최적기가 여러 조건에 준하여 하위 질의를 생성하는 것이 타당하다고 결정하는 경우에만 최적기는 차원 테이블에 대한 하위 질의를 생성합니다. 모든 차원 테이블에 대해 하위 질의가 생성된다는 것을 보장할 수는 없습니다. 최적기는 또한 테이블과 질의의 특성에 준하여 변환이 특정 질의에 적용되는 것이 이득이 되지 않는다고 결정합니다. 이러한 경우 최적의 정규 계획이 사용됩니다.

스타 변환 사용

초기화 매개변수 S TA R _ T R A N S F O R M AT I O N _ E NA B L E D의 값을 T RU E로 설정하여 스타 변환을 활성화할 수 있습니다. 임시 테이블이 없는 스타 변환을 사용하려면 매개변수 값을 T E M P _ D I SA B L E로 설정합니다. 최적기가 변환이 사용된 최적의계획을 사용하도록 하려면 S TA R _ T R A N S F O R M ATION 힌트를 사용합니다.

조인의 최적화 2 4 - 1 9

“스타”질의 최적화

Page 239: Oracle8 - Tistory

스타 변환에 대한 제한 사항

스타 변환은 다음 특성을 가진 테이블에 대해서는 지원하지 않습니다.

■ 비트맵 액세스 경로와 호환되지 않는 테이블 힌트를 가진 테이블

■ 너무 적은 수의 비트맵 인덱스를 가진 테이블 (최적기가 하위 질의를 생성하도록하는 사실 테이블 열에 대한 비트맵 인덱스가 있어야 합니다. )

■ 원격 테이블 (그러나 원격 차원 테이블은 생성되는 하위 질의에서 허용됩니다. )

■ 반대 조인된 테이블

■ 하위 질의에서 차원 테이블로 이미 사용된 테이블

■ 실제로 병합되지 않은 뷰인 테이블 (뷰 분할 영역이 아님)

■ 단일 테이블 액세스 경로를 가진 테이블

■ 변환하기엔 너무 작은 테이블

또한 다음과 같은 조건에서는 스타 변환이 임시 테이블을 사용하지 않습니다.

■ 데이터베이스가 읽기 전용 모드인 경우

■ 스타 질의가 연속 모드인 트랜잭션의 일부인 경우

2 4 - 2 0 Oracle8i 개념 설명서, 볼륨 2

“스타”질의 최적화

Page 240: Oracle8 - Tistory

VII병렬 SQL 및 직접 로드 I NS E RT

V I I부에서는 SQL 문의 병렬 실행과 직접 로드 I N S E RT 기능에 대해 설명하며 다음 장을 포함하고 있습니다.

■ 2 5장“직접 로드 I N S E RT”

■ 2 6장“병렬 실행”

Page 241: Oracle8 - Tistory

25직접 로드 I NS E RT

이 장에서는 직렬 또는 병렬 삽입이 가능한 O ra c l e의 직접 로드 I N S E RT 기능에 대해 설명합니다. 또한 직접 로드 I N S E RT 및 일부 DDL 문에 사용 가능한 NOLOGGING 기능에 대해서도 설명하며 다음 내용을 다룹니다.

■ 직접 로드 I N S E RT 소개

■ 직접 로드 I N S E RT 문의 다양한 형태

- 직렬 및 병렬 I N S E RT

- 로깅 모드

■ 직접 로드 I N S E RT에 대한 추가 고려 사항

■ 직접 로드 I N S E RT에 대한 제한 사항

병렬 관련 내용은 2 6장“병렬 실행”을 참조하십시오.

주의 사항: 이 장에서 설명하는 병렬 직접 로드 I N S E RT 기능은 O ra c l e 8 iEnterprise Edition을 구입한 경우에만 사용할 수 있습니다. 자세한 내용은 O racle8i 입문서를 참조하십시오.

추가 정보: 병렬 직접 로드 I N S E RT를 조정하는 방법은 O racle8i Tuning을 참조하십시오.

직접 로드 INSERT 2 5 - 1

Page 242: Oracle8 - Tistory

직접 로드 INSERT 소개

직접 로드 I N S E RT는 버퍼 캐시를 사용하지 않고 O racle 데이터 파일에 직접 데이터를 포맷하고 작성하여 삽입 작업 중에 성능을 향상시킵니다. 이 기능은 D i re c tLoader 유틸리티( S Q L * L o a d e r )의 기능과 유사합니다.

직접 로드 I N S E RT는 테이블에 있는 기존 데이터 다음에 삽입된 데이터를 추가합니다. 기존 데이터 내의 사용 가능한 영역은 다시 사용되지 않습니다. 데이터는 분할된테이블이나 분할되지 않은 테이블 모두에 병렬 또는 직렬로 삽입될 수 있습니다.

병렬화, 테이블 분할 및 로깅과 관련된 직접 로드 I N S E RT에는 여러 가지 옵션이 있습니다. 이러한 기능에 대한 내용은 25-3 페이지“직접 로드 I N S E RT 문의 다양한형태”를 참조하십시오. 직접 로드 I N S E RT의 옵션 병렬화 및 분할에 대한 자세한 내용은 2 6장“병렬 실행”을 참조하십시오.

직접 로드 I N S E R T의 장점

직접 로드 I N S E RT의 주요 장점은 리두 또는 언두 입력 항목을 기록하지 않고 데이터를 로드할 수 있는 것으로 이렇게 하면 삽입 성능이 현저하게 향상됩니다. 직렬 및병렬 직접 로드 I N S E RT는 모두 기본 경로 I N S E RT보다 성능 면에서 우수합니다.

반대로 기본 경로 I N S E RT는 객체의 사용 가능 영역을 다시 사용하고 참조 무결성을유지 관리할 수 있습니다. 삽입의 기본 경로는 병렬화할 수 없습니다.

C R E ATE TABLE...AS SELECT와의비교

직접 로드 I N S E RT를 사용하여 새 테이블을 생성할 필요 없이 기존 테이블에 데이터를 삽입할 수 있습니다. 직접 로드 I N S E RT는 테이블의 인덱스를 갱신하지만C R E ATE TA B L E...AS SELECT는 인덱스를 가지지 않은 새 테이블을 생성할 뿐입니다. 26-31 페이지“병렬C R E ATE TA B L E...AS SELECT”를 참조하십시오.

병렬 직접 로드( S Q L * Lo a d e r )보다 나은 점

병렬 I N S E RT를 사용할 경우 트랜잭션의 단일성이 보장됩니다. 반면 여러 개의 병렬로드가 사용된 경우에는 단일성을 보장할 수 없습니다. 또한 병렬 로드를 사용하면인덱스 갱신 중에 오류가 발생할 경우 특정 테이블 인덱스가 로드된 후“사용 불가”상태로 남아 있게 됩니다. 병렬 I N S E RT는 테이블과 인덱스를 자동으로 갱신합니다.(즉, 인덱스 갱신 중에 오류가 발생하면 명령문을 롤백합니다. )

추가정보: 병렬로드에 대한내용은 O racle8i Utilities를참조하십시오.

2 5 - 2 Oracle8i 개념 설명서, 볼륨 2

직접 로드 I N SERT 소개

Page 243: Oracle8 - Tistory

INSERT...SELECT 문

직접 로드 I N S E RT (직렬 또는 병렬)는 I N S E RT 문에서 I N S E RT...values 구문은지원할 수 없고 I N S E RT...SELECT 구문만 지원할 수 있습니다. INSERT. . . S E L -E C T에 대한 병렬화는 병렬 힌트 또는 병렬 테이블 정의 절에 의해 결정됩니다.

추가 정보: I N S E RT...SELECT 문의 구문에 대한 내용은 O ra c l e 8 iSQL 참조서를 참조하십시오.

직접 로드 I N SERT 문의 다양한 형태

직접 로드 I N S E RT는 다음과 같은 형태로 수행될 수 있습니다.

■ 직렬 또는 병렬로

■ 분할되지 않은 테이블이나 분할된 테이블로

■ 리두 데이터의 로깅 여부에 따라

직렬 및 병렬 I N S E R T

직접 로드 I N S E RT는 분할된 테이블이나 분할되지 않은 테이블을 대상으로 직렬 또는 병렬로 수행될 수 있습니다.

■ 분할된 테이블 또는 분할되지 않은 테이블을 대상으로 한 직렬 직접 로드I NS E RT . 데이터는 테이블 세그먼트 또는 각 분할 영역 세그먼트의 현재 고수위(블록이 데이터를 받도록 한 번도 포맷되지 않은 레벨) 위로 삽입됩니다. 커밋이실행되면 고수위는 새로운 값으로 갱신되어 데이터가 보이도록 합니다.

■ 분할되지 않은 테이블을 대상으로 한 병렬 직접 로드 I NS E RT . 각 병렬 실행 서버는 새로운 임시 세그먼트를 할당하고 데이터를 임시 세그먼트에 삽입합니다. 커밋이 실행되면 병렬 실행 조정자 프로세스는 새로운 임시 세그먼트를 기본 테이블세그먼트에 병합합니다. (병렬 실행 조정자 및 서버에 대한 내용은 26-5 페이지

“병렬 실행을 위한 프로세스 구조”참조)

■ 분할된 테이블을 대상으로 한 병렬 직접 로드 I NS E RT . 각 병렬 실행 서버는 하나 이상의 분할 영역을 할당합니다. 주어진 분할 영역에 대해서는 하나의 프로세스만 작동합니다. 병렬 실행 서버는 할당된 분할 영역 세그먼트의 현재 고수위 위에 데이터를 삽입합니다. 커밋이 실행되면 각 분할 영역 세그먼트의 고수위는 병렬 실행 조정자에 의해 데이터를 다른 프로세스가 볼 수 있도록 새로운 값으로 갱신합니다.

직접 로드 INSERT 2 5 - 3

직접 로드 I N SERT 문의 다양한 형태

Page 244: Oracle8 - Tistory

모든 경우 고수위를 올리거나 임시 세그먼트를 병합하면 데이터가 다른 프로세스에 즉시 보이게 되므로 커밋이 실행될 때까지 지연됩니다. (즉, 삽입작업을 커밋합니다. )

직렬 또는 병렬 직접 로드 INSERT 지정

직렬 직접 로드 I N S E RT를 사용하는데 APPEND 힌트가 필요합니다. 병렬 직접 로드 I N S E RT는 명령문에 있는 PARALLEL 힌트나 테이블 정의에 있는 PA R A L L E L절을 필요로 합니다. APPEND 힌트는선택 사항입니다. 병렬 직접 로드 I N S E RT도A LTER SESSION ENA B L E / F O RCE PARALLEL DML 문으로 사용 가능하게되는 병렬 D M L을 필요로 합니다.

표 2 5 - 1은 이러한 요구 사항을 요약하고 직접 로드 I N S E RT와 기본 I N S E RT를 비교한 것입니다.

표 25-1 직렬 및 병렬 INSERT...SELECT 문요약

삽입 유형 직렬 병렬

직접 로드 I N S E R T 가능 가능

■ SQL 문에 APPEND ■ ALTER SESSION

힌트 필요 E N A B L E / F O R C E

PARALLEL DML 문 필요

■ 테이블 PARALLEL 속성이나 명령문 P A -

RALLEL 힌트 필요( APPEND 힌트는 선

택 사항임)

기본 I N S E R T 가능(기본) 불가능

직렬 및 병렬 직접 로드 I N S E R T의 예

예를 들어, 다음과 같이 APPEND 힌트로 직렬 직접 로드 I N S E RT를 지정할 수 있습니다.

INSERT /*+ APPEND */ INTO empSELECT * FROM t_emp;

COMMIT;

예를 들어, 다음과 같이 행이 삽입될 테이블에 PARALLEL 속성을 설정하여 병렬직접 로드 I N S E RT를 지정할 수 있습니다.

ALTER TABLE emp PARALLEL (10);ALTER SESSION ENABLE PARALLEL DML;INSERT INTO emp

SELECT * FROM t_emp;COMMIT;

2 5 - 4 Oracle8i 개념 설명서, 볼륨 2

직접 로드 INSERT 문의 다양한 형태

Page 245: Oracle8 - Tistory

행이 선택된 테이블에 PARALLEL 속성을 설정하여 SELECT 작업에 대한 병렬화를 지정할 수도 있습니다.

ALTER TABLE emp PARALLEL (10);ALTER TABLE t_emp PARALLEL (10);ALTER SESSION ENABLE PARALLEL DML;INSERT INTO emp

SELECT * FROM t_emp;COMMIT;

I N S E RT 또는 SELECT 작업에 대한 PARALLEL 힌트는 테이블의 PA R A L L E L속성보다 우선합니다. 예를 들어, 다음 I N S E RT...SELECT 문에서 병렬도는 E M P와 T_EMP 테이블에 설정된 PARALLEL 속성에 관계없이 1 2가 됩니다.

ALTER SESSION ENABLE PARALLEL DML;INSERT /*+ PARALLEL(emp,12) */ INTO emp

SELECT /*+ PARALLEL(t_emp,12) */ * FROM t_emp;COMMIT;

병렬 I N S E RT 문에 대한 자세한 내용은 26-23 페이지“I N S E RT...SELECT 병렬화 규칙”을 참조하십시오.

로깅 모드

직접 로드 I N S E RT 작업은 리두 정보의 로깅 여부에 관계없이 수행됩니다. ALT E RTA B L E, ALTER INDEX 또는 A LTER TA B L E S PACE 명령어를 사용하여 데이터가 삽입될 테이블, 분할 영역 또는 인덱스에 대한 로깅이 없는 모드를 지정할 수 있습니다.

■ 로깅이 있는 직접 로드 I NS E RT . 이 모드에서는 인스턴스와 매체 복구를 위해 전체 리두 로깅을 수행합니다. 로깅을 수행하는 것이 기본 모드입니다.

■ 로깅이 없는 직접 로드 I NS E RT . 이 모드에서는 리두 또는 언두 로깅 없이 데이터가 삽입됩니다. (새 확장 영역을 무효로 표시하기 위한 최소한의 로깅은 계속되며 딕셔너리 변경 사항은 항상 완전히 로깅됩니다.) 매체 복구 중에 적용되면 리두 데이터가 로그되지 않으므로 확장 영역 무효 레코드는 블록 범위를 논리적으로손상된 것으로 표시합니다.

로깅이 없는 모드를 선택하면 생성되는 로그의 양이 현저하게 줄어들므로 성능이 향상됩니다. 매체 복구를 수행할 수 있도록 하려면 로깅이 없는 삽입 작업 후에 데이터를 백업해야 합니다.

로깅이 없는 모드와 리두 정보를 생성하는 이산 트랜잭션 사이에는 상호 작용이 없습니다. (17-8 페이지“이산 트랜잭션 관리”를 참조하십시오.) 이산 트랜잭션은 로깅이

직접 로드 INSERT 2 5 - 5

직접 로드 INSERT 문의 다양한 형태

Page 246: Oracle8 - Tistory

없는 속성을 사용하는 테이블에 대해 실행될 수 있습니다.

주: 로깅 모드와 로깅이 없는 모드는 테이블, 분할 영역 또는 인덱스의영구적인 속성이 아닙니다. 삽입된 데이터베이스 객체에 데이터를 채우고 백업한 다음 계속된 변경 사항이 로깅될 수 있도록 그 상태를 로깅모드로 설정할 수 있습니다.

표 2 5 - 2는 직접 로드 I N S E RT와 기본 I N S E RT에 대한 LOGGING 모드와 N O L -OGGING 모드를 비교한 것입니다.

표 25-2 LOGGING과NOLOGGING 옵션 요약

삽입 유형 L O G G I N G N O L O G G I N G

직접 로드 I N S E R T 가능: 복구하려면 가능

■ ARCHIVELOG 데이터베이스모드 필요 ■ 테이블스페이스, 테이블,

분할 영역 또는 인덱스에

NOLOGGING 속성 필요

기본 I N S E R T 가능(기본): 복구하려면 불가능

■ ARCHIVELOG 데이터베이스모드 필요

로깅이 없는 모드 예

다음과 같이 행이 삽입된 테이블에 NOLOGGING 속성을 설정하여 직접 로드 I N -S E RT에 대한 로깅이 없는 모드를 지정할 수 있습니다.

ALTER TABLE emp NOLOGGING;ALTER SESSION ENABLE PARALLEL DML;INSERT /*+ PARALLEL(emp,12) */ INTO emp

SELECT /*+ PARALLEL(t_emp,12) */ * FROM t_emp;COMMIT;

예를 들어, 다음과 같이 분할 영역, 테이블스페이스 또는 인덱스에 대해 N O L O G G -ING 속성을 설정할 수도 있습니다.

ALTER TABLE emp MODIFY PARTITION emp_lmnop NOLOGGING;

ALTER TABLESPACE personnel NOLOGGING;

ALTER INDEX emp_ix NOLOGGING;

ALTER INDEX emp_ix MODIFY PARTITION eix_lmnop NOLOGGING;

2 5 - 6 Oracle8i 개념 설명서, 볼륨 2

직접 로드 INSERT 문의 다양한 형태

Page 247: Oracle8 - Tistory

로깅이 없는 모드를 사용할 수 있는 SQL 문

테이블, 분할 영역, 인덱스 또는 테이블스페이스에 대해 NOLOGGING 속성을 설정할 수 있지만 로깅이 없는 모드가 NOLOGGING 속성을 설정한 스키마 객체에 수행되는 모든 작업에 적용되지는 않습니다. 다음 작업을 로깅이 없는 모드로 사용할 수있습니다.

■ 직접 로드( S Q L * L o a d e r )

■ 직접 로드 I N S E RT

■ C R E ATE TA B L E...AS SELECT

■ C R E ATE INDEX

■ A LTER TA B L E. . . M OVE PA RT I T I O N

■ A LTER TA B L E...SPLIT PA RT I T I O N

■ A LTER INDEX...SPLIT PA RT I T I O N

■ A LTER INDEX. . . R E B U I L D

■ A LTER INDEX...REBUILD PA RTITION

■ 라인 밖에 저장된 N O CACHE NOLOGGING 모드의 L O B에 대한 I N S E RT,U P DATE 및 D E L E T E

이러한 모든 SQL 문은 병렬화될 수 있습니다. (26장“병렬 실행”참조) 이것은 직렬및 병렬 실행 모두에 로깅 모드 또는 로깅이 없는 모드로 실행될 수 있습니다.

기타 SQL 문은 스키마 객체의 NOLOGGING 속성에 의해 영향을 받지 않습니다.예를 들어, UPDATE 및 D E L E T E (위에서 설명한 대로 일부 L O B에서는 제외), 기본 경로 I N S E RT 및 위에서 나열되지 않은 다양한 DDL 문과 같은 SQL 문은 N O -LOGGING 속성에 의해 영향을 받지 않습니다.

기본 로깅 모드

LOGGING 또는 NOLOGGING 절을 지정하지 않은 경우 테이블, 분할 영역 또는인덱스의 로깅 속성은 상주하는 테이블스페이스의 로깅 속성으로 기본적으로 지정됩니다.

L O B에서 LOGGING 또는 NOLOGGING 절이 생략된 경우 다음과 같습니다.

■ L O B는 CACHE NOLOGGING을 가질 수 없으므로 CAC H E를 지정하면L O G G I N G이 사용됩니다.

■ 그렇지 않으면 LOB 값이 있는 테이블스페이스에서 기본값을 얻습니다.

직접 로드 INSERT 2 5 - 7

직접 로드 INSERT 문의 다양한 형태

Page 248: Oracle8 - Tistory

직접 로드 I N S E R T에 대한 추가 고려 사항

이 단원에서는 직접 로드 I N S E RT를 위한 인덱스 유지 관리, 영역 할당, 데이터 잠금에 대해 설명합니다.

인덱스 유지 관리

로컬 또는 글로벌 인덱스를 가진 분할되지 않은 테이블 또는 분할된 테이블에서 직접로드 I N S E RT의 경우 I N S E RT 작업이 끝나면 인덱스 유지 관리가 완료됩니다. 인덱스 유지 관리는 병렬 직접 로드 I N S E RT를 위한 병렬 실행 서버 또는 분할된 테이블이나 분할되지 않은 테이블에서 직렬 직접 로드 I N S E RT를 위한 단일 프로세스에의해 수행됩니다.

직접 로드 I N S E RT가 테이블에서 대부분의 데이터를 수정하는 경우 I N S E RT 전에인덱스를 삭제한 다음 이를 재구축하여 인덱스 유지 관리 성능에 영향을 주지 않을수 있습니다.

영역 고려 사항

직접 로드 I N S E RT는 사용 가능한 세그먼트 목록에 있는 기존 영역을 무시하므로 직접 로드 I N S E RT는 기본 경로 I N S E RT보다 많은 영역을 필요로 합니다. 분할되지않은 테이블을 대상으로 하는 병렬 직접 로드 I N S E RT의 경우 테이블 세그먼트의 고수위 위로의 사용 가능한 블록도 무시됩니다. 직접 로드 I N S E RT를 사용하기 전에이러한 추가 영역 요구 사항을 고려해야 합니다.

분할되지 않은 테이블을 대상으로 하는 병렬 직접 로드 I N S E RT는 각 병렬도에 한 세그먼트씩 임시 세그먼트를 생성합니다. 예를 들어, 병렬도가 4로 설정된 분할되지 않은 테이블에 병렬 I N S E RT를 사용하면 4개의 임시 세그먼트가 생성됩니다.

각 병렬 실행 서버는 먼저 데이터를 임시 세그먼트에 삽입하며 결국 임시 세그먼트의모든 데이터는 테이블에 추가됩니다. (이것은 C R E ATE TA B L E...AS SELECT와동일한 기법입니다. )

분할된 테이블을 대상으로 하는 병렬 I N S E RT의 경우 임시 세그먼트를 작성하지 않습니다. 각 병렬 실행 서버는 데이터를 고수위 위의 분할 영역으로 간단히 삽입합니다.

지역적으로 관리되지 않고 자동 모드가 아닌 분할되지 않은 테이블에 대해 병렬 I N -S E RT를 실행하는 경우 다음 매개변수 값을 수정하면 사용자가 필요로 하는 양보다

2 5 - 8 Oracle8i 개념 설명서, 볼륨 2

직접 로드 I N S E R T에 대한 추가 고려 사항

Page 249: Oracle8 - Tistory

많은 영역을 세그먼트에 할당하여 영역을 낭비하지 않고 임시 세그먼트에 충분한 장영역을 제공할 수 있습니다.

■ NEXT (객체에 할당될 객체의 다음 확장 영역의 바이트 단위 크기)

■ PCTINCREASE (세 번째 이후의 확장 영역이 선행 확장 영역에 대해 증가되는백분율)

■ MINIMUM EXTENT (테이블스페이스에서 사용되거나 사용 가능한 모든 확장영역의 크기는 최소한 지정한 값만큼 크거나 배가 되도록 하여 테이블스페이스의사용 가능 영역 단편화 제어)

이러한 매개변수의 값을 다음과 같이 선택하십시오.

■ 각 확장 영역의 크기가 너무 작지 않도록 합니다.(1MB 정도) 이것은 객체에 있는확장 영역의 총 수에 영향을 줍니다.

■ 각 확장 영역의 크기는 병렬 I N S E RT가 필요한 것보다 큰 세그먼트에서 영역을낭비할 정도로 크지 않도록 합니다.

NEXT 및 PCTINCREASE 매개변수의 값을 A LTER TABLE 문의 S T O R AG E옵션을 사용하여 변경할 수 있습니다. ALTER TA B L E S PACE 문으로 M I N I M U MEXTENT 매개변수의 값을 변경할 수 있습니다. 병렬 DML 문을 수행한 후에N E X T, PCTINCREASE 및 MINIMUM EXTENT 매개변수를 병렬이 아닌 작업에 적합한 설정값으로 다시 변경할 수 있습니다.

저장 영역 계산

다음 설명에서 사용되는 약어입니다.

■ V는 객체에 대한 데이터의 총 볼륨입니다.

■ D O P는 병렬도입니다.

■ P는 사용되지 않은 영역의 백분율입니다.

NEXT 계산 병렬 실행 서버 당 데이터의 평균 볼륨은 V / D O P입니다. NEXT 저장영역 매개변수의 값이 다음 범위에 있는 것이 좋습니다.

1MB < NEXT 값 < V/DOP

NEXT 값을 서버 당 데이터의 평균 볼륨에 가깝게 설정한 경우 이것은 보다 적은 확장 영역이 생기지만 객체에 상당한 양의 사용되지 않은 영역이 생길 수 있습니다. 각병렬 실행 서버가 사용되지 않은 전체 확장 영역을 가질 때 대량의 사용되지 않은 영역이 발생하여 사용되지 않은 영역의 크기가 DOP * NEXT와 같아집니다. 이것은 사

직접 로드 INSERT 2 5 - 9

직접 로드 I N S E R T에 대한 추가 고려 사항

Page 250: Oracle8 - Tistory

용되지 않은 공간의 평균이 (DOP * NEXT)/2가됨을 의미합니다. 수식 (P * V)/100을 사용하여 사용되지 않은 영역의 허용 가능한 크기를 결정한 후 다음 수식을 사용하여 N E X T에 적합한 값을 결정합니다.

NEXT = (2 * P * V)/(100 * DOP)

P 값은 확장 영역이 최소 1 M B에서 객체가 충분히 큰 경우 20MB 이상이 될 수 있도록 커야 합니다. 또한 P 값은 확장 영역의 총 수가 1000 이하로 유지되고 특히 지역적으로 관리되지 않는 테이블스페이스를 가진 상당히 큰 확장 영역을 허용하도록충분히 커야 합니다.

PCTINCREASE 계산 PCTINCREASE 저장 영역 매개변수는 0으로 설정되지 않는한 매우 큰 임시 세그먼트를 만들 수 있습니다. 병렬 D M L을 실행하는 중에 영역이부족하지 않도록 하려면 P C T I N C R E A S E를 0으로 설정합니다.

MINIMUM EXTENT 계산 데이터베이스의 모든 객체가 비슷한 확장 영역 크기를 사용하면 테이블스페이스 옵션 MINIMUM EXTENT의 값을 NEXT 값에 가깝게 설정하는 것이 좋습니다. 작은 크기의 확장 영역을 사용할 수 있는 객체가 있으면 M I -NIMUM EXTENT에 대해 보다 작은 값을 선택하여 사용되지 않는 영역의 양을 줄입니다.

저장 영역 계산 예

예 2 5 - 1은 적합한 저장 영역 매개변수 값을 산출하는 계산을 보여주고 예 2 5 - 2는 적합하지 않은 저장 영역 매개변수 값을 산출하는 계산을 보여줍니다.

예 25-1 직접로드 I N S E R T에 적합한 저장 영역 매개변수 값

V = 500GB(5 * 101 1바이트)

DOP = 100

P = 5%

NEXT = (2 * 5 * 5 * 101 1 )/(100 * 100) = 5 * 107 = 500MB

■ 각 확장 영역의 크기는 5 0 0 M B입니다.

■ 확장 영역의 총 수는 1 , 0 0 0입니다.

■ 사용되지 않은 영역의 평균량은 할당된 영역의 총 양 중 5 %에 해당합니다.

2 5 - 1 0 Oracle8i 개념 설명서, 볼륨 2

직접 로드 I N S E R T에 대한 추가 고려 사항

Page 251: Oracle8 - Tistory

예 25-2 직접 로드 I N S E R T에 부적합한 저장 영역 매개변수 값

V = 50MB (5 * 107바이트)

DOP = 10

P = 5%

NEXT = (2 * 5 * 5 * 107 )/(100 * 10) = 5 * 105 = 0.5MB

이 경우

■ 각 확장 영역의 크기는 0 . 5 M B입니다.

■ 확장 영역의 총 수는 1 0 0입니다.

■ 사용하지 않은 영역의 평균량은 할당된 영역의 총 양 중 5 %에 해당합니다.

0.5MB 크기의 확장 영역은 너무 작으므로 P 값을 보다 크게 지정하는 것이 좋습니다.

추가 정보: 영역 관리에 대한 자세한 내용은 O racle8i Tuning의 병렬실행 장을 참조하십시오.

잠금 고려 사항

직접 로드 I N S E RT에서 배타 잠금은 테이블에서의 모든 동시 삽입, 갱신 또는 삭제작업을 배제하는 테이블(또는 분할된 테이블의 모든 분할 영역)에서 얻습니다. 그러나 동시 질의는 지원되며 I N S E RT가 시작되기 전의 테이블에 있는 데이터만 볼 수있습니다. 이러한 잠금 기능은 모든 동시 인덱스 생성 또는 재구축 작업을 방지하기도 합니다. 이것은 테이블 동시성에 영향을 주므로 직접 로드 I N S E RT를 실행하기전에 이를 고려해야 합니다. 자세한 내용은 26-42 페이지“병렬 D M L에 대한 자원잠금 및 대기열에 넣기”를 참조하십시오.

직접 로드 I N S E R T에 대한 제한 사항

직접 로드 I N S E RT와 S Q L * L o a d e r는 기본 기법이 동일하므로 직접 로드 I N S E RT의 제한 사항과 S Q L * L o a d e r의 직접 경로 병렬 로드의 제한 사항은 동일합니다. 또한 일반적인 병렬 DML 제한 사항은 직접 로드 I N S E RT에도 적용됩니다.

직접 로드 INSERT 2 5 - 1 1

직접 로드 I N S E R T에 대한 제한 사항

Page 252: Oracle8 - Tistory

직렬 및 병렬 직접 로드 I N S E RT는 다음과 같은 제한 사항을 가지고 있습니다.

■ 트랜잭션은 여러 개의 직접 로드 I N S E RT 문(직접 로드 I N S E RT 문과 병렬U P DATE 또는 DELETE 문 모두)을 가질 수 있지만 이러한 명령문 중 하나로테이블을 수정한 후 트랜잭션의 다른 SQL 문이 동일한 테이블에 액세스할 수 없습니다.

- 동일한 테이블을 액세스하는 질의가 직접 로드 I N S E RT 문 앞에 오는 것은 가능하나 뒤에는 올 수 없습니다.

- 동일한 트랜잭션 내에서 직접 로드 I N S E RT (또는 병렬 D M L )에 의해 수정된테이블을 액세스하려고 시도하는 직렬 또는 병렬 명령문은 오류 메시지와 함께거부됩니다.

■ 초기화 매개변수 ROW_LOCKING = INTENT인경우 삽입은 직접 로드 경로로수행될 수 없습니다.

■ 직접 로드 I N S E RT는 참조 무결성을 지원하지 않습니다.

■ 트리거는 직접 로드 I N S E RT 작업에 대해 지원되지 않습니다.

■ 직접 로드 I N S E RT에 대해 복제 기능을 지원할 수 없습니다.

■ 직접 로드 I N S E RT는 객체 열이나 LOB 열을 가진 테이블 또는 인덱스 구성 테이블에 대해 실행될 수 없습니다.

■ 직접 로드 I N S E RT 작업에 관련된 트랜잭션은 분산 트랜잭션일 수 없으며 분산트랜잭션이 될 수도 없습니다.

■ 클러스터화된 테이블은 지원되지 않습니다.

제한 사항을 위반하면 경고 또는 오류 메시지 없이 명령문이 기본 삽입 경로를 사용하여 순차적으로 실행될 수 있도록 합니다. 예외 사항은 트랜잭션에서 한 번 이상 동일한 명령문을 액세스하는 명령문에 대한 제한 사항인데, 이것은 오류 메시지를 일으킬 수 있습니다.

예를 들어, 트리거 또는 참조 무결성이 테이블에 있는 경우 PARALLEL 힌트 또는절뿐만 아니라 직접 로드 I N S E RT (직렬 또는 병렬)를 사용하려고 하면 A P P E N D힌트는 무시됩니다.

병렬 I N S E RT를 포함한 병렬 D M L의 일반적인 제한 사항에 대한 자세한 내용은26-43 페이지“병렬D M L에 대한 제한 사항”을 참조하십시오.

2 5 - 1 2 Oracle8i 개념 설명서, 볼륨 2

직접 로드 I N S E R T에 대한 제한 사항

Page 253: Oracle8 - Tistory

병렬 실행 2 6 - 1

26병렬 실행

이 장에서는 SQL 문의 병렬 실행에 대해 설명하며 다음 내용을 다룹니다.

■ 병렬 실행 개요

■ 병렬 실행을 위한 프로세스 구조

■ 병렬도 설정

■ 병렬 질의

■ 병렬 D D L

■ 병렬 D M L

■ 함수의 병렬 실행

■ 친화력

■ 다른 유형의 병렬화

주의 사항: 이 장에서 설명하는 병렬 실행 기능은 O racle8i EnterpriseE d i t i o n을 구입한 경우에만 사용할 수 있습니다. Oracle8i EnterpriseE d i t i o n에 대한 내용은 O racle8i 입문서를 참조하십시오. 또한 병렬 실행은 O racle Pa rallel Serv e r와 동일하지 않습니다. SQL 문의 병렬 실행을수행하는데는 Pa rallel Server Option이 필요하지 않습니다. 그러나 병렬실행의 몇 가지 측면은 O racle Pa rallel Serv e r에만 적용됩니다.

Page 254: Oracle8 - Tistory

병렬 실행 개요

O ra c l e이 SQL 문을 병렬로 실행하지 않으면 단일 프로세스가 각 SQL 문을 순차적으로 실행합니다. 그러나 병렬 실행에서는 여러 프로세스가 동시에 작업하여 단일SQL 문을 실행합니다. 명령문을 실행하는데 필요한 작업을 여러 프로세스에 나눔으로써 O ra c l e은 단일 프로세스만으로 명령문을 실행하는 것보다 더 신속하게 명령문을실행할 수 있습니다.

병렬 실행은 의사 결정 지원 응용 프로그램이나 대용량 데이터베이스 환경과 관련된데이터 집중 작업에 대한 성능을 크게 향상시킬 수 있습니다. 대칭적 다중 처리(SMP), 클러스터화된 시스템, 대형 병렬 시스템(MPP) 등은 단일 O racle 시스템에서 명령문 처리를 많은 C P U로 나눌 수 있으므로 병렬 실행에 의해 크게 향상된 성능을 얻을 수 있습니다.

하드웨어 자원을 최적화하여 사용함으로써 병렬 실행은 성능면에서 시스템 규모에 도움이 됩니다. 시스템의 C P U와 디스크 제어 장치에 과부하가 걸린 경우 사용자는 병렬 실행을 사용하기 전에 시스템의 로드를 제거하고 이러한 하드웨어 자원을 증가시켜 성능을 향상시켜야 합니다.

추가 정보: 매개변수 파일 및 데이터베이스를 조정하여 병렬 실행을 충분히 이용하는데대한자세한 내용은 O racle8i Tuning을참조하십시오.

병렬화할 수 있는 작업

O racle 서버는 다음과 같은 작업에 대해 병렬 실행을 사용할 수 있습니다.

■ 테이블 스캔

■ 중첩 루프 조인

■ 정렬 병합 조인

■ 해시 조인

■ “not in”

■ g roup by

■ select distinct

■ u n i o n과 union all

■ a g g re g a t i o n

■ S Q L에서 호출한 PL/SQL 함수

2 6 - 2 Oracle8i 개념 설명서, 볼륨 2

병렬 실행 개요

Page 255: Oracle8 - Tistory

■ o rder by

■ c reate table as select

■ 인덱스 생성

■ 인덱스 재구성

■ 인덱스 분할 영역 재구성

■ 분할 영역 이동

■ 분할 영역 분리

■ u p d a t e

■ d e l e t e

■ i n s e r t . . . s e l e c t

■ 제약 조건 활성화(테이블 스캔이 병렬화됨)

■ 스타 변환

■ c u b e

■ ro l l u p

작업 병렬화 방법

SELECT 문은 질의로만 구성됩니다. DML이나 DDL 문은 일반적으로 질의 부분과DML 또는 DDL 부분으로 구성되며 SQL 문의 질의 부분과 DML 또는 DDL 부분은 각각 병렬화될 수 있습니다.

주: 일반적으로 데이터 조작어( D M L )는 질의를 포함하지만 이 장에서“D M L”은 삽입, 갱신, 삭제만을 의미합니다.

O ra c l e은 주로 다음 방법으로 SQL 문을 병렬화합니다.

1 . 스캔 작업에 대해 블록 범위로 병렬화합니다. (SELECT와 DML 및 DDL 문의하위 질의)

2 . 분할된 테이블과 인덱스에 대한 DDL 및 DML 작업에 대하여 분할 영역으로 병렬화합니다.

3 . 분할되지않은테이블에만삽입하기위해병렬실행서버로 병렬화합니다.

병렬 실행 2 6 - 3

병렬 실행 개요

Page 256: Oracle8 - Tistory

블록 범위에 의한 병렬화

O ra c l e은 실행 시 동적으로 질의를 병렬화합니다. 동적 병렬화는 테이블이나 인덱스를 데이터베이스 블록의 범위( ROWID 범위)로 나누고 서로 다른 범위에 있는 작업을병렬로 실행합니다. 데이터 분포나 위치가 변경되면 O ra c l e은 SQL 문의 각각의 질의 부분 실행에 대한 병렬화를 자동으로 최적화합니다.

블록 범위에 의한 병렬 스캔은 테이블이나 인덱스를 상위 및 하위 ROWID 값으로 구분된 조각으로 나눕니다. 테이블이나 인덱스는 분할되지 않았거나 분할된 것일 수 있습니다.

분할된 테이블과 인덱스의 경우 하나의 분할 영역이 여러 개의 ROWID 범위를 포함할 수 있지만 ROWID 범위는 분할 영역을 걸쳐 있을 수는 없습니다. Ora c l e은ROWID 범위와 함께 분할 영역 번호를 전송하여 분할 영역 맵 조회를 방지합니다.분할 열에 대한 컴파일과 런타임 술어는 ROWID 범위를 관련된 분할 영역으로 제한하여 불필요한 분할 영역 스캔을 제거합니다. (분할 영역 제거)

이는 테이블 스캔으로 분할된 테이블을 액세스하는 병렬 질의가 분할되지 않은 테이블에 대한 동일한 질의와 같거나 적은 작업을 수행함을 의미합니다. 분할된 테이블에대한 질의는 분할 영역 제거에 의해 액세스된 전체 디스크 수가 감소해도 동일한 병렬화로 실행됩니다.

O ra c l e은 블록 범위( ROWID 범위)에 의해 테이블과 인덱스에 대해 다음 작업을 병렬화할 수 있습니다.

■ 테이블 스캔을 사용하는 질의 (DML 및 DDL 문의 질의 포함)

■ 분할 영역 이동

■ 분할 영역 분할

■ 인덱스 분할 영역 재구성

■ 인덱스 생성

■ c reate table...as select (분할되지않은 테이블)

분할 영역에 의한 병렬화

분할 영역은 장시간 실행되는 작업을 개별 분할 영역에서 병렬로 실행되는 더 작은작업으로 나눌 때 사용될 수 있는 테이블과 인덱스의 논리적 정적 부분입니다. 병렬화의 단위는 분할 영역입니다. 분할 영역 내에는 다음과 같은 경우를 제외하고는 병렬화가 존재하지 않습니다.

■ 위에서 설명한 것처럼 블록 범위에 의해 병렬화될 수 있는 질의

■ 병렬화의 단위가 하위 분할 영역인 조합 분할 (11-17 페이지“조합 분할”참조)

2 6 - 4 Oracle8i 개념 설명서, 볼륨 2

병렬 실행 개요

Page 257: Oracle8 - Tistory

분할된 테이블과 인덱스에 대한 작업은 다른 병렬 실행 서버를 다른 테이블이나 인덱스의 분할 영역에 할당함으로써 병렬로 수행됩니다. 컴파일과 런타임 술어는 작업이분할 열을 참조할 경우 분할 영역을 제한합니다. (분할 영역 제거) 컴파일과 런타임 술어가 작업을 단일 분할 영역으로 제한하면 작업은 순차적으로 실행됩니다.

병렬 작업은 액세스된 분할 영역의 수보다 적은 수의 병렬 실행 서버를 사용하지만(자원 제한, 힌트, 테이블 속성으로 인해) 각 분할 영역은 하나의 병렬 실행 서버에 의해액세스됩니다. 그러나 병렬 실행 서버는 여러 분할 영역을 액세스할 수 있습니다.

하나 이상의 분할 영역이 액세스되는 경우에만 분할된 테이블과 인덱스에 대한 작업이 병렬로 수행됩니다.

O ra c l e은 분할 영역으로 분할된 테이블과 인덱스에 대해 다음 작업을 병렬화할 수 있습니다.

■ c reate index

■ c reate table...as select

■ u p d a t e

■ d e l e t e

■ i n s e r t . . . s e l e c t

■ alter index. . . re b u i l d

■ 분할된 인덱스에 대해 범위 스캔을 사용하는 질의

병렬 실행 서버에 의한 병렬화

분할되지 않은 테이블에 한해 O ra c l e은 작업을 병렬 실행 서버에서 나누어 삽입 작업을 병렬화합니다. 새로운 행에는 아직 ROW I D가 없으므로 행은 여러 병렬 실행 서버로 분산되어 사용 가능한 영역에 삽입됩니다.

병렬 실행을 위한 프로세스 구조

병렬 실행이 사용되지 않을 경우 단일 서버 프로세스는 SQL 문의 순차적 실행을 위해필요한 모든 처리를 수행합니다. 예를 들어, 전체 테이블 스캔 (SELECT * FRO ME M P와 같은) 수행을 위해 그림 2 6 - 1에서 보는 바와 같이 하나의 프로세스가 전체 작업을 수행합니다.

병렬 실행 2 6 - 5

병렬 실행을 위한 프로세스 구조

Page 258: Oracle8 - Tistory

그림 26-1 순차적 전체 테이블 스캔

병렬 실행은 여러 병렬 프로세스를 사용하여 사용자의 작업을 병렬로 수행합니다. 병렬실행 조정자라는 하나의 프로세스가 명령문 실행을 여러 병렬 실행 서버에 디스패치하고 결과를 사용자에게 다시 보내기 위해 모든 서버 프로세스의 결과를 조정합니다.

주:“병렬 실행 서버”는 O racle Pa rallel Serv e r의 프로세스를 의미하지 않고 다른 프로세스와 병렬로 작업을 수행하는 프로세스를 의미합니다. (Oracle Pa rallel Serv e r에서는 병렬 실행 서버가 여러 인스턴스에 걸쳐 있을 수 있습니다.) 병렬 실행 서버를“종속 프로세스”라고도합니다.

대형 병렬 처리(MPP) 구성에서 작업이 여러 부분으로 나누어져 있는 병렬 실행을하는 경우 O ra c l e은 작업에 사용되는 테이블이나 인덱스 부분에 대한 프로세스의 친화력을 고려하여 작업의 특정 부분을 병렬 실행 서버에 할당합니다. 분할된 테이블과인덱스의 물리적 레이아웃은 병렬 실행 서버에 대한 작업 할당에 사용되는 친화력에영향을 줍니다. 자세한 내용은 26-48 페이지“친화력”을 참조하십시오.

그림 2 6 - 2는 EMP 테이블에 부분적인 스캔을 동시에 수행하는 여러 개의 병렬 실행서버를 나타내는데 이것은 블록 범위에 의해 동적으로 나누어집니다. (동적 분할) 병렬 실행 서버는 병렬 실행 조정자에 결과를 다시 보내고 각 부분을 필요한 전체 테이블 스캔으로 조합합니다.

2 6 - 6 Oracle8i 개념 설명서, 볼륨 2

병렬 실행을 위한 프로세스 구조

순차적프로세스

SELECT *

FROM EMP;

EMP 테이블

Page 259: Oracle8 - Tistory

그림 26-2 전체 테이블 병렬 스캔

병렬 실행 조정자는 실행 함수를 병렬 부분으로 구분한 다음 각 병렬 실행 서버에서생성한 부분적인 결과를 통합합니다. 하나의 작업에 할당된 병렬 실행 서버 수가 작업에 대한 병렬도( D O P )입니다. 동일한 SQL 문 내에 있는 여러 작업은 모두 동일한병렬도를 가집니다. (26-16 페이지“작업에대한 병렬도 결정 방법”참조)

병렬 실행 서버 저장소

인스턴스가 시작되면 O ra c l e은 모든 병렬 작업이 사용할 수 있는 병렬 실행 서버의풀을 생성합니다. 초기화 매개변수 PA R A L L E L _ M I N _ S E RV E R S는 O ra c l e이 인스턴스 시작 시 생성하는 병렬 실행 서버의 수를 지정합니다.

병렬 작업을 실행하는 경우 병렬 실행 조정자는 풀에서 병렬 실행 서버를 얻어 병렬실행 서버를 작업에 할당합니다. 필요한 경우 O ra c l e은 작업에 대해 추가 병렬 실행서버를 생성할 수 있습니다. 이러한 병렬 실행 서버는 작업 실행 동안 해당 작업에 남아 있다가 다른 작업에 사용될 수 있습니다. 명령문이 완전히 처리되면 병렬 실행 서버를 풀에 돌려줍니다.

주: 병렬 실행 조정자와 병렬 실행 서버는 한 번에 하나의 명령문만을처리할 수 있습니다. 예를 들어, 병렬 실행 조정자는 병렬 질의와 병렬DML 문을 동시에 조정할 수 없습니다.

병렬 실행 2 6 - 7

병렬 실행을 위한 프로세스 구조

병렬 실행 조정자

SELECT *

FROM EMP;

병렬 실행 서버

EMP 테이블

Page 260: Oracle8 - Tistory

사용자가 SQL 문을 실행하면 최적기는 작업을 병렬로 실행할 것인지 여부를 결정하고 각 작업에 대한 병렬도를 결정합니다. 여러 가지 방법으로 작업에 필요한 병렬 실행 서버의 수를 지정할 수 있습니다. (26-15 페이지“병렬도설정”참조)

최적기가 명령문을 병렬 처리하려고 하면 다음 순서로 이벤트가 발생합니다.

■ SQL 문의 포그라운드 프로세스가 병렬 실행 조정자가 됩니다.

■ 병렬 실행 조정자는 필요한 수(병렬도에 의해 결정된)의 병렬 실행 서버를 서버풀에서 얻거나 필요하다면 새로운 병렬 실행 서버를 생성합니다.

■ O ra c l e은 작업 순서에 따라 명령문을 실행합니다. 각각의 작업은 가능하면 병렬로수행됩니다.

■ 명령문 처리가 완료되면 조정자는 결과 데이터를 명령문을 실행한 사용자 프로세스에 돌려주고 병렬 실행 서버를 서버 풀에 돌려줍니다.

병렬 실행 조정자는 SQL 문을 실행하는 동안 (명령문 구문 분석 동안이 아님) 병렬실행 서버를 호출합니다. 따라서 병렬 실행이 다중 스레드 서버에 사용되는 경우 사용자 명령문의 EXECUTE 호출을 처리하는 서버 프로세스는 명령문에 대한 병렬 실행 조정자가 됩니다.

병렬 실행 서버의 수 변동

인스턴스에 의해 동시에 처리되는 병렬 작업의 수가 급격히 변경되면 O ra c l e은 자동으로 풀에 있는 병렬 실행 서버의 수를 변경합니다.

병렬 작업 수가 증가하면 O ra c l e은 추가 병렬 실행 서버를 생성하여 들어오는 요구사항을 처리합니다. 그러나 O ra c l e은 한 인스턴스에 대해 초기화 매개변수 PA R A L -L E L _ M A X _ S E RV E R S에 의해 지정된 것보다 많은 병렬 실행 서버를 생성하지는 않습니다.

병렬 작업 수가 감소하면 O ra c l e은 임계 기간 동안 작업을 수행하지 않은 병렬 실행서버를 종료합니다. Ora c l e은 병렬 실행 서버가 아무리 오랫동안 작업을 수행하지 않았더라도 풀의 크기를 PA R A L L E L _ M I N _ S E RVERS 값 이하로는 줄이지 않습니다.

2 6 - 8 Oracle8i 개념 설명서, 볼륨 2

병렬 실행을 위한 프로세스 구조

Page 261: Oracle8 - Tistory

충분한 병렬 실행 서버가 없는 경우의 처리

O ra c l e은 요청한 프로세스 수보다 적은 프로세스로 병렬 작업을 처리할 수 있습니다.초기화 매개변수 PA R A L L E L _ M I N _ P E RC E N T로 최소값을 지정하는 방법은 2 6 - 1 8페이지“병렬 실행 서버의 최소 수”를 참조하십시오.

풀에 있는 모든 병렬 실행 서버가 할당되고 최대 수의 병렬 실행 서버가 시작되었다면 병렬 실행 조정자는 순차적 처리로 전환합니다.

추가 정보: 병렬 실행 서버의 인스턴스 풀 모니터링과 초기화 매개변수의 알맞은 값 결정에 대한 내용은 O racle8i Tuning을참조하십시오.

병렬 실행 서버 통신 방법

질의를 병렬로 실행하기 위해 O ra c l e은 일반적으로 생산자 대기열 서버와 소비자 서버를 생성합니다. 생산자 대기열 서버는 테이블에서 행을 읽어 들이고 소비자 서버는이러한 행에 대해 조인, 정렬, DML, DDL 등의 작업을 수행합니다. 생산자 실행프로세스 집합의 각 서버는 소비자 집합의 각 서버로 접속됩니다. 이것은 병렬 실행서버 간의 가상 접속 수가 병렬도의 제곱만큼 증가함을 의미합니다.

각 통신 채널은 최소 한 개에서 최대 네 개의 메모리 버퍼를 가집니다. 여러 개의 메모리 버퍼는 병렬 실행 서버 간의 비동기 통신을 쉽게 해줍니다.

단일 인스턴스 환경에서는 통신 채널 당 많아야 세 개의 버퍼를 사용합니다. OPS 환경에서는 채널 당 많아야 네 개의 버퍼를 사용합니다. 그림 2 6 - 3은 메시지 버퍼와 생산자 병렬 실행 서버가 소비자 병렬 실행 서버에 접속되는 방법을 나타냅니다.

병렬 실행 2 6 - 9

병렬 실행을 위한 프로세스 구조

Page 262: Oracle8 - Tistory

그림 26-3 병렬 실행 서버 접속 및 버퍼

동일한 인스턴스의 두 프로세스 간에 접속이 이루어지면 서버는 버퍼를 앞뒤로 전달하여 통신합니다. 다른 인스턴스의 프로세스 간에 접속이 이루어지면 메시지는 외부초고속 네트워크 프로토콜을 사용하여 전달됩니다. 그림 2 6 - 3에서 D O P는 병렬 실행서버의 수와 동일한데 이 경우“n”입니다. 그림 2 6 - 3에서는 병렬 실행 조정자를 표시하지 않습니다. 그러나 각 병렬 실행 서버는 실제로 병렬 실행 조정자에 추가로 접속됩니다.

SQL 문 병렬화

각 SQL 문은 구문 분석되면서 최적화와 병렬화 과정을 거칩니다. 따라서 데이터가변경되고 실행 계획과 병렬화 계획에 대한 최적화가 더욱 가능하면 O ra c l e은 자동으로 새로운 상황에 적응하게 됩니다. (최적화에 대한 내용은 2 2장“최적기”를 참조하십시오. )

최적기가 명령문의 실행 계획을 결정한 다음 병렬 실행 조정자는 실행 계획에 있는각 작업에 대한 병렬화 방법을 결정합니다. (예를 들어, 블록 범위로 전체 테이블 스캔을 병렬화할 것인지 분할 영역으로 인덱스 범위 스캔을 병렬화할 것인지의 여부)조정자는 작업을 병렬로 수행할 수 있는지를 결정하고 병렬로 수행될 수 있으면 필요한 병렬 실행 서버의 수(즉, 병렬도)를 결정합니다.

2 6 - 1 0 Oracle8i 개념 설명서, 볼륨 2

병렬 실행을 위한 프로세스 구조

병렬 실행 서버집합1

DOP=1 DOP=2 DOP=n

병렬 실행 서버집합 2

접속

메시지버퍼

Page 263: Oracle8 - Tistory

자세한 내용은 26-15 페이지“병렬도 설정”과 26-20 페이지“SQL 문에 대한 병렬화규칙”을 참조하십시오.

병렬 실행 서버 간의 작업 분할

병렬 실행 조정자는 각 작업의 재분배 요구 사항을 검사합니다. 작업의 재분배 요구사항은 해당 작업에 의해 작업되는 행이 병렬 실행 서버 간에 나누어지고 재분배되어야 하는 방식입니다.

실행 계획에 있는 각각의 작업에 대한 재분배 요구 사항을 결정한 다음 최적기는 실행 계획에 있는 작업이 수행되는 순서를 결정합니다. 이러한 정보를 가지고 최적기는명령문의 데이터 흐름을 결정합니다.

그림 2 6 - 4는 다음 질의의 데이터 흐름을 나타냅니다.

SELECT dname, MAX(sal), AVG(sal)FROM emp, dept

WHERE emp.deptno = dept.deptnoGROUP BY dname;

병렬 실행 2 6 - 1 1

병렬 실행을 위한 프로세스 구조

Page 264: Oracle8 - Tistory

그림 26-4 EMP 및DEPT 테이블의 조인에 대한 데이터 흐름 다이어그램

2 6 - 1 2 Oracle8i 개념 설명서, 볼륨 2

병렬 실행을 위한 프로세스 구조

병렬 실행 조정자

GROUP BY

SORT

MERGE JOIN

FULL SCAN emp

FULL SCAN dept

Page 265: Oracle8 - Tistory

작업 간의 병렬화

다른작업의 결과를 필요로 하는작업을 상위작업이라고 합니다. 그림 2 6 - 4에서G RO -UP BY SORT는 M E RGE JOIN 결과를필요로 하므로 G ROUP BY SORT 작업은M E RGE JOIN 작업의상위작업이 됩니다.

상위 작업은 하위 작업이 행을 생성하는 즉시 행을 소비할 수 있습니다. 이전 예에서병렬 실행 서버가 FULL SCAN DEPT 작업에서 행을 생성하는 동안 다른 병렬 실행 서버 집합은 행을 소비하기 위해 M E RGE JOIN 작업을 수행할 수 있습니다.

동시에 수행되는 두 작업에는 각각 자신의 병렬 실행 서버 집합이 할당됩니다. 따라서 질의 작업과 데이터 흐름 트리 자체는 병렬화를 갖게 됩니다. 개별 작업의 병렬화를 작업 내 병렬화라고 하고 데이터 흐름 트리에 있는 작업 간의 병렬화를 작업 간 병렬화라고 합니다.

O racle 서버 작업의 생산자/소비자 특성으로 인해 주어진 트리에서 두 개의 작업만이동시에 수행되어 실행 시간을 최소화해야 합니다.

작업 내 병렬화와 작업 간 병렬화 예를 보려면 다음 명령문을 생각해 봅시다.

SELECT * FROM emp ORDER BY ename;

실행 계획은 EMP 테이블의 전체 스캔을 수행한 다음 E NAME 열 값에 준하여 검색된 행을 정렬하는 것으로 구성됩니다. 이 예에서는 E NAME 열이 인덱스화되지 않았다고 가정합니다. 또한 질의에 대한 병렬도를 4로 설정한다고 가정하는데 이는 주어진 작업에 대해 4개의 병렬 실행 서버가 활성화될 수 있음을 의미합니다.

그림 2 6 - 5는 예제 질의의 병렬 실행을 나타냅니다.

병렬 실행 2 6 - 1 3

병렬 실행을 위한 프로세스 구조

Page 266: Oracle8 - Tistory

그림 26-5 작업 내 병렬화와 동적 분할

그림 2 6 - 5에서 보는 바와 같이 병렬도는 4지만 실제로 질의에 관련된 병렬 실행 서버는 8개입니다. 이것은 상위와 하위 연산자가 동시에 수행될 수 있기 때문입니다. (작업 간 병렬화)

또한 스캔 작업에 관련된 모든 병렬 실행 서버가 정렬 작업을 수행하는 해당 병렬 실행 서버에 행을 보냅니다. 병렬 실행 서버가 스캔한 행이 E NAME 열에 대해 A와G 사이의 값을 포함하면 해당 행은 첫 번째 ORDER BY 병렬 실행 서버에 전송됩니다. 스캔 작업이 완료되면 정렬 프로세스는 정렬된 결과를 조정자에게 돌려줄 수있고 조정자는 완전한 질의 결과를 사용자에게 돌려줍니다.

2 6 - 1 4 Oracle8i 개념 설명서, 볼륨 2

병렬 실행을 위한 프로세스 구조

사용자프로세스

병렬 실행조정자

A - G

H - M

N - S

T - Z

EMP 테이블

SELECT * FROM emp ORDER BY ename;

작업 내병렬화

작업 간병렬화

작업 내병렬화

ORDER BY 작업용병렬 실행 서버

전체 테이블 스캔작업용 병렬 실행서버

Page 267: Oracle8 - Tistory

주: 병렬 실행 서버 집합이 자신의 작업을 완료하면 이것은 데이터 흐름에서 상위에 있는 작업으로 이동합니다. 예를 들어, 이전 다이어그램에서 ORDER BY 다음에 다른 ORDER BY 작업이 있다면 테이블스캔을 수행하는 병렬 실행 서버는 테이블 스캔을 완료한 후 두 번째ORDER BY 작업을 수행합니다.

병렬도 설정

병렬 실행 조정자는 두 개 이상의 인스턴스 병렬 실행 서버를 참여시켜 SQL 문을 처리할 수도 있습니다. 단일 작업과 관련된 병렬 실행 서버 수를 병렬도( D O P )라고 합니다.

병렬도는 명령문 레벨(힌트나 PARALLEL 절을 가진)에서, 테이블이나 인덱스 레벨(테이블이나 인덱스 정의에 있는)에서 또는 기본적으로 CPU 수에 준하여 지정됩니다.

다음 예는 테이블에 대한 병렬도가 4로 설정되는 명령문입니다.

ALTER TABLE emp PARALLEL 4;

다음 예는 인덱스에 대한 병렬도를 설정합니다.

ALTER INDEX iemp PARALLEL;

다음 예는 질의에 대한 힌트를 4로 설정합니다.

SELECT /*+ PARALLEL(emp,4) */ COUNT(*) FROM emp ;

추가 정보: 이러한 명령문 구문에 대한 내용은 O racle8i Refe re n c e와O racle8i Tuning을 참조하십시오.

병렬도는 작업 내 병렬화에만 직접적으로 적용됩니다. 작업 간 병렬화가 가능하다면명령문에 대한 병렬 실행 서버의 총 수는 지정된 병렬도의 두 배가 될 수 있습니다.두 개 이상의 작업은 동시에 수행될 수 없습니다.

병렬 실행은 여러 개의 C P U와 디스크를 효과적으로 사용하여 질의에 빠르게 응답하도록 설계되었습니다. 여러 사용자가 병렬 실행을 동시에 사용하면 사용 가능한CPU, 메모리 및 디스크 자원이 빨리 고갈되기 쉽습니다. Ora c l e은 병렬 실행과 관련

병렬 실행 2 6 - 1 5

병렬도 설정

Page 268: Oracle8 - Tistory

하여 자원을 활용하는 다음과 같은 여러 가지 방법을 제공합니다.

■ 다중 사용자 적응 알고리즘. 이 알고리즘은 시스템 로드가 증가함에 따라 병렬도를줄입니다. ALTER SYSTEM 문의 PA R A L L E L _ A DA P T I V E _ M U LT I _ U S E R매개변수 또는 초기화 파일에 이 옵션을 설정할 수 있습니다.

■ 사용자 자원 한계 및 프로파일. 이것을사용하여 사용자의 보안 도메인의 일부로 각사용자가 사용할 수 있는 다양한 시스템 자원 양에 대한 한계치를 설정할 수 있습니다. 자세한내용은 29-15 페이지“사용자자원 제한과 프로파일”을 참조하십시오.

■ 데이터베이스 자원 관리자. 이것을 사용하여 각각 다른 사용자 그룹에 자원을 할당할 수 있습니다. 자세한 내용은 9장“데이터베이스 자원 관리”를 참조하십시오.

추가 정보: A LTER SYSTEM SQL 문의구문에 대한 내용은 O ra c l e 8 iSQL 참조서를참조하십시오.

작업에 대한 병렬도 결정 방법

병렬 실행 조정자는 몇 가지 사양을 고려하여 병렬도를 결정합니다. 조정자는 다음작업을 수행합니다.

1 . SQL 문 자체에 지정된 힌트나 PARALLEL 절을 검사합니다.

2 . 테이블이나 인덱스의 정의를 조사합니다.

3 . 기본 병렬도를 검사합니다. (26-17 페이지“기본병렬도”참조)

이러한 사양에서 병렬도를 찾으면 그것이 작업에 대한 병렬도가 됩니다. 병렬도에 대한 자세한 내용은 26-20 페이지“SQL 문에대한 병렬화 규칙”을 참조하십시오.

힌트, PARALLEL 절, 테이블 또는 인덱스 정의, 기본값으로만 조정자가 주어진 작업에 대해 요청하는 병렬 실행 서버의 수를 결정합니다. 사용된 병렬 실행 서버의 실제 수는 병렬 실행 서버 저장소에 있는 사용 가능한 프로세스의 수(26-7 페이지“병렬 실행 서버 저장소”참조)와 작업 간 병렬화 가능 여부(26-13 페이지“작업 간의병렬화”참조)에 따라 다릅니다.

힌트

SQL 문에 힌트를 지정하여 테이블이나 인덱스에 대한 병렬도와 작업의 캐시 작업을설정할 수 있습니다.

2 6 - 1 6 Oracle8i 개념 설명서, 볼륨 2

병렬도 설정

Page 269: Oracle8 - Tistory

■ PARALLEL 힌트는 테이블에 대한 작업에만 사용됩니다. 이를 사용하여 질의나DML 문( I N S E RT, UPDATE 및D E L E T E )을 병렬화할 수 있습니다.

■ PARALLEL_INDEX 힌트는 분할된 인덱스의 인덱스 범위 스캔을 병렬화합니다. (인덱스 작업에서 PARALLEL 힌트는 유효하지 않으며 무시됩니다. )

추가 정보: SQL 문에서 힌트 사용과 PA R A L L E L, NOPA R A L L E L,PA R A L L E L _ I N D E X, CACHE 및 N O CACHE 힌트의 특정 구문에대한 일반적인 내용은 O racle8i Tuning을참조하십시오.

테이블 및 인덱스 정의

테이블이나 인덱스 정의 내에서 병렬도를 지정할 수 있습니다. CREATE TA B L E,A LTER TA B L E, CREATE INDEX 또는A LTER INDEX 등과 같은 SQL 문 중하나를 사용하여 테이블이나 인덱스에 대한 병렬도를 설정합니다.

추가 정보: SQL 문의 완전한 구문을 보려면 O racle8i SQL 참조서를참조하십시오.

기본 병렬도

기본 병렬도는 작업을 병렬화하도록 요청했지만 테이블이나 인덱스 정의 내부 또는힌트에서 병렬도를 지정하지 않은 경우에 사용됩니다. 기본 병렬도는 대부분의 응용프로그램에 적합합니다.

추가 정보: 병렬도 조정에 대한 내용은 O racle8i Tuning을 참조하십시오.

SQL 문에 대한 기본 병렬도는 다음 요인에 의해 결정됩니다.

1 . 시스템에 있는 O racle Pa rallel Server 인스턴스의 CPU 수와 PA R A L L E L _THREADS_PER_CPU 매개변수값

2 . 분할 영역에 의한 병렬화에서 분할 영역 제거에 준하여 액세스될 분할 영역 수(대략)

3 . 글로벌 인덱스 유지 관리를 가진 병렬 DML 작업의 경우 갱신되는 모든 글로벌인덱스 중에서 트랜잭션 해제 목록의 최소 수. 분할된 글로벌 인덱스에 대한 트랜잭션 해제 목록의 최소 수는 모든 인덱스 분할 영역의 최소 수입니다. 이는 자체 교착 상태를 방지하기 위한 필수 사항입니다.

병렬 실행 2 6 - 1 7

병렬도 설정

Page 270: Oracle8 - Tistory

주: O ra c l e은 운영 체제에서 C P U에 대한 정보를 얻습니다.

위의 요인은 사용할 병렬 실행 서버의 기본 수를 결정합니다. 그러나 사용된 실제 프로세스 수는 실행 시간 동안 요청된 인스턴스에 대한 가용성에 의해 제한됩니다. 초기화 매개변수 PA R A L L E L _ M A X _ S E RV E R S는 인스턴스가 가질 수 있는 병렬 실행 서버의 총 수에 대한 상한선을 설정합니다.

필요한 병렬 실행 서버의 최소 수의 비율을 사용할 수 없는 경우(초기화 매개변수 PA -R A L L E L _ M I N _ P E RC E N T에 의해 지정) 사용자 오류가 발생합니다. 이경우 사용자는 더 낮은 병렬화로 질의를 다시 시도할 수 있습니다.

다중 사용자 적응 알고리즘

다중 사용자 적응 알고리즘이 활성화되어 있으면 병렬 실행 조정자는 시스템 로드에따라 병렬도를 다르게 합니다. 데이터베이스 자원 관리자에 의해 계산된 대로 할당된스레드 수를 조사하여 로드가 결정됩니다. 현재 할당된 스레드 수가 사용 가능한CPU 수인 최적의 스레드 수보다 큰 경우 이 알고리즘은 병렬도를 줄입니다. 이러한감소 기능은 자원의 초과 할당을 피해 처리 능력을 향상시킵니다.

병렬 실행 서버의 최소 수

O ra c l e은 적어도 두 개의 병렬 실행 서버를 사용할 수 있는 동안 작업을 병렬로 수행할 수 있습니다. 매우 적은 수의 병렬 실행 서버만을 사용할 수 있는 경우 SQL 문은예상보다 느리게 실행됩니다. 작업 실행을 위해 요구된 병렬 실행 서버의 최소 백분율이 사용 가능해야 함을 지정할 수 있습니다. 이것은 SQL 문이 최소로 수용할 수있는 병렬 성능으로 실행되도록 보장합니다. 요청된 병렬 실행 서버의 최소 백분율을사용할 수 없는 경우 SQL 문은 실행되지 않으며 오류를 돌려줍니다.

초기화 매개변수 PA R A L L E L _ M I N _ P E RC E N T는 요청된 병렬 실행 서버에 대해필요한 최소 백분율을 지정합니다. 이 매개변수는 질의뿐 아니라 D M L과 DDL 작업에 영향을 줍니다.

예를 들어, 이 매개변수에 5 0을 지정한 경우 작업을 완료하려면 병렬 작업을 위해 요청된 병렬 실행 서버의 최소 50% 이상을 사용할 수 있어야 합니다. 20개의 병렬 실행 서버가 요구된 경우 적어도 1 0개의 서버를 사용할 수 있어야 하며 그렇지 않으

2 6 - 1 8 Oracle8i 개념 설명서, 볼륨 2

병렬도 설정

Page 271: Oracle8 - Tistory

면 사용자에게 오류를 돌려줍니다. PA R A L L E L _ M I N _ P E RC E N T가 널로 설정된경우 적어도 두 개의 병렬 실행 서버를 처리하는데 사용할 수 있다면 모든 병렬 작업은 계속 진행됩니다.

사용 가능한 인스턴스 수 제한

O racle Pa rallel Serv e r에서 인스턴스 그룹은 병렬 작업에 참여하는 인스턴스 수를제한하는데 사용됩니다. 사용자는 임의의 수의 인스턴스 그룹을 생성할 수 있으며 각각은 하나 이상의 인스턴스로 구성됩니다. 그런 다음 사용자는 임의의 또는 모든 병렬 작업에 사용될 인스턴스 그룹을 지정할 수 있습니다. 병렬 실행 서버는 지정된 인스턴스 그룹의 멤버인 인스턴스에 대해서만 사용됩니다.

추가 정보: 인스턴스 그룹에 대한 자세한 내용은 O racle8i Pa ra l l e lS e rver Concepts and Ad m i n i s t ra t i o n을 참조하십시오.

작업 로드 조절

모든 병렬 실행 서버는 성능을 최적화하려면 동일한 작업 로드를 가져야 합니다. 블록 범위나 병렬 실행 서버에 의해 병렬화된 SQL 문에 대해 작업 로드는 병렬 실행서버에 동적으로 나누어집니다. 이는 작업 로드 편중을 최소화하는데 작업 로드 편중은 일부 병렬 실행 서버가 다른 프로세스에 비해 현저하게 많은 작업을 수행할 때 발생합니다.

분할 영역에 의해 병렬화된 SQL 문에 대해 작업 로드가 각 분할 영역에 균등하게 분배된 경우 병렬 실행 서버 수를 분할 영역의 수에 맞추거나 분할 영역 수가 프로세스수의 배수가 되도록 병렬도를 선택하여 성능을 최적화할 수 있습니다.

예를 들어, 테이블이 1 0개의 분할 영역을 가지고 있고 병렬 작업이 작업을 이러한 분할 영역에 균등하게 나누는 경우 1 0개의 병렬 실행 서버(병렬도 = 10)를 사용하여 하나의 프로세스가 약 1 0분의 1씩 작업하거나 5개의 프로세스가 5분의 1씩 작업하거나두 개의 프로세스가 2분의 1씩 작업하도록 할 수 있습니다.

그러나 1 0개의 분할 영역에 9개의 프로세스를 사용하면 하나의 분할 영역에서 자체의작업을 마친 첫 번째 프로세스가 열 번째 분할 영역에 대한 작업을 시작합니다. 반면다른 프로세스는 자신의 작업을 종료하면 프로세스는 작업이 없는 상태가 됩니다. 이것은 작업이 각 분할 영역에 균등하게 나누어진 경우 좋은 성능을 발휘하지 못합니다. 작업이 균등하게 나누어지지 않은 경우 성능은 마지막으로 남겨진 분할 영역이가지는 작업이 다른 분할 영역에 비해 많고 적음에 따라 달라집니다.

이와 마찬가지로 1 0개의 분할 영역에 대해 4개의 프로세스를 사용하고 작업이 균등하게 나누어진 경우 각 프로세스는 첫 번째 분할 영역에서 작업을 종료한 다음 두 번째

병렬 실행 2 6 - 1 9

병렬도 설정

Page 272: Oracle8 - Tistory

분할 영역에 대해 작업합니다. 그러나 두 개의 프로세스만이 세 번째 분할 영역에 대한 작업을 수행하게 되며 다른 두 개의 프로세스는 작업이 없는 상태가 됩니다.

일반적으로 P개의 병렬 실행 서버로 N개의 분할 영역에 대한 병렬 작업을 수행하는데 걸리는 시간을 N / P라고 가정할 수는 없습니다. 이는 다른 프로세스가 마지막 분할 영역에 대해 작업을 종료하는 동안 일부 프로세스가 이를 기다려야 할 가능성이있기 때문입니다. 그러나 적절한 병렬도를 선택하면 작업 로드 편중을 최소화하고 성능을 최적화할 수 있습니다.

디스크 친화력을 사용한 작업 로드 조절에 대한 내용은 26-49 페이지“친화력 및 병렬 D M L”을 참조하십시오.

SQL 문에 대한 병렬화 규칙

SQL 문이 병렬 힌트를 포함하거나 작업 중인 테이블이나 인덱스가 C R E ATE 또는A LTER 문을 가진 PA R A L L E L로 선언되어 있는 경우 SQL 문은 병렬화될 수 있습니다. 또한 데이터 정의어(DDL) 문은 PARALLEL 절을 사용하여 병렬화될 수 있습니다. 그러나이러한 모든 방법이 SQL 문의 모든 유형에 적용되는 것은 아닙니다.

병렬화는 병렬화 결정과 병렬도, 두 구성 요소를 가지고 있습니다. 이러한 구성 요소는 질의, DDL 작업, DML 작업에따라 다르게 결정됩니다.

O ra c l e은 참조 객체를 조사하여 병렬도를 결정합니다.

■ 병렬 질의는 병렬화되는 질의 부분에 있는 각 테이블과 인덱스를 조사하여 어느것이 참조 테이블인지를 결정합니다. 기본 규칙은 가장 큰 병렬도를 가진 테이블이나 인덱스를 선택하는 것입니다.

■ 병렬 D M L (삽입, 갱신, 삭제)에서 병렬도를 결정하는 참조 객체는 삽입, 갱신,삭제 작업에 의해 수정되는 테이블입니다. 또한 병렬 D M L은 교착 상태를 방지하기 위해 병렬도에 약간의 제한을 가합니다. 병렬 DML 문이 하위 질의를 포함하는 경우 하위 질의의 병렬도는 DML 작업의 병렬도와 동일합니다.

■ 병렬 D D L에서 병렬도를 결정하는 참조 객체는 생성, 재구축, 분할, 이동되는 테이블, 인덱스 또는 분할 영역입니다. 병렬 DDL 문이 하위 질의를 포함하는 경우하위 질의의 병렬도는 DDL 작업의 병렬도와 동일합니다.

2 6 - 2 0 Oracle8i 개념 설명서, 볼륨 2

병렬도 설정

Page 273: Oracle8 - Tistory

질의 병렬화 규칙

병렬화 결정 다음과 같은 조건이 만족될 때 SELECT 문이 병렬화될 수 있습니다.

1 . 질의에“병렬”힌트 사양( PARALLEL 또는 PA R A L L E L _ I N D E X )이 있거나질의에서 참조되는 스키마 객체가 이와 관련된 PARALLEL 선언을 가지고 있습니다.

2 . 질의에 지정된 테이블 중 적어도 하나가 다음 중 하나를 요구합니다.

■ 전체 테이블 스캔

■ 다중 분할 영역에 걸친 인덱스 범위 스캔

병렬도 질의에 대한 병렬도는 다음과 같은 규칙에 의해 결정됩니다.

1 . 질의는 질의에 관련된 모든 테이블 선언과 질의를 만족하기 위해 후보가 되는 모든 잠재적 인덱스(참조 객체)의 최대 병렬도를 사용합니다. 즉, 가장 큰 병렬도를가진 테이블이나 인덱스가 질의의 병렬도를 결정합니다. (최대 질의 지시어)

2 . 테이블이 질의에“병렬”힌트 사양을 가지고 있고 자신의 테이블 사양에 병렬 선언을 가지고 있는 경우 힌트 사양이 병렬 선언 사양에 우선합니다.

U P D AT E와 DELETE 병렬화 규칙

갱신 및 삭제 작업은 분할 영역(또는 하위 분할 영역, 11-17 페이지“조합 분할”참조)에 의해 병렬화됩니다. 갱신 및 삭제는 분할된 테이블에 대해서만 병렬화될 수 있습니다. 분할 영역 내나 분할되지 않은 테이블에 대해서는 갱신/삭제 병렬화가 불가능합니다.

U P DAT E와 DELETE 작업에 대해 병렬 지시어를 지정하는 두 가지 방법이 있습니다. (PARALLEL DML 모드가활성화된 경우를 가정)

1 . 갱신되거나 삭제되는 테이블(참조 객체)의 정의에 지정되는 병렬 절

2 . 명령문에 지정된 갱신 또는 삭제 병렬 힌트

병렬 힌트는 U P DAT E나 DELETE 문에서 U P DAT E나 DELETE 키워드 바로 다음에 위치합니다. 또한 힌트는 변경되는 테이블의 기본 스캔에 적용됩니다.

병렬 실행 2 6 - 2 1

병렬도 설정

Page 274: Oracle8 - Tistory

C R E ATE TA B L E과 A LTER TABLE 명령어에 있는 병렬 절은 테이블 병렬화를지정합니다. 테이블 정의에 병렬 절이 있으면 이는 질의뿐 아니라 DML 문의 병렬화를 결정합니다. 그러나 DML 문이 테이블에 대한 명시적 병렬 힌트를 포함하면 이러한 힌트는 해당 테이블에 대한 병렬 절의 효과를 무효화합니다.

A LTER SESSION FORCE PARALLEL DML 문을사용하여 세션에서 이후의 갱신 및 삭제문에 대한 병렬 절을 무효화할 수 있습니다. 갱신 및 삭제문의 병렬 힌트는A LTER SESSION FORCE PARALLEL DML 문을무효화합니다.

병렬화 결정 다음 규칙은 갱신/삭제 작업이 갱신/삭제문에서 병렬화되어야 하는지의여부를 결정합니다.

■ U P DAT E나 DELETE 작업은 다음 중 하나를 만족하는 경우에만 병렬화됩니다.

- 갱신/삭제되는 테이블이 PARALLEL 사양을 가지고 있습니다.

- PARALLEL 힌트가 DML 문에 지정되어 있습니다.

- A LTER SESSION FORCE PARALLEL DML 문이 세션 중에 우선적으로실행되었습니다.

명령문이 하위 질의나 갱신할 수 있는 뷰를 가지고 있다면 이들은 별도의 병렬 힌트나 절을 가지지만 이러한 병렬 지시어는 갱신 또는 삭제 병렬화를 결정하는데 영향을주지 않습니다.

테이블에 대한 병렬 힌트나 절은 질의와 갱신/삭제 부분을 사용하여 병렬화를 결정하지만 갱신/삭제 부분의 병렬화 결정은 질의 부분과는 독립적으로 이루어지며 그 반대의 경우도 동일합니다.

병렬도 병렬도는 질의와 동일한 규칙에 의해 결정됩니다. 갱신 및 삭제 작업의 경우수정될 대상 테이블인 하나의 테이블(유일한 참조 객체)만이 연관됩니다.

갱신/삭제 작업에 대한 병렬도를 결정하는 우선순위 규칙은 병렬 힌트 갱신 또는 삭제 사양이 대상 테이블의 병렬 선언 사양에 우선한다는 것입니다.

힌트 갱신/삭제 > 대상 테이블의 병렬 선언 사양

사용자가 얻을 수 있는 최고의 병렬도는 테이블에 있는 분할 영역(조합 하위 분할의경우 하위 분할 영역)의 수와 동일합니다. 병렬 실행 서버는 여러 분할 영역에서 갱신하거나 삭제할 수 있지만 각 분할 영역은 하나의 병렬 실행 서버에 의해 갱신되거나삭제될 수 있습니다.

2 6 - 2 2 Oracle8i 개념 설명서, 볼륨 2

병렬도 설정

Page 275: Oracle8 - Tistory

병렬도가 분할 영역의 수보다 작은 경우 한 분할 영역에 대한 작업을 종료한 첫 번째프로세스가 다른 분할 영역에 대한 작업을 계속하게 되며 이는 모든 분할 영역에 대한 작업이 종료될 때까지 계속됩니다. 병렬도가 작업에 관련된 분할 영역의 수보다큰 경우 초과된 병렬 실행 서버는 작업을 수행하지 않습니다.

예 1 : UPDATE tbl_1 SET c1=c1+1 WHERE c1>100;

T B L _ 1이 분할된 테이블이고 이 테이블 정의가 병렬 절을 가지고 있는 경우 갱신 작업은 테이블에 대한 스캔이 순차적이라도(인덱스 스캔과 같이) 해당 테이블의 C 1이1 0 0보다 큰 하나 이상의 분할 영역을 가지고 있다고 가정하여 병렬화됩니다.

예 2 : UPDATE /*+ PARALLEL(tbl_2,4) */ tbl_2 SET c1=c1+1;

T B L _ 2에 대한 스캔 및 갱신 작업은 정도 4로 병렬화됩니다.

INSERT...SELECT 병렬화 규칙

I N S E RT...SELECT 문은 병렬도를 제외하고 자신의 I N S E RT와 SELECT 작업을독립적으로 병렬화합니다.

I N S E RT...SELECT 문에서 I N S E RT 키워드 다음에“병렬”힌트를 지정할 수 있습니다. 일반적으로 질의되는 테이블은 삽입되는 테이블과 동일하지 않으므로 힌트를사용하여 삽입 작업에만 병렬 지시어를 지정할 수 있습니다.

I N S E RT...SELECT 문에 대한 병렬 지시어를 지정하는데는 네 가지 방법이 있습니다. (PARALLEL DML 모드가활성화되었다고 가정)

1 . 명령문에 지정된 SELECT 병렬 힌트

2 . 선택되는 테이블 정의에 지정된 병렬 절

3 . 명령문에 지정된 I N S E RT 병렬 힌트

4 . 삽입되는 테이블 정의에 지정된 병렬 절

A LTER SESSION FORCE PARALLEL DML 문을 사용하여 세션에서 이후의 삽입 작업에 대한 병렬 절을 무효화할 수 있습니다. 삽입 작업의 병렬 힌트는 A LT E RSESSION FORCE PARALLEL DML 문을무효화합니다.

병렬화 결정 다음 규칙은 삽입 작업이 I N S E RT...SELECT 문에서 병렬화되어야하는지의 여부를 결정합니다.

병렬 실행 2 6 - 2 3

병렬도 설정

Page 276: Oracle8 - Tistory

■ I N S E RT 작업은 다음 중 적어도 하나를 만족하는 경우에만 병렬화됩니다.

- PARALLEL 힌트가 DML 문의 I N S E RT 다음에 지정되었습니다.

- 삽입되는 테이블(참조 객체)이 PARALLEL 선언 사양을 가지고 있습니다.

- A LTER SESSION FORCE PARALLEL DML 문이 세션 중에 우선적으로실행되었습니다.

따라서 삽입 작업 병렬화 결정은 선택 작업과는 독립적으로 이루어지며 반대의 경우도 동일합니다.

병렬도 선택 및 삽입 작업에 대한 병렬화가 결정되면 다음과 같은 우선순위 규칙을사용하여 전체 명령문의 병렬도를 결정하는 하나의 병렬 지시어가 선택됩니다.

삽입 힌트 지시어 > 삽입되는 테이블의 병렬 선언 사양 > 최대 질의 지시어

최대 질의 지시어는 여러 테이블과 인덱스 중에서 최대의 병렬도를 가지는 테이블이나 인덱스가 질의 작업에 대한 병렬화를 결정함을 의미합니다.

선택된 병렬 지시어는 선택 및 삽입 작업에 모두 적용됩니다.

예 다음 예에서 사용될 병렬도는 2로 삽입 힌트에 지정된 병렬도입니다.

INSERT /*+ PARALLEL(tbl_ins,2) */ INTO tbl_insSELECT /*+ PARALLEL(tbl_sel,4) */ * FROM tbl_sel;

DDL 문 병렬화 규칙

병렬화 결정 DDL 작업은 PARALLEL 절(선언)이구문에 지정되면 병렬화될 수 있습니다. CREATE INDEX와 A LTER INDEX...REBUILD 또는 A LTER IND-E X...REBUILD PA RT I T I O N의 경우 병렬 선언은 데이터 딕셔너리에 저장됩니다.

A LTER SESSION FORCE PARALLEL DDL 문을 사용하여 세션에서 이후의DDL 문의 병렬 절을 무효화할 수 있습니다.

2 6 - 2 4 Oracle8i 개념 설명서, 볼륨 2

병렬도 설정

Page 277: Oracle8 - Tistory

병렬도 A LTER SESSION FORCE PARALLEL DDL 문에 의해 무효화되지 않는 경우 병렬도는 PARALLEL 절에 있는 사양에 의해 결정됩니다. 분할된 인덱스재구축은 병렬화되지 않습니다.

인덱스 생성, 인덱스 재구축, 분할 영역 병합/분할 병렬화 규칙

병렬 C R E ATE INDEX 또는 ALTER INDEX...REBUILD C R E ATE INDEX와 A L -TER INDEX...REBUILD 문은 PARALLEL 절 또는 A LTER SESSION FOR-CE PARALLEL DDL 문에의해서만 병렬화될 수 있습니다.

A LTER INDEX. . . R E B U I L D는 분할되지 않은 인덱스에 대해서만 병렬화될 수 있지만 A LTER INDEX...REBUILD PA RT I T I O N은 PARALLEL 절 또는 A LT E RSESSION FORCE PARALLEL DDL 문에의해 병렬화될 수 있습니다.

A LTER INDEX. . . R E B U I L D (분할되지 않은), ALTER INDEX. . . R E B U I L DPA RTITION 및 C R E ATE INDEX에 대한 스캔 작업은 REBUILD 또는 C R E AT E작업과 동일한 병렬화를 가지며 동일한 병렬도를 사용합니다. REBUILD 또는 C R -E AT E에 대한 병렬도가 지정되지 않은 경우 기본값은 CPU 수입니다.

병렬 MOVE PARTITION 또는 SPLIT PARTITION A LTER INDEX. . . M OV EPA RT I T I O N과 A LTER INDEX...SPLIT PA RTITION 문은 PARALLEL 절 또는 A LTER SESSION FORCE PARALLEL DDL 문에 의해서만 병렬화될 수 있습니다. 이들의 스캔 작업은 해당 M OVE/SPLIT 작업과 동일한 병렬화를 가집니다.병렬도가 지정되지 않은 경우 기본값은 CPU 수입니다.

C re a te Table as Select 병렬화규칙

C R E ATE TA B L E...AS SELECT 문은 두 부분 즉, CREATE 부분( D D L )과 S E -LECT 부분(질의)을 포함합니다. Ora c l e은 명령문의 두 부분을 모두 병렬화할 수 있습니다. CREATE 부분은다른 DDL 작업과 동일한 규칙을 따릅니다.

병렬화 결정(질의 부분) C R E ATE TA B L E...AS SELECT 문의 질의 부분은 다음과 같은 조건이 만족될 경우에만 병렬화될 수 있습니다.

1 . 질의가“병렬”힌트 사양( PARALLEL 또는 PA R A L L E L _ I N D E X )을 포함하거나 명령문의 C R E ATE 부분에 PARALLEL 절 사양이 있거나 질의에서 참조하는 스키마 객체가 이와 관련된 PARALLEL 선언을 가지고 있습니다.

2 . 질의에 지정된 테이블 중 적어도 하나가 다음 중 하나를 필요로 합니다.

■ 전체 테이블 스캔

병렬 실행 2 6 - 2 5

병렬도 설정

Page 278: Oracle8 - Tistory

■ 다중 분할 영역에 걸친 인덱스 범위 스캔

병렬도(질의 부분) C R E ATE TA B L E...AS SELECT 문의 질의 부분에 대한 병렬도는 다음 규칙 중 하나에 의해 결정됩니다.

1 . 질의 부분은 C R E ATE 부분의 PARALLEL 절에 지정된 값을 사용합니다.

2 . PARALLEL 절이 지정되지 않은 경우 기본 병렬도는 CPU 수입니다.

3 . C R E AT E가 순차적인 경우 병렬도는 26-21 페이지“질의 병렬화 규칙”에서 설명한 대로 질의에 의해 결정됩니다.

병렬화를 위해 힌트에 지정된 값은 무시됩니다.

병렬화 결정( C re a te 부분) C R E ATE TA B L E...AS SELECT의 C R E ATE 작업은PARALLEL 절 또는 A LTER SESSION FORCE PARALLEL DDL 문에 의해서만 병렬화될 수 있습니다.

C R E ATE TA B L E...AS SELECT의 C R E ATE 작업이 병렬화되면 O ra c l e은 가능한 경우 스캔 작업도 병렬화합니다. 다음과 같은 경우 스캔 작업은 병렬화될 수 없습니다.

■ SELECT 절에 N O PARALLEL 힌트가 있는 경우

■ 작업이 분할되지 않은 테이블의 인덱스를 스캔하는 경우

C R E ATE 작업이 병렬화되지 않은 경우 C R E ATE 작업에 PARALLEL 힌트가 있거나 선택된 테이블(또는 분할된 인덱스)에 병렬 선언이 있으면 S E L E C T는 병렬화될수 있습니다.

병렬도( C re a te 부분) A LTER SESSION FORCE PARALLEL DDL 문에 의해무효화되지 않은 경우 C R E ATE 작업에 대한 병렬도와 병렬화된 경우 SELECT 작업에대한 병렬도는 C R E ATE 문의 PARALLEL 절에의해 지정됩니다. PA R A L L E L절이 병렬도를 지정하지 않은 경우 기본값은 CPU 수입니다.

병렬화 규칙 요약

표 2 6 - 1은 다양한 유형의 SQL 문이 병렬화될 수 있는 방법과 병렬화를 지정하는 방법의 우선순위를 나타냅니다.

■ 우선순위(1) 사양은 우선순위( 2 )와 우선순위( 3 )을 무효화합니다.

■ 우선순위(2) 사양은 우선순위( 3 )을 무효화합니다.

2 6 - 2 6 Oracle8i 개념 설명서, 볼륨 2

병렬도 설정

Page 279: Oracle8 - Tistory

추가 정보: SQL 문의 병렬 절과 힌트에 대한 자세한 내용은 O ra c l e 8 iSQL 참조서를 참조하십시오.

표 26-1 병렬화 규칙

병렬 연산

절, 힌트, 기본 테이블/인덱스 선언에 의한 병렬화

(우선순위 순서: 1, 2, 3)

병렬 절 병렬 힌트 A LTER 세션 병렬 선언

병렬 실행 2 6 - 2 7

병렬도 설정

병렬 질의 테이블 스캔(분할되거

나 분할되지 않은 테이블)

병렬 질의 인덱스 범위 스캔(분

할된 인덱스)

병렬 U P D A T E / D E L E T E (분할된

테이블만)

병렬 I N S E R T . . . S E L E C T의

Insert 작업(분할되거나 분할되

지 않은 테이블)

I N S E R T . . . S E L E C T의 S e l e c t

작업( I N S E R T가 병렬인 경우)

I N S E R T . . . S E L E C T의 S e l e c t

작업( I N S E R T가 순차적인 경우)

CREATE TABLE...AS SELECT

의 Create 작업(분할되거나 분

할되지 않은 테이블)

CREATE TABLE...AS SELECT

의 Select 작업( CRE A T E가 병

렬인 경우)

CREATE TABLE...AS SELECT

의 Select 작업( CRE A T E가 순

차적인 경우)

병렬 CREATE INDEX(분할되거

나 분할되지 않은 인덱스)

(1) PARALLEL

(1) PARALLEL_

I N D E X

(1) PARALLEL

(1) 삽입의

P A R A L L E L

INSERT 문에서 병렬도 가져옴

(1) PARALLEL

(주: select 절의 ( 2 )

힌트는 create

작업에 영향을

주지 않습니다. )

CREATE 문에서 병렬도 가져옴

(1) PARALLEL

또는 P A R A L L E L _

I N D E X

( 2 )

(2) FORCE

P A R A L L E L

D M L

(2) FORCE

P A R A L L E L

D M L

(1) FORCE

P A R A L L E L

D D L

(1) FORCE

P A R A L L E L

D D L

(2) 테이블

(2) 인덱스

(3) 갱신되거나

삭제되는 테이블

(3) 삽입되는

테이블

(2) 선택되는

테이블

(2) 질의되는

테이블 또는

분할된 인덱스

작업

Page 280: Oracle8 - Tistory

표 26-1 병렬화 규칙 (계속)

병렬 연산

절, 힌트, 기본 테이블/인덱스 선언에 의한 병렬화

(우선순위 순서: 1, 2, 3)

병렬 절 병렬 힌트 A LTER 세션 병렬 선언

병렬 질의

DDL 문과 DML 문( I N S E RT, UPDATE 및 D E L E T E )의 질의 부분뿐 아니라SELECT 문의 질의와 하위 질의를 병렬화할 수 있습니다. 이 장의 이전 단원에서는질의가 병렬화되는 방법을 설명합니다.

■ 26-2 페이지“병렬화할 수 있는 작업”에서는 O ra c l e이 병렬화할 수 있는 질의 작업을 나열합니다.

■ 26-3 페이지“작업 병렬화 방법”에서는 ROWID 범위에 의한 동적 병렬화를 설명합니다.

■ 26-5 페이지“병렬 실행을 위한 프로세스 구조”에서는 병렬 질의를 수행하는 프로세스를 설명합니다.

■ 26-10 페이지“SQL 문 병렬화”에서는 프로세스가 병렬 질의를 수행하는 방법을설명합니다.

■ 26-21 페이지“질의 병렬화 규칙”에서는 질의를 병렬화하기 위한 조건과 병렬도를결정하는 요소를 설명합니다.

그러나 원격 객체를 참조하는 경우 DDL 또는 DML 문의 질의 부분을 병렬화할 수없습니다. 질의 부분이 원격 객체를 참조하는 병렬 DML 또는 DDL 문을 실행하는경우 작업은 알림없이 순차적으로 실행됩니다. 예는 26-46 페이지“분산 트랜잭션 제한 사항”을 참조하십시오.

2 6 - 2 8 Oracle8i 개념 설명서, 볼륨 2

병렬 질의

병렬 REBUILD INDEX(분할되지

않은 인덱스)

REBUILD INDEX(분할된인덱스)

- 병렬화되지 않음

병렬 REBUILD INDEX 분할 영역

병렬 MOVE/SPLIT 분할 영역

( 2 )

( 2 )

( 2 )

(1) FORC E

P A R A L L E L

D D L

(1) FORC E

P A R A L L E L

D D L

(1) FORC E

P A R A L L E L

D D L

작업

Page 281: Oracle8 - Tistory

인덱스 구성 테이블에서의 병렬 질의

인덱스 구성 테이블에서는 다음과 같은 병렬 스캔 방법이 지원됩니다.

■ 분할되지 않은 인덱스 구성 테이블의 빠른 전체 병렬 스캔

■ 분할된 인덱스 구성 테이블의 빠른 전체 병렬 스캔

■ 분할된 인덱스 구성 테이블의 인덱스 범위 병렬 스캔

이러한 스캔 방법은 오버플로우 영역과 L O B를 포함하는 인덱스 구성 테이블이 있는인덱스 구성 테이블에 사용됩니다.

분할되지 않은 인덱스 구성 테이블

분할되지 않은 인덱스 구성 테이블에서 병렬 질의가 빠른 전체 병렬 스캔을 사용합니다. 병렬도는 PARALLEL 힌트(있다면), 테이블과관련된 병렬도( C R E ATE TA B L E또는 A LTER TABLE 명령어에서 지정된 경우)를 기준으로 하여 내림차순의 우선순위로 결정됩니다.

인덱스 세그먼트를 충분히 큰 수의 블록 범위로 나누어 작업을 할당한 다음 요구 방식으로 블록 범위를 병렬 실행 서버에 할당합니다. 모든 행에 대응하는 오버플로우블록이 해당 행을 가진 프로세스에 의해서만 요구 방식으로 액세스됩니다.

분할된 인덱스 구성 테이블

인덱스 범위 스캔과 빠른 전체 스캔은 모두 병렬로 수행될 수 있습니다. 빠른 전체 병렬 스캔의 경우 병렬화는 분할되지 않은 인덱스 구성 테이블의 병렬화와 동일합니다.분할된 인덱스 구성 테이블의 인덱스 범위 병렬 스캔의 경우 병렬도는 위의 우선순위목록(빠른 전체 병렬 스캔에서와 같이)에서 얻어낸 정도의 최소값이고 인덱스 구성테이블의 분할 영역 수입니다. 병렬도에 따라 각 병렬 실행 서버는 하나 이상의 분할영역(요구 방식으로 할당됨)을 얻고 각 분할 영역은 기본 키 인덱스 세그먼트와 관련된 오버플로우 세그먼트가 있는 경우 이를 포함합니다.

객체 유형의 병렬 질의

병렬 질의는 객체 유형 테이블과 객체 유형 열을 가진 테이블에서 수행될 수 있습니다. 객체 유형에 대한 병렬 질의는 다음과 같은 객체 유형의 순차적 질의에 대해 사용가능한 모든 기능을 지원합니다.

■ 객체 유형의 메소드

■ 객체 유형의 속성 액세스

병렬 실행 2 6 - 2 9

병렬 질의

Page 282: Oracle8 - Tistory

■ 객체 유형 인스턴스를 생성하는 구성자

■ 객체 뷰

■ 객체 유형에 대한 PL/SQL 및 OCI 질의

병렬 질의의 경우 객체 유형의 크기에 대한 제한이 없습니다.

다음 제한 사항은 객체 유형에 대한 병렬 질의 사용에 적용됩니다.

1 . MAP 함수는 (ORDER BY, GROUP BY 또는 집합 작업을 통해) 조인과 정렬을 포함하는 질의를 병렬화하는데 필요합니다. MAP 함수가 없으면 질의는 자동으로 순차적으로 실행됩니다.

2 . 중첩 테이블의 병렬 질의는 지원되지 않습니다. 테이블 또는 병렬 힌트에 대한병렬 속성이 존재하는 경우에도 질의는 순차적으로 실행됩니다.

3 . 병렬 D M L과 병렬 D D L은 객체 유형에 지원되지 않습니다. DML과 DDL 문은항상 순차적으로 수행됩니다.

위의 제한 사항 중 하나의 요인으로 인해 질의가 병렬로 수행될 수 없는 모든 경우 오류 메시지를 주지 않고 전체 질의가 순차적으로 실행됩니다.

병렬 D D L

이 단원에서는 D D L (데이터 정의어) 문의 병렬화에 대한 다음 내용을 다룹니다.

■ 병렬화될 수 있는 DDL 문

■ 병렬 C R E ATE TA B L E...AS SELECT

■ 복구성과 병렬 D D L

■ 병렬 D D L에 대한 영역 관리

병렬화될 수 있는 DDL 문

분할되거나 분할되지 않은 테이블과 인덱스에 대한 DDL 문을 병렬화할 수 있습니다.26-27 페이지의 표 2 6 - 1은 DDL 문에서 병렬화할 수 있는 작업에 대한 요약입니다.

분할되지 않은 테이블과 인덱스에 대한 병렬 DDL 문은 다음과 같습니다.

■ C R E ATE INDEX

■ C R E ATE TA B L E...AS SELECT

■ A LTER INDEX. . . R E B U I L D

2 6 - 3 0 Oracle8i 개념 설명서, 볼륨 2

병렬 D D L

Page 283: Oracle8 - Tistory

분할된 테이블과 인덱스에 대한 병렬 DDL 문은 다음과 같습니다.

■ C R E ATE INDEX

■ C R E ATE TA B L E...AS SELECT

■ A LTER TA B L E. . . M OVE PA RT I T I O N

■ A LTER TA B L E...SPLIT PA RT I T I O N

■ A LTER TA B L E. . . C OALESCE PA RT I T I O N

■ A LTER INDEX...REBUILD PA RT I T I O N

■ A LTER INDEX...SPLIT PA RTITION - 분리되는 (글로벌) 인덱스 분할 영역이 사용 가능한 경우에만

이러한 모든 DDL 작업은 병렬 또는 직렬 작업에 대해 로깅이 없는 모드(25-5 페이지“로깅 모드”참조)로 수행될 수 있습니다.

인덱스 구성 테이블에 대한 C R E ATE TA B L E은 AS SELECT 절의 존재 여부에 관계없이 병렬화될 수 있습니다.

서로 다른 작업(26-27 페이지의 표 26-1 참조)에 대해서는 서로 다른 병렬화가 사용됩니다. 병렬 c reate (분할된) table as select와병렬 c reate (분할된) index는 분할 영역의 수와 같은 병렬도로 실행됩니다.

분할 영역 병렬 분석 테이블은 분할된 테이블 전체에 대한 병렬 분석이 다중 사용자세션으로 구성될 수 있으므로 A NA LYZE {TA B L E, INDEX} PA RTITION 명령어로 작성할 필요가 없습니다.

병렬 D D L은 객체 열 또는 LOB 열을 가진 테이블에서는 발생할 수 없습니다.

추가 정보: 병렬 DDL 문의 구문 및 사용에 대한 내용은 O ra c l e 8 iSQL 참조서를 참조하십시오.

병렬 C R E ATE TABLE...AS SELECT

의사 결정 지원 응용 프로그램은 성능 상의 이유로 대량의 데이터를 소규모 테이블로요약하거나“롤업”하여 임시 질의나 의사 결정 지원 질의에 사용해야 합니다. 롤업은시스템이 활성화되지 않은 짧은 기간 동안에 정기적으로(매일 밤 또는 매주) 발생합니다.

병렬 실행을 사용하여 다른 테이블이나 테이블 집합에서의 하위 질의로 테이블을 생성하는 질의 및 생성 작업을 병렬화할 수 있습니다.

그림 2 6 - 6은 하위 질의에서 병렬로 테이블을 생성하는 예를 나타냅니다.

병렬 실행 2 6 - 3 1

병렬 D D L

Page 284: Oracle8 - Tistory

주: 클러스터화된 테이블은 병렬로 생성되거나 채워질 수 없습니다.

그림 26-6 병렬로 요약 테이블 생성

복구성과 병렬 D D L

요약 테이블 데이터가 다른 테이블에서 파생되는 경우 더 작은 요약 테이블에 대한매체 장애로부터의 복구 기능은 요약 테이블 생성 동안에 중요하지 않으며 해제될 수도 있습니다.

병렬 테이블 생성(또는 다른 병렬 DDL 작업) 동안에 로깅을 비활성화하는 경우 테이블이 생성되면 매체 장애로 인한 테이블 손실을 막기 위해 테이블을 포함하는 테이블스페이스를 백업해야 합니다.

C R E AT E / A LTER TABLE/INDEX 문의NOLOGGING 절을사용하여 언두 및 리두 로그 생성을 비활성화합니다. 자세한 내용은 25-5 페이지“로깅 모드”를 참조하십시오.

2 6 - 3 2 Oracle8i 개념 설명서, 볼륨 2

병렬 D D L

병렬 실행 조정자

병렬 실행 서버 병렬 실행 서버

D A I L Y _ S A L E S테이블

SUMMARY 테이블

CREATE TABLE summary(C1, AVGC2, SUMC3)

PARALLEL (5)ASSELECTC1, AVG(C2), SUM(C3)FROM DAILY_SALESGROUP BY (C1);

Page 285: Oracle8 - Tistory

추가 정보: 병렬로 생성된 테이블 복구에 대한 내용은 O racle8i 관리자설명서를 참조하십시오.

병렬 D D L에 대한 영역 관리

병렬로 테이블이나 인덱스를 생성하면 병렬 작업 수행 중에 필요한 저장 영역 및 테이블이나 인덱스가 생성된 다음 사용할 수 있게 된 사용 가능 영역 모두에 영향을 주는 영역 관리 암시 사항을 갖게 됩니다.

C R E ATE TABLE...AS SELECT 및C R E ATE INDEX에 대한 저장 영역

병렬로 테이블이나 인덱스를 생성하는 경우 각 병렬 실행 서버는 C R E ATE 문의S T O R AGE 절에 있는 값을 사용하여 행을 저장하는 임시 세그먼트를 생성합니다.따라서 INITIAL 값 5 M와 PARALLEL DEGREE 값 1 2로 생성된 테이블은 각 프로세스가 5 M B의 확장 영역으로 시작하므로 테이블을 생성하는 동안 적어도 6 0 M B의저장 영역을 소비합니다. 병렬 실행 조정자가 세그먼트를 결합하는 경우 일부 세그먼트가 잘려 결과 테이블이 요구된 6 0 M B보다 작을 수 있습니다.

추가 정보: C R E ATE TABLE 명령어 구문에 대한 내용은 O ra c l e 8 iSQL 참조서를 참조하십시오.

사용 가능 영역과 병렬 D D L

병렬로 테이블이나 인덱스를 생성하는 경우 각 병렬 실행 서버는 새로운 확장 영역을할당하고 할당 영역을 테이블이나 인덱스의 데이터로 채웁니다. 따라서 인덱스를 병렬도 3으로 생성하면 해당 인덱스에 대한 확장 영역이 초기에는 적어도 세 개가 됩니다. (이것은 병렬로 인덱스를 재작성하거나 병렬로 분할 영역을 이동, 분할, 재작성할때도 적용됩니다. )

직렬 작업을 수행하려면 스키마 객체에 적어도 하나의 확장 영역이 있어야 합니다.병렬 생성을 수행하려면 테이블이나 인덱스에 적어도 스키마 객체를 생성하는 병렬실행 서버 수만큼의 확장 영역이 있어야 합니다.

테이블이나 인덱스를 병렬로 생성하는 경우 사용 가능한 영역 외부나 내부 단편화의“포켓”을 생성할 수도 있습니다. 이것은 병렬 실행 서버가 사용하는 임시 세그먼트가행을 저장하는데 필요한 영역보다 더 클 때 발생합니다.

■ 각 임시 세그먼트의 사용되지 않는 영역이 테이블스페이스 레벨에서 설정된 M I N -IMUN EXTENT 매개변수 값보다 크면 O ra c l e은 모든 임시 세그먼트에 있는 행을 테이블이나 인덱스로 병합할 때 사용되지 않은 영역을 잘라냅니다. 사용되지 않은 영역은 시스템 사용 가능 영역으로 되돌려지며 새로운 확장 영역에 대해 할당될

병렬 실행 2 6 - 3 3

병렬 D D L

Page 286: Oracle8 - Tistory

수 있습니다. 그러나 이것은 연속된 영역이 아니므로 하나의 큰 세그먼트로 합쳐질수 없습니다. (외부 단편화)

■ 각 임시 세그먼트의 사용되지 않은 영역이 MINIMUN EXTENT 매개변수 값보다 작으면 임시 세그먼트에 있는 행이 테이블이나 인덱스로 병합될 때 사용되지않은 영역을 잘라낼 수 없습니다. 이러한 사용되지 않은 영역은 시스템 사용 가능영역으로 되돌려지지 않습니다. 이것은 테이블이나 인덱스의 일부가 되며(내부 단편화) 추가 영역을 필요로 하는 후속 삽입이나 갱신에 대해서만 사용할 수 있습니다.

예를 들어, CREATE TA B L E...AS SELECT 문에 대해 병렬도를 3으로 지정했지만 테이블스페이스에 하나의 데이터 파일만 있는 경우 그림 2 6 - 7에서 보는 바와 같이내부 단편화가 발생할 수 있습니다. 데이터 파일의 내부 테이블 확장 영역 내의 사용가능 영역의“포켓”은 다른 사용 가능 영역과 합쳐질 수 없으며 확장 영역으로 할당될수 없습니다. 사용 가능 영역 병합에 대한 자세한 내용은 3장“테이블스페이스와 데이터 파일”을 참조하십시오.

추가 정보: 테이블이나 인덱스 병렬 생성에 대한 자세한 내용은 O ra c l -e8i Tuning을 참조하십시오.

2 6 - 3 4 Oracle8i 개념 설명서, 볼륨 2

병렬 D D L

Page 287: Oracle8 - Tistory

그림 26-7 사용할 수 없는 사용 가능 영역(내부 단편화)

병렬 D M L

병렬 D M L (병렬 삽입, 갱신 및 삭제)은 병렬 실행 기법을 사용하여 대용량 데이터베이스 테이블과 인덱스에 대해 대규모 DML 작업 속도를 향상시킵니다.

주: 일반적으로 데이터 조작어( D M L )는 질의를 포함하지만 이 장에서“D M L”이라는 용어는 삽입, 갱신, 삭제만을 의미합니다.

병렬 실행 2 6 - 3 5

병렬 D M L

CREATE TABLE emp AS SELECT...

USERS 테이블스페이스

D A T A 1 . O R A

I N S E R T에 대해사용 가능한 영역

I N S E R T에 대해사용 가능한 영역

병렬 실행서버

병렬 실행서버

병렬 실행서버

EXTENT 1

EXTENT 2

EXTENT 3

I N S E R T에 대해사용 가능한 영역

Page 288: Oracle8 - Tistory

이 단원에서는 다음과 같은 병렬 DML 내용을 설명합니다.

■ 수동 병렬화에 대한 병렬 D M L의 장점

■ 병렬 DML 사용 시기

■ 병렬 DML 활성화

■ 병렬 D M L에 대한 트랜잭션 모델

■ 병렬 D M L에 대한 복구

■ 병렬 D M L에 대한 영역 고려 사항

■ 병렬 D M L에 대한 자원 잠금 및 대기열에 넣기

■ 병렬 D M L에 대한 제한 사항

병렬 삽입문에 대한 자세한 내용은 2 5장“직접 로드 I N S E RT”를 참조하십시오.

수동 병렬화에 대한 병렬 D M L의 장점

서로 다른 데이터 집합에 대해 동시에 여러 DML 명령어를 실행하여 DML 작업을수동으로 병렬화할 수 있습니다. 예를 들어, 다음과 같이 수동으로 병렬화할 수 있습니다.

■ O racle Pa rallel Serv e r의 다중 인스턴스에 다중 I N S E RT 문을 실행하여 다중사용 가능 목록 블록에서 사용 가능 영역을 사용할 수 있도록 합니다.

■ 서로 다른 키 값 범위 또는 ROWID 범위를 가진 다중 U P DAT E와 DELETE 문을 실행합니다.

그러나 수동 병렬화에는 다음과 같은 단점이 있습니다.

■ 사용하기가 어렵습니다. 사용자는 (서로 다른 인스턴스에) 다중 세션을 열어 다중명령문을 실행해야 합니다.

■ 트랜잭션의 특성이 결핍되어 있습니다. DML 문이 서로 다른 시점에서 실행되므로 변경으로 인해 데이터베이스에 일치하지 않는 스냅샷이 만들어집니다. 유일성을 얻으려면 여러 명령문의 커밋 또는 롤백이 (인스턴스를 통해) 수동으로 조정되어야 합니다.

■ 작업 분할이 복잡합니다. 작업을 제대로 나누는 ROWID 또는 키 값의 범위를 찾기 위해 테이블을 질의해야 합니다.

■ 친화력과 자원 정보가 부족합니다. Oracle Pa rallel Serv e r를 실행 중인 경우 올바른 인스턴스에서 올바른 DML 문을 실행하기 위해 친화력 정보를 알아야 합니

2 6 - 3 6 Oracle8i 개념 설명서, 볼륨 2

병렬 D M L

Page 289: Oracle8 - Tistory

다. 또한 인스턴스 간의 작업 로드 균형을 조절하기 위해 현재 자원 사용에 대해알아야 합니다.

병렬D M L은 삽입, 갱신, 삭제를병렬로 자동으로수행하여이러한 단점을 제거합니다.

병렬 DML 사용 시기

병렬 DML 작업은 주로 대용량 데이터베이스 객체에 대해 대용량 DML 작업을 신속하게 처리하는데 사용됩니다. 병렬 D M L은 대규모 객체에 대한 액세스 성능과 신축성이 중요한 의사 결정 지원 시스템(DSS) 환경에서 특히 유용합니다. 병렬 D M L은DSS 데이터베이스에 대해 질의와 갱신 능력을 제공한다는 점에서 병렬 질의를 보완합니다.

병렬화 설정의 오버헤드로 인해 간단한 O LTP 트랜잭션에 대해서는 병렬 DML 작업이 부적합합니다. 그러나 병렬 DML 작업은 O LTP 데이터베이스에서 실행되는 일괄처리 작업 속도를 향상시킬 수 있습니다.

데이터 웨어하우스 시스템의 테이블 갱신

데이터 웨어하우스 시스템에서 대규모 테이블은 생산 시스템의 새로운 데이터나 수정된 데이터로 정기적으로 갱신되어야 합니다. 갱신 가능한 조인 뷰와 결합된 병렬D M L을 사용하여 이러한 작업을 효율적으로 수행할 수 있습니다.

갱신되어야 하는 데이터는 일반적으로 갱신 프로세스를 시작하기 전에 임시 테이블에로드됩니다. 임시 테이블에는 데이터 웨어하우스의 마지막 갱신 이후에 갱신된 행 또는 새로운 행이 포함되어 있습니다. 병렬 U P DAT E를 가진 갱신 가능한 조인 뷰를사용하여 갱신된 행을 갱신할 수 있으며, 병렬 I N S E RT를 가진 반대 해시 조인을 사용하여 새로운 행을 갱신할 수 있습니다.

추가 정보: 자세한 내용은 O racle8i Tuning을 참조하십시오.

중간 요약 테이블

DSS 환경에 있는 대부분의 응용 프로그램은 많은 대용량 중간 요약 테이블을 구성하고 조작하는 것과 관련된 복잡한 계산을 필요로 합니다. 이러한 요약 테이블은 대부분 일시적이며 자주 기록될 필요가 없습니다. 병렬 D M L은 이러한 대용량 중간 테이블에 대한 작업 속도를 향상시킵니다. 한 가지 장점은 중간 테이블에 증가된 결과를저장하여 병렬 U P DAT E를 수행할 수 있다는 것입니다.

또한 요약 테이블은 응용 프로그램 세션이 종료되어도 유지되어야 하는 누적 정보나 비교 정보를 포함할 수 있습니다. 따라서 임시 테이블은 적합하지 않습니다. 병렬 D M L

병렬 실행 2 6 - 3 7

병렬 D M L

Page 290: Oracle8 - Tistory

작업은 이러한 대용량 요약 테이블에 대한 변경 속도를 향상시킬 수 있습니다.

점수 기록 테이블

대부분의 DSS 응용 프로그램은 일련의 범주를 기준으로 정기적으로 고객의 점수를기록합니다. 점수는 보통 대규모 DSS 테이블에 저장됩니다. 이러한 점수 정보는 예를 들어, 우편 목록에 포함할 것인지의 여부와 같이 의사 결정에 사용됩니다.

점수 기록 작업은 대규모 테이블에 있는 수많은 행을 질의하거나 갱신합니다. 병렬D M L은 이러한 대규모 테이블에 대한 작업 속도를 향상시킵니다.

기록 테이블

기록 테이블을 통해 최근의 시간 간격에 대한 기업의 업무 트랜잭션을 알 수 있습니다. DBA는 정기적으로 오래된 행 집합을 삭제하고 새로운 행 집합을 테이블에 삽입합니다. 병렬 I N S E RT. . . S E L E C T와 병렬 DELETE 작업은 이러한 작업의 수행 속도를 향상시킵니다.

또한 병렬 직접 로더( S Q L * L o a d e r )를 사용하여 외부 소스에서 대량의 데이터를 삽입할 수 있지만 데이터베이스의 다른 테이블에 있는 데이터를 삽입하는데는 병렬I N S E RT. . . S E L E C T가 더 빠릅니다.

분할 영역을 삭제하여 이전 행을 삭제할 수 있지만 이렇게 하려면 테이블이 해당 시간 간격을 가진 날짜를 기준으로 분할되어야 합니다.

일괄처리 작업

작업을 수행하지 않는 시간 동안 O LTP 데이터베이스에서 실행되는 일괄처리 작업은작업이 완료되어야 하는 고정된 시간 창을 가집니다. 제 시간에 작업이 완료되는 것을 보장하는 가장 좋은 방법은 이러한 작업을 병렬화하는 것입니다. 작업 로드가 증가할수록 더 많은 기계 자원이 추가될 수 있습니다. 병렬 작업의 신축성은 시간 제약조건을 만족시킬 수 있음을 보장합니다.

병렬 DML 활성화

DML 문은 A LTER SESSION 문의 E NABLE PARALLEL DML 옵션을통해 세션에서 병렬 D M L을 명시적으로 활성화한 경우에만 병렬화될 수 있습니다. 이 모드는 병렬 D M L과 직렬 D M L이 다른 잠금과 트랜잭션, 디스크 영역 요구 사항을 가지므로 필요합니다. (26-41 페이지“병렬 D M L에 대한 영역 고려 사항”및 26-42 페이지“병렬 D M L에 대한 자원 잠금 및 대기열에 넣기”참조)

2 6 - 3 8 Oracle8i 개념 설명서, 볼륨 2

병렬 D M L

Page 291: Oracle8 - Tistory

세션의 기본 모드는 D I SABLE PARALLEL DML입니다. PARALLEL DML이비활성화된 경우 PARALLEL 힌트나 PARALLEL 절이 사용되더라도 모든 D M L은 병렬로 실행될 수 없습니다.

세션에서 PARALLEL DML이 활성화된 경우 해당 세션에 있는 모든 DML 문은 병렬 실행으로 간주됩니다. 그러나 PARALLEL DML이 활성화되었어도 병렬 힌트 또는 병렬 절이 없거나 병렬 작업에 대한 제한 사항을 위반하면 DML 작업이 순차적으로 실행될 수 있습니다. (26-43 페이지“병렬D M L에 대한 제한 사항”참조)

세션의 PARALLEL DML 모드는 SELECT 문, DDL 문, DML 문의 질의 부분병렬화에 영향을 주지 않습니다. 따라서 이 모드가 설정되지 않으면 DML 작업은 병렬화되지 않지만 DML 문 내에 있는 스캔이나 조인 작업은 여전히 병렬화될 수 있습니다.

PARALLEL DML로활성화된 트랜잭션

PARALLEL DML에 대해 활성화된 세션은 트랜잭션을 특수 모드에 있는 세션에 넣을 수도 있습니다. 트랜잭션의 DML 문이 테이블을 병렬로 수정하는 경우 이후의 직렬 또는 병렬 질의나 DML 문은 해당 트랜잭션에서 동일한 테이블을 다시 액세스할수 없습니다. 이것은 트랜잭션 중에 병렬 수정 결과를 볼 수 없음을 의미합니다.

동일한 트랜잭션 내에서 병렬로 수정된 테이블에 액세스를 시도하는 직렬 또는 병렬명령문은 오류 메시지와 함께 거부됩니다.

PL/SQL 프로시저 또는 블록이 활성화된 PARALLEL DML 세션에서 실행되는 경우 이 단원에서 설명하는 모든 규칙은 프로시저 또는 블록에 있는 각 명령문에 적용됩니다.

병렬 D M L에 대한 트랜잭션 모델

병렬 실행 조정자는 병렬 실행 서버를 획득하거나 생성하고, 각 병렬 실행 서버는 자신의 병렬 프로세스 트랜잭션에서 작업의 일부를 실행하여 병렬로 DML 작업을 실행합니다.

■ 각 병렬 실행 서버는 각기 다른 병렬 프로세스 트랜잭션을 생성합니다.

■ 롤백 세그먼트에 대한 경합을 줄이려면 몇 개의 병렬 프로세스 트랜잭션만이 동일한 롤백 세그먼트에 있어야 합니다. (다음 단원 참조)

조정자는 또한 자신의 조정자 트랜잭션을 가지며 자신의 롤백 세그먼트를 가질 수 있습니다.

병렬 실행 2 6 - 3 9

병렬 D M L

Page 292: Oracle8 - Tistory

롤백 세그먼트

O ra c l e은 트랜잭션을 가장 활동이 적은 트랜잭션을 가지고 있는 롤백 세그먼트에 할당합니다. 포워드 및 실행 취소 작업의 실행 속도를 향상시키려면 적어도 두 개의 병렬 프로세스 트랜잭션이 하나의 롤백 세그먼트에 할당될 수 있도록 충분한 롤백 세그먼트를 생성하여 온라인으로 설정해야 합니다.

필요한 경우 롤백 세그먼트를 확장할 수 있는 충분한 영역을 가진 테이블스페이스에생성하고 롤백 세그먼트에 대한 MAXEXTENTS 저장 영역 매개변수를 U N L I M I -T E D로 설정합니다. 또한 롤백 세그먼트에 대해 OPTIMAL 값을 설정하면 병렬DML 트랜잭션 커밋 후 롤백 세그먼트는 OPTIMAL 크기로 줄어들게 됩니다.

2단계 커밋

병렬 DML 작업은 하나 이상의 독립된 병렬 프로세스 트랜잭션에 의해 실행됩니다.사용자 레벨의 트랜잭션 유일성을 보장하기 위해 조정자는 2단계 커밋 프로토콜을 사용하여 병렬 프로세스 트랜잭션이 수행한 변경 사항을 커밋합니다.

이 2단계 커밋 프로토콜은 단순화된 새로운 버전으로 공유 디스크 구조를 사용하여트랜잭션 복구 동안 트랜잭션의 상태 검사 속도를 향상시킵니다. 2단계 커밋 프로토콜은 O racle XA 라이브러리를 필요로 하지 않습니다. 미확정 트랜잭션은 사용자에게는 보이지 않습니다.

병렬 D M L에 대한 복구

병렬 DML 작업을 롤백하는데 필요한 시간은 포워드 작업을 수행하는 시간과 거의유사합니다.

O ra c l e은 트랜잭션 및 프로세스 장애 후와 인스턴스 및 시스템 장애 후에 병렬 롤백을 지원합니다. Ora c l e은 트랜잭션 복구의 롤포워드 단계와 롤백 단계를 모두 병렬화할 수 있습니다.

추가 정보: 병렬 롤백에 대한 자세한 내용은 O racle8i Backup andR e c o v e ry Guide를 참조하십시오.

사용자 실행 롤백을 위한 트랜잭션 복구

명령문 오류로 인한 트랜잭션 장애에서 사용자가 수행한 롤백은 병렬 실행 조정자와병렬 실행 서버에 의해 병렬로 수행됩니다. 롤백은 포워드 트랜잭션과 거의 동일한정도의 시간이 소요됩니다.

2 6 - 4 0 Oracle8i 개념 설명서, 볼륨 2

병렬 D M L

Page 293: Oracle8 - Tistory

프로세스 복구

병렬 DML 조정자나 병렬 실행 서버 장애로부터의 복구는 PMON 프로세스에 의해수행됩니다.

■ 단일 병렬 실행 서버에 장애가 발생하면 P M O N은 해당 프로세스 작업을 롤백하고 모든 다른 병렬 실행 서버는 자신의 작업을 롤백합니다.

■ 여러 병렬 실행 서버에 장애가 발생하면 P M O N은 해당 프로세스의 모든 작업을순차적으로 롤백합니다.

■ 병렬 실행 조정자에 장애가 발생하면 P M O N은 조정자를 복구하고 모든 병렬 실행 서버는 자신의 작업을 병렬로 롤백합니다.

시스템 복구

시스템 장애로부터 복구하려면 시스템을 다시 시동해야 하며 SMON 프로세스가 복구를 수행하고 S M O N이 복구 서버 프로세스를 생성합니다. 병렬 DML 문은 병렬롤백을 사용하여 병렬로 복구될 수 있습니다. 초기화 매개변수 C O M PAT I B L E이8.1.3 이상으로 설정되어 있는 경우 요구 시 빠른 시작 롤백은 요구 즉시 사용 불능트랜잭션을 한 번에 한 블록씩 복구하도록 합니다. (32-14 페이지“요구 시 빠른 시작 롤백”참조)

인스턴스 복구( O racle Parallel Serve r )

O racle Pa rallel Serv e r에서 인스턴스 장애 복구는 다른 활동 중인 인스턴스의 복구프로세스(즉, SMON 프로세스와 SMON 프로세스가 생성한 임의의 복구 서버 프로세스)에 의해 수행됩니다. 활동 중인 인스턴스의 각 복구 프로세스는 장애가 발생한인스턴스에 있는 병렬 실행 조정자 및 병렬 실행 서버 트랜잭션을 독립적으로 복구할수 있습니다.

병렬 D M L에 대한 영역 고려 사항

병렬 U P DAT E는 데이터에 대한 새로운 세그먼트를 얻는 직접 로드 I N S E RT와는반대로 기존 객체에 있는 영역을 사용합니다.

다중 동시 하위 트랜잭션이 객체를 수정하므로 명령문이 순차적으로 실행되는 것과병렬로 실행되는 것은 영역 사용 특성이 다를 수도 있습니다.

직접 로드 I N S E RT의 영역에 대한 내용은 25-8 페이지“영역 고려 사항”을 참조하십시오.

병렬 실행 2 6 - 4 1

병렬 D M L

Page 294: Oracle8 - Tistory

병렬 D M L에 대한 자원 잠금 및 대기열에 넣기

병렬 D M L에 대한 자원 잠금 및 대기열에 넣기 요구 사항은 직렬 DML 요구 사항과는 매우 다릅니다. 병렬 D M L은 더 많은 잠금을 보유하므로 E N Q U E U E _ R E S O U -RC E S와 DML_LOCKS 매개변수의값을 증가시켜야 합니다.

병렬 U P DAT E, DELETE, INSERT 문에 대한 프로세스는 다음과 같은 잠금을 획득합니다.

■ 병렬 실행 조정자는 다음을 획득합니다.

- 1 테이블 잠금 S X

- 분할 영역/하위 분할 영역 당 1 분할 영역 잠금 X

분할된 테이블에 대한 병렬 I N S E RT의 경우 조정자는 모든 분할 영역에 대한 분할 영역 잠금을 획득합니다. 병렬 U P DAT E, DELETE의 경우 조정자는 W H E -RE 절이 관련된 분할 영역을 제한하지 않는 한 모든 분할 영역에 대해 분할 영역잠금을 획득합니다.

■ 각 병렬 실행 서버는 다음을 획득합니다.

- 1 테이블 잠금 S X

- 분할 영역/하위 분할 영역 당 1 분할 영역 잠금 N U L L

- 분할 영역/하위 분할 영역 당 1 분할 영역 대기 잠금 X

병렬 실행 서버는 하나 이상의 분할 영역에서 작업할 수 있지만 하나의 분할 영역은하나의 병렬 실행 서버에 의해서만 작업이 이루어집니다.

예를 들어, 병렬도 1 0 0으로 실행되는 6 0 0개의 분할 영역을 가진 테이블의 경우 병렬DML 문은 다음과 같은 잠금을 필요로 합니다. (모든 분할 영역이 명령문에 관련된경우를 가정)

■ 조정자는 1 테이블 잠금 S X와 600 분할 영역 잠금 X를 획득합니다.

■ 전체 병렬 실행 서버는 100 테이블 잠금 S X, 600 분할 영역 잠금 N U L L, 600분할 영역 대기 잠금 X를 획득합니다.

특별한 유형의 병렬 U P DAT E는 호출된 행을 이전하는 병렬 U P DAT E에 존재합니다. 이러한 병렬 갱신 방식은 행 이동 절을 활성화한 상태로 테이블이 정의된 경우에만 사용되며 행을 다른 분할 영역 또는 하위 분할 영역으로 이동하도록 합니다.

표 2 6 - 2는 다른 유형의 병렬 DML 문에 대해 조정자와 병렬 실행 서버가 획득하는잠금 유형을 요약한 것입니다.

2 6 - 4 2 Oracle8i 개념 설명서, 볼륨 2

병렬 D M L

Page 295: Oracle8 - Tistory

표 26-2 병렬 DML 문이 획득하는 잠금

병렬 D M L에 대한 제한 사항

다음 제한 사항은 병렬 D M L (직접 로드 I N S E RT 포함)에 적용됩니다.

■ 갱신 및 삭제 작업은 분할되지 않은 테이블에 대해 병렬화되지 않습니다.

■ 한 트랜잭션은 다른 테이블을 수정하는 여러 개의 병렬 DML 문을 포함할 수 있지만 병렬 DML 문이 테이블을 수정한 다음 이후의 직렬 또는 병렬 명령문( D M L또는 질의)은 해당 트랜잭션에서 동일한 테이블을 다시 액세스할 수 없습니다.

병렬 실행 2 6 - 4 3

병렬 D M L

명령문유형

분할된 테이블로 병렬 U P D A T E

또는 DELETE. 분할 영역/하위 분

할 영역의 부분 집합으로 제거되

는 W H ER E 절

분할된 테이블로 병렬 행 이전

UPDATE. (하위)분할 영역의 부

분 집합으로 제거되는 W H ER E 절

분할된 테이블로 병렬 UP DA T E ,

D ELETE 또는 I N S E R T

분할되지 않은 테이블로 병렬

I N S E R T

병렬 실행 조정자가 획득하는

잠금

1 테이블 잠금 SX

제거된 (하위) 분할 영역 당

1 분할 영역 잠금 X

1 테이블 잠금 SX

제거된 (하위) 분할 영역 당

1 분할 영역 잠금 X

기타 모든 (하위) 분할 영역에

대한 1 분할 영역 잠금 S X

1 테이블 잠금 SX

모든 (하위) 분할 영역에 대

한 분할 영역 잠금 X

1 테이블 잠금 X

1 테이블 잠금 SX

병렬 실행 서버가 소유한 제거된

(하위) 분할 영역 당 1 분할 영역

잠금 NULL

병렬 실행 서버가 소유한 제거된

(하위) 분할 영역 당 1 분할 영역

대기 잠금 S

1 테이블 잠금 SX

병렬 실행 서버가 소유한 제거된

(하위) 분할 영역 당 1 분할 영역

잠금 NULL

병렬 실행 서버가 소유한 제거된

(하위) 분할 영역 당 1 분할 영역

대기 잠금 S

기타 모든 (하위) 분할 영역에 대

해 1 분할 영역 잠금 S X

1 테이블 잠금 SX

병렬 실행 서버가 소유한 (하위)

분할 영역 당 1 분할 영역 잠금

NULL

병렬 실행 서버가 소유한 (하위)

분할 영역 당 1 분할 영역 대기 잠

금 S

없음

각 병렬 실행 서버가 획득하는 잠금

Page 296: Oracle8 - Tistory

- 또한 이 제한 사항은 직렬 직접 로드 I N S E RT 문 뒤에 존재합니다. 이후의SQL 문(DML 또는 질의)은 트랜잭션 중에 수정된 테이블에 액세스할 수 없습니다.

- 동일한 테이블을 액세스하는 질의는 병렬 DML 또는 직접 로드 I N S E RT 문앞에 올 수 있지만 뒤에는 올 수 없습니다.

- 동일한 트랜잭션 중에 병렬 U P DAT E, 병렬 DELETE 또는 직접 로드 I N S -E RT가 수정한 테이블을 액세스하려고 시도하는 직렬 또는 병렬 명령문은 오류메시지와 함께 거부됩니다.

■ 초기화 매개변수 ROW_LOCKING = INTENT의 경우 (직렬화 가능 모드에 관계없이) 삽입, 갱신, 삭제는병렬화되지 않습니다.

■ 트리거는 병렬 DML 작업에 대해 지원되지 않습니다.

■ 복제 기능은 병렬 D M L에 대해 지원되지 않습니다.

■ 병렬 D M L은 특정 제약 조건이 존재하는 경우 발생할 수 없습니다. 특정 제약 조건에는 자체 참조 무결성, 단계적 삭제 및 지연된 무결성 등이 있습니다. 또한 직접 로드 I N S E RT에 대해 참조 무결성에 대한 지원은 없습니다.

■ 병렬 D M L은 객체 열이나 LOB 열을 가진 테이블 또는 인덱스 구성 테이블에 대해서는 발생할 수 없습니다.

■ 병렬 DML 작업과 관련된 트랜잭션은 분산 트랜잭션일 수 없으며 분산 트랜잭션이 될 수도 없습니다.

■ 클러스터화된 테이블은 지원되지 않습니다.

위반 사항이 발생하면 경고나 오류 메시지 (트랜잭션에서 동일한 테이블을 액세스하는 오류 메시지를 일으킬 수 있는 명령문에 대한 제한 사항 제외) 없이 명령문이 순차적으로 실행됩니다. 예를 들어, 갱신은 분할되지 않은 테이블에 대해서는 순차적으로수행됩니다.

다음 단원에서는 제한 사항에 대한 자세한 내용을 설명합니다.

분할 키 제한 사항

행 이동 절이 활성화된 상태로 테이블이 정의되지 않은 경우 갱신이 행을 새로운 분할 영역으로 이동시키지 않는 한 분할된 테이블의 분할 키를 새로운 값으로 갱신할수 있습니다.

함수 제한 사항

병렬 D M L에 대한 함수 제한 사항은 병렬 DDL 및 병렬 질의에 대한 제한 사항과동일합니다. 26-46 페이지“함수의병렬 실행”을 참조하십시오.

2 6 - 4 4 Oracle8i 개념 설명서, 볼륨 2

병렬 D M L

Page 297: Oracle8 - Tistory

데이터 무결성 제한 사항

이 단원에서는 무결성 제약 조건과 병렬 DML 문의 상호 작용에 대해 설명합니다.

NOT NULL 및 C H E C K 이러한 유형의 무결성 제약 조건이 허용됩니다. 이것은 각각열과 행 레벨에서 강제로 수행되므로 병렬 D M L에 대한 문제점이 아닙니다.

UNIQUE 및 P RIMARY KEY 이러한 유형의 무결성 제약 조건이 허용됩니다. .

FO REIGN KEY(참조 무결성) 한 테이블에 대한 DML 작업으로 인해 다른 테이블에대한 재귀 DML 작업이 발생하는 경우에는 언제나 참조 무결성에 대한 제한 사항이있으며 또한 무결성 검사 수행을 위해 수정되는 객체에 발생한 모든 변경 사항을 동시에 보아야 합니다.

표 2 6 - 3은 참조 무결성 제약 조건과 관련된 테이블에 대해 수행할 수 있는 모든 작업목록입니다.

표 26-3 참조 무결성 제한 사항

DML 문 상위에서 실행 하위에서 실행 자체 참조

I N S E R T (적용 불가능) 병렬화 불가능 병렬화불가능

UPDATE NO Action 지원됨 지원됨 병렬화 불가능

DELETE NO Action 지원됨 지원됨 병렬화 불가능

DELETE Cascade 병렬화 불가능 (적용 불가능) 병렬화 불가능

단계적 삭제 병렬 실행 서버가 여러 분할 영역(상위와 하위 테이블)에서 행을 삭제하려고 하므로 외래 키를 가진 테이블에 대한 단계적 삭제는 병렬화되지 않습니다.

자체 참조 무결성 자체 참조 무결성 제약 조건을 가진 테이블에 대한 D M L은 참조키(기본 키)가 관련된 경우 병렬화되지 않습니다. 다른 모든 열에 대한 D M L의 경우병렬화가 가능합니다.

지연 가능 무결성 제약 조건 작업이 수행되는 테이블에 대해 지연 가능 제약 조건이있는 경우 DML 작업은 병렬화되지 않습니다.

병렬 실행 2 6 - 4 5

병렬 D M L

Page 298: Oracle8 - Tistory

트리거 제한 사항

트리거가 명령문의 결과로 실행되는 영향을 받은 테이블에 대해 활성화되면 DML 작업은 병렬화될 수 없습니다. 이것은 복제되고 있는 테이블에 대해 DML 문이 병렬화될 수 없음을 의미합니다.

관련 트리거는 테이블에 대한 D M L을 병렬화하기 위해 비활성화되어야 합니다. 트리거 활성화/비활성화는 종속 공유 커서를 무효화합니다.

분산 트랜잭션 제한 사항

DML 작업은 분산 트랜잭션에 있거나 DML 또는 질의 작업이 원격 객체에 대한 작업인 경우 병렬화될 수 없습니다.

예 1 : 원격 객체를 질의하는 DML 문

INSERT /* APPEND PARALLEL (t3,2) */ INTO t3 SELECT * FROM t4@dblink;

질의 작업은 원격 객체를 참조하므로 알림없이 순차적으로 실행됩니다.

예 2 : 원격 객체에 대한 DML 작업

DELETE /*+ PARALLEL (t1,2) */ FROM t1@dblink;

DELETE 작업은 원격 객체를 참조하므로 병렬화되지 않습니다.

예 3 : 분산 트랜잭션

SELECT * FROM t1@dblink; DELETE /*+ PARALLEL (t2,2) */ FROM t2; COMMIT;

DELETE 작업은 (SELECT 문으로 시작되는) 분산 트랜잭션에서 발생되므로 병렬화되지 않습니다.

함수의 병렬 실행

PL/SQL 또는 J av a로 작성되거나 C로 된 외부 프로시저로 작성된 사용자 정의 함수의 실행은 병렬화될 수 있습니다. 그러나 함수가 사용하는 임의의 PL/SQL 패키지변수 또는 J ava 정적 속성은 각각의 개별 병렬 실행 프로세스 전용이며 각 병렬 실행프로세스를 시작할 때 원래의 세션에서 복사되지 않고 새로 초기화됩니다. 이로 인해병렬로 실행하는 경우 모든 함수가 정확한 결과를 생성하지는 않습니다.

2 6 - 4 6 Oracle8i 개념 설명서, 볼륨 2

함수의 병렬 실행

Page 299: Oracle8 - Tistory

사용자 작성 함수가 병렬로 실행되도록 하려면 C R E ATE FUNCTION 또는 C R E -ATE PAC K AGE 문으로 함수를 선언할 때 PA R A L L E L _ E NABLE 키워드를 사용합니다.

병렬 질의 함수

SELECT 문이나 DML 또는 DDL 문의 하위 질의에서는 PA R A L L E L _ E NA B L E키워드로 선언된 경우, 패키지 또는 유형에서 선언되고 W N D S, RNPS 및 W N P S를 모두 나타내는 P R AGMA RESTRICT_REFERENCES가 있는 경우 또는C R E ATE FUNCTION으로 선언되고 시스템이 PL/SQL 코드 본문을 분석할 수 있고 해당 코드가 데이터베이스에 쓰지 않거나 패키지 변수를 읽거나 수정하지 않는다고 결정할 수 있는 경우 사용자 작성 함수는 병렬로 실행될 수 있습니다.

주어진 함수가 순차적으로 실행되어야 하는 경우에도 일부 질의 또는 하위 질의는 때때로 병렬로 실행될 수 있습니다.

추가 정보: P R AGMA RESTRICT_REFERENCES에 대한 설명은O racle8i Application Dev e l o p e r’s Guide - Fundamentals를,C R E ATE FUNCTION에 대한 설명은 O racle8i SQL 참조서를 참조하십시오.

병렬 D M L과 DDL 문 함수

병렬 질의에서와 같이 병렬 DML 또는 DDL 문에서는 PA R A L L E L _ E NABLE 키워드로 선언된 경우, 패키지 또는 유형에서 선언되고 R N D S, WNDS, RNPS 및W N P S를 모두 나타내는 P R AGMA RESTRICT_REFERENCES를 가진 경우 또는 C R E ATE FUNCTION으로 선언되고 시스템이 PL/SQL 코드 본문을 분석할 수있고 해당 코드가 데이터베이스에 읽거나 쓰지 않거나 또는 패키지 변수를 읽거나 수정하지 않는다고 결정할 수 있는 경우 사용자 작성 함수는 병렬로 실행될 수 있습니다.

병렬 DML 문의 경우 병렬로 실행될 수 없는 임의의 함수를 호출하면 전체 DML 문이 순차적으로 실행됩니다.

I N S E RT...SELECT 또는C R E ATE TA B L E...AS SELECT 문의 경우 질의 부분에서의 함수 호출은 이전 단락의 병렬 질의 규칙에 따라 병렬화될 수 있습니다. 즉,명령문의 나머지 부분이 순차적으로 실행되어야 하더라도 질의는 병렬화될 수 있습니다. 이와 반대의 경우도 마찬가지입니다.

병렬 실행 2 6 - 4 7

함수의 병렬 실행

Page 300: Oracle8 - Tistory

친화력

주의: 이 단원에서 설명하는 기능은 Pa rallel Server Option이 있는O racle8i Enterprise Edition을 구입한 경우에만 사용할 수 있습니다. Oracle8i Enterprise Edition에서 사용 가능한 기능 및 옵션에대해서는 O racle8i 입문서를 참조하십시오.

공유 디스크 클러스터나 대용량 병렬 처리(MPP) 구성에서 인스턴스가 실행 중인 프로세스에서 직접 장치에 액세스할 수 있는 경우 O racle Pa rallel Serv e r의 인스턴스는 장치에 대해 친화력을 가진다고 합니다. 이와 마찬가지로 파일이 저장되어 있는장치에 대해 친화력을 가지는 경우 인스턴스는 파일에 대해 친화력을 가집니다.

친화력에 대한 결정은 여러 장치에 걸쳐 있는 파일에 대한 임의의 결정과 관련됩니다. 다소 임의적으로 인스턴스가 테이블스페이스에 있는 첫 번째 파일에 대한 친화력을 가지고 있는 경우 인스턴스는 테이블스페이스(또는 테이블스페이스 내에 있는 테이블이나 인덱스의 분할 영역)에 대한 친화력을 가지고 있다고 합니다.

O ra c l e은 병렬 실행 서버에 작업을 할당하는 경우 친화력을 고려합니다. SQL 문의병렬 실행을 위해 친화력을 사용하는 것은 사용자에게 그대로 보여집니다.

친화력 및 병렬 질의

병렬 질의의 친화력은 데이터에“근접한”프로세스에서 스캔을 수행함으로써 디스크에서 데이터를 스캔하는 속도를 증가시킵니다. 이 친화력을 사용하면 공유 디스크를지원하지 않는 시스템에 대해 상당한 성능 향상을 얻을 수 있습니다.

친화력에 대한 가장 일반적인 사용은 하나의 장치에 있는 하나의 파일에 저장될 테이블이나 인덱스 분할 영역에 대한 경우입니다. 이러한 구성을 사용하면 장치 장애로발생하는 손상을 제한함으로써 높은 가용성을 얻을 수 있으며 분할 영역 병렬 인덱스스캔을 최대로 사용할 수 있습니다.

DSS 고객은 여러 장치(총 장치 수의 부분 집합)에 걸쳐 테이블 분할 영역을 스트라이프하고자 할 수도 있습니다. 이를 사용하여 질의는 범주 분할을 통해 액세스되는데이터의 총 양을 자를 수 있으며 그러면서도 여전히 ROWID 범위 병렬 테이블(분할영역) 스캔을 통해 병렬화를 얻을 수 있습니다. 장치가 R A I D로 구성되어 있는 경우가용성이 좋은 상태로 유지될 수 있습니다. DSS에 대해 사용되는 경우에도 인덱스는개별 장치에 분할되어야 합니다.

다른 구성(예를 들어, 여러 장치에 걸쳐 있는 한 파일의 여러 분할 영역)에서 올바른질의 결과를 산출하지만 힌트를 사용하거나 명시적으로 객체 속성을 설정하여 올바른병렬도를 선택해야 합니다.

2 6 - 4 8 Oracle8i 개념 설명서, 볼륨 2

친화력

Page 301: Oracle8 - Tistory

친화력 및 병렬 D M L

병렬 D M L의 경우(삽입, 갱신, 삭제) 친화력 향상은 분할 영역에 대한 친화력이 있는 노드로 DML 작업의 경로를 지정하여 캐시 성능을 향상시킵니다.

친화력은 인스턴스 집합이나 병렬 실행 서버에 작업을 분배하는 방법을 결정하여 병렬로 DML 작업을 수행합니다. 친화력은 몇 가지 방법으로 질의의 성능을 향상시킬수 있습니다.

1 . 특정 MPP 구조에 대해 O ra c l e은 장치 대 노드 친화력 정보를 사용하여 병렬 실행 서버를 생성할 노드(병렬 프로세스 할당)와 특정 노드(작업 할당)에 전송하는작업 단위( ROWID 범위 또는 분할 영역)를 결정합니다. 노드가 주로 로컬 장치에 액세스하도록 하며 모든 노드에 대해 더 높은 버퍼 캐시 적중률을 부여하며네트워크 오버헤드와 입출력 회전 지연을 줄임으로써 더 높은 성능을 얻을 수 있습니다.

2 . SMP 공유 디스크 클러스터에 대해 O ra c l e은 라운드 로빈 기법을 사용하여 장치를 노드에 할당합니다. 1번 항목과 유사하게 장치 대 노드 친화력을 사용하여 병렬 프로세스 할당과 작업 할당을 결정합니다.

3 . S M P에 대해 클러스터, MPP 구조, 프로세스 대 장치 친화력을 사용하여 장치를 절연합니다. 이것은 동일한 장치에 동시에 액세스하는 여러 병렬 실행 서버가존재할 가능성을 줄입니다. 이 프로세스 대 장치 친화력 정보 또한 프로세스 간의 이동을 구현하는데 사용됩니다.

분할된 테이블과 인덱스에 대해 분할 영역 대 노드 친화력 정보는 프로세스 할당과작업 할당을 결정합니다. 공유하지 않는 MPP 시스템에 대해 O racle Pa ra l l e lS e rv e r는 분할 영역의 디스크 친화력을 고려하여 분할 영역을 인스턴스에 할당합니다. 공유 디스크 M P P와 클러스터 시스템에 대해 분할 영역은 라운드 로빈 방식으로인스턴스에 할당됩니다.

O racle Pa rallel Server 구성으로 실행되는 경우 병렬 D M L에 대해 친화력만을 사용할 수 있습니다. 명령문 간에 유지되는 친화력 정보는 버퍼 캐시 적중률을 향상시키고 인스턴스 간의 블록 핑을 줄입니다.

추가 정보: O racle Pa rallel Serv e r에 대한 자세한 내용은 O ra c l e 8 iPa rallel Server Concepts and Ad m i n i s t ra t i o n을 참조하십시오.

병렬 실행 2 6 - 4 9

친화력

Page 302: Oracle8 - Tistory

다른 유형의 병렬화

병렬 SQL 실행뿐 아니라 O ra c l e은 다음과 같은 유형의 작업에 대해서도 병렬화를사용할 수 있습니다.

■ 병렬 복구

■ 병렬 전달(복제)

■ 병렬 로드(SQL*Loader 유틸리티)

병렬 S Q L과 마찬가지로 병렬 복구와 병렬 전달은 병렬 실행 조정자와 여러 병렬 실행 서버에 의해 실행됩니다. 그러나 병렬 로드는 다른 기법을 사용합니다.

추가 정보: 병렬 로드에 대한 내용과 S Q L * L o a d e r에 대한 일반적인내용은 O racle8i Utilities를 참조하십시오. 또한 병렬 로드 사용에 대한 설명은 O racle8i Tuning을 참조하십시오.

병렬 실행 조정자와 병렬 실행 서버의 기능은 수행하는 작업의 종류( S Q L, 복구 또는전달)에 따라 달라집니다. 예를 들어, 다음은 저장소에 있는 모든 병렬 실행 서버가할당되었고 최대 수의 병렬 실행 서버가 작업을 시작한 경우입니다.

■ 병렬 SQL 롤을 수행하는 경우 병렬 실행 조정자는 직렬 처리로 전환합니다.

■ 병렬 전달 롤을 수행하는 경우 병렬 실행 조정자는 오류를 돌려줍니다.

주어진 세션에 대해 병렬 실행 조정자는 한 종류의 작업만을 조정합니다. 예를 들어,병렬 실행 조정자는 병렬 S Q L, 병렬 전달 또는 병렬 복구를 동시에 조정할 수 없습니다.

병렬 복구에 대한 내용은 32-10 페이지“병렬 복구 수행”을 참조하십시오.

추가 정보: 병렬 복구에 대한 자세한 내용은 O racle8i Backup andR e c o v e ry Guide를, 병렬 전달에 대한 내용은 O racle8i Replication을 참조하십시오.

2 6 - 5 0 Oracle8i 개념 설명서, 볼륨 2

다른 유형의 병렬화

Page 303: Oracle8 - Tistory

VIII데이터 보호

Ⅷ부에서는 O ra c l e이 데이터베이스의 데이터를 보호하는 방법과 데이터베이스 관리자가데이터에 추가 보호를 제공하기 위해 수행할 수 있는 작업에 대해 설명합니다.

Ⅷ부에서는 다음 장을 포함하고 있습니다.

■ 2 7장“데이터 동시성과 일관성”

■ 2 8장“데이터 무결성”

■ 2 9장“데이터베이스 액세스 제어”

■ 3 0장“권한, 롤, 보안 정책”

■ 3 1장“감사”

■ 3 2장“데이터베이스 복구”

Page 304: Oracle8 - Tistory

데이터 동시성과 일관성 2 7 - 1

27데이터 동시성과 일관성

이 장에서는 다중 사용자 데이터베이스 환경에서 일관된 데이터를 유지 관리하는 방법에대해 설명하며 다음 내용을 다룹니다.

■ 다중 사용자 환경에서의 데이터 동시성과 일관성

■ 데이터 동시성과 일관성 관리 방법

■ 데이터를 잠그는 방법

Page 305: Oracle8 - Tistory

다중 사용자 환경에서의 데이터 동시성과 일관성

단일 사용자 데이터베이스에서 사용자는 동시에 동일한 데이터를 수정하는 다른 사용자를 생각하지 않고 데이터베이스의 데이터를 수정할 수 있습니다. 그러나 다중 사용자 데이터베이스에서는 다중 동시 트랜잭션 내에 있는 명령문이 동일한 데이터를 갱신할 수 있습니다. 동시에 실행되는 트랜잭션은 의미있고 일관성 있는 결과를 산출해야 합니다. 따라서 데이터 동시성과 데이터 일관성 제어는 다중 사용자 데이터베이스에서 매우 중요합니다. 개념을 정의하면 다음과 같습니다.

■ 데이터 동시성은 여러 사용자가 동시에 데이터를 액세스할 수 있음을 의미합니다.

■ 데이터 일관성은 각 사용자가 사용자 자신의 트랜잭션과 다른 사용자의 트랜잭션에의해 변경되는 사항을 포함하여 데이터의 일관된 뷰를 볼 수 있음을 의미합니다.

데이터베이스와 연관된 업무 규칙을 강제로 수행하는 데이터 무결성에 대한 내용은2 8장“데이터 무결성”에서 설명합니다.

데이터베이스 연구원은 연속성이라는 트랜잭션 분리 모델을 정의하여 트랜잭션이 동시에 실행될 때 일관된 트랜잭션 기능을 설명합니다. 트랜잭션 기능의 연속 모드는트랜잭션이 동시에 실행되어도 한번에 하나씩 연속적으로 실행되는 효과를 나타냅니다.

일반적으로 트랜잭션 간의 이러한 정도의 분리는 바람직한 반면 연속 모드로 많은 응용 프로그램을 실행하면 응용 프로그램 처리 능력이 심각하게 저하될 수 있습니다.동시에 실행되는 트랜잭션을 완전히 분리하는 것은 한 트랜잭션이 다른 트랜잭션에의해 질의되는 테이블에 삽입할 수 없음을 의미합니다. 즉, 실질적으로 보통 트랜잭션 분리와 성능 간의 조화를 고려해야 합니다.

O ra c l e은 두 가지 분리 레벨을 제공하는데 응용 프로그램 개발자에게 일관성을 유지하며 성능을 향상시키는 작업 모드를 제공합니다.

방지되어야 하는 현상과 트랜잭션 분리 레벨

ANSI/ISO SQL 표준( S Q L 9 2 )은 트랜잭션 프로세싱 처리 능력에 서로 다른 영향을주는 트랜잭션 분리의 네 가지 레벨을 정의합니다. 이러한 분리 레벨은 동시에 실행되는 트랜잭션 사이에서 방지되어야 하는 세 가지 현상에 의해 정의됩니다.

방지되어야 하는 세 가지 현상은 다음과 같습니다.

더티 데이터 읽기 트랜잭션이 커밋되지 않은 다른 트랜잭션이 기록한 데이터를읽는 경우입니다.

27-2 Oracle8i 개념 설명서, 볼륨 2

다중 사용자 환경에서의 데이터 동시성과 일관성

Page 306: Oracle8 - Tistory

비 반복(퍼지) 읽기 트랜잭션이 이전에 읽은 데이터를 다시 읽은 다음 커밋된 다른 트랜잭션이 데이터를 수정하거나 삭제한 사실을 발견한 경우입니다.

가상 읽기 트랜잭션이 검색 조건을 만족하는 행의 집합을 돌려주는 질의를 재실행한 후 커밋된 다른 트랜잭션이 조건을 만족하는행을 추가로 삽입한 사실을 발견한 경우입니다.

S Q L 9 2는 특정 분리 레벨에서 실행되는 트랜잭션이 경험하도록 허용된 현상에 의해네 가지 분리 레벨을 정의합니다.

O ra c l e은 커밋된 데이터 읽기와 연속 분리 레벨을 제공합니다. 또한 S Q L 9 2의 일부가 아닌 읽기 전용 모드도 제공합니다. 커밋된 데이터 읽기는 기본값이며 O racle 릴리스 7.3 이전에 제공된 유일한 자동 분리 레벨입니다. 커밋된 데이터 읽기와 연속분리 레벨은 27-4 페이지“데이터 동시성과 일관성 관리 방법”에 자세하게 설명되어있습니다.

잠금 처리 기법

일반적으로 다중 사용자 데이터베이스는 몇 가지 형태의 데이터 잠금을 사용하여 데이터 동시성, 일관성, 무결성과 관련된 문제를 해결합니다. 잠금은 동일한 자원을 액세스하는 트랜잭션 간의 파괴적 상호 작용 방지에 사용되는 처리 기법입니다.

자원은 객체의 일반적인 두 가지 유형을 포함합니다.

■ 테이블, 행(구조와 데이터)과 같은 사용자 객체

■ 메모리에 있는 공유 데이터 구조와 데이터 딕셔너리 행과 같이 사용자에게 보이지않는 시스템 객체

데이터 잠금, DDL 잠금 및 내부 잠금과 같은 다양한 잠금 유형은 27-15 페이지“데이터를 잠그는 방법”에서 설명합니다.

데이터 동시성과 일관성 2 7 - 3

다중 사용자 환경에서의 데이터 동시성과 일관성

분리 레벨 더티 데이터읽기 비 반복 읽기 가상 읽기

커밋되지 않은 데이터 읽기 가능 가능 가능

커밋된 데이터 읽기 불가능 가능 가능

반복 읽기 불가능 불가능 가능

연속 불가능 불가능 불가능

Page 307: Oracle8 - Tistory

데이터 동시성과 일관성 관리 방법

O ra c l e은 다중 버전 일관성 모델 및 다양한 유형의 잠금과 트랜잭션을 사용하여 다중사용자 환경에서 데이터 일관성을 유지 관리합니다.

다중 버전 동시성 제어

O ra c l e은 질의가 보는 모든 데이터를 시간 상의 단일 지점을 통해 제공하도록 질의에읽기 일관성을 자동으로 제공합니다. (명령문 레벨 읽기 일관성) 또한 트랜잭션 내의모든 질의에 읽기 일관성을 제공할 수 있습니다. (트랜잭션 레벨 읽기 일관성)

O ra c l e은 롤백 세그먼트에 유지 관리되는 정보를 사용하여 일관된 뷰를 제공합니다.롤백 세그먼트는 커밋되지 않았거나 최근에 커밋된 트랜잭션에 의해 변경된 데이터의이전 값을 가지고 있습니다. 그림 2 7 - 1은 O ra c l e이 롤백 세그먼트에 있는 데이터를사용하여 명령문 레벨의 읽기 일관성을 제공하는 방법을 보여줍니다.

그림 27-1 트랜잭션과읽기 일관성

27-4 Oracle8i 개념 설명서, 볼륨 2

데이터 동시성과 일관성 관리 방법

SELECT...(SCN 10023)

데이터블록 롤백 세그먼트

스캔 경로

Page 308: Oracle8 - Tistory

질의가 실행 단계에 들어가면 현재 시스템 변경 번호( S C N )가 결정됩니다. 그림 2 7 -1에서 시스템 변경 번호는 1 0 0 2 3입니다. 질의에 대한 데이터 블록을 읽을 때 관측된S C N과 함께 기록된 블록만이 사용됩니다. 변경된 데이터를 가진 블록(보다 최근의S C N )은 롤백 세그먼트에 있는 데이터를 사용하여 재조직되며 재조직된 데이터는 질의를 위해 돌려줍니다. 따라서 각 질의는 질의가 실행되는 시점에서 기록된 S C N에대해 커밋된 모든 데이터를 돌려줍니다. 질의 실행 중에 발생한 다른 트랜잭션의 변경 사항은 관측되지 않으므로 각 질의에 대해 일관성 있는 데이터를 돌려줄 수 있습니다.

“S n a p s h ot Too Old”메시지

흔하지는 않지만 오래 실행되는 질의에 대한 일관성 있는 결과의 집합(스냅샷이라함)을 돌려줄 수 없는 경우가 있습니다. 이러한 상황이 발생하는 이유는 이전 데이터를 재조직하는데 필요한 정보가 롤백 세그먼트에 충분히 남아 있지 않기 때문입니다.일반적으로 이 오류는 여러 번의 갱신 작업으로 인해 롤백 세그먼트가 오래 실행되는질의가 필요로 하는 데이터를 재조직하는데 필요한 변경 사항을 겹쳐 쓸 때 발생합니다. 이런 상황에서는 오류 1 5 5 5가 발생합니다.

ORA-1555: snapshot too old (rollback segment too small)

사용자는 더 많거나 큰 롤백 세그먼트를 생성하여 이 오류를 방지할 수 있습니다. 대안으로 동시에 실행되는 트랜잭션이 거의 없을 때 오래 실행되는 질의를 실행하거나질의하고 있는 테이블에 대해 공유 잠금을 획득함으로써 트랜잭션 동안 다른 배타 잠금을 방지하는 방법 등이 있습니다.

명령문 레벨 읽기 일관성

O ra c l e은 항상 명령문 레벨의 읽기 일관성을 강제로 수행합니다. 이는 단일 질의가돌려준 데이터가 질의가 시작된 시점에서 단일 지점을 통해 제공되도록 보장합니다.따라서 질의는 질의 실행 중에 더티 데이터나 커밋하는 트랜잭션이 수행한 변경 사항을 볼 수 없습니다. 질의 실행이 진행됨에 따라 질의는 질의가 시작되기 전에 커밋된데이터만을 볼 수 있습니다. 질의는 명령문이 실행된 후에 커밋된 변경 사항을 볼 수없습니다.

일관된 결과 집합이 모든 질의에 대해 제공되므로 사용자가 작업하지 않아도 데이터일관성이 보장됩니다. 하위 질의와 함께 사용하는 S E L E C T, INSERT 및 모든 질의데이터를 U P DAT E, DELETE하는 등의 SQL 문은 명시적으로나 암시적으로 모두일관된 데이터를 돌려줍니다. 이러한 명령문은 질의를 사용하여 영향을 줄 데이터를결정합니다. ( S E L E C T, INSERT, UPDAT E, DELETE)

SELECT 문은 명시적 질의이며 중첩된 질의나 조인 작업을 사용할 수 있습니다.I N S E RT 문은 중첩된 질의를 사용할 수 있습니다. UPDAT E와 DELETE 문은

데이터 동시성과 일관성 2 7 - 5

데이터 동시성과 일관성 관리 방법

Page 309: Oracle8 - Tistory

WHERE 절이나 하위 질의를 사용하여 테이블의 일부 행에만 영향을 줄 수 있습니다다.

I N S E RT, UPDAT E, DELETE 문에서 사용되는 질의는 일관된 결과 집합을 보장하지만 DML 문 자체에 의해 변경된 사항은 볼 수 없습니다. 즉, 이러한 작업에서질의는 작업이 변경되기 전의 데이터 상태를 보게 됩니다.

트랜잭션 레벨 읽기 일관성

O ra c l e은 또한 트랜잭션 레벨의 읽기 일관성을 강제로 수행하는 옵션을 제공합니다.트랜잭션이 연속 모드(아래 참조)에서 실행되면 모든 데이터 액세스는 트랜잭션이 시작된 시점의 데이터베이스 상태를 반영합니다. 이는 동일한 트랜잭션에서의 모든 질의가 볼 수 있는 데이터는 연속 트랜잭션에 의해 만들어진 질의가 트랜잭션 자체가변경한 사항을 볼 수 있다는 점을 제외하고 시간 상의 단일 지점에 대해 일관성이 있음을 의미합니다. 트랜잭션 레벨 읽기 일관성은 반복 읽기를 생성하며 질의를 가상읽기에 노출시키지 않습니다.

O racle Parallel Serve r의 읽기 일관성

O racle Pa rallel Serv e r는 캐시 결합이라는 병렬 캐시 관리 기법을 사용하여 단일데이터베이스에 액세스하는 여러 인스턴스 간의 데이터 일관성을 보장합니다. 일관된읽기 블록에 대한 인스턴스 간 요청이 독자/기록자 캐시 일관성 충돌을 생성하면 캐시 결합은 B S P (블록 서버 프로세스)를 사용하여 보유한 인스턴스의 메모리 캐시에서요청한 인스턴스의 메모리 캐시로 직접 블록을 복사합니다. 블록을 보유하는 인스턴스는 커밋되지 않은 트랜잭션을 롤백하고 디스크에 블록을 쓰지 않고 요청자에게 직접 블록을 전송합니다. 블록 상태는 요청이 요청자 노드에서 제출된 시간에 따라 일관성을 유지합니다.

추가 정보: 캐시 결합과 블록 서버 프로세스에 대한 자세한 내용은O racle8i Pa rallel Server Concepts and Ad m i n i s t ra t i o n을 참조하십시오.

O racle 분리 레벨

O ra c l e은 세 가지 트랜잭션 분리 레벨을 제공합니다.

커밋된 데이터 읽기 기본 트랜잭션 분리 레벨로 트랜잭션에 의해 실행된 각 질의는 질의(트랜잭션이 아님)가 시작되기 전에 커밋된 데이터만을 볼 수 있습니다. Oracle 질의는 더티 (커밋되지 않은) 데이터를 읽을 수 없습니다.

27-6 Oracle8i 개념 설명서, 볼륨 2

데이터 동시성과 일관성 관리 방법

Page 310: Oracle8 - Tistory

O ra c l e은 다른 트랜잭션이 질의가 읽은 데이터를 수정하는것을 막지 않으므로 질의를 두 번 실행하는 동안 다른 트랜잭션이 데이터를 변경할 수 있습니다. 따라서 주어진 질의를 두번 실행하는 트랜잭션은 비 반복 읽기나 가상 읽기를 수행할수도 있습니다.

연속 트랜잭션 연속 트랜잭션은 트랜잭션이 시작하는 시점에서 커밋된 변경사항과 I N S E RT, UPDAT E, DELETE 문을 통해 트랜잭션 자신이 변경한 사항만을 볼 수 있습니다. 연속 트랜잭션은비 반복 읽기나 가상 읽기를 수행할 수 없습니다.

읽기 전용 읽기 전용 트랜잭션은 트랜잭션이 시작되는 시점에서 커밋된변경 사항만을 볼 수 있으며 I N S E RT, UPDAT E, DELE-TE 문을 허용하지 않습니다.

분리 레벨 설정

응용 프로그램 설계자, 응용 프로그램 개발자, 데이터베이스 관리자는 응용 프로그램과 작업 부하에 따라 서로 다른 트랜잭션에 대한 적절한 분리 레벨을 선택할 수 있습니다. 트랜잭션을 시작할 때 다음 명령어 중 하나를 사용하여 트랜잭션의 분리 레벨을 설정할 수 있습니다.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET TRANSACTION ISOLATION LEVEL READ ONLY;

SET TRANSACTION 명령어로 각 트랜잭션을 시작하는데 드는 네트워킹 비용과처리 비용을 절약하려면 A LTER SESSION 명령어를 사용하여 모든 후속 트랜잭션에 대한 트랜잭션 분리 레벨을 설정합니다.

ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;

ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;

추가 정보: 이러한 SQL 명령어에 대한 자세한 내용은 O racle8i SQL참조서를 참조하십시오.

데이터 동시성과 일관성 2 7 - 7

데이터 동시성과 일관성 관리 방법

Page 311: Oracle8 - Tistory

커밋된 데이터 읽기 분리

O ra c l e에 대한 기본 분리 레벨은 커밋된 데이터 읽기로 이 정도의 분리는 트랜잭션충돌이 발생할 가능성이 거의 없는 환경에 적합합니다. Ora c l e은 각 질의가 자신의스냅샷 시간에 대해 실행되도록 하므로 질의를 여러 번 실행할 때는 비 반복 읽기와가상 읽기를 허용하지만 더 높은 잠재적 처리 능력을 제공합니다. 커밋된 데이터 읽기 분리는 트랜잭션 충돌이 발생할 가능성이 거의 없는 환경에 적합한 분리 레벨입니다.

연속 분리

연속 분리는 다음 환경에 적합합니다.

■ 대용량 데이터베이스와 몇 개의 행만 갱신하는 간단한 트랜잭션

■ 상대적으로 두 가지 동시 트랜잭션이 동일한 행을 수정할 기회가 적습니다.

■ 상대적으로 오래 실행되는 트랜잭션은 주로 읽기 전용입니다.

연속 분리는 차례로 실행되었을 경우 변경할 수 있었던 데이터베이스 변경만 가능하도록 동시에 발생하는 트랜잭션을 허용합니다. 특히 O ra c l e은 연속 트랜잭션을 시작했을 때 커밋된 트랜잭션이 데이터 행에 대한 이전 수정 내용을 결정할 수 있는 경우에만 데이터 행을 수정하도록 연속 트랜잭션을 허용합니다.

효율적인 결정을 위해 O ra c l e은 블록에서 커밋된 변경 사항과 커밋되지 않은 변경 사항을 가지고 있는 행을 나타내는 데이터 블록에 저장된 제어 정보를 사용합니다. 이러한 의미에서 블록은 블록의 각 행에 영향을 주는 트랜잭션의 최근 기록을 포함합니다. 유지되는 기록의 양은 C R E ATE TA B L E과 A LTER TA B L E의 INITRANS 매개변수에 의해 제어됩니다.

일부 환경에서는 O ra c l e이 어떤 행이“너무 최근”의 트랜잭션에 의해 갱신되었는지를결정하기에 불충분한 기록 정보를 가질 수 있습니다. 이것은 많은 트랜잭션이 동시에동일한 데이터 블록을 수정하거나 아주 짧은 시간에 동일한 데이터 블록을 수정하는경우 발생합니다. 동일한 블록을 갱신하는 여러 트랜잭션을 수행하는 테이블에 대해I N I T R A N S의 값을 높게 (적어도 3) 설정하여 이러한 상황을 피할 수 있습니다. 이렇게 하면 O ra c l e은 블록을 액세스한 최근 트랜잭션의 기록을 기록하기 위해 각 블록에 충분한 저장 영역을 할당할 수 있습니다.

연속 트랜잭션이 시작된 다음 커밋된 트랜잭션에 의해 수정된 데이터를 갱신하거나삭제하고자 하면 O ra c l e은 오류를 발생시킵니다.

ORA-08177: Cannot serialize access for this transaction

27-8 Oracle8i 개념 설명서, 볼륨 2

데이터 동시성과 일관성 관리 방법

Page 312: Oracle8 - Tistory

“Cannot serialize access”오류가발생하여 연속 트랜잭션이 실패하면 응용 프로그램은 다음 작업 중 하나를 수행합니다.

■ 해당 시점까지 실행된 작업을 커밋합니다.

■ 트랜잭션에 이미 설정된 저장점으로 롤백한 후 추가 (그러나 다른) 명령문을 실행합니다.

■ 전체 트랜잭션을 롤백합니다.

그림 2 7 - 2는“Cannot serialize access”오류로 인해 트랜잭션을 실패한 후 트랜잭션을 롤백하고 재시도하는 응용 프로그램의 예를 보여줍니다.

그림 27-2 연속 트랜잭션 실패

커밋된 데이터 읽기와 연속 분리 비교

O ra c l e은 응용 프로그램 개발자가 서로 다른 특성을 가진 두 트랜잭션 분리 레벨을선택할 수 있도록 합니다. 커밋된 데이터 읽기와 연속 분리 레벨은 모두 고도의 일관성과 동시성을 제공합니다. 두 레벨은 모두 O ra c l e의“읽기 일관성”다중 버전 동시성 제어 모델의 경합 감소 효과와 배타적 행 레벨 잠금 구현을 제공하며 실세계 응용프로그램 배치를 위해 설계되었습니다.

데이터 동시성과 일관성 2 7 - 9

데이터 동시성과 일관성 관리 방법

반복된 질의가다른 동시 사용자에 의해 변경되었다고 해도 동일한데이터를볼 수 있습니다.

SET TRANSACTION ISOLATIONLEVEL SERIALIZABLE

SELECT...

SELECT...

UPDATE...이 트랜잭션이 시작된 후에 다른 트랜잭션에의해 변경되거나 커밋된 행을 갱신하도록 하면 실패합니다.

IF "Can't Serialize Access"THEN ROLLBACK;LOOP and retry

Page 313: Oracle8 - Tistory

트랜잭션 설정 일관성

O ra c l e에서 커밋된 데이터 읽기와 연속 분리 레벨을 보는 유용한 방법은 데이터베이스 테이블 모음 (또는 임의의 데이터 집합), 이러한 테이블의 행을 읽는 특정 순서,그리고 특정 시점에서 커밋된 트랜잭션 집합을 고려하는 것입니다. 작업에 필요한 모든 읽기가 커밋된 트랜잭션의 동일 집합이 기록한 데이터를 돌려주면 작업(질의 또는트랜잭션)은 트랜잭션 집합 일관성을 가집니다. 일부 읽기가 트랜잭션의 한 집합의변경 사항을 반영하고 다른 읽기가 다른 트랜잭션에 의한 변경 사항을 반영한다면 작업은 트랜잭션 집합 일관성을 가지지 않습니다. 트랜잭션 집합 일관성을 가지지 않는작업은 데이터베이스를 어떤 커밋된 트랜잭션의 단일 집합도 반영하지 않는 상태로봅니다.

O ra c l e은 커밋된 데이터 읽기 모드에서 실행되는 트랜잭션에 트랜잭션 집합 일관성을명령문 단위로 제공합니다. 연속 모드는 트랜잭션 단위로 트랜잭션 집합 일관성을 제공합니다.

표 2 7 - 1은 커밋된 데이터 읽기와 연속 트랜잭션의 중요한 차이를 요약하여 설명합니다.

표 27-1 커밋된 데이터 읽기와 연속 트랜잭션

27-10 Oracle8i 개념 설명서, 볼륨 2

데이터 동시성과 일관성 관리 방법

커밋된 데이터 읽기 연속

더티 데이터 쓰기 불가능 불가능

더티 데이터 읽기 불가능 불가능

비 반복 읽기 가능 불가능

가상 품목 가능 불가능

ANSI/ISO SQL 92 준수 예 예

읽기 스냅샷 시간 명령문 트랜잭션

트랜잭션 집합 일관성 명령문 레벨 트랜잭션 레벨

행 레벨 잠금 예 예

독자가 기록자 방해 아니오 아니오

기록자가 독자 방해 아니오 아니오

다른 행 기록자가 기록자 방해 아니오 아니오

동일 행 기록자가 기록자 방해 예 예

블로킹 트랜잭션 대기 예 예

Page 314: Oracle8 - Tistory

표 27-1 커밋된 데이터 읽기와 연속 트랜잭션 (계속)

행 레벨 잠금

커밋된 데이터 읽기 트랜잭션과 연속 트랜잭션은 모두 행 레벨 잠금을 사용하며 커밋되지 않은 동시 트랜잭션이 갱신한 행을 변경하고자 하는 경우 두 트랜잭션은 모두대기 상태가 됩니다. 주어진 행을 갱신하고자 하는 두 번째 트랜잭션은 다른 트랜잭션이 커밋되거나 롤백되어 잠금이 해제되기를 기다립니다. 다른 트랜잭션이 롤백하는경우 대기 중인 트랜잭션은 (분리 모드에 관계없이) 다른 트랜잭션이 존재하지 않았던 것처럼 이전에 잠긴 행을 변경할 수 있습니다.

그러나 다른 (블로킹) 트랜잭션이 커밋하고 자신의 잠금을 해제하는 경우 커밋된 데이터 읽기 트랜잭션은 의도한 갱신을 진행합니다. 그러나 연속 트랜잭션은“C a n n o tserialize access”오류와함께 실패로 끝나게 됩니다. 이는 다른 트랜잭션이 연속 트랜잭션이 시작된 후에 변경을 커밋했기 때문입니다.

참조 무결성

O ra c l e은 읽기 일관성 트랜잭션 또는 연속 트랜잭션에서 읽기 잠금을 사용하지 않으므로 한 트랜잭션이 읽은 데이터를 다른 트랜잭션이 겹쳐 쓸 수 있습니다. 응용 프로그램 레벨에서 데이터베이스 일관성 검사를 수행하는 트랜잭션은 (이러한 변경 사항을 트랜잭션이 볼 수 없는 경우라도) 자신이 읽은 데이터가 트랜잭션 실행 동안 변경되지 않은 채로 유지된다고 가정할 수 없습니다. 응용 프로그램 레벨 일관성 검사가이러한 점을 고려하여 코딩되지 않는다면 연속 트랜잭션을 사용한다 해도 데이터베이스 불일치가 발생합니다.

추가 정보: 참조 무결성과 연속 트랜잭션에 대한 자세한 내용은 O ra c l -e8i Application Developer's Guide - Fundamentals를참조하십시오.

O racle Parallel Serve r

O racle Pa rallel Serv e r (하나의 데이터베이스에 대해 실행되는 여러 개의 O ra c l e인스턴스)에서 커밋된 데이터 읽기 트랜잭션과 연속 트랜잭션 분리 레벨을 사용할 수있습니다.

데이터 동시성과 일관성 2 7 - 1 1

데이터 동시성과 일관성 관리 방법

커밋된 데이터 읽기 연속

"cannot serialize access" 오류발생 가능성 아니오 예

블로킹 트랜잭션 중지 후 오류 아니오 아니오

블로킹 트랜잭션 커밋 후 오류 아니오 예

Page 315: Oracle8 - Tistory

분산 트랜잭션

분산 데이터베이스 환경에서는 주어진 트랜잭션이 여러 개의 물리적 데이터베이스에있는 데이터를 갱신합니다. (모든 노드가 커밋하거나 어떤 노드도 커밋하지 않음을보장하기 위해 2단계 커밋으로 보호합니다.) 이러한 환경에서 연속 트랜잭션에 참여하는 모든 서버( O ra c l e이나 O ra c l e이 아닌)는 연속 분리 모드를 지원해야 합니다.

연속 트랜잭션이 연속 트랜잭션을 지원하지 않는 서버가 관리하는 데이터베이스에 있는 데이터를 갱신하고자 하는 경우 트랜잭션에 오류가 발생합니다. 원격 서버가 연속트랜잭션을 지원하는 경우에만 트랜잭션을 롤백하여 재시도할 수 있습니다.

반대로 커밋된 데이터 읽기 트랜잭션은 연속 트랜잭션을 지원하지 않는 서버로 분산트랜잭션을 수행할 수 있습니다.

분리 레벨 선택

응용 프로그램 설계자와 개발자는 응용 프로그램 코딩 요구 사항과 응용 프로그램 성능 및 일치성 요구에 따라 분리 레벨을 선택해야 합니다.

여러 동시 사용자가 빠르게 트랜잭션을 보내는 환경에서 설계자는 트랜잭션 성능 요구 사항을 예상 트랜잭션 도착률과 응답 시간 요구의 관점에서 평가해야 합니다. 고성능 환경에서 분리 레벨을 선택하는 것은 종종 일관성과 동시성 (트랜잭션 처리 능력) 사이에서의 합의를 포함합니다.

데이터베이스 일관성을 검사하는 응용 프로그램 논리는 어떤 모드에서도 읽기가 쓰기를 차단하지 않는다는 사실을 고려해야 합니다.

두 개의 O racle 분리 모드는 모두 행 레벨 잠금과 O racle 다중 버전 동시성 제어 시스템을 조합하여 높은 레벨의 일관성과 동시성 및 성능을 제공합니다. Ora c l e에서 독자와 기록자는 서로를 방해하지 않으므로 질의가 일관된 데이터를 보는 동안 커밋된데이터 읽기와 연속 분리는 커밋되지 않은 (“더티”) 데이터를 읽을 필요 없이 고성능의 높은 레벨의 동시성을 제공합니다.

커밋된 데이터 읽기 분리 선택

커밋된 데이터 읽기는 대부분의 응용 프로그램에 가장 적합한 분리 레벨입니다. 릴리스 7.3 이전의 O ra c l e에서 실행되는 응용 프로그램은 커밋된 데이터 읽기 분리 레벨을 사용합니다.

27-12 Oracle8i 개념 설명서, 볼륨 2

데이터 동시성과 일관성 관리 방법

Page 316: Oracle8 - Tistory

커밋된 데이터 읽기 분리는 일부 트랜잭션에 대해 불일치하는 결과를 가져올 위험(가상 품목과 비 반복 읽기 때문에) 부담을 다소 증가시키지만 상당히 높은 동시성을제공할 수 있습니다.

트랜잭션 발생 비율이 높은 고성능 환경에서는 연속 분리에서 얻을 수 있는 것보다높은 처리 능력과 보다 신속한 응답 시간이 필요합니다. 발생 비율이 매우 낮은 트랜잭션을 지원하는 다른 환경에서는 가상 품목과 비 반복 읽기에 의한 부정확한 결과가발생할 위험이 매우 낮습니다. 커밋된 데이터 읽기 분리는 두 환경 모두에 적합합니다.

O ra c l e의 커밋된 데이터 읽기 분리는 모든 질의에 대해 트랜잭션 집합 일관성을 제공합니다. (즉, 모든 질의는 일관된 상태의 데이터를 볼 수 있습니다.) 따라서 다중 버전 동시성 제어를 사용하지 않는 다른 데이터베이스 관리 시스템에서 실행된다면 커밋된 데이터 읽기 분리는 높은 레벨의 분리를 요구하는 많은 응용 프로그램에 충분합니다.

커밋된 데이터 읽기 분리 모드는“Cannot serialize access”오류를트랩할 응용 프로그램 논리가 필요하지 않으며 트랜잭션을 재시작하는데 주저할 필요가 없습니다.대부분의 응용 프로그램에서 동일한 질의를 두 번 발생시키는 트랜잭션은 거의 없으므로 가상 품목이나 비 반복 읽기에 대한 보호는 별로 중요하지 않습니다. 따라서 많은 개발자는 커밋된 데이터 읽기 분리 모드를 선택함으로써 각 트랜잭션에서 오류 검사나 재시도 코드를 작성해야 하는 수고를 덜게 됩니다.

연속 분리 선택

O ra c l e의 연속 분리는 두 개의 동시 트랜잭션이 동일한 행을 수정하는 경우가 상대적으로 적고 상대적으로 오래 수행되는 트랜잭션은 주로 읽기 전용인 환경에 적합합니다. 연속 분리는 대용량 데이터베이스를 가지고 있으나 적은 수의 행만을 갱신하는환경에 적합합니다.

연속 분리 모드는 가상 품목이나 비 반복 읽기에 대한 보호를 통해 더욱 높은 일관성을 제공하며 읽기/쓰기 트랜잭션이 한번 이상 질의를 실행하는 경우에 중요합니다.

쓰기 외에 읽기에 대해서도 블록을 잠그는 다른 연속 분리 구현과 달리 O ra c l e은 비차단 질의와 행 레벨 잠금과 같은 미세한 단위의 잠금을 제공합니다. 이들 모두는 쓰기/쓰기 경합을 감소시킵니다. 대부분 읽기/쓰기 경합을 수행하는 응용 프로그램에서O racle 연속 분리는 다른 시스템보다 훨씬 높은 처리 능력을 제공할 수 있습니다. 따라서 일부 응용 프로그램은 다른 시스템의 연속 분리보다 O ra c l e의 연속 분리에 더적합할 수 있습니다.

데이터 동시성과 일관성 2 7 - 1 3

데이터 동시성과 일관성 관리 방법

Page 317: Oracle8 - Tistory

O racle 연속 트랜잭션에 있는 모든 질의는 시간 상의 단일 지점으로 데이터베이스를보기 때문에 이 분리 레벨은 일관된 다중 질의가 읽기 쓰기 트랜잭션으로 실행되어야하는 환경에 적합합니다. 요약 데이터를 생성하고 이를 데이터베이스에 저장하는 보고서 작성 응용 프로그램은 연속 모드를 사용합니다. 이 모드는 READ ONLY 트랜잭션이 제공하는 일관성을 가질 뿐만 아니라 I N S E RT, UPDAT E, DELETE 작업도 허용하기 때문입니다.

주: 하위 질의가 있는 DML 문을 포함하는 트랜잭션은 연속 분리를 사용하여 일관된 읽기를 보장해야 합니다.

연속 트랜잭션을 코딩하는 경우 응용 프로그램 개발자는 추가 작업(“Cannot seria-lize access”오류 검사 및 트랜잭션 롤백과 재시도)을 수행해야 합니다. 다른 데이터베이스 관리 시스템에서는 교착 상태를 관리하기 위해 유사한 추가 코딩이 필요합니다. 통합된 표준을 따르거나 다중 데이터베이스 관리 시스템에서 실행되는 응용 프로그램에 대해서는 트랜잭션을 연속 모드로 설계해야 합니다. 연속성 실패나 재시도를검사하는 트랜잭션은 O ra c l e의 커밋된 데이터 읽기 모드를 사용할 수 있습니다. (이것은 연속성 오류를 생성하지 않습니다. )

연속 모드는 대용량의 짧은 갱신 트랜잭션이 액세스하는 동일한 행을 갱신해야 하는상대적으로 긴 트랜잭션을 처리하는 환경에서 최선의 선택이 아닐 수도 있습니다. 오래 실행되는 트랜잭션은 주어진 행을 수정하는 첫 번째 트랜잭션일 가능성이 적으므로 반복적으로 롤백하여 작업 능력을 낭비할 수 있습니다. (연속 모드에 일반적인 읽기 잠금“p e s s i m i s t i c”을 구현하는 것도 이런 환경에 적합하지 않습니다. 오래 실행되는 트랜잭션 - 읽기 트랜잭션이라도 - 과 짧은 갱신 트랜잭션은 서로 진행을 방해하기 때문입니다. )

응용 프로그램 개발자는 연속 모드를 사용할 때 드는 트랜잭션 롤백과 재시도 비용을고려해야 합니다. 교착 상태가 자주 발생하는 읽기 잠금 시스템과 같이 연속 모드를사용하면 중지된 트랜잭션이 수행한 작업을 롤백하여 이를 재시도해야 합니다. 경합이 심한 환경에서 이러한 작업은 상당한 자원을 사용할 수 있습니다.

대부분의 환경에서“Cannot serialize access”오류를받은 후 재시작한 트랜잭션이다른 트랜잭션과 두 번째 충돌할 가능성은 거의 없습니다. 이러한 이유로 연속 트랜잭션에서는 다른 트랜잭션과 경쟁할 가능성이 높은 명령문을 가능한 빨리 실행하는것이 유리합니다. 그러나 트랜잭션이 성공적으로 완료된다는 보장이 없으므로 응용프로그램은 재시도 횟수를 제한하여 코딩해야 합니다.

27-14 Oracle8i 개념 설명서, 볼륨 2

데이터 동시성과 일관성 관리 방법

Page 318: Oracle8 - Tistory

O ra c l e의 연속 모드는 S Q L 9 2와 호환되며 읽기 잠금 구현과 비교하여 많은 장점이있지만 이러한 시스템과 동일한 의미를 제공하지는 않습니다. 응용 프로그램 설계자는 O ra c l e에서의 읽기는 다른 시스템과 달리 쓰기를 차단하지 않는다는 사실을 고려해야 합니다. 응용 프로그램 레벨에서 데이터베이스 일관성을 검사하는 트랜잭션은SELECT FOR UPDAT E를 사용하는 것과 같은 코딩 기술이 필요합니다. 연속 모드를 사용하는 응용 프로그램을 다른 환경에서 O ra c l e로 포트할 경우 이 점을 고려해야 합니다.

데이터를 잠그는 방법

잠금은 동일한 자원 - 사용자 객체(테이블이나 행과 같은)나 사용자에게 보이지 않는시스템 객체(메모리에 있는 공유 데이터 구조나 데이터 딕셔너리 행과 같은) - 에 액세스하는 트랜잭션 간의 파괴적인 상호 작용을 방지하는 처리 기법입니다.

모든 경우 O ra c l e은 SQL 문이 실행되면 필요한 잠금을 자동으로 획득합니다. 따라서 사용자는 자세한 사항을 몰라도 됩니다. Ora c l e은 가능한 가장 낮은 레벨의 제한을 사용하여 높은 데이터 동시성을 제공하며 비상 안전 데이터 무결성도 제공합니다.O ra c l e에서 사용자는 수동으로 데이터를 잠글 수 있습니다.

O ra c l e이 사용하는 내부 잠금에 대한 자세한 내용은 27-19 페이지“잠금 유형”을 참조하십시오.

트랜잭션과 데이터 동시성

O ra c l e은 잠금 처리 기법을 사용하는 트랜잭션 사이의 데이터 동시성과 무결성을 제공합니다. Ora c l e의 잠금 처리 기법은 트랜잭션 제어와 밀접하게 관련되어 있으므로응용 프로그램 설계자는 트랜잭션만을 제대로 정의해야 하며 O ra c l e은 자동으로 잠금을 관리합니다.

O ra c l e의 잠금은 완전히 자동으로 이루어지며 사용자는 특별한 행동을 취할 필요가없습니다. 모든 SQL 문에 대해 암시적인 잠금이 발생하므로 데이터베이스 사용자는어떤 자원에 대해서도 명시적으로 잠글 필요가 없습니다. Ora c l e의 기본 잠금 처리기법은 높은 수준의 데이터 동시성을 허용하면서 데이터 무결성을 보장하기 위해 가장 낮은 제한성 레벨에서 데이터를 잠급니다.

이후 단원에서는 수동으로 잠금을 획득하는 경우와 O ra c l e의 기본 잠금 행동을 변경하는 경우를 설명하고 이를 수행하는 방법에 대해 설명합니다. 27-31 페이지“명시적(수동) 데이터 잠금”을 참조하십시오.

데이터 동시성과 일관성 2 7 - 1 5

데이터를 잠그는 방법

Page 319: Oracle8 - Tistory

잠금 모드

O ra c l e은 다중 사용자 데이터베이스에서 두 가지 잠금 모드를 사용합니다.

배타 잠금 모드 관련된 자원이 공유되는 것을 방지합니다. 데이터 수정을 위해 이 잠금 모드를 획득합니다. 자원을 배타적으로 잠근 첫번째 트랜잭션이 배타 잠금이 해제될 때까지 자원을 수정할수 있는 유일한 트랜잭션입니다.

공유 잠금 모드 관련된 작업에 따라 연관된 자원의 공유를 허용합니다. 데이터를 읽는 다중 사용자는 기록자(배타 잠금을 필요로 하는 사용자)의 동시 액세스를 방지하기 위한 공유 잠금을 보유한 채데이터를 공유할 수 있습니다.

잠금 지속 기간

트랜잭션 내의 명령문이 획득한 모든 잠금은 트랜잭션이 진행되는 동안 유효하며 동시에 실행되는 트랜잭션의 파괴적인 방해(더티 데이터 읽기, 갱신 사항 손실, 파괴적인 DDL 작업 등)를 방지합니다. 한 트랜잭션의 SQL 문에 의해 변경된 사항은 최초의 트랜잭션이 커밋된 이후에 시작한 다른 트랜잭션에게만 보입니다.

사용자가 트랜잭션을 커밋하거나 롤백하면 O ra c l e은 트랜잭션 내의 명령문이 획득한모든 잠금을 해제합니다. Ora c l e은 저장점으로 롤백할 때 저장점 이후에 획득한 모든잠금을 해제합니다. 그러나 이전에 잠긴 자원을 기다리고 있지 않는 트랜잭션만이 현재 사용 가능한 자원에 대한 잠금을 획득할 수 있습니다. 대기 중인 트랜잭션은 원래트랜잭션이 완전히 커밋하거나 롤백할 때까지 계속 기다려야 합니다.

데이터 잠금 변환과 단계적 확대

트랜잭션은 트랜잭션 내의 삽입, 갱신, 삭제된 모든 행에 대해 배타적 행 잠금을 보유합니다. 행에 대한 잠금은 가장 높은 제한성을 가지므로 잠금 변환이 필요하지도 않고 잠금 변환을 수행하지도 않습니다.

O ra c l e은 필요에 따라 제한성이 낮은 테이블 잠금을 제한성이 높은 잠금 중 하나로자동으로 변환합니다. 예를 들어, 어떤 트랜잭션이 테이블의 행을 잠그려고 S E L E C T문에 FOR UPDATE 절을 사용하는 경우를 생각해 봅시다. 그 결과 트랜잭션은 테이블에 대해 배타적 행 잠금과 행 공유 테이블 잠금을 획득합니다. 이후에 트랜잭션이 하나 이상의 잠긴 행을 갱신하면 행 공유 테이블 잠금은 자동으로 배타적 행 테이블 잠금으로 변환됩니다. 테이블 잠금에 대해 자세한 내용은 27-21 페이지“테이블잠금( T M )”을 참조하십시오.

27-16 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Page 320: Oracle8 - Tistory

잠금 단계적 확대는 여러 개의 잠금이 하나의 단위 레벨(예를 들어, 행)에서 유지될경우 발생하며 데이터베이스는 잠금을 더 높은 단위 레벨(예를 들어, 테이블)로 단계적으로 확대합니다. 예를 들어, 단일 사용자가 테이블에 있는 여러 행을 잠그는 경우일부 데이터베이스는 자동으로 사용자의 행 잠금을 단일 테이블로 단계적으로 확대시킵니다. 잠금의 수는 감소하지만 잠금으로 인한 제한성은 증가합니다.

O ra c l e은 잠금을 단계적으로 확대시키지 않습니다. 잠금 단계적 확대는 교착 상태(아래에서 설명)의 가능성을 크게 증가시킵니다. 시스템이 트랜잭션 T 1을 위해 잠금을단계적으로 확대하고자 하지만 트랜잭션 T 2가 보유하고 있는 잠금 때문에 확대할 수없는 상황을 생각해 봅시다. 트랜잭션 T 2가 진행하기 전에 동일한 데이터에 대한 잠금 단계적 확대를 요구하면 교착 상태가 생성됩니다.

교착 상태

교착 상태는 둘 이상의 사용자가 서로에 의해 잠겨진 데이터를 기다리는 경우에 발생합니다. 교착 상태는 일부 트랜잭션이 계속 작업하는 것을 방지합니다. 그림 2 7 - 3은교착 상태에 있는 두 개의 트랜잭션을 나타냅니다.

그림 2 7 - 3의 A 시점에서는 각 트랜잭션이 갱신하고자 하는 행에 대한 잠금을 가지고있으므로 문제가 발생하지 않습니다. 각 트랜잭션은 종료되지 않고 진행됩니다. 그러나 각 트랜잭션은 현재 다른 트랜잭션이 보유하는 행을 갱신하고자 합니다. 따라서두 트랜잭션 모두 계속 진행하거나 종료하는데 필요한 자원을 획득할 수 없으므로 B시점에서 교착 상태가 발생합니다. 각 트랜잭션이 오래 기다려도 충돌하는 잠금이 유지되므로 교착 상태가 발생합니다.

데이터 동시성과 일관성 2 7 - 1 7

데이터를 잠그는 방법

Page 321: Oracle8 - Tistory

그림 27-3 교착 상태에 있는 두 개의 트랜잭션

교착 상태 감지

O ra c l e은 자동으로 교착 상태를 감지하고 교착 상태에 관련된 명령문 중 하나를 롤백하여 교착 상태를 자동으로 해결합니다. 따라서 충돌하는 행 잠금 집합 중 하나를 해제합니다. 해당 메시지는 명령문 레벨을 롤백하는 트랜잭션으로 돌아옵니다. 롤백되는 명령문은 교착 상태를 감지한 트랜잭션에 속한 명령문 중 하나입니다. 일반적으로신호를 받은 트랜잭션은 명시적으로 롤백되어야 하지만 대기 후에 롤백된 명령문을재실행할 수 있습니다.

주: 분산 트랜잭션에서는“waits fo r”그래프를 분석하여 지역 교착 상태를 감지하며 전역 교착 상태는 시간 초과에 의해 감지됩니다. 일단교착 상태가 감지되면 데이터베이스와 응용 프로그램이 비 분산 교착상태와 분산 교착 상태를 모두 동일한 방법으로 처리합니다.

교착 상태는 트랜잭션이 O ra c l e의 기본 잠금을 명시적으로 무효화할 때 가장 자주 발생합니다. Oracle 자체는 잠금을 단계적으로 확대시키지 않고 질의에 대한 읽기 잠금을 사용하지 않는 반면 (페이지 레벨 잠금이 아닌) 행 레벨 잠금을 사용하므로 O ra c l e

27-18 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

UPDATE empSET sal = sal*1.1WHERE empno = 1000;

UPDATE empSET mgr = 1342WHERE empno = 2000;

UPDATE empSET mgr = 1342WHERE empno = 1000;

UPDATE empSET sal = sal*1.1WHERE empno = 2000;

ORA-00060:deadlock detected whilewaiting for resource

트랜잭션 1 ( T 1 ) 시간 트랜잭션 2 ( T 2 )

Page 322: Oracle8 - Tistory

에서는 교착 상태가 자주 발생하지 않습니다. 수동으로 잠금을 획득하는 방법과 교착상태에 대한 예는 27-31 페이지“명시적(수동) 데이터잠금”을 참조하십시오.

교착 상태 회피

동일한 테이블을 액세스하는 트랜잭션을 테이블을 액세스하는 것과 동일한 순서로 암시적 또는 명시적으로 잠그면 다중 테이블 교착 상태를 피할 수 있습니다. 예를 들어,마스터 테이블과 상세 테이블을 모두 갱신해야 하는 경우 먼저 마스터 테이블을 잠그고 이후에 상세 테이블을 잠그는 규칙을 모든 응용 프로그램 개발자가 수행하도록 할수 있습니다. 이러한 규칙을 제대로 설계하여 모든 응용 프로그램에서 지키면 교착상태가 발생할 가능성은 거의 없습니다.

한 트랜잭션에 대해 일련의 잠금이 필요하다면 사용자는 먼저 가장 배타적인 (호환성이 가장 낮은) 잠금을 획득해야 합니다.

잠금 유형

O ra c l e은 데이터에 대한 동시 액세스를 제어하고 사용자 간에 파괴적인 상호 작용을방지하기 위해 서로 다른 유형의 잠금을 자동으로 사용합니다. Ora c l e은 자동으로 한트랜잭션에 대한 해당 자원을 잠궈 다른 트랜잭션이 동일 자원을 독점적으로 액세스할 수 없도록 합니다. 특정 이벤트가 발생하면 잠금은 자동으로 해제되고 트랜잭션은더 이상 자원을 필요로 하지 않습니다.

이러한 작업을 통해 O ra c l e은 잠궈질 자원과 수행될 작업에 따라 서로 다른 레벨의제한성을 가지는 서로 다른 유형의 잠금을 자동으로 획득합니다.

O racle 잠금은 다음과 같은 일반적인 범주 중 하나에 속합니다.

DML 잠금 DML 잠금은 데이터를 보호합니다. 예를 들어, 테이블 잠금(데이터 잠금) 은 전체 테이블을 잠그며 행 잠금은 선택한 행을 잠급니다.

DDL 잠금 DDL 잠금은 스키마 객체의 구조를 보호합니다. 예를 들어, (딕셔너리 잠금) 테이블이나 뷰를 정의한 부분을 보호합니다.

내부 잠금과 래치 내부 잠금과 래치는 데이터 파일과 같은 내부 데이터베이스구조를 보호합니다. 내부 잠금과 래치는 완전히 자동으로 수행됩니다.

데이터 동시성과 일관성 2 7 - 1 9

데이터를 잠그는 방법

Page 323: Oracle8 - Tistory

분산 잠금 분산 잠금은 O racle Pa rallel Serv e r의 여러 인스턴스에 분산되어 있는 데이터와 기타 자원이 일관성을 유지하도록 보장합니다. 분산 잠금은 트랜잭션이 아닌 인스턴스가 보유합니다. 분산 잠금은 O racle Pa rallel Serv e r의 여러 인스턴스사이에서 자원의 현재 상태 정보를 교환합니다.

병렬 캐시 관리 병렬 캐시 관리 잠금은 버퍼 캐시 내에 있는 하나 이상의 데(PCM) 잠금 이터 블록(테이블 또는 인덱스 블록)을 담당하는 분산 잠금입

니다. PCM 잠금은 트랜잭션에 대해 어떤 행도 잠그지 않습니다.

이 장에서는 DML 잠금, DDL 잠금및 내부 잠금에 대해 각각 설명합니다.

추가 정보: 분산 잠금과 PCM 잠금에 대한 자세한 내용은 O ra c l e 8 iPa rallel Server Concepts and Ad m i n i s t ra t i o n을 참조하십시오.

DML (데이터) 잠금

DML (데이터) 잠금의 목적은 여러 사용자가 동시에 액세스하는 데이터 무결성을 보장하는 것입니다. DML 잠금은 충돌하는 D M L과 DDL 작업의 파괴적인 상호 작용을 방지합니다. 예를 들어, Ora c l e의 DML 잠금은 테이블 내의 특정 행이 한번에 하나의 트랜잭션에 의해서만 갱신될 수 있다는 것과 커밋되지 않은 트랜잭션이 테이블에 삽입 작업을 포함할 때는 이 테이블을 삭제할 수 없음을 보장합니다.

DML 작업은 서로 다른 두 가지 레벨 즉, 특정 행이나 전체 테이블에서 데이터 잠금을 획득할 수 있습니다. 다음 단원에서는 행 잠금과 테이블 잠금을 설명합니다.

주: 다음 단원에 나오는 잠금 유형과 잠금 모드 뒤의 괄호 안에 있는머리 글자어는 O racle Enterprise Manager의Locks Monitor에 사용되는 약어입니다. Oracle Enterprise Manager는 테이블 잠금 모드( R S나 SRX 같은)를 표시하지 않고 모든 테이블 잠금에 대해 T M을표시합니다.

행 잠금( T X )

O ra c l e이 자동으로 획득하는 유일한 DML 잠금은 행 레벨 잠금입니다. Ora c l e은 명령문이나 트랜잭션이 보유하는 행 잠금 수를 제한하지 않으며 행 레벨에서 덜 미세한

27-20 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Page 324: Oracle8 - Tistory

단위의 잠금을 단계적으로 확대시키지 않습니다. 행 잠금은 가능한 가장 미세한 단위의 잠금을 제공하므로 가능한 최고의 동시성과 처리 능력을 제공합니다.

다중 버전 동시성 제어와 행 레벨 잠금을 조합하면 사용자는 동일한 행에 액세스할때만 데이터에 대해 경합합니다.

■ 데이터를 읽는 사용자는 동일한 데이터 행에 기록하는 사용자를 기다리지 않습니다.

■ 데이터를 기록하는 사용자는 특별히 데이터를 읽는 사용자가 잠금을 요구하는S E L E C T...FOR UPDAT E를 사용하지 않는다면 동일한 데이터 행을 읽는 사용자를 기다리지 않습니다.

■ 데이터를 기록하는 사용자는 동시에 동일한 행을 갱신하려고 하는 경우에만 데이터를 기록하는 다른 사용자를 기다려야 합니다.

주: 데이터를 읽는 사용자는 대기 중인 분산 트랜잭션과 같은 매우 특별한 경우에 동일한 데이터 블록에 기록하는 사용자를 기다려야 합니다.

트랜잭션은 I N S E RT, UPDAT E, DELETE와 FOR UPDATE 절을 가진SELECT 문으로 수정된 개별 행에 대해 배타 DML 잠금을 획득합니다.

수정된 행은 항상 배타적으로 잠기므로 잠금을 보유하고 있는 트랜잭션이 커밋되거나롤백되어야 다른 사용자가 해당 행을 수정할 수 있습니다. (그러나 트랜젝션이 인스턴스 실패로 인해 종료하는 경우 블록 레벨 복구는 전체 트랜잭션이 복구되기 전에행을 사용 가능하게 만듭니다. 32-4 페이지“데이터베이스 인스턴스 실패”를 참조하십시오.) Ora c l e은 위에 나열한 명령문의 결과로 행 잠금을 자동으로 획득합니다.

트랜잭션이 행에 대한 행 잠금을 획득하면 트랜잭션은 또한 해당 테이블에 대해 테이블 잠금을 획득합니다. 현재 트랜잭션에서 수행한 데이터 변경 사항을 무효화하는DDL 작업의 충돌을 방지하기 위해서도 테이블 잠금이 필요합니다. 다음 단원에서는테이블 잠금을 설명하고 27-28 페이지“DDL 잠금 (딕셔너리 잠금)”에서는 DDL 작업에 필요한 잠금에 대해 설명합니다.

테이블 잠금( T M )

트랜잭션은 DML 문 I N S E RT, UPDAT E, DELETE 및 FOR UPDATE 절을 가진 S E L E C T와 LOCK TA B L E으로 테이블이 수정되면 테이블 잠금을 획득합니다.이러한 DML 작업은 두 가지 목적으로 테이블 잠금을 필요로 합니다. 하나는 트랜잭션의 테이블에 대한 DML 액세스를 예약하기 위한 것이며 다른 하나는 트랜잭션과충돌하는 DDL 작업을 방지하기 위한 것입니다.임의의 테이블 잠금은 동일한 테이블에 대한 배타 DDL 잠금 획득을 방지하며 따라서 이러한 잠금을 필요로 하는 DDL

데이터 동시성과 일관성 2 7 - 2 1

데이터를 잠그는 방법

Page 325: Oracle8 - Tistory

작업을 방지합니다. 예를 들어, 커밋되지 않은 트랜잭션이 테이블에 대한 테이블 잠금을 보유하면 이 테이블은 변경되거나 삭제되지 않습니다. (배타 DDL 잠금에 대한자세한 내용은 27-28 페이지“배타DDL 잠금”을 참조하십시오. )

테이블 잠금은 행 공유(RS), 행 독점(RX), 공유(S), 공유 행 독점(SRX), 배타( X )모드 중 하나로 유지됩니다. 테이블 잠금 모드의 제한성은 다른 테이블 잠금이 동일한 테이블에 대해 획득하고 보유할 수 있는 잠금 모드를 결정합니다.

표 2 7 - 2는 각 명령문이 획득하는 테이블 잠금 모드와 이러한 잠금이 허용하는 작업과금지하는 작업을 보여줍니다.

표 27-2 테이블 잠금 요약

27-22 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

SQL 문

SELECT...FROM table...

INSERT INTO table...

UPDATE table...

DELETE FROM table...

SELECT...FROM table...

FOR UPDATE OF...

LOCK TABLE table INROW SHARE MODE

LOCK TABLE table IN

ROW EXCLUSIVE MODE

LOCK TABLE table INSHARE MODE

LOCK TABLE table IN

SHARE ROW EXCLUSIVE

MODE

LOCK TABLE table IN

EXCLUSIVE MODE

테이블

잠금

모드

없음

RX

RX

RX

RS

RS

RX

S

SRX

X

RS

예*

예*

예*

아니오

RX

예*

예*

예*

아니오

아니오

아니오

S

아니오

아니오

아니오

예*

아니오

아니오

아니오

SRX

아니오

아니오

아니오

예*

아니오

아니오

아니오

아니오

X

아니오

아니오

아니오

아니오

아니오

아니오

아니오

아니오

아니오

잠금 모드 허용 여부

RS: 행 공유

RX: 행 독점

S: 공유

SRX: 공유 행 독점

X: 배타

* 충돌하는 행 잠금이 다른

트랜잭션에 의해 보유되지

않은 경우는 예이고 그 밖

의 경우에는대기합니다.

Page 326: Oracle8 - Tistory

다음 단원에서는 제한성이 낮은 모드에서 제한성이 높은 모드 순으로 각 테이블 잠금모드에 대해 설명합니다. 각 단원에서는 테이블 잠금 모드, 트랜잭션이 해당 모드의테이블 잠금을 획득하도록 하는 작업, 다른 트랜잭션에 허용된 작업과 금지된 작업등에 대해 설명합니다. 수동 잠금에 대한 자세한 내용은 27-31 페이지“명시적 (수동) 데이터 잠금”을 참조하십시오.

행 공유 테이블 잠금(RS) 행 공유 테이블 잠금(하위 공유 테이블 잠금, SS라고도함)은 테이블에 대한 잠금을 보유하는 트랜잭션이 테이블 내의 행을 잠그고 갱신하고자 한다는 것을 나타냅니다. 다음 SQL 문 중 하나가 실행되면 테이블에 대한 행 공유 테이블 잠금이 자동으로 획득됩니다.

SELECT . . . FROM table . . . FOR UPDATE OF . . . ;

LOCK TABLE table IN ROW SHARE MODE;

행 공유 테이블 잠금은 제한성이 가장 낮은 테이블 잠금 모드로 테이블에 대해 가장높은 동시성을 제공합니다.

허용된 작업: 트랜잭션이 보유하는 행 공유 테이블 잠금은 동시에 다른 트랜잭션이동일한 테이블에서 행에 대해 질의, 삽입, 갱신, 삭제, 잠금 작업을 수행할 수 있도록합니다. 따라서 다른 트랜잭션은 동일한 테이블에 대해 행 공유, 행 독점, 공유, 공유행 독점 테이블 잠금을 동시에 획득할 수 있습니다.

금지된 작업: 트랜잭션이 보유하는 행 공유 테이블 잠금은 다른 트랜잭션이 다음 명령문을 사용하여 동일한 테이블을 배타적으로 쓰기 액세스하지 못하도록 합니다.

LOCK TABLE table IN EXCLUSIVE MODE;

행 독점 테이블 잠금(RX) 행 독점 테이블 잠금(하위 독점 테이블 잠금, SX라고도함)은 일반적으로 잠금을 보유하고 있는 트랜잭션이 테이블 내에 있는 행에 하나 이상의 갱신 작업을 수행했음을 나타냅니다. 행 독점 테이블 잠금은 다음 명령문 중 하나를 사용하여 수정되는 테이블에 대해 자동으로 획득됩니다.

INSERT INTO table . . . ;

UPDATE table . . . ;

DELETE FROM table . . . ;

LOCK TABLE table IN ROW EXCLUSIVE MODE;

행 독점 테이블 잠금은 행 공유 테이블 잠금보다 약간 더 제한적입니다.

데이터 동시성과 일관성 2 7 - 2 3

데이터를 잠그는 방법

Page 327: Oracle8 - Tistory

허용된 작업: 트랜잭션이 보유하는 행 독점 테이블 잠금은 동시에 다른 트랜잭션이동일한 테이블에서 행에 대해 질의, 삽입, 갱신, 삭제, 잠금작업을 수행할 수 있도록합니다. 따라서 행 독점 테이블 잠금은 다중 트랜잭션이 동일한 테이블에 대해 행 독점, 행 공유 테이블 잠금을 동시에 획득할 수 있도록 합니다.

금지된 작업: 트랜잭션이 보유하는 행 독점 테이블 잠금은 다른 트랜잭션이 배타적으로 읽거나 쓰기 위해 테이블을 수동으로 잠그지 못하도록 합니다. 따라서 다른 트랜잭션은 다음 명령문을 사용하여 동시에 테이블을 잠글 수 없습니다.

LOCK TABLE table IN SHARE MODE;

LOCK TABLE table IN SHARE EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;

공유 테이블 잠금(S) 공유 테이블 잠금은 다음 명령문에 지정된 테이블에 대해 자동으로 획득됩니다.

LOCK TABLE table IN SHARE MODE;

허용된 작업: 트랜잭션이 보유하는 공유 테이블 잠금은 다른 트랜잭션이 테이블에 대해 질의하거나 S E L E C T...FOR UPDAT E로 특정 행을 잠그거나 L O C KTA B L E...IN SHARE MODE 문을 실행할 수 있도록 합니다. 다른 트랜잭션이 갱신 작업을 수행할 수는 없습니다. 다중 트랜잭션은 동일한 테이블에 공유 테이블 잠금을 동시에 보유할 수 있습니다. 이 경우 트랜잭션은 트랜잭션이 FOR UPDAT E절을 가진 SELECT 문의 결과로 행 잠금을 보유해도 테이블을 갱신할 수 없습니다.따라서 공유 테이블 잠금을 보유하고 있는 트랜잭션은 다른 트랜잭션이 동일한 테이블에 대해 공유 테이블 잠금을 가지지 않을 때만 테이블을 갱신할 수 있습니다.

금지된 작업: 트랜잭션이 보유하는 공유 테이블 잠금은 다른 트랜잭션이 동일한 테이블을 수정하는 것을 허용하지 않으며 다음 명령문을 실행하지 못하게 합니다.

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;

LOCK TABLE table IN ROW EXCLUSIVE MODE;

27-24 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Page 328: Oracle8 - Tistory

공유 행 독점 테이블 잠금(S RX ) 공유 행 독점 테이블 잠금(공유 하위 독점 테이블잠금, SSX라고도 함)은 공유 테이블 잠금보다 더 제한적입니다. 다음과 같이 입력하면 테이블에 대해 공유 행 독점 테이블 잠금을 획득할 수 있습니다.

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

허용된 작업: 한번에 하나의 트랜잭션만 주어진 테이블에 대한 공유 행 독점 테이블잠금을 획득할 수 있습니다. 트랜잭션이 보유하는 공유 행 독점 테이블 잠금은 다른트랜잭션이 질의하거나 FOR UPDATE 절을 가진 S E L E C T를 사용하여 특정 행을잠글 수 있도록 하지만 테이블을 갱신하는 것은 허용하지 않습니다.

금지된 작업: 트랜잭션이 보유하는 공유 행 독점 테이블 잠금은 다른 트랜잭션이 행독점 테이블 잠금을 획득하지 못하게 하며 동일한 테이블을 수정하지 못하도록 합니다. 공유 행 독점 테이블 잠금은 다른 트랜잭션이 다음 명령문을 실행하여 공유, 공유행 독점 및 독점 테이블 잠금을 획득하는 것을 허용하지 않습니다.

LOCK TABLE table IN SHARE MODE;

LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

LOCK TABLE table IN ROW EXCLUSIVE MODE;

LOCK TABLE table IN EXCLUSIVE MODE;

독점 테이블 잠금( X ) 독점 테이블 잠금은 가장 제한적인 테이블 잠금으로 이 잠금을가진 트랜잭션은 테이블을 배타적으로 쓰기 액세스할 수 있습니다. 다음과 같이 입력하면 테이블에 대해 독점 테이블 잠금을 획득할 수 있습니다.

LOCK TABLE table IN EXCLUSIVE MODE;

허용된 작업: 한 트랜잭션만이 테이블에 대해 독점 테이블 잠금을 획득할 수 있습니다. 독점 테이블 잠금은 다른 트랜잭션이 테이블에 대해 질의할 수 있도록 합니다.

금지된 작업: 트랜잭션이 보유하는 독점 테이블 잠금은 다른 트랜잭션이 어떠한 유형의 DML 문도 수행하지 못하게 하며 테이블에 대해 어떠한 유형의 잠금도 설정하지못하게 합니다.

DML 문에 대해 자동으로 획득되는 DML 잠금

이전 단원에서는 서로 다른 유형의 데이터 잠금, 이 잠금을 보유하는 모드, 획득할 수있는 시기, 획득한 시기, 금지하는 작업 등에 대해 설명했습니다. 다음 단원에서는 서로 다른 DML 작업에 대해 데이터를 자동으로 잠그는 방법을 요약합니다.

데이터 동시성과 일관성 2 7 - 2 5

데이터를 잠그는 방법

Page 329: Oracle8 - Tistory

표 2 7 - 3은 다음 단원의 정보를 요약합니다.

표 27-3 DML 문에 의해 획득되는 잠금

질의에 대한 기본 잠금 질의는 데이터를 읽기만 하므로 거의 다른 SQL 문을 방해하지 않는 SQL 문입니다. INSERT, UPDATE 및 DELETE 문은 명령문의 일부로암시적 질의를 포함할 수 있습니다. 질의는 다음과 같은 종류의 명령문에 포함됩니다.

SELECT

INSERT . . . SELECT . . . ;

UPDATE . . . ;

DELETE . . . ;

다음 명령문은 포함하지 않습니다.

SELECT . . . FOR UPDATE OF . . . ;

27-26 Oracle8i 개념 설명서, 볼륨 2

DML 문

SELECT...FROM table

INSERT INTO table...

UPDATE table...

DELETE FROM table...

SELECT...FROM table...

FOR UPDATE OF...

LOCK TABLE table IN...

ROW SHARE MODE

ROW EXCLUSIVE MODE

SHARE MODE

SHARE EXCLUSIVE MODE

EXCLUSIVE MODE

행에 대한 잠금 여부

X

X

X

X

테이블 잠금 모드

RX

RX

RX

RS

RS

RX

S

SRX

X

X: 배타

RX: 행 독점

RS: 행 공유

S: 공유

SRX: 공유 행 독점

데이터를 잠그는 방법

Page 330: Oracle8 - Tistory

다음 특성은 FOR UPDATE 절을사용하지 않는 모든 질의에 적용됩니다.

■ 질의는 데이터 잠금을 획득하지 않습니다. 따라서 다른 트랜잭션은 질의되는 특정행을 포함하여 질의되는 테이블을 질의하고 갱신할 수 있습니다. FOR UP-DATE 절을 사용하지 않는 질의는 다른 작업을 방해하는 데이터 잠금을 획득하지않으므로 O ra c l e에서 비 차단 질의라고 합니다.

■ 질의는 데이터 잠금 해제를 기다리지 않습니다. 질의는 항상 진행합니다. (질의는미결 분산 트랜잭션과 같이 매우 특별한 경우에만 데이터 잠금을 기다립니다. )

INSERT, UPDATE, DELETE, SELECT...FOR UPDATE 문에 대한 기본 잠금I N S E RT, UPDAT E, DELETE, SELECT...FOR UPDATE 문의 잠금 특성은다음과 같습니다.

■ DML 문을 포함하는 트랜잭션은 해당 명령문에 의해 수정되는 행에 대해 독점 행잠금을 획득합니다. 다른 트랜잭션은 잠금 트랜잭션이 커밋하거나 롤백한 후에 잠긴 행을 갱신하거나 삭제할 수 있습니다.

■ DML 문을 포함하는 트랜잭션은 WHERE 절에 있는 질의 같은 하위 질의나 내부질의가 선택한 행에 대해서는 행 잠금을 획득할 필요가 없습니다. DML 문 내에있는 하위 질의나 내부 질의는 질의 시작 시점에 대해 일관성이 보장되며 자신이속한 DML 문 결과의 영향을 받지 않습니다.

■ 트랜잭션의 질의는 동일한 트랜잭션에 있는 이전 DML 문이 변경한 사항을 볼 수있습니다. 그러나 자신의 트랜잭션 이후에 시작된 다른 트랜잭션의 변경 사항은 볼수 없습니다.

■ 필요한 독점 행 잠금뿐 아니라 DML 문을 포함하는 트랜잭션도 영향을 받는 행을포함하는 테이블에 대해 적어도 행 독점 테이블 잠금을 획득합니다. 트랜잭션이 이테이블에 대해 이미 공유, 공유 행 독점, 독점 테이블 잠금을 보유하고 있다면 행독점 테이블 잠금은 필요하지 않습니다. 트랜잭션이 이 테이블에 대해 이미 공유테이블 잠금을 보유하고 있다면 O ra c l e은 자동으로 이 잠금을 행 독점 테이블 잠금으로 변환합니다.

데이터 동시성과 일관성 2 7 - 2 7

데이터를 잠그는 방법

Page 331: Oracle8 - Tistory

DDL 잠금 (딕셔너리 잠금)

DDL 잠금은 DDL 작업이 객체에 대한 작업을 수행하거나 객체를 참조하는 동안 스키마 객체(예를 들어, 테이블)의 정의 부분을 보호합니다. (DDL 문은 암시적으로 자신의 트랜잭션을 커밋함) 예를 들어, 사용자가 프로시저를 생성하는 경우를 생각해봅시다. 사용자의 단일 명령문 트랜잭션에 대해 O ra c l e은 자동으로 이 프로시저 정의에서 참조된 모든 스키마 객체에 대해 DDL 잠금을 획득합니다. DDL 잠금은 프로시저에서 참조된 객체가 이 프로시저의 컴파일이 완료되기 전에 변경되거나 삭제되는것을 방지합니다.

O ra c l e은 딕셔너리 잠금을 필요로 하는 임의의 DDL 트랜잭션에 대해 딕셔너리 잠금을 자동으로 획득합니다. 사용자는 명시적으로 DDL 잠금을 요구할 수 없습니다. 수정되거나 참조되는 개별 스키마 객체만이 DDL 작업 동안 잠깁니다. 전체 데이터 딕셔너리는 잠기지 않습니다.

DDL 잠금은 배타 DDL 잠금, 공유 DDL 잠금, 중단할 수 있는 구문 분석 잠금 중하나입니다.

배타 DDL 잠금

대부분의 DDL 작업(다음 단원의“공유 DDL 잠금”제외)은 동일한 스키마 객체를수정하거나 참조할 수 있는 다른 DDL 작업의 파괴적인 방해 작용을 막기 위해 자원에 대한 배타 DDL 잠금을 필요로 합니다. 예를 들어, ALTER TABLE 작업이테이블에 열을 추가하는 동안 테이블을 삭제하는 D ROP TABLE 작업은 허용되지 않습니다. 반대의 경우도 마찬가지입니다.

배타 DDL 잠금을 획득하는 동안 다른 작업이 스키마 객체에 대해 다른 DDL 잠금을보유하고 있다면 이전 DDL 잠금이 해제될 때까지 잠금 획득을 기다렸다가 작업을 진행할 수 있습니다.

또한 DDL 작업은 수정될 스키마 객체에 대한 DML 잠금(데이터 잠금)을 획득합니다.

공유 DDL 잠금

일부 DDL 작업은 서로 충돌하는 DDL 작업의 파괴적인 방해 작용을 막기 위해 자원에 대한 공유 DDL 잠금을 필요로 합니다. 그러나 유사한 DDL 작업에 대해서는 데이터 동시성을 허용합니다. 예를 들어, CREATE PROCEDURE 문이 실행되는 경우 이를 포함하는 트랜잭션은 참조되는 모든 테이블에 대해 공유 DDL 잠금을 획득합니다. 다른 트랜잭션은 동일한 테이블을 참조하는 프로시저를 동시에 생성할 수 있습니다. 따라서 동일한 테이블에 대해 동시 공유 DDL 잠금을 획득합니다. 그러나 트랜잭션이 참조된 테이블에 대한 배타 DDL 잠금을 획득할 수는 없습니다. 트랜잭션은참조된 테이블을 변경 또는 삭제할 수 없습니다. 결과적으로 공유 DDL 잠금을 보유하는 트랜잭션은 이 트랜잭션이 진행되는 동안에는 참조된 스키마 객체 정의가 일정하게 유지됩니다.

27-28 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Page 332: Oracle8 - Tistory

스키마 객체에 대해 다음 명령어를 포함하는 DDL 문은 해당 스키마 객체에 대한 공유 DDL 잠금을 획득합니다. AU D I T, NOAU D I T, COMMENT, CREATE [ORR E P L ACE] VIEW/PRO C E D U R E / PAC K AG E / PAC K AGE BODY / F U N C T I -O N / T R I G G E R, CREATE SY N O N Y M과 C R E ATE TABLE(CLUSTER 매개변수가 포함되지 않을 때) .

중단할 수 있는 구문 분석 잠금

공유 저장소에 있는 SQL 문 또는 PL/SQL 프로그램 단위는 자신이 참조하는 각 스키마객체에 대한 구문 분석 잠금을 보유합니다. 참조된 객체가 변경되거나 삭제되면관련된 공유 SQL 영역이 무효화될 수 있도록 하기 위해 구문 분석 잠금을 획득합니다. 종속성 관리에 대한 자세한 내용은 2 1장, “O racle 종속성 관리”를 참조하십시오.구문 분석 잠금은 모든 DDL 작업을 허용하며 충돌하는 DDL 작업을 허용하기 위해중단할 수 있습니다. 따라서“중단할수 있는 구문 분석 잠금”이라고 합니다.

구문 분석 잠금은 SQL 문의 구문 분석 단계에서 획득되어 해당 명령문에 대한 공유SQL 영역이 공유 저장소에 남아 있는 동안 유지됩니다.

DDL 잠금의 지속 기간

DDL 잠금의 지속 기간은 유형에 따라 다릅니다. 배타 DDL 잠금과 공유 DDL 잠금은 DDL 문이 실행되고 자동으로 커밋되는 동안 지속됩니다. 구문 분석 잠금은 관련된 SQL 문이 공유 저장소에 남아 있는 동안 지속됩니다.

DDL 잠금과 클러스터

클러스터에 대한 DDL 작업은 클러스터와 클러스터에 있는 모든 테이블과 스냅샷에대한 배타 DDL 잠금을 획득합니다. 클러스터에 있는 테이블이나 스냅샷에 대한DDL 작업은 테이블 또는 스냅샷에 대한 공유 DDL 잠금이나 배타 DDL 잠금뿐만아니라 클러스터에 대한 공유 잠금을 획득합니다. 클러스터에 대한 공유 DDL 잠금은첫 번째 작업이 진행되는 동안 다른 작업이 클러스터를 삭제하지 못하도록 합니다.

래치와 내부 잠금

래치와 내부 잠금은 내부 데이터베이스와 메모리 구조를 보호합니다. 사용자는 래치와 내부 잠금의 발생 값과 지속 기간을 제어할 필요가 없으므로 이러한 래치와 내부잠금을 액세스할 수 없습니다. 다음 정보는 O racle Enterprise Manager 또는SQL*Plus LOCKS와 L ATCHES 모니터를 해석하는데 유용합니다.

데이터 동시성과 일관성 2 7 - 2 9

데이터를 잠그는 방법

Page 333: Oracle8 - Tistory

래치

래치는 시스템 글로벌 영역( S GA )에 있는 공유 데이터 구조를 보호하는 간단하고 낮은 레벨의 연속 처리 기법입니다. 예를 들어, 래치는 현재 데이터베이스에 액세스하고 있는 사용자 목록과 버퍼 캐시에 있는 블록을 설명하는 데이터 구조를 보호합니다. 서버나 백그라운드 프로세스는 이러한 구조 중 하나를 조작하거나 참조하는 중에잠시 동안 래치를 획득합니다. 래치 구현은 운영 체제마다 다르며 특히 프로세스가래치를 기다리는지의 여부와 기다리는 시간에 따라 다릅니다.

내부 잠금

내부 잠금은 래치보다 높은 레벨의 더 복잡한 처리 기법이며 다양한 용도로 사용됩니다.

딕셔너리 캐시 잠금 이러한 잠금은 지속 기간이 매우 짧으며 딕셔너리 캐시에 있는입력 항목이 수정되거나 사용되는 동안 이러한 입력 항목에 대해 유효합니다. 이것은구문 분석되는 명령문이 일관성 없는 객체 정의를 볼 수 없도록 합니다.

딕셔너리 캐시 잠금은 공유되거나 독점될 수 있습니다. 공유 잠금은 구문 분석이 완료되면 해제됩니다. 배타 잠금은 DDL 작업이 완료되면 해제됩니다.

파일과 로그 관리 잠금 이러한 잠금은 서로 다른 파일을 보호합니다. 예를 들어, 하나의 잠금은 제어 파일을 보호하여 한 번에 한 프로세스만이 제어 파일을 변경할 수있도록 합니다. 다른 잠금은 리두 로그 파일 사용이나 아카이브를 조정합니다. 데이터 파일은 다중 인스턴스가 공유 모드로 데이터베이스를 마운트하거나 한 인스턴스가배타 모드로 마운트하는 것을 보장하도록 잠겨집니다. 파일 잠금이나 로그 잠금은 파일 상태를 나타내므로 오랫동안 유효해야 합니다.

O racle Pa rallel Serv e r를 사용하는 경우 파일 잠금과 로그 잠금은 특히 중요합니다.

추가 정보: 잠금에 대한 자세한 내용은 O racle8i Pa rallel Serv e rConcepts and Ad m i n i s t ra t i o n을 참조하십시오.

테이블스페이스와 롤백 세그먼트 잠금 이러한 잠금은 테이블스페이스와 롤백 세그먼트를 보호합니다. 예를 들어, 데이터베이스를 액세스하는 모든 인스턴스는 테이블스페이스의 상태가 온라인인지 오프라인인지에 따라 일치해야 합니다. 롤백 세그먼트는한 인스턴스만이 세그먼트에 기록할 수 있도록 잠깁니다.

27-30 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Page 334: Oracle8 - Tistory

명시적 (수동) 데이터 잠금

O ra c l e은 항상 데이터 동시성, 데이터 무결성, 명령문 레벨 읽기 일관성을 보장하기위해 자동으로 잠금 작업을 수행합니다. 그러나 사용자는 O ra c l e의 기본 잠금 처리기법을 무효화할 수 있습니다. 다음과 같은 상황에서는 기본 잠금을 무효화하는 것이유용합니다.

■ 응용 프로그램은 트랜잭션 레벨 읽기 일관성이나“반복 읽기”를 필요로 합니다.즉, 이 트랜잭션에 있는 질의는 트랜잭션이 진행되는 동안 다른 트랜잭션에 의해변경된 사항을 반영하지 않고 일관성 있는 데이터를 생성해야 합니다. 사용자는 명시적 잠금, 읽기 전용 트랜잭션, 연속 트랜잭션을 사용하거나 기본 잠금을 무효화하여 트랜잭션 레벨 읽기 일관성을 획득할 수 있습니다.

■ 응용 프로그램은 트랜잭션이 다른 트랜잭션이 종료되기를 기다리지 않도록 자원에대한 독점 액세스 권한을 가지도록 요구합니다.

O ra c l e의 자동 잠금은 두 가지 레벨로 무효화할 수 있습니다.

트랜잭션 다음 SQL 문을 포함하는 트랜잭션은 O ra c l e의 기본 잠금을 무효화합니다.

■ SET TRANSACTION ISOLATION LEVEL 명령어

■ LOCK TABLE 명령어 (이것은 테이블이나 뷰와 함께 사용되는경우 기초가 되는 기본 테이블을 잠금)

■ S E L E C T...FOR UPDATE 명령어

이러한 명령문이 획득한 잠금은 트랜잭션이 커밋되거나 롤백된 후에해제됩니다.

세션 세션은 필요한 트랜잭션 분리 레벨을 A LTER SESSION 명령어로설정할 수 있습니다.

주: O ra c l e의 기본 잠금이 임의 레벨에서 무효화되면 데이터베이스 관리자나 응용 프로그램 개발자는 무효화하는 잠금 프로시저가 제대로 작동하는지를 확인해야 합니다. 잠금 프로시저는 다음 조건을 만족시켜야합니다. 데이터 무결성이 보장되어야 하며 데이터 동시성이 허용될 수있어야 하고 교착 상태가 발생하지 않아야 하며 발생하더라도 적절히처리될 수 있어야 합니다.

추가 정보: SQL 문 LOLK TABLE 및 S E L E C T...FOR UPDAT E에 대한 자세한 설명은 O racle8i SQL 참조서를참조하십시오.

데이터 동시성과 일관성 2 7 - 3 1

데이터를 잠그는 방법

Page 335: Oracle8 - Tistory

명시적 잠금 하의 동시성 예

다음 예는 LOCK TA B L E과 FOR UPDATE 절을 가진 SELECT 문을 사용하는경우 O ra c l e이 데이터 동시성, 무결성, 일관성을유지 관리하는 방법을 보여줍니다.

주: 간단히 하게 O R A - 0 0 0 5 4 (“re s o u rce busy and acquire withN OWAIT specified.”)에 대한 메시지 텍스트는 포함하지 않습니다.사용자가 입력하는 텍스트는 굵은체로 표시됩니다.

27-32 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Transaction 1 Time Transaction 2

Point

LOCK TABLE scott.dept 1

IN ROW SHARE MODE;

Statement processed

2 DROP TABLE scott.dept;

DROP TABLE scott.dept

*

ORA-00054

(exclusive DDL lock

not possible because

of T1's table lock)

3 LOCK TABLE scott.dept

IN EXCLUSIVE MODE

NOWAIT;

ORA-00054

4 SELECT LOC

FROM scott.dept

WHERE deptno = 20

FOR UPDATE OF loc;

LOC

- - - - - - -

DALLAS

1 row selected.

UPDATE scott.dept 5

SET loc = 'NEW YORK'

WHERE deptno = 20;

(waits because T2 has

locked same rows)

Page 336: Oracle8 - Tistory

데이터 동시성과 일관성 2 7 - 3 3

데이터를 잠그는 방법

Transaction 1 Time Transaction 2

Point

6 ROLLBACK;

(releases row locks)

1 row processed. 7

ROLLBACK;

LOCK TABLE scott.dept 8

IN ROW EXCLUSIVE

MODE;

Statement processed.

9 LOCK TABLE scott.dept

IN EXCLUSIVE MODE

NOWAIT;

ORA-00054

10 LOCK TABLE scott.dept

IN SHARE ROW EXCLUSIVE

MODE NOWAIT;

ORA-00054

11 LOCK TABLE scott.dept

IN SHARE ROW EXCLUSIVE

MODE NOWAIT;

ORA-00054

12 UPDATE scott.dept

SET loc = 'NEW YORK'

WHERE deptno = 20;

1 row processed.

13 ROLLBACK;

SELECT loc 14

FROM scott.dept

WHERE deptno = 20

FOR UPDATE OF loc;

LOC

- - - - - -

DALLAS

1 row selected.

15 UPDATE scott.dept

SET loc = 'NEW YORK'

WHERE deptno = 20;

(waits because T1 has

locked same rows)

Page 337: Oracle8 - Tistory

27-34 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Transaction 1 Time Transaction 2

Point

ROLLBACK; 16

17 1 row processed.

(conflicting locks

were released)

ROLLBACK;

LOCK TABLE scott.dept 18

IN SHARE MODE

Statement processed

19 LOCK TABLE scott.dept

IN EXCLUSIVE

MODE NOWAIT;

ORA-00054

20 LOCK TABLE scott.dept

IN SHARE ROW EXCLUSIVE

MODE NOWAIT;

ORA-00054

21 LOCK TABLE scott.dept

IN SHARE MODE;

Statement processed.

22 SELECT loc

FROM scott.dept

WHERE deptno = 20;

LOC

- - - - - - -

DALLAS

1 row selected.

23 SELECT loc

FROM scott.dept

WHERE deptno = 20

FOR UPDATE OF loc;

LOC

- - - - - - -

DALLAS

1 row selected.

24 UPDATE scott.dept

SET loc = 'NEW YORK'

WHERE deptno = 20;

(waits because T1

holds conflicting

table lock)

Page 338: Oracle8 - Tistory

데이터 동시성과 일관성 2 7 - 3 5

데이터를 잠그는 방법

Transaction 1 Time Transaction 2

Point

ROLLBACK; 25

26 1 row processed.

(conflicting table lock

released)

ROLLBACK;

LOCK TABLE scott.dept 27

IN SHARE ROW

EXCLUSIVE MODE;

Statement processed.

28 LOCK TABLE scott.dept

IN EXCLUSIVE MODE

NOWAIT;

ORA-00054

29 LOCK TABLE scott.dept

IN SHARE ROW

EXCLUSIVE MODE

NOWAIT;

ORA-00054

30 LOCK TABLE scott.dept

IN SHARE MODE NOWAIT;

ORA-00054

31 LOCK TABLE scott.dept

IN ROW EXCLUSIVE

MODE NOWAIT;

ORA-00054

32 LOCK TABLE scott.dept

IN SHARE MODE NOWAIT;

ORA-00054

33 SELECT loc

FROM scott.dept

WHERE deptno = 20;

LOC

- - - - - - -

DALLAS

1 row selected.

Page 339: Oracle8 - Tistory

27-36 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Transaction 1 Time Transaction 2

Point

34 SELECT loc

FROM scott.dept

WHERE deptno = 20

FOR UPDATE OF loc;

LOC

- - - - - - -

DALLAS

1 row selected.

35 UPDATE scott.dept

SET loc = 'NEW YORK'

WHERE deptno = 20;

(waits because T1 holds

conflicting table lock)

UPDATE scott.dept 36

SET loc = 'NEW YORK'

WHERE deptno = 20; (deadlock)

(waits because T2 has

locked same rows)

Cancel operation 37

ROLLBACK;

38 1 row processed.

LOCK TABLE scott.dept 39

IN EXCLUSIVE MODE;

40 LOCK TABLE scott.dept

IN EXCLUSIVE MODE;

ORA-00054

41 LOCK TABLE scott.dept

IN ROW EXCLUSIVE MODE

NOWAIT;

ORA-00054

42 LOCK TABLE scott.dept

IN SHARE MODE;

ORA-00054

43 LOCK TABLE scott.dept

IN ROW EXCLUSIVE

MODE NOWAIT;

ORA-00054

Page 340: Oracle8 - Tistory

데이터 동시성과 일관성 2 7 - 3 7

데이터를 잠그는 방법

Transaction 1 Time Transaction 2

Point

44 LOCK TABLE scott.dept

IN ROW SHARE MODE

NOWAIT;

ORA-00054

45 SELECT loc

FROM scott.dept

WHERE deptno = 20;

LOC

- - - - - - -

DALLAS

1 row selected.

46 SELECT loc

FROM scott.dept

WHERE deptno = 20

FOR UPDATE OF loc;

(waits because T1 has

conflicting table lock)

UPDATE scott.dept 47

SET deptno = 30

WHERE deptno = 20;

1 row processed.

COMMIT; 48

49 0 rows selected.

(T1 released conflicting

lock)

SET TRANSACTION READ 50

ONLY;

SELECT loc 51

FROM scott.dept

WHERE deptno = 10;

LOC

- - - - - - -

BOSTON

52 UPDATE scott.dept

SET loc = 'NEW YORK'

WHERE deptno = 10;

1 row processed.

Page 341: Oracle8 - Tistory

27-38 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Transaction 1 Time Transaction 2

Point

SELECT loc 53

FROM scott.dept

WHERE deptno = 10;

LOC

- - - - - - -

BOSTON

(T1 does not see

uncommitted data)

54 COMMIT;

SELECT loc 55

FROM scott.dept

WHERE deptno = 10;

LOC

- - - - - - -

(same results seen

even after T2 commits)

COMMIT; 56

SELECT loc 57

FROM scott.dept

WHERE deptno = 10;

LOC

- - - - - - -

NEW YORK

(committed data is seen)

Page 342: Oracle8 - Tistory

O racle 잠금 관리 서비스

응용 프로그램 개발자는 O racle 잠금 관리 서비스를 사용하여 PL/SQL 블록에 다음과 같은 명령문을 포함할 수 있습니다.

■ 특정 유형의 잠금 요구

■ 잠금에 동일한 인스턴스나 다른 인스턴스에 있는 다른 프로시저에서 인식할 수 있는 고유한 이름 부여

■ 잠금 유형 변경

■ 잠금 해제

예약된 사용자 잠금은 O racle 잠금과 동일하기 때문에 교착 상태 감지를 포함하여 모든 O racle 잠금 기능을 가집니다. 사용자 잠금은 접두어“U L”로 식별되므로 O ra c l e잠금과 충돌하지 않습니다.

DBMS_LOCK 패키지에 있는 프로시저를 통해 O racle 잠금 관리 서비스를 사용할수 있습니다.

추가 정보: O racle 잠금 관리 서비스에 대한 자세한 내용은 O ra c l e 8 iApplication Dev e l o p e r’s Guide - Fundamentals를참조하십시오.

데이터 동시성과 일관성 2 7 - 3 9

데이터를 잠그는 방법

Page 343: Oracle8 - Tistory

27-40 Oracle8i 개념 설명서, 볼륨 2

데이터를 잠그는 방법

Page 344: Oracle8 - Tistory

28데이터 무결성

이 장에서는 무결성 제약 조건을 사용하여 데이터베이스와 연관된 업무 규칙을 강제로 수행하는 방법과 테이블에 잘못된 정보가 입력되는 것을 방지하는 방법을 설명하며 다음 내용을 다룹니다.

■ 데이터 무결성 정의

■ 무결성 제약 조건 소개

■ 무결성 제약 조건 유형

■ 제약 조건 검사 방법

■ 지연된 제약 조건 검사

■ 제약 조건 상태

데이터 무결성 2 8 - 1

Page 345: Oracle8 - Tistory

데이터 무결성 정의

데이터베이스 관리자나 응용 프로그램 개발자가 결정한 대로 미리 정의된 일련의 규칙에 데이터를 적용시키는 것이 중요합니다. 데이터 무결성의 예로 그림 2 8 - 1에 설명된 EMP 테이블과 DEPT 테이블 및 각 테이블 정보에 대한 업무 규칙을 생각해 봅시다.

그림 28-1 데이터 무결성 예

각 테이블의 일부 열에는 포함된 데이터를 제한하는 특정 규칙이 있습니다.

2 8 - 2 Oracle8i 개념 설명서, 볼륨 2

데이터 무결성 정의

DEPT 테이블

DEPTNO DNAME LOC

20 RESEARCH DALLAS30 SALES CHICAGO

EMP 테이블

EMPNO ENAME ... 다른 열 ... SAL COMM DEPTNO

6666 MULDER 5500.00 207329 SMITH 9000.00 207499 ALLEN 7500.00 100.00 307521 WARD 5000.00 200.00 307566 JONES 2975.00 400.00 30

각 행은 ENAME 열에대한 값을 가져야 합니다.

DNAME 열에 있는 각각의값은 고유해야 합니다.

각 행에 EMPNO 열에 대한 값이 있어야 하며 값은 고유해야 합니다.

SAL 열에 있는 각각의 값은 1 0 , 0 0 0보다 작아야 합니다.

DEPTNO 열에 있는 각각의 값은 D E P T 테이블의DEPTNO 열의 값과 일치해야 합니다.

Page 346: Oracle8 - Tistory

데이터 무결성 유형

이 단원에서는 다음 유형의 데이터 무결성을 강제로 수행하기 위해 테이블 열에 적용할 수 있는 규칙에 대해 설명합니다.

열에 널(값이 없는 상태)을 포함하는 행 삽입 또는 갱신의 허용 여부를 결정하는 규칙으로 단일 열에 정의됩니다.

고유 열 값

열 또는 열 집합에 고유한 값을 포함하는 경우에만 열 또는 열 집합이 고유 값을 가지도록 정의된 경우 행을 삽입하거나 갱신할 수 있습니다.

기본 키 값

키(열 또는 열 집합)에 정의된 기본 키 값은 테이블의 각 행을 이 규칙이 적용된 키값에 의해 고유하게 식별될 수 있도록 지정합니다.

참조 무결성

해당 키 값이 관련 테이블의 키 값(참조 값)과 일치할 때만 작업을 허용하는 규칙으로테이블의 키(열 또는 열 집합)에 정의됩니다.

참조 무결성은 참조된 값에 허용되는 데이터 조작 유형과 이러한 데이터 조작이 종속값에 미치는 영향을 결정하는 규칙도 포함합니다. 참조 무결성과 연관된 규칙은 다음과 같습니다.

R e s t r i c t 참조된 데이터의 갱신 또는 삭제를 허용하지 않습니다.

Set to Null 참조된 데이터가 갱신되거나 삭제되면 모든 연관된 종속 데이터를 N U L L로 설정합니다.

Set to Defa u l t 참조된 데이터가 갱신되거나 삭제되면 모든 연관된 종속 데이터를 기본값으로 설정합니다.

C a s c a d e 참조된 데이터가 갱신되면 모든 연관된 종속 데이터를 그에따라 갱신하고, 참조된 행이 삭제되면 모든 연관된 종속 행을 삭제합니다.

No Ac t i o n 참조된 데이터의 갱신 또는 삭제를 허용하지 않습니다. 명령문 종료 시 또는 제약 조건이 지연된 경우 트랜잭션 종료 시에 검사된다는 점에서 R E S T R I C T와 다릅니다. ( O ra c l e은No Ac t i o n을 기본 작업으로 사용합니다. )

데이터 무결성 2 8 - 3

데이터 무결성 정의

Page 347: Oracle8 - Tistory

복합 무결성 확인

복합 무결성 확인은 열 또는 열 집합이 포함하는 값에 따라 행 삽입, 갱신 또는 삭제허용 여부를 결정하는 열 또는 열 집합에 대한 사용자가 정의한 규칙입니다.

데이터 무결성 강제 수행 방법

O ra c l e은 사용자가 이전 단원에 정의된 각 유형의 데이터 무결성 규칙을 정의하고 강제로 수행할 수 있도록 합니다. 이러한 규칙의 대부분은 무결성 제약 조건 또는 데이터베이스 트리거를 사용하여 쉽게 정의될 수 있습니다.

무결성 제약 조건

무결성 제약 조건은 테이블의 열에 대해 규칙을 정의하는 선언적 방법입니다. Ora c l e은 다음과 같은 무결성 제약 조건을 지원합니다.

■ 열의 널과 관련된 규칙을 위한 NOT NULL 제약 조건

■ 고유 열 값과 관련된 규칙을 위한 UNIQUE 키 제약 조건

■ 기본 식별 값과 관련된 규칙을 위한 P R I M A RY KEY 제약 조건

■ 참조 무결성과 관련된 규칙을 위한 FOREIGN KEY 무결성 제약 조건. Ora c l e은 현재 다음과 같은 참조 무결성 작업을 정의하기 위해 FOREIGN KEY 무결성 제약 조건 사용을 지원합니다.

- No Action 갱신및 삭제

- CA S CADE 삭제

- SET NULL 삭제

■ 복합 무결성 규칙을 위한 CHECK 제약 조건

주: 하위 테이블과 상위 테이블이 분산 데이터베이스의 서로 다른 노드에 있는 경우 선언 방식의 무결성 제약 조건을 사용하여 참조 무결성을강제로 수행할 수는 없습니다. 그러나 데이터베이스 트리거를 사용하면분산 데이터베이스에서 참조 무결성을 강제로 수행할 수 있습니다. (다음 단원 참조)

데이터베이스 트리거

O ra c l e은 데이터베이스 트리거(삽입, 갱신 또는 삭제 작업에서 자동으로 호출되는 내장 데이터베이스 프로시저)를 사용한 비 선언적 방식으로도 무결성 규칙을 강제로 수

2 8 - 4 Oracle8i 개념 설명서, 볼륨 2

데이터 무결성 정의

Page 348: Oracle8 - Tistory

행할 수 있습니다. 데이터 무결성 강제 수행에 사용하는 데이터베이스 트리거 예는2 0장“트리거”를 참조하십시오.

무결성 제약 조건 소개

O ra c l e은 무결성 제약 조건을 사용하여 데이터베이스의 기본 테이블에 유효하지 않은데이터를 입력하는 것을 방지합니다. 무결성 제약 조건을 정의하여 데이터베이스의정보와 연관된 업무 규칙을 강제로 수행할 수 있습니다. DML 문 실행 결과가 무결성 제약 조건을 위반하는 경우 O ra c l e은 명령문을 롤백하고 오류를 돌려줍니다.

주: 뷰와 테이블의 동의어에 대한 작업은 기본 테이블에 정의된 무결성제약 조건을 따릅니다.

예를 들어, EMP 테이블의 SAL 열에 대해 무결성 제약 조건을 정의한다고 합시다.이 무결성 제약 조건은 EMP 테이블의 어떤 행도 SAL 열의 1 0 , 0 0 0보다 큰 값을 포함할 수 없다는 규칙을 강제로 수행합니다. INSERT나 U P DATE 문이 이러한 무결성 제약 조건을 위반하려고 하면 O ra c l e은 명령문을 롤백하고 오류를 돌려줍니다.

O ra c l e에 구현된 무결성 제약 조건은 ANSI X3.135-1989와 ISO 9075-1989에 설정된 표준을 완전히 준수합니다.

무결성 제약 조건의 장점

다음 단원에서는 무결성 제약 조건이 다른 대안보다 유리한 점을 몇 가지 설명합니다. 다음과 같은 대안이 있을 수 있습니다.

■ 데이터베이스 응용 프로그램 코드에 업무 규칙 강제 수행

■ 내장 프로시저를 사용하여 데이터에 대한 액세스 완벽 제어

■ 트리거된 내장 데이터베이스 프로시저로 업무 규칙 강제 수행 ( 2 0장“트리거”참조)

선언 용이성

SQL 명령어를 사용하여 무결성 제약 조건을 정의합니다. 테이블을 정의하거나 변경할 때 추가 프로그래밍이 필요하지 않습니다. SQL 문은 무결성 제약 조건을 쓰기 쉽고 프로그래밍 오류를 제거하기 쉬우며 O ra c l e이 제약 조건의 기능을 제어할 수도 있습니다. 이러한 이유로 선언 방식의 무결성 제약 조건이 응용 프로그램 코드와 데이터베이스 트리거보다 선호됩니다. 또한 선언적 방법은 데이터 무결성에 대한 내장 프

데이터 무결성 2 8 - 5

무결성 제약 조건 소개

Page 349: Oracle8 - Tistory

로시저 방법이 데이터 액세스를 제어하지만 무결성 제약 조건은 임의의 데이터 액세스에 대한 융통성을 제거하지 않으므로 내장 프로시저를 사용하는 것보다 좋습니다.

중앙 집중화된 규칙

무결성 제약 조건은 응용 프로그램이 아닌 테이블에 대해 정의되며 데이터 딕셔너리에 저장됩니다. 응용 프로그램에 의해 입력된 모든 데이터는 테이블과 연관된 무결성제약 조건을 동일하게 준수해야 합니다. 업무 규칙을 응용 프로그램 코드에서 중앙집중화된 무결성 제약 조건으로 이동하여 정보를 조작하는 데이터베이스 응용 프로그램에 관계없이 데이터베이스 테이블이 유효한 데이터를 포함하도록 합니다. 내장 프로시저는 테이블과 함께 저장된 중앙 집중화된 규칙의 이러한 이점을 제공할 수 없습니다. 데이터베이스 트리거는 이러한 이점을 제공할 수 있지만 무결성 제약 조건에사용되는 선언적 방식보다 구현하기가 훨씬 더 복잡합니다.

응용 프로그램 개발의 최대화

무결성 제약 조건에 의해 강제로 수행되는 업무 규칙이 변경되는 경우 관리자가 해당무결성 제약 조건만을 변경하면 모든 응용 프로그램은 수정된 제약 조건을 자동으로준수합니다. 반대로 각 데이터베이스 응용 프로그램의 코드에 의해 업무 규칙이 강제로 수행되었다면 개발자는 모든 응용 프로그램 소스 코드를 수정하고 수정된 응용 프로그램을 재컴파일, 디버그 및 테스트해야 합니다.

즉각적인 사용자 피드백

O ra c l e은 데이터 딕셔너리에 각각의 무결성 제약 조건에 대한 특정 정보를 저장합니다. 이러한 정보를 사용하여 데이터베이스 응용 프로그램을 설계하면 O ra c l e이 S Q L문을 실행하여 확인하기 전에도 무결성 제약 조건 위반에 대해 즉각적인 사용자 피드백을 제공할 수 있습니다. 예를 들어, SQL*Forms 응용 프로그램은 데이터 딕셔너리에 저장된 무결성 제약 조건 정의를 사용하여 응용 프로그램이 명령문을 실행하기 전에도 폼의 필드에 입력된 값의 위반 여부를 검사할 수 있습니다.

뛰어난 성능

무결성 제약 조건 선언의 의미는 명백하게 정의되며 각각의 특정 선언 규칙에 대해성능이 최적화되도록 구현할 수 있습니다. Oracle 질의 최적기는 선언된 규칙을 사용하여 데이터에 대한 자세한 사항을 파악하여 전반적인 질의 성능을 향상시킵니다.(또한 응용 프로그램 코드와 데이터베이스 트리거로부터 무결성 규칙을 제거하여 필요한 경우에만 검사되도록 합니다. )

2 8 - 6 Oracle8i 개념 설명서, 볼륨 2

무결성 제약 조건 소개

Page 350: Oracle8 - Tistory

데이터 로드와 무결성 위반 확인에 대한 융통성

제약 조건 검사 오버헤드 없이 많은 양의 데이터를 로드할 수 있도록 일시적으로 무결성 제약 조건을 비활성화할 수 있습니다. 데이터 로드가 완료된 후 무결성 제약 조건을 활성화하면 무결성 제약 조건을 위반하는 모든 새로운 행을 별도의 예외 테이블에 자동으로 보고하도록 할 수 있습니다.

무결성 제약 조건의 성능 비용

데이터 무결성 규칙 강제 시행은 약간의 성능 저하를 동반합니다. 일반적으로 무결성제약 조건을 포함하는 경우“비용”은 많아야 제약 조건을 평가하는 SQL 문을 실행하는 것과 같습니다.

무결성 제약 조건 유형

다음 무결성 제약 조건을 사용하여 열의 입력 값에 제한 사항을 부여할 수 있습니다.

■ NOT NULL 무결성 제약 조건

■ UNIQUE 키 무결성 제약 조건

■ P R I M A RY KEY 무결성 제약 조건

■ FOREIGN KEY(참조) 무결성제약 조건

■ CHECK 무결성 제약 조건

N OT NULL 무결성 제약 조건

기본적으로 테이블의 모든 열은 널(값이 없음)을 허용합니다. NOT NULL 제약 조건은 테이블의 열에 널이 아닌 값을 포함해야 합니다. 예를 들어, NOT NULL 제약조건을 정의하여 EMP 테이블에 있는 모든 행의 E NAME 열에 값을 입력하도록 할수 있습니다.

그림 2 8 - 2에서는 NOT NULL 무결성 제약 조건을 설명합니다.

데이터 무결성 2 8 - 7

무결성 제약 조건 유형

Page 351: Oracle8 - Tistory

그림 28-2 NOT NULL 무결성제약 조건

UNIQUE 키 무결성 제약 조건

UNIQUE 키 무결성 제약 조건은 열 또는 열 집합(키)에 있는 모든 값이 고유해야합니다. 즉, 테이블의 어떤 두 행도 지정된 열 또는 열 집합에서 중복 값을 갖지 않아야 합니다.

예를 들어, 그림 2 8 - 3의 UNIQUE 키 제약 조건이 DEPT 테이블의 D NAME 열에정의되어 중복 부서명을 가진 행을 제한합니다.

2 8 - 8 Oracle8i 개념 설명서, 볼륨 2

무결성 제약 조건 유형

EMP 테이블

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

7329 SMITH CEO 17-DEC-85 9,000.00 207499 ALLEN VP_SALES 7329 20-FEB-90 7,500.00 100.00 307521 WARD MANAGER 7499 22-FEB-90 5,000.00 200.00 307566 JONES SALESMAN 7521 02-APR-90 2,975.00 400.00 30

NOT NULL 제약 조건(이 열에 대한 모든 행은 널 값을 포함할 수 없습니다. )

NOT NULL 제약 조건 없음(이 열에 대한 임의의 행은 널을 포함할수 있습니다. )

Page 352: Oracle8 - Tistory

그림 28-3 UNIQUE 키제약 조건

고유 키

UNIQUE 키 제약 조건 정의에 포함된 열 또는 열 집합을 고유 키라고 합니다. “고유 키”라는 용어는“UNIQUE 키 제약 조건”이나“UNIQUE 인덱스”같은 용어의동의어로 종종 잘못 사용됩니다. 그러나“키”라는 용어는 무결성 제약 조건 정의에사용된 열 또는 열 집합만을 의미합니다.

UNIQUE 키가 하나 이상의 열로 이루어진 경우 해당 열 그룹을 조합 고유 키라고합니다. 예를 들어, 그림 2 8 - 4에서 CUSTOMER 테이블에는 조합 고유 키( A R E A와 PHONE 열)에 정의된 UNIQUE 키 제약 조건이 있습니다.

데이터 무결성 2 8 - 9

무결성 제약 조건 유형

DEPT 테이블

DEPTNO DNAME LOC

20 RESEARCH DALLAS30 SALES NEW YORK40 MARKETING BOSTON

50 SALES NEW YORK

60 BOSTON

UNIQUE 키 제약 조건(이 제약 조건 열에서 중복된 값을 가질 수 있는 행은 없습니다. )

INSERTINTO

"SALES"가 다른 행에 있으므로 이 행은 UNIQUE 키 제약 조건을 위반합니다. 따라서 이 행은 테이블에서 허용되지 않습니다.

DNAME 열에 널 값을 입력했으므로 이 행은 허용됩니다. 그러나 DNAME 열에 NOT NULL 제약 조건도 정의되었다면 이 행은 허용되지 않습니다.

Page 353: Oracle8 - Tistory

그림 28-4 조합 UNIQUE 키 제약 조건

이러한 UNIQUE 키 제약 조건은 영역 코드와 전화 번호를 얼마든지 입력할 수 있도록 허용하지만 주어진 영역 코드와 전화 번호의 결합이 테이블에서 중복될 수 없습니다. 이것은 뜻하지 않게 전화 번호가 중복되는 것을 방지합니다.

UNIQUE 키 제약 조건과 인덱스

O ra c l e은 인덱스를 사용하여 고유 무결성 제약 조건을 강제로 수행합니다. (그림 2 8 -4에서 O ra c l e은 조합 고유 키에 고유 인덱스를 암시적으로 생성하여 UNIQUE 키제약 조건을 강제로 수행합니다.) 따라서 조합 UNIQUE 키 제약 조건은 조합 인덱스에 부여된 것과 동일한 제한 사항을 가집니다. 조합 고유 키는 최대 3 2개의 열로이루어질 수 있으며 키 값의 총 크기(바이트 단위)는 연관된 데이터베이스 블록 크기의 약 1 / 2을 초과할 수 없습니다. 고유 키 제약 조건이 생성될 때 사용 가능한 인덱스가 있으면 제약 조건은 암시적으로 새 인덱스를 작성하는 대신 기존의 인덱스를 사용합니다.

2 8 - 1 0 Oracle8i 개념 설명서, 볼륨 2

무결성 제약 조건 유형

CUSTOMER 테이블

CUSTNO CUSTNAME ... 다른 열 ... AREA PHONE

230 OFFICE SUPPLIES 303 506-7000245 ORACLE CORP 415 506-7000257 INTERNAL SYSTEMS 303 341-8100

조합 UNIQUE 키 제약 조건(이 키에서 중복된 값의 집합을 가질수 있는 행은 없습니다. )

268 AEA CONSTRUCTION 415 506-7000

270 WW MANUFACTURING 506-7000

"4 1 5 / 5 0 6 - 7 0 0 0"이 다른 행에 있으므로이 행은 UNIQUE 키 제약 조건을 위반합니다. 따라서 이 행은 이 테이블에서 허용되지 않습니다.

널 값을 A R E A 열에 입력했으므로 이 행은 허용됩니다. 그러나 A R E A 열에N O T N U L L 제약 조건도 정의되었다면이 행은 허용되지않습니다.

Page 354: Oracle8 - Tistory

UNIQUE 키와 N OT NULL 무결성 제약 조건의 결합

그림 2 8 - 3과 그림 2 8 - 4에서 UNIQUE 키 제약 조건은 동일한 열에 NOT NULL 제약 조건을 정의하지 않으면 널 입력을 허용합니다. 실제로 널은 어느 것과도 동일한값으로 간주되지 않으므로 NOT NULL 제약 조건이 없는 경우 여러 행이 열에 대해널을 포함할 수 있습니다. 열(또는 조합 UNIQUE 키의 모든 열)의 널 값은 항상UNIQUE 키 제약 조건을 만족시킵니다.

고유 키와 NOT NULL 무결성 제약 조건을 모두 가진 열은 일반적입니다. 이러한조합을 사용하여 사용자가 고유 키에 값을 입력하도록 하며 새로운 행의 데이터가 기존 행의 데이터와 충돌할 가능성을 제거합니다.

주: 하나 이상의 열에 대한 UNIQUE 제약 조건의 검색 기법 때문에조합 UNIQUE 키 제약 조건을 구성하는 열 중 일부분이 널을 허용한다면 널을 허용하지 않는 열은 동일한 값을 가질 수 없습니다.

PRIMARY KEY 무결성 제약 조건

데이터베이스의 각 테이블에는 최대 하나의 P R I M A RY KEY 제약 조건이 있을 수있습니다. 이 제약 조건을 따르는 하나 이상의 열 그룹의 값은 행의 고유한 식별자를구성합니다. 실제로 각각의 행은 해당 기본 키 값에 따라 이름이 정해집니다.

O ra c l e은 다음 사항을 보장하도록 P R I M A RY KEY 무결성 제약 조건을 구현했습니다.

■ 테이블의 어떤 두 행도 지정된 열이나 열 집합에서 중복된 값을 가지지 않습니다.

■ 기본 키 열은 널을 허용하지 않습니다. (즉, 각각의 행에 기본 키 열에 대한 값이있어야 합니다. )

기본 키

테이블의 P R I M A RY KEY 무결성 제약 조건 정의에 포함된 열 또는 열 집합을 기본 키라고 합니다. 기본 키가 필요하지 않더라도 모든 테이블이 기본 키를 갖도록 하면 다음을 만족할 수 있습니다.

■ 테이블의 각 행을 고유하게 식별할 수 있습니다.

■ 중복된 행이 테이블에 존재하지 않습니다.

그림 2 8 - 5는 DEPT 테이블의 P R I M A RY KEY 제약 조건과 제약 조건을 위반하는행의 예를 나타냅니다.

데이터 무결성 2 8 - 1 1

무결성 제약 조건 유형

Page 355: Oracle8 - Tistory

그림 28-5 기본 키 제약 조건

PRIMARY KEY 제약 조건과 인덱스

O ra c l e은 인덱스를 사용하여 모든 P R I M A RY KEY 제약 조건을 강제로 수행합니다. 그림 2 8 - 5에서 DEPTNO 열에 생성된 기본 키 제약 조건은 다음에 의해 강제로수행됩니다.

■ 해당 열에 대한 고유 인덱스를 암시적으로 생성합니다.

■ 해당 열에 대해 NOT NULL 제약 조건을 암시적으로 생성합니다.

O ra c l e은 인덱스를 사용하여 기본 키 제약 조건을 강제로 수행하며 조합 인덱스에 가해진 제한 사항과 마찬가지로 조합 기본 키 제약 조건도 3 2개 열로 제한됩니다. 인덱스 이름은 제약 조건 이름과 동일하며 제약 조건 생성에 사용되는 C R E ATE TA B L E또는 A LTER TABLE 문에 E NABLE 절을 포함하여 인덱스에 대한 저장 영역 옵션을 지정할 수 있습니다. 기본 키 제약 조건이 생성될 때 사용 가능한 인덱스가 있으면제약 조건은 암시적으로 새 인덱스를 작성하는 대신 기존의 인덱스를 사용합니다.

2 8 - 1 2 Oracle8i 개념 설명서, 볼륨 2

무결성 제약 조건 유형

DEPT 테이블

DEPTNO DNAME LOC

20 RESEARCH DALLAS30 SALES CHICAGO

20 MARKETING DALLAS

FINANCE NEW YORK

기본 키(이 키에서 중복된 값을 가지거나 널 값이허용되는 행은 없습니다. )

INSERTINTO

" 2 0 "이 기본 키의 기존 값에 중복되므로 이 행은허용되지 않습니다.

기본 키에 널 값을 포함하므로 이 행은 허용되지 않습니다.

Page 356: Oracle8 - Tistory

FOREIGN KEY(참조) 무결성 제약 조건

공통된 열이 관계형 데이터베이스의 서로 다른 테이블을 서로 연결시킬 수 있으며 열간의 관계를 결정하는 규칙을 유지 관리해야 합니다. 참조 무결성 규칙은 이러한 무결성 제약 조건 관계가 유지되도록 합니다.

참조 무결성 제약 조건과 관련된 몇 가지 용어가 있습니다.

외래 키 참조 키(다음 항목 참조)를 참조하는 참조 무결성 제약 조건정의에 포함된 열 또는 열 집합입니다.

참조 키 외래 키에 의해 참조되는 테이블의 고유 키 또는 기본 키입니다.

종속 테이블 또는 외래 키를 포함하는 테이블입니다. 따라서 참조된 고유 키나하위 테이블 기본 키의 현재 값에 종속되는 테이블입니다.

참조 테이블 또는 하위 테이블의 외래 키에 의해 참조되는 테이블입니다. 상위 테이블 이 테이블의 참조 키가 하위 테이블에서 특정 삽입 또는 갱

신의 허용 여부를 결정합니다.

참조 무결성 제약 조건은 테이블의 각 행에 대해 외래 키의 값이 상위 키의 값과 일치하도록 합니다.

그림 2 8 - 6에서처럼 EMP 테이블의 DEPTNO 열에 외래 키를 정의하면 이 열의 모든 값은 DEPT 테이블의 기본 키(DEPTNO 열)에 있는 값과 일치해야 합니다. 따라서 EMP 테이블의 DEPTNO 열에는 잘못된 부서 번호가 있을 수 없습니다.

외래 키는 여러 개의 열로 구성될 수 있으나 조합 외래 키는 동일한 수의 열과 데이터유형을 가진 조합 기본 키나 조합 고유 키를 참조해야 합니다. 조합 기본 키와 조합고유 키가 3 2개 열로 제한되므로 조합 외래 키 또한 3 2개 열로 제한됩니다.

데이터 무결성 2 8 - 1 3

무결성 제약 조건 유형

Page 357: Oracle8 - Tistory

그림 28-6 참조 무결성 제약 조건

2 8 - 1 4 Oracle8i 개념 설명서, 볼륨 2

무결성 제약 조건 유형

DEPT 테이블

DEPTNO DNAME LOC

20 RESEARCH DALLAS30 SALES CHICAGO

상위 키참조 테이블의기본 키

EMP 테이블

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

7329 SMITH CEO 17-DEC-85 9,000.00 207499 ALLEN VP_SALES 7329 20-FEB-90 300.00 100.00 307521 WARD MANAGER 7499 22-FEB-90 500.00 200.00 307566 JONES SALESMAN 7521 02-APR-90 400.00` 20

외래 키(종속 테이블의 값은 참조 테이블의고유 키 또는 기본 키의 값과 일치해야 합니다. )

참조 테이블또는상위 테이블

종속 테이블또는 하위 테이블

INSERTINTO

7571 FORD MANAGER 7499 23-FEB-90 5,000.00 200.00 40

7571 FORD MANAGER 7499 23-FEB-90 5,000.00 200.00

" 4 0 "이 참조 테이블의 기본 키에 없으므로 이 행은 참조 제약 조건을위반합니다. 따라서 이 행은 이 테이블에서 허용되지 않습니다.

널 값이 DEPTNO 열에 입력되었으므로이 행은 테이블에서 허용됩니다. 그러나 NOT NULL 제약조건이이 열에 대해 정의되었다면이 행은 허용되지 않습니다.

Page 358: Oracle8 - Tistory

자체 참조 무결성 제약 조건

그림 2 8 - 7에 설명된 것과 같은 참조 무결성 제약 조건의 또 다른 유형을 자체 참조무결성 제약 조건이라고 합니다. 이 유형의 외래 키는 동일한 테이블의 상위 키를 참조합니다.

그림 2 8 - 7의 예에서는 EMP 테이블의 MGR 열에 있는 모든 값이 현재 동일한 테이블의 EMPNO 열에 있는 값에 일치하도록 (즉, 모든 관리자가 사원이 되어야 합니다.) 참조 무결성 제약 조건을 정의합니다. 그러나 동일한 행에 있을 필요는 없습니다. 이러한 무결성 제약 조건은 MGR 열에서 사원 번호가 잘못될 가능성을 제거합니다.

그림 28-7 단일 테이블 참조 제약 조건

널과 외래 키

관계형 모델에서는 외래 키 값이 참조된 기본 키 값이나 고유 키 값과 일치하거나 널이 될 수 있습니다. 조합 (다중 열) 외래 키를 포함하는 경우에는 관계형 모델의 이러한 기본 규칙을 몇 가지 방법으로 해석할 수 있습니다.

데이터 무결성 2 8 - 1 5

무결성 제약 조건 유형

EMP 테이블

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

7329 SMITH CEO 7329 9,000.00 207499 ALLEN VP_SALES 7329 7,500.00 100.00 307521 WARD MANAGER 7499 5,000.00 200.00 307566 JONES SALESMAN 7521 2,975.00 400.00 30

참조 테이블의기본 키

외래 키(종속 테이블의 값은 참조 테이블의 고유 키나 기본 키 값과 일치해야 합니다. )

종속 테이블 또는하위 테이블참조 테이블또는

상위 테이블

INSERTINTO

7571 FORD MANAGER 7331 23-FEB-90 5,000.00 200.00 30

" 7 3 3 1 "이 참조 테이블의 기본 키에없으므로 이 행은 참조 제약 조건을위반합니다. 따라서 이 행은 이 테이블에서 허용되지 않습니다.

Page 359: Oracle8 - Tistory

ANSI/ISO SQL92(입력 항목 레벨) 표준에서는 조합 외래 키를 널이 아닌 값을 참조 키에서 찾을 수 없더라도 다른 열에 널이 있다면 널이 아닌 열에 값을 포함할 수있도록 합니다. 그러나 NOT NULL이나 CHECK 같은 제약 조건과 같은 다른 제약조건을 사용하여 이러한 기본 처리에서 부분적으로 널인 외래 키 처리를 변경할 수있습니다.

조합 외래 키는 모두 널이거나 모두 널이 아니거나 또는 부분적으로 널일 수 있습니다. 다음 용어는 조합 외래 키에 대한 선택적인 세 가지 일치 규칙을 정의합니다.

전체 일치 부분적으로 널인 외래 키가 허용되지 않습니다. 외래 키의모든 구성 요소가 널이거나 외래 키에 포함된 값 조합이 참조 테이블에 있는 단일 행의 기본 키 값이거나 고유 키 값이어야 합니다.

부분 일치 부분적으로 널인 조합 외래 키가 허용됩니다. 외래 키의 모든 구성 요소가 널이거나 외래 키에 포함된 널이 아닌 값의조합이 참조 테이블에 있는 단일 행의 기본 키 값이나 고유키 값의 해당 부분에 존재해야 합니다.

불일치 부분적으로 널인 조합 외래 키가 허용됩니다. 조합 외래 키의 열이 널이라면 키의 널이 아닌 부분이 상위 키의 해당 부분과 일치하지 않아도 됩니다.

참조 무결성 제약 조건에 의해 정의된 작업

참조 무결성 제약 조건은 참조된 상위 키 값이 수정되면 하위 테이블의 종속 행에 수행되어야 하는 특정 작업을 지정할 수 있습니다. Ora c l e의 FOREIGN KEY 무결성제약 조건에서 지원하는 참조 작업에는 U P DATE No Ac t i o n, DELETE NoAc t i o n, DELETE CA S CADE 등이 있습니다.

주: O ra c l e의 FOREIGN KEY 무결성 제약 조건에서 지원하지 않는참조 작업은 데이터베이스 트리거를 사용하여 강제로 수행할 수 있습니다. 자세한 내용은 2 0장“트리거”를 참조하십시오.

갱신 작업 안함 및 삭제 작업 안함 No Ac t i o n (기본) 옵션으로 인해 결과 데이터가 참조 무결성 제약 조건을 위반하면 참조 키 값을 갱신하거나 삭제할 수 없습니다.예를 들어, 기본 키 값을 외래 키 값에서 참조하는 경우 참조된 기본 키 값은 종속 데이터 때문에 삭제될 수 없습니다.

2 8 - 1 6 Oracle8i 개념 설명서, 볼륨 2

무결성 제약 조건 유형

Page 360: Oracle8 - Tistory

단계적 삭제 단계적 삭제 작업으로 인해 참조 키 값을 포함하는 행을 삭제하면 종속외래 키 값을 가진 하위 테이블의 모든 행이 삭제됩니다. 예를 들어, 상위 테이블의행이 삭제되고 행의 기본 키 값이 하위 테이블에 있는 하나 이상의 외래 키 값으로 참조되면 하위 테이블에 있는 이 기본 키 값을 참조하는 행도 하위 테이블에서 삭제됩니다.

널로 설정 삭제 널로 설정 삭제 작업으로 인해 참조 키 값을 포함하는 행을 삭제하면종속 외래 키 값을 가진 하위 테이블의 모든 행의 값이 널로 설정됩니다. 예를 들어,E M P N O가 TMP 테이블의 M G R을 참조하는 경우 한 명의 관리자를 삭제하면 해당관리자를 위해 일하는 모든 사원에 대한 행의 MGR 값은 널로 설정됩니다.

참조 작업과 관련된 DML 제한 표 2 8 - 1은 상위 테이블의 기본 키 값과 고유 키 값에대한 참조 작업에 의해 허용되는 DML 문과 하위 테이블의 외래 키 값에 대한 참조작업에 의해 허용되는 DML 문을 요약합니다.

표 28-1 갱신 작업 안함과 삭제 작업 안함에서 허용하는 DML 문

CHECK 무결성 제약 조건

열 또는 열 집합에 대한 CHECK 무결성 제약 조건은 테이블의 각 행에 대해 지정된조건이 참이거나 참인지 거짓인지 알 수 없도록 합니다. DML 문을 실행한 결과 C -HECK 제약 조건에 주어진 조건이 거짓이 되면 이 명령문은 롤백됩니다.

데이터 무결성 2 8 - 1 7

무결성 제약 조건 유형

DML 문

INSERT

UPDATE

No Action

DELETE

No Action

DELETE

C a s c a d e

DELETE

Set Null

상위 테이블에 대해 실행됨

상위 키 값이 고유하면 항상

허용됨

명령문은 하위 테이블의 모든

행이 상위 키 값을 참조하면

허용됨

하위 테이블의 행이 상위 키

값을 참조하지 않으면 허용됨

항상 허용됨

항상 허용됨

하위 테이블에 대해 실행됨

외래 키 값이 상위 키에 있거나 부분

적으로 또는 전체적으로 널일 경우에

만 허용됨

새로운 외래 키 값이 참조 키 값을 여

전히 참조하면 허용됨

항상 허용됨

항상 허용됨

항상 허용됨

Page 361: Oracle8 - Tistory

확인 조건

CHECK 제약 조건은 확인 조건을 지정하여 매우 특수하거나 복잡한 무결성 규칙을강제로 수행하도록 합니다. CHECK 제약 조건의 조건에는 다음과 같은 몇 가지 제한이 가해집니다.

■ 조건은 삽입되거나 갱신될 행의 값을 사용하여 평가할 수 있는 부울식이어야 합니다.

■ 조건은 하위 질의나 시퀀스, SY S DAT E, UID, USER, USERENV 또는 L E -V E L이나 ROWNUM 등의 의사 열을 포함할 수 없습니다.

문자열 리터럴이나 인수( T O _ C H A R, TO_DATE 및 T O _ N U M B E R )로 NLS 매개변수를 가지는 SQL 함수를 포함하는 CHECK 제약 조건을 평가하는데 O ra c l e은 기본적으로 데이터베이스의 NLS 설정값을 사용합니다. CHECK 제약 조건 정의 내의해당 함수에서 NLS 매개변수를 명시적으로 지정하여 기본값을 대체할 수 있습니다.

추가 정보: NLS 기능에 대한 자세한 내용은 O racle8i NationalLanguage Support Guide를참조하십시오.

복수 CHECK 제약 조건

단일 열이 해당 정의에서 열을 참조하는 여러 개의 CHECK 제약 조건을 가질 수 있습니다. 열에 정의할 수 있는 CHECK 제약 조건의 수에는 제한이 없습니다.

제약 조건 검사 방법

제약 조건이 있는 경우 허용되는 작업을 알려면 O ra c l e이 실제로 제약 조건 검사를수행하는 시기를 이해해야 합니다. 이를 설명하는데 한두가지 예가 도움이 됩니다.다음과 같은 상황을 생각해 봅시다.

■ EMP 테이블은 28-15 페이지의 그림 2 8 - 7에서 설명한 것처럼 정의됩니다.

■ 자체 참조 제약 조건에 의해 MGR 열의 입력 항목이 EMPNO 열 값에 종속됩니다. 간단하게 이 설명의 나머지 부분은 EMP 테이블의 E M P N O와 MGR 열만을다룹니다.

EMP 테이블에 첫 번째 행을 삽입한다고 합시다. 현재 행이 없기 때문에 MGR 열의값이 EMPNO 열의 기존 값을 참조할 수 없는데 행을 입력할 수 있는 방법이 있을까요? 세 가지 가능성이 있습니다.

■ MGR 열에 NOT NULL 제약 조건이 정의되지 않았다고 가정하면 첫 번째 행의MGR 열에 널을 입력할 수 있습니다. 외래 키에서 널이 허용되므로 이 행이 테이블에 삽입됩니다.

2 8 - 1 8 Oracle8i 개념 설명서, 볼륨 2

제약 조건 검사 방법

Page 362: Oracle8 - Tistory

■ 동일한 값이 E M P N O와 MGR 열에 입력될 수 있습니다. 이 경우를 통해 O ra c l e이 명령문을 완전히 실행한 다음 자신의 제약 조건 검사를 수행함을 알 수 있습니다. 행이 상위 키와 외래 키에 동일한 값으로 입력되는 것을 허용하기 위해 O ra -c l e은 먼저 명령문을 실행(즉, 새로운 행을 삽입)한 다음 테이블의 행에 새로운 행의 M G R에 대응하는 E M P N O가 있는지를 검사합니다.

■ 중첩된 SELECT 문을 사용하는 I N S E RT 문 같이 다중 행 I N S E RT 문은 상호참조하는 행을 삽입할 수 있습니다. 예를 들어, EMPNO가 2 0 0이고 M G R이3 0 0인 첫 번째 행과 E M P N O가 3 0 0이고 M G R이 2 0 0인 두 번째 행이 있을 수있습니다.

이 경우에서도 제약 조건 검사가 명령문 실행이 완료될 때까지 지연된다는 것을 알수 있습니다. 먼저 모든 행을 삽입한 다음 제약 조건을 위반했는지에 대해 모든 행을 검사합니다. (트랜잭션이 종료될 때까지 제약 조건 검사를 지연할 수도 있습니다. 28-20 페이지“지연된제약 조건 검사”를 참조하십시오. )

다음 시나리오에 있는 동일한 자체 참조 무결성 제약 조건을 생각해 봅시다.

■ 회사가 팔렸습니다. 이로 인해 모든 사원 번호를 새로운 회사의 사원 번호로 조정하기 위해 현재 값에 5 0 0 0을 더하여 갱신해야 합니다. 관리자 번호가 실제 사원번호이므로 이들 값도 5 0 0 0씩 증가시켜야 합니다.

테이블은 현재 그림 2 8 - 8에 나타난 것처럼 존재합니다.

그림 28-8 갱신 전 EMP 테이블

UPDATE empSET empno = empno + 5000,

mgr = mgr + 5000;

각각의 MGR 값이 EMPNO 값과 일치하는지 검증하기 위해 제약 조건이 정의된 경우에도 O ra c l e이 명령문 완료 후 제약 조건 검사를 효율적으로 수행하므로 이 명령문은 적합합니다. 그림 2 8 - 9는 O ra c l e이 제약 조건을 검사하기 전에 전체 SQL 문 작업을 수행하는 사항을 보여줍니다.

데이터 무결성 2 8 - 1 9

제약 조건 검사 방법

EMPNO MGR

210211 210212 211

Page 363: Oracle8 - Tistory

그림 28-9 제약 조건 검사

이 단원의 예에서는 I N S E RT와 U P DATE 문 실행 중 제약 조건을 검사하는 방법을설명했습니다. 동일한 방법이 U P DAT E, INSERT 및 DELETE 문을 포함하여모든 유형의 DML 문에 사용됩니다.

예에서는 자체 참조 무결성 제약 조건을 사용하여 검사 방법을 설명했습니다. 동일한방법이 NOT NULL, UINQUE 키, PRIMARY KEY, 모든 유형의 F O R E I G NKEY 및 CHECK 제약 조건을 비롯하여 모든 유형의 제약 조건에 사용됩니다.

기본 열 값과 무결성 제약 조건 검사

명령문의 구문을 분석하기 전에 I N S E RT 문의 일부로 기본값이 포함됩니다. 따라서기본 열 값은 모든 무결성 제약 조건 검사의 영향을 받습니다.

지연된 제약 조건 검사

트랜잭션이 종료될 때까지 유효성에 대한 제약 조건 검사를 지연시킬 수 있습니다.

■ 제약 조건은 시스템이 제약 조건이 커밋 시 만족되었을 때만 검사하는 경우에 지연됩니다. 지연된 제약 조건이 위반된 경우 커밋으로 인해 트랜잭션은 롤백됩니다.

■ 제약 조건이 즉시(지연되지 않고)인 경우 제약 조건은 각 명령문이 종료될 때 검사됩니다. 제약 조건이 위반되면 명령문은 즉시 롤백됩니다.

제약 조건으로 인해 작업(예를 들어, 단계적 삭제)이 수행된 경우 제약 조건이 지연된것인지 즉시인지에 따라 이를 발생한 명령문의 일부로 항상 이 조치가 취해집니다.

2 8 - 2 0 Oracle8i 개념 설명서, 볼륨 2

지연된 제약 조건 검사

EMPNO MGR

5210211 210212 211

EMPNO MGR

52105211 5210212 211

EMPNO MGR

52105211 52105212 5211

두 번째 행갱신

두 번째 행갱신

세 번째 행갱신

제약 조건검사

Page 364: Oracle8 - Tistory

제약 조건 속성

제약 조건을 지연 가능 또는 지연 불가, 초기에 지연 또는 초기에 즉시로 정의할 수있습니다. 이러한 속성은 각 제약 조건에 따라 다를 수 있습니다. CONSTRAINT절에서 키워드로 지정합니다.

■ DEFERRABLE 또는 NOT DEFERRABLE

■ I N I T I A L LY DEFERRED 또는 I N I T I A L LY IMMEDIAT E

추가 정보: 이러한 제약 조건 속성과 이들의 기본값에 대한 내용은O racle8i SQL 참조서를참조하십시오.

제약 조건은 추가, 삭제, 활성화, 비활성화 또는 검증될 수 있습니다.(28-22 페이지“제약 조건 상태”참조) 제약 조건 속성을 수정할 수도 있습니다.(28-23 페이지“제약 조건 상태 수정”참조)

SET CONSTRAINTS 모드

SET CONSTRAINTS 문은 특정 트랜잭션에 대해 제약 조건을 D E F E R R E D나I M M E D I AT E로 만듭니다. (구문과 의미는 모두 ANSI SQL92 표준을 따릅니다. )이 명령문을 사용하여 제약 조건 이름 목록이나 ALL 제약 조건에 대한 모드를 설정할 수 있습니다.

SET CONSTRAINTS 모드는 트랜잭션이 실행되는 동안 또는 다른 SET CONST-RAINTS 문이 모드를 재설정할 때까지 유지됩니다.

SET CONSTRAINTS ... IMMEDIAT E에 의해 지정된 제약 조건은 각각의 제한된 명령문이 실행되는 즉시 검사됩니다. Ora c l e은 먼저 트랜잭션 초기에 지연된 제약조건이 있는지를 검사한 다음 해당 트랜잭션의 이후 (검사된 모든 제약 조건이 일관성이 있고 다른 SET CONSTRAINTS 문이 실행되지 않은 경우) 명령문에서 제약조건 검사를 즉시 계속합니다. 제약 조건이 검사에 실패하면 오류가 발생합니다. 이시점에서 C O M M I T은 전체 트랜잭션을 롤백합니다.

A LTER SESSION 문은 또한 SET CONSTRAINTS IMMEDIAT E나 D E F E R R -E D에 대한 옵션을 가집니다. 이러한 옵션은 ALL 지연 가능 제약 조건을 의미하며(즉, 제약 조건 이름 목록을 지정할 수 없습니다.) 현재 세션에서 각 트랜잭션 시작시 SET CONSTRAINTS 문을실행한 것과 동일합니다.

각 트랜잭션 종료 시 제약 조건을 즉시로 만들면 C O M M I T이 성공했는지를 검사할수 있습니다. 트랜잭션의 마지막 명령문으로 제약 조건을 I M M E D I AT E로 설정하여예상하지 않은 롤백을 피할 수 있습니다. 제약 조건이 검사에 실패하면 트랜잭션을커밋하기 전에 오류를 정정할 수 있습니다.

데이터 무결성 2 8 - 2 1

지연된 제약 조건 검사

Page 365: Oracle8 - Tistory

SET CONSTRAINTS 문은트리거 내부에서는 허용되지 않습니다.

SET CONSTRAINTS는 분산 명령문일 수 있습니다. 처리 중인 트랜잭션을 가진기존의 데이터베이스 링크는 SET CONSTRAINTS ALL 문이 발생할 때 알 수 있고, 새로운 링크는 그들이 트랜잭션을 시작하는 즉시 이 명령문이 발생했음을 알 수있습니다.

고유 제약 조건과 인덱스

사용자는 해당 사용자 트랜잭션이 불일치하는 경우 고유 인덱스에서 중복을 포함한불일치 제약 조건을 알 수 있습니다.

스냅샷에 지연된 고유 키 제약 조건과 외래 키 제약 조건을 둘 수 있으며 이를 통해신속하고 완전한 갱신을 완료할 수 있습니다.

지연 가능한 고유 제약 조건은 항상 고유하지 않은 인덱스를 사용합니다. 지연 가능한 제약 조건을 제거하는 경우에도 해당 인덱스는 유지됩니다. (제약 조건을 비활성화한 후에도 저장 영역 정보가 유지되므로 편리합니다.) 지연 불가능한 고유 제약 조건과 기본 키도 고유하지 않은 인덱스가 제약 조건이 강제 수행되기 전에 키 열에 넣어진 경우 고유하지 않은 인덱스를 사용합니다.

제약 조건 상태

C R E ATE TA B L E이나 A LTER TABLE 문을 사용하여 테이블 레벨에서 무결성 제약 조건을 활성화하거나 비활성화할 수 있습니다. 또한 E NA B L E이나 D I SA B L E과조합하여 VA L I DAT E나 N OVA L I DAT E에 대한 제약 조건을 설정할 수 있습니다.

■ E NA B L E은 입력된 모든 데이터가 제약 조건을 따르는지 확인합니다.

■ D I SA B L E은 입력된 데이터의 제약 조건 준수 여부에 관계없이 허용합니다.

■ VA L I DAT E는 기존 데이터가 제약 조건을 따르는지 확인합니다.

■ N OVA L I DAT E는 기존 데이터의 제약 조건 위반을 허용함을 의미합니다.

또한 다음과 같이 설정할 수 있습니다.

■ E NABLE VA L I DAT E는 E NA B L E과 동일합니다. 제약 조건이 모든 행에 대해검사되고 저장되도록 합니다.

■ E NABLE NOVA L I DAT E는 제약 조건이 검사되지만 모든 행에 대해 참이 아니어도 됨을 의미합니다. 이것은 기존 행의 제약 조건 위반을 허용하지만 새로운 모든 행이나 수정된 행은 유효하다는 것을 보장합니다.

2 8 - 2 2 Oracle8i 개념 설명서, 볼륨 2

제약 조건 상태

Page 366: Oracle8 - Tistory

A LTER TABLE 문에서 E NABLE NOVA L I DAT E는 먼저 테이블의 모든 데이터를 검증하지 않고 비활성화된 제약 조건에 대한 제약 조건 검사 기능을 재개합니다.

■ D I SABLE NOVA L I DAT E는 D I SA B L E과 동일합니다. 제약 조건은 검사되지않으며 참이 아니어도 됩니다.

■ D I SABLE VA L I DAT E는 제약 조건을 비활성화하거나 제약 조건에 대한 인덱스를 삭제하고 제약 조건이 있는 열에 대한 수정을 허용하지 않습니다.

UNIQUE 제약 조건의 D I SABLE VA L I DATE 상태를 사용하면 A LTER TA B -LE 명령어에 E XCHANGE PA RTITION 옵션을 사용하여 효과적으로 분할되지않은 테이블의 데이터를 분할 테이블로 로드할 수 있습니다.

이들 상태 간의 변환은 다음 규칙에 의해 제어됩니다.

■ E NA B L E은 N OVA L I DAT E가 지정되지 않으면 VA L I DAT E를 내포합니다.

■ D I SA B L E은 VA L I DAT E가 지정되지 않으면 N OVA L I DAT E를 내포합니다.

■ VA L I DAT E와 N OVA L I DAT E는 E NA B L E과 D I SABLE 상태에 대해 어떤 기본 암시도 내포하지 않습니다.

■ 고유 키나 기본 키가 D I SABLE 상태에서 E NABLE 상태로 이동할 때 기존의 인덱스가 없다면 고유 인덱스가 자동으로 생성됩니다. 마찬가지로 고유 키나 기본키가 E NABLE 상태에서 D I SABLE 상태로 이동할 때 고유 인덱스로 활성화되면고유 인덱스는 삭제됩니다.

■ 제약 조건이 N OVA L I DATE 상태에서 VA L I DATE 상태로 이동할 때 모든 데이터가 검사되어야 합니다. (이 과정은 매우 느리게 진행될 수 있습니다.) 그러나VA L I DAT E에서 N OVA L I DAT E로 이동하면 데이터가 검사된 사실은 간단히 무시됩니다.

■ E NABLE NOVA L I DATE 상태에서 E NABLE VA L I DATE 상태로 단일 제약조건을 이동하면 읽기나 쓰기 또는 다른 DDL 문을 방해하지 않습니다. 이 작업은 병렬로 수행될 수 있습니다.

추가 정보: E NA B L E, DISA B L E, VA L I DAT E와 N OVA L I DAT ECONSTRAINT 옵션 사용 방법에 대한 자세한 내용은 O racle8i 관리자 설명서를 참조하십시오.

제약 조건 상태 수정

A LTER TABLE 명령어에 MODIFY CONSTRAINT 옵션을 사용하여 다음 제약조건 상태를 변경할 수 있습니다.

■ DEFERRABLE 또는 NOT DEFERRABLE

■ I N I T I A L LY DEFERRED 또는 I N I T I A L LY IMMEDIAT E

데이터 무결성 2 8 - 2 3

제약 조건 상태

Page 367: Oracle8 - Tistory

■ R E LY 또는 N O R E LY

■ USING INDEX. . .

■ E NABLE 또는 D I SA B L E

■ VA L I DATE 또는 N OVA L I DAT E

■ E XCEPTIONS INTO...

추가 정보: 이들 제약 조건 상태에 대한 자세한 내용은 O racle8i SQL참조서를 참조하십시오.

2 8 - 2 4 Oracle8i 개념 설명서, 볼륨 2

제약 조건 상태

Page 368: Oracle8 - Tistory

데이터베이스 액세스 제어 2 9 - 1

29데이터베이스 액세스 제어

이 장에서는 오라클 데이터베이스의 액세스 제어 방법에 대해 설명하며 다음 내용을 다룹니다.

■ 데이터베이스 보안

■ 스키마, 데이터베이스 사용자 및 보안 도메인

■ 사용자 인증

■ 사용자 테이블스페이스 설정값 및 할당량

■ PUBLIC 사용자 그룹

■ 사용자 자원 제한 및 프로파일

■ 사용권 지정

Page 369: Oracle8 - Tistory

데이터베이스 보안

데이터베이스 보안은 데이터베이스와 데이터베이스 내의 객체에 대한 사용자의 작업을 허용하거나 허용하지 않습니다. Ora c l e은 스키마와 보안 도메인을 사용하여 데이터 액세스를 제어하고 다양한 데이터베이스 자원 사용을 제한합니다.

O ra c l e은 포괄적인 재량적 액세스 제어를 제공합니다. 재량적 액세스 제어는 권한을통해 명명된 객체에 대한 모든 사용자 액세스를 규정합니다. 예를 들어, 권한은 테이블을 질의하는 사용 권한처럼 규정된 방법으로 명명된 객체를 액세스하는 사용 권한입니다. 권한은 다른 사용자의 재량에 따라 사용자에게 부여되므로“재량적 액세스제어”라고 합니다. 권한에 대한 자세한 내용은 3 0장“권한, 롤 및 보안 정책”을 참조하십시오.

스키마, 데이터베이스사용자 및 보안 도메인

사용자 또는 사용자명은 객체에 접속하고 액세스할 수 있는 데이터베이스에 정의된이름입니다. 스키마는 테이블, 뷰, 클러스터, 프로시저, 패키지와 같은 명명된 객체집합으로 특정 사용자와 연관됩니다. 데이터베이스 관리자는 스키마와 사용자를 사용하여 데이터베이스 보안을 관리할 수 있습니다.

데이터베이스를 액세스하려면 사용자는 O racle Forms 형식, SQL*Plus 또는 선행컴파일러 프로그램 같은 데이터베이스 응용 프로그램을 실행한 후 정의된 사용자명으로 데이터베이스에 접속해야 합니다.

데이터베이스 사용자가 생성되면 사용자에 대해 동일한 이름의 해당 스키마가 생성됩니다. 기본적으로 일단 사용자가 데이터베이스에 접속하면 해당 스키마의 모든 객체에 액세스할 수 있습니다. 사용자는 동일한 이름의 스키마에만 연관되므로 사용자와스키마라는 용어는 바꿔 사용할 수 있습니다.

사용자의 액세스 권한은 사용자의 보안 도메인을 서로 다르게 설정하여 제어합니다.새로운 데이터베이스 사용자가 생성되거나 기존의 사용자가 변경되면 보안 관리자는사용자의 보안 도메인과 관련하여 몇 가지를 결정해야 하는데 내용은 다음과 같습니다.

■ 사용자의 인증 정보가 데이터베이스, 운영 체제 또는 네트워크 인증 서비스에 의해 유지 관리되는지의 여부

■ 사용자의 기본 테이블스페이스와 임시 테이블스페이스에 대한 설정값

■ 사용자가 액세스할 수 있는 테이블스페이스 목록 및 관련된 각 테이블스페이스의할당량

■ 사용자가 사용할 수 있는 시스템 자원 양을 제한하는 사용자의 자원 제한 프로파일

2 9 - 2 Oracle8i 개념 설명서, 볼륨 2

데이터베이스 보안

Page 370: Oracle8 - Tistory

■ 데이터베이스 작업을 수행할 수 있도록 스키마 객체에 대해 해당 액세스를 제공하는 권한, 롤 및 보안 정책

이 장에서는 위에서 나열한 처음 네 가지 보안 도메인 옵션에 대해 설명하며 나머지는 3 0장“권한, 롤, 보안 정책”에서 설명합니다.

주: 이 장에서 설명하는 내용은 모든 사용자 정의 데이터베이스 사용자에게 적용됩니다. 데이터베이스의 특정 사용자인 SY S와 SY S T E M에는 적용되지 않으며 이 사용자들의 보안 도메인 설정 내용은 변경할 수없습니다.

추가 정보: 특정 사용자인 SY S와 SY S T E M에 대한 자세한 내용과 보안 관리자에 대한 내용은 O racle8i 관리자 설명서를 참조하십시오.

사용자 인증

인증되지 않은 데이터베이스 사용자명 사용을 방지하기 위해 O ra c l e은 정상적인 데이터베이스 사용자에 대해 다음과 같은 방법으로 사용자를 검증합니다.

■ 운영 체제에 의한 인증

■ 네트워크 서비스에 의한 인증

■ 관련 오라클 데이터베이스에 의한 인증

■ 사용자를 위해 트랜잭션을 수행하는 중간 계층 응용 프로그램의 오라클 데이터베이스에 의한 인증

간단하게 대개 한 가지 방법을 사용하여 데이터베이스의 모든 사용자를 인증합니다.그러나 O ra c l e에서는 동일한 데이터베이스 인스턴스에 대해 위의 모든 방법을 사용할수 있습니다.

또한 O ra c l e은 전송되는 동안 암호를 보안 처리하여 네트워크 인증에 대한 보안을 유지합니다.

데이터베이스 관리자는 데이터베이스에 대해 특정 작업을 수행하므로 O ra c l e은 특별한 인증 프로시저를 필요로 합니다.

데이터베이스 액세스 제어 2 9 - 3

사용자 인증

Page 371: Oracle8 - Tistory

운영 체제에 의한 인증

O ra c l e은 일부 운영 체제에서 운영 체제에 의해 유지 관리되는 정보를 사용하여 사용자를 인증할 수 있습니다. 운영 체제 인증의 장점은 다음과 같습니다.

■ 사용자가 사용자명이나 암호를 지정하지 않고 보다 쉽게 O ra c l e에 접속할 수 있습니다. 예를 들어, 사용자는 사용자명이나 암호를 입력하지 않고 다음 명령어를 입력하여 S Q L * P l u s를 호출할 수 있습니다.

SQLPLUS /

■ 운영 체제에서 사용자 인증을 중앙 집중적으로 제어할 수 있습니다. Ora c l e은 사용자 암호를 저장하거나 관리할 필요는 없습니다. 그러나 데이터베이스에 있는 사용자명은 유지 관리합니다.

■ 데이터베이스의 사용자명 입력 항목과 운영 체제가 해당 트레일을 감사합니다.

운영 체제에 의해 데이터베이스 사용자를 인증하는 경우 분산 데이터베이스 환경과데이터베이스 링크에 대해 몇 가지 고려해야 할 사항이 있습니다. 자세한 내용은 3 3장“분산 데이터베이스”를 참조하십시오.

추가 정보: 사용자 운영 체제를 통한 인증에 대한 자세한 내용은 사용자 운영 체제별 오라클 설명서를 참조하십시오.

네트워크에 의한 인증

O ra c l e은 다음 단원에서 설명하는 바와 같이 네트워크에 의한 여러 가지 인증 방법을지원합니다.

협력 업체 인증 기술

D C E, Ke r b e ros 또는 S E SA M E과 같은 네트워크 인증 서비스를 사용할 수 있는 경우 O ra c l e은 네트워크 서비스에 의한 인증 방법을 사용할 수 있습니다. Ora c l e에서네트워크 인증 서비스를 사용하려면 O racle Advanced Security 옵션이있는 O ra -cle8i Enterprise Edition이필요합니다

추가 정보: 네트워크 인증 서비스를 사용하는 경우 네트워크 롤과 데이터베이스 링크에 대해 몇 가지 고려해야 할 사항이 있습니다. 네트워크인증에 대한 자세한 내용은 O racle8i Distributed Database Systems를, Oracle Advanced Security 옵션에대한 내용은 O racle Ad v a n -ced Security Ad m i n i s t ra t o r’s Guide를 참조하십시오.

2 9 - 4 Oracle8i 개념 설명서, 볼륨 2

사용자 인증

Page 372: Oracle8 - Tistory

공용 키 기반 구조 기준 인증

공용 키 암호화 시스템에 준한 인증 시스템은 사용자 클라이언트에 대한 디지털 인증서를 발행하며 이 시스템을 사용하여 인증 서버를 직접 관련시키지 않고도 기업의 서버를 직접 인증할 수 있습니다. Ora c l e은 공용 키와 인증서 사용을 위해 공용 키 기반 구조( P K I )를 제공합니다. 이것은 다음과 같은 구성 요소로 구성됩니다.

■ S e c u re Sockets Lay e r ( S S L )를 사용하는 인증서 및 보안 세션 키 관리

■ 개인 키와 인증서를 사용하여 사용자별 데이터에 서명하고 인증서와 신뢰 포인트를사용하여데이터의서명을 확인하는O racle Call Interface(OCI) 및PL/SQL 함수

■ 사용자 개인 키, 사용자 인증서 및 신뢰 포인트 집합(사용자가 신뢰하는 루트 권한 인증서 목록)을 포함하는 데이터 구조인 O racle 전자 지갑

■ O racle 클라이언트와 서버에서 사용자 키를 보호하고 X.509v3 인증서를 관리하는 O racle Wallet Manager

■ 인증 기관( O racle 외부)으로부터 획득한 X.509v3 인증서. 인증서는 인증을 활성화하는 O racle 전자 지갑에 로드됩니다.

■ 관리를 쉽게 하고 사용자의 보안 레벨을 증가시키기 위해 중앙 집중된 권한 관리를 제공하는 D i re c t o ry-enabled Oracle Security Manager. Dire c t o ry -enabled Oracle Security Manager를 사용하여 O racle Internet Dire c t o ry또는 L i g h tweight Dire c t o ry Access Pro t o c o l ( L DA P )을 따르는 디렉토리에서롤을 읽어 들이고 저장할 수 있습니다.

■ O racle8i 데이터베이스에 구축된 L DAP v3 호환 디렉토리인 O racle InternetD i re c t o ry. 이것은 X.509 인증서를 사용하여 인증된 사용자를 위해 보안 속성 및권한을 포함하여 사용자와 시스템 구성 환경을 관리할 수 있습니다. Ora c l eInternet Dire c t o ry는 속성 레벨 액세스 제어를 수행하며 특정 속성에 대한 읽기, 쓰기 및 갱신 권한을 명명된 특정 사용자(예를 들어, 기업 보안 관리자)로 디렉토리를 제한할 수 있습니다. 이것은 또한 디렉토리 질의에 대한 보호와 인증을지원하고 SSL 보안 처리를 통해 응답합니다.

그림 2 9 - 1은 O ra c l e의 공용 키 기반 구조를 나타냅니다.

데이터베이스 액세스 제어 2 9 - 5

사용자 인증

Page 373: Oracle8 - Tistory

그림 29-1 Oracle 공용키 기반 구조

주: O ra c l e에서 공용 키 기반 구조 인증을 사용하려면 O racle Ad v a -nced Security 옵션이 있는 O racle8i Enterprise Edition이 필요합니다.

원격 인증

O ra c l e은 Remote Dial-In User Service(RADIUS), 사용자인증을 위해 사용된일반적인 표준 프로토콜, 인증 및 계정 지정을 통해 사용자의 원격 인증을 지원합니다. Ora c l e에서 R A D I U S를 통해 사용자의 원격 인증을 사용하려면 고급 보안 옵션이 있는 O racle8i Enterprise Edition이필요합니다.

2 9 - 6 Oracle8i 개념 설명서, 볼륨 2

사용자 인증

Directory-enabled OracleSecurity Manager

Oracle Wallet M a n a g e r

키를 생성하고인증 설정을관리합니다.

기업 사용자와기업 롤을관리합니다.

O r a c l eI n t e r n e tD i r e c t o r y

사용자, 롤,데이터베이스,

전자 지갑, 인증서,구성 정보, ACL을

저장합니다.

전자 지갑

전자 지갑

전자 지갑 전자 지갑

전자 지갑

인증 기관

사용자, 데이터베이스,DBA, LD A P (이후릴리스에 계획됨)에대한 인증서와 전자지갑을 생성합니다.

S S L의 L D A P

Net8, SSL에대한 I I O P

S S L의 L D A P

O r a c l e 8 i서버

O r a c l e 8 i서버

Page 374: Oracle8 - Tistory

추가 정보: 고급 보안 옵션에 대한 내용은 O racle Advanced SecurityAd m i n i s t ra t o r’s Guide를 참조하십시오.

오라클 데이터베이스에 의한 인증

O ra c l e은 해당 데이터베이스에 저장된 정보를 사용하여 데이터베이스에 접속하려는사용자를 인증할 수 있습니다.

O ra c l e이 데이터베이스 인증을 사용할 때 각 사용자에 대해 암호를 생성합니다. 데이터베이스의 인증되지 않은 사용을 방지하기 위해 각 사용자는 데이터베이스에 접속하기 전에 정확한 암호를 입력해야 합니다. Ora c l e은 사용자의 암호를 보안 처리된 형식으로 데이터 딕셔너리에 저장합니다. 사용자는 언제든 자신의 암호를 변경할 수 있습니다.

접속 중 암호 보안 처리

O ra c l e에서는 네트워크 (클라이언트/서버 및 서버/서버) 접속 중에 암호를 보안 처리하여 사용자의 암호를 보다 확실하게 보호할 수 있습니다. 클라이언트 시스템과 서버시스템에 이 기능을 활성화하는 경우 O ra c l e은 수정된 D E S (데이터 암호화 표준) 알고리즘을 사용하여 암호를 보안 처리한 후 네트워크를 통해 보냅니다. 접속을 위한암호를 보안 처리하여 네트워크 침입으로부터 암호를 보호할 것을 권장합니다.

추가 정보: 네트워크 시스템에서 암호를 보안 처리하는데 대한 자세한내용은 O racle8i Distributed Database Systems를참조하십시오.

계정 잠금

O ra c l e은 사용자가 지정된 시도 횟수 내에서 시스템에 대한 로그인에 실패할 경우 사용자의 계정을 잠글 수 있습니다. 계정의 구성 방법에 따라 지정된 시간이 경과한 후자동으로 잠금이 해제되거나 데이터베이스 관리자가 해제할 수 있습니다.

C R E ATE PROFILE 문은 사용자가 시도할 수 있는 실패 로그인 횟수와 자동 잠금해제 전에 계정이 잠겨진 상태로 있는 시간을 설정합니다. 프로파일에 대한 내용은29-18 페이지“프로파일”을 참조하십시오.

데이터베이스 관리자는 또한 수동으로 계정을 잠글 수 있습니다. 이러한 경우 계정은자동으로 잠금 해제될 수 없으며 데이터베이스 관리자가 명시적으로 해제해야 합니다.

데이터베이스 액세스 제어 2 9 - 7

사용자 인증

Page 375: Oracle8 - Tistory

암호 실행 주기와 만기

암호 실행 주기와 만기 옵션을 사용하여 데이터베이스 관리자는 암호 만기일과 계정에 대한 로그인이 완료되기 전에 변경되어야 하는 암호 실행 주기를 지정할 수 있습니다. 암호 만기 후 데이터베이스에 처음으로 로그인하면 사용자 계정은 유예 기간으로 들어가고 유예 기간이 만료되기 전까지 사용자가 로그인할 때마다 경고 메시지를발생합니다.

사용자는 유예 기간 내에 암호를 변경해야 합니다. 유예 기간 내에 암호를 변경하지않으면 계정이 잠기고 데이터베이스 관리자의 도움 없이는 해당 계정에 로그인할 수없게 됩니다.

데이터베이스 관리자는 암호 상태를 만기된 것으로 설정할 수도 있습니다. 이러한 경우 사용자 계정 상태는 만기된 것으로 변경되며 사용자가 데이터베이스에 로그인하기전에 사용자 또는 데이터베이스 관리자가 암호를 변경해야 합니다.

암호 기록

암호 기록 옵션은 새롭게 지정된 암호가 지정된 시간 동안 또는 지정된 암호 변경 횟수만큼 다시 사용되지 않았는지를 검사합니다. 데이터베이스 관리자는 C R E AT EP ROFILE 문을 사용하여 암호 재사용 규칙을 구성할 수 있습니다.

암호 복잡성 검증

복잡성 검증은 각 암호가 암호를 추측하여 시스템을 파괴하려는 침입자로부터 보호하기 위해 충분히 복잡한지를 검사합니다.

O ra c l e의 기본 암호 복잡성 검증 루틴은 다음 암호 요건을 필요로 합니다.

■ 길이가 최소 4자 이상이어야 함

■ 사용자 I D와 달라야 함

■ 적어도 하나의 문자, 하나의 숫자 및 하나의 구두점을 포함해야 함

■ w e l c o m e, account, database, user 등과 같은 간단한 단어 목록 내의 단어와일치하면 안됨

■ 이전 암호와 최소한 3자 이상 달라야 함

2 9 - 8 Oracle8i 개념 설명서, 볼륨 2

사용자 인증

Page 376: Oracle8 - Tistory

다중 계층 인증 및 권한 부여

다중 계층 환경에서 O ra c l e은 권한을 제한하고 모든 계층을 통틀어 클라이언트 자격을 보호하고 클라이언트에 대한 작업을 감사하여 중간 계층 응용 프로그램의 보안성을 제어합니다.

클라이언트, 응용 프로그램 서버 및 데이터베이스 서버

다중 계층 구조 환경에서 응용 프로그램 서버는 데이터를 클라이언트에 제공하고 클라이언트와 하나 이상의 데이터베이스 서버 사이에 인터페이스로 제공합니다.

이러한 구조를 통해 응용 프로그램 서버를 사용하여 웹 브라우저와 같은 클라이언트의 자격을 검증할 수 있습니다. 또한 데이터베이스 서버는 응용 프로그램 서버가 수행하는 작업과 클라이언트를 위해 응용 프로그램 서버가 수행하는 작업을 감사할 수있습니다. 예를 들어, 클라이언트를 대신해 응용 프로그램 서버가 수행하는 작업은클라이언트에 표시될 정보 요청인 반면 응용 프로그램 서버가 수행하는 작업은 데이터베이스 서버로의 접속 요청일 수 있습니다.

다중 계층 환경에서 인증은 다음을 포함하여 신뢰 구간을 기초로 합니다.

■ 클라이언트는 일반적으로 암호 또는 X.509 인증서를 사용하여 인증 증명을 응용프로그램 서버에 제공합니다.

■ 응용 프로그램 서버는 클라이언트 인증을 검증한 다음 그 자체를 데이터베이스 서버로 인증합니다.

■ 데이터베이스 서버는 응용 프로그램 서버 인증을 검사하고 클라이언트가 있는지확인하고 응용 프로그램 서버가 클라이언트에 대해 접속할 권한을 가지고 있는지확인합니다.

응용 프로그램 서버는 또한 접속하고 있는 클라이언트를 위해 해당 클라이언트에 대한 롤을 활성화할 수 있습니다. 응용 프로그램 서버는 디렉토리에서 이러한 롤을 가져와 권한 저장소로 제공할 수 있습니다. 응용 프로그램 서버는 이러한 롤이 활성화된 경우에만 요청할 수 있습니다. 데이터베이스는 다음 사항을 확인합니다.

■ 클라이언트의 내부 롤 저장소를 확인하거나 디렉토리의 롤 부여를 검증하여 클라이언트가 이러한 롤을 가지는지 확인합니다.

■ 응용 프로그램 서버가 사용자에 대한 이러한 롤을 사용하여 사용자를 대신해 접속할 권한을 가지는지 확인합니다.

그림 2 9 - 2는 다중 계층 인증의 예를 보여줍니다.

데이터베이스 액세스 제어 2 9 - 9

사용자 인증

Page 377: Oracle8 - Tistory

그림 29-2 다중 계층 인증

2 9 - 1 0 Oracle8i 개념 설명서, 볼륨 2

사용자 인증

사용자

L D A P로부터롤 가져오기및 사용자로그인

데스크톱으로 사용자서명및 L D A P에서 전자 지갑

다운로드

L D A P로부터 롤 가져오기 및사용자 로그인

응용 프로그램서버

O r a c l eI n t e r n e tD i r e c t o r y

Oracle8i 서버

전자 지갑

전자 지갑

SSL 로그인

전자 지갑

전자 지갑

Proxy 사용자신원

Page 378: Oracle8 - Tistory

중간 계층 응용 프로그램에 대한 보안 쟁점

중간 계층 응용 프로그램에 대해 다음과 같은 보안 쟁점이 있습니다.

책임성 클라이언트는 시작하는 트랜잭션에 대한 책임을 가져야 합니다. 예를 들어, 적합한 책임이 트랜잭션에 첨부되면(예를 들어, 클라이언트가 웹 브라우저를 사용하여 전자 뱅킹 응용 프로그램에 액세스하려는 경우) 응용 프로그램 서버 또는 데이터베이스 서버가 아닌 클라이언트가 트랜잭션에 대한 책임이 있습니다.

구별성 데이터베이스 서버는 웹 서버 트랜잭션, 브라우저 클라이언트를 대신 하는 웹 서버 트랜잭션 및 데이터베이스에 직접 액세스하는 클라이언트를 구분할 수 있어야 합니다.

최소 권한 중간 계층 응용 프로그램은 임의의 클라이언트가 임의의 트랜잭션을실행할 수 있는 모든 권한을 응용 프로그램 서버에 주기보다는 클라이언트의 트랜잭션을 대신 수행할 수 있도록 해당 클라이언트의 권한을 응용 프로그램 서버가 바인드할 수 있도록 해야 합니다.

다중 계층 환경에서 신원 확인

다중 계층 인증은 연결된 모든 계층을 통틀어 클라이언트의 신원을 유지 관리합니다.이것은 원래 클라이언트의 신원을 잃어버렸을 경우 유용한 감사 기록을 유지 관리할수 없으므로 필요합니다. 또한 클라이언트를 대신한 응용 프로그램 서버가 수행하는작업과 응용 프로그램 서버 자체를 위해 수행하는 작업을 구별할 수 없습니다.

다중 계층 환경에서 제한된 권한

다중 계층 환경에서 권한은 요청된 작업을 수행하는데 필요한 권한으로 제한됩니다.

클라이언트 권한 클라이언트 권한은 다중 계층 환경에서 가능한 한 제한됩니다. 응용프로그램 서버가 클라이언트를 위해 작업을 수행합니다.

응용 프로그램 서버 권한 다중 계층 환경에서 응용 프로그램 서버 권한은 클라이언트작업을 수행하는 동안 응용 프로그램 서버가 원하지 않거나 필요하지 않은 작업을 수행할 수 없도록 제한됩니다.

데이터베이스 액세스 제어 2 9 - 1 1

사용자 인증

Page 379: Oracle8 - Tistory

데이터베이스 관리자 인증

데이터베이스 관리자는 정상적인 데이터베이스 사용자가 수행할 수 없는 데이터베이스 종료 또는 시작과 같은 특정 작업을 수행합니다. Ora c l e은 데이터베이스 관리자사용자명에 대한 보다 안전한 인증 방식을 제공합니다.

운영체제인증또는암호파일을 선택하여데이터베이스관리자를인증할 수 있습니다.

그림 2 9 - 3은 데이터베이스를 지역적으로 관리할 것인지 (데이터베이스가 저장되어 있는 동일한 시스템) 또는 하나의 원격 클라이언트에서 여러 개의 다른 데이터베이스시스템을 관리할 것인지에 따라 데이터베이스 관리자 인증 방법에 대한 선택 사항을나타냅니다.

그림 29-3 데이터베이스관리자 인증 방법

데이터베이스 관리자에 대한 OS 인증 방법을 사용하는 경우 대부분의 운영 체제는데이터베이스 관리자의 OS 사용자명을 특정 그룹(UNIX 시스템의 d b a 그룹)에 두거나 특정 프로세스 권한을 OS 사용자명에 부여합니다.

추가 정보: 데이터베이스 관리자의 OS 인증에 대한 내용은 사용자 운영체제별 오라클 설명서를 참조하십시오.

2 9 - 1 2 Oracle8i 개념 설명서, 볼륨 2

사용자 인증

원격 데이터베이스관리

로컬 데이터베이스관리

보안 접속을사용하겠습니까?

OS 인증을 사용하겠습니까? OS 인증 사용

암호 파일 사용

아니오 아니오

Page 380: Oracle8 - Tistory

데이터베이스는 암호 파일을 사용하여 SY S D B A와 SYSOPER 권한을 부여받은 데이터베이스 사용자명의 추적을 유지합니다. 데이터베이스 관리자는 이러한 권한을 사용하여 다음과 같은 작업을 수행할 수 있습니다.

SY S O P E R S TA RT U P, SHUTDOWN, ALTER DATABASE OPEN/MO-U N T, ALTER DATABASE BAC K U P, ARCHIVE LOG,R E C OVER 등의 작업을 수행할 수 있으며 RESTRICTED SES-SION 권한이 있습니다.

SY S D B A ADMIN OPTION의 모든 시스템 권한과 SYSOPER 시스템 권한이 있으며 C R E ATE DATABASE 및시간 기준 복구가 포함됩니다.

추가 정보: O racle8i 관리자 설명서를 참조하십시오.

사용자 테이블스페이스 설정값 및 할당량

데이터베이스 관리자는 모든 사용자의 보안 도메인의 일부로 테이블스페이스 사용과관련하여 몇 가지 옵션을 설정할 수 있습니다.

■ 사용자의 기본 테이블스페이스

■ 사용자의 임시 테이블스페이스

■ 사용자별 데이터베이스의 테이블스페이스에 대한 영역 사용 할당량

기본 테이블스페이스

사용자가 객체를 저장할 테이블스페이스를 지정하지 않은 채 스키마 객체를 생성할경우 O ra c l e은 객체를 사용자의 기본 테이블스페이스에 넣습니다. 사용자의 기본 테이블스페이스는 사용자가 생성될 때 설정되며 사용자가 생성되면 변경될 수 있습니다.

임시 테이블스페이스

사용자가 임시 세그먼트를 생성해야 하는 SQL 문을 실행하면 O ra c l e은 사용자의 임시 테이블스페이스에 세그먼트를 할당합니다.

데이터베이스 액세스 제어 2 9 - 1 3

사용자 테이블스페이스 설정값 및 할당량

Page 381: Oracle8 - Tistory

테이블스페이스 액세스와 할당량

데이터베이스의 모든 테이블스페이스에 대한 테이블스페이스 할당량을 각 사용자에게지정할 수 있는데 이를 통하여 다음 두 작업을 수행할 수 있습니다.

■ 사용자가 적합한 권한을 가지고 있다면 사용자가 지정된 테이블스페이스를 사용하여 스키마 객체를 생성할 수 있도록 합니다.

■ 지정된 테이블스페이스에서 사용자 스키마 객체의 저장 영역에 할당된 영역량을제한할 수 있습니다.

기본적으로 각 사용자는 데이터베이스의 모든 테이블스페이스에 대해 할당량이 없습니다. 따라서 사용자가 일부 스키마 객체 유형을 생성할 권한이 있다면 객체를 생성할 테이블스페이스 할당량을 지정받거나, 테이블스페이스 할당량을 충분히 지정받은다른 사용자의 스키마에 객체를 생성할 수 있는 권한을 부여받게 됩니다.

바이트, Kb 또는 M b로 지정되는 테이블스페이스의 특정 디스크 영역에 대한 할당량또는 테이블스페이스의 디스크 영역에 대한 무제한적 할당량의 두 방법으로 사용자에게 테이블스페이스 할당량을 지정할 수 있습니다. 사용자의 객체가 테이블스페이스에서 너무 많은 영역을 차지하는 것을 방지하려면 특정 할당량을 지정해야 합니다.

테이블스페이스 할당량과 임시 세그먼트는 서로에게 영향을 주지 않습니다.

■ 임시 세그먼트는 사용자가 소유하는 할당량은 사용하지 않습니다. Ora c l e이 임시세그먼트에서 자동으로 생성한 스키마 객체는 SY S가 소유하므로 할당량에 구애받지 않습니다.

■ 임시 세그먼트는 할당량이 없는 테이블스페이스에 생성될 수 있습니다.

테이블스페이스 할당량은 사용자를 생성할 때 사용자에게 지정되며 나중에 할당량을변경하거나 추가할 수 있습니다.

사용자의 현재 할당량을 0으로 변경하여 사용자의 테이블스페이스 액세스를 취소할수 있습니다. 할당량을 0으로 설정하면 사용자의 객체가 취소된 테이블스페이스에 그대로 있기는 하지만 새로운 영역을 할당받을 수 없습니다.

PUBLIC 사용자 그룹

모든 데이터베이스에는 P U B L I C이라는 사용자 그룹이 있습니다. PUBLIC 사용자그룹은 테이블, 뷰 등의 특정 스키마 객체에 공용 액세스를 제공하며 모든 사용자에게 특정 시스템 권한을 제공합니다. 모든 사용자는 자동으로 PUBLIC 사용자 그룹에속합니다.

2 9 - 1 4 Oracle8i 개념 설명서, 볼륨 2

PUBLIC 사용자 그룹

Page 382: Oracle8 - Tistory

사용자는 P U B L I C의 멤버로 U S E R와 A L L로 시작되는 모든 데이터 딕셔너리 테이블을 보거나 선택할 수 있습니다. 또한 사용자는 P U B L I C으로 권한이나 롤을 부여할수 있습니다. 모든 사용자는 P U B L I C에 부여된 권한을 사용할 수 있습니다.

P U B L I C에 모든 시스템 권한, 객체 권한 또는 롤을 부여하거나 취소할 수 있습니다.권한과 롤에 대한 자세한 내용은 3 0장“권한, 롤 및 보안 정책”을 참조하십시오. 그러나 액세스 권한에 대해 철저한 보안을 유지 관리하려면 모든 사용자에게 유효한 권한과 롤만을 P U B L I C에 부여해야 합니다.

P U B L I C에 일부 시스템 권한이나 객체 권한을 부여하고 취소하는 것은 데이터베이스의 모든 뷰, 프로시저, 함수, 패키지 및 트리거가 다시 컴파일되도록 할 수 있습니다.

P U B L I C에 다음과 같은 제한 사항이 있습니다.

■ P U B L I C에 UNLIMITED TA B L E S PACE 시스템 권한을 부여할 수는 있지만테이블스페이스 할당량은 지정할 수 없습니다.

■ C R E ATE PUBLIC DATABASE LINK/SY N O N Y M을 사용하여 데이터베이스링크와 동의어를 P U B L I C으로 생성할 수 있지만 다른 스키마 객체는 P U B L I C에의해 소유될 수 없습니다. 예를 들어, 다음은 잘못된 명령문입니다.

CREATE TABLE public.emp . . . ;

주: 롤백 세그먼트를 PUBLIC 키워드로 생성할 수는 있지만 P U B L I C사용자 그룹이 소유할 수는 없습니다. 모든 롤백 세그먼트는 SY S가 소유합니다. 롤백 세그먼트에 대한 내용은 4장“데이터 블록, 확장 영역및 세그먼트”를 참조하십시오.

사용자 자원 제한과 프로파일

사용자 보안 도메인의 일부로 각 사용자가 사용할 수 있는 여러 시스템 자원의 양에대한 제한 사항을 설정할 수 있습니다. 이렇게 하면 CPU 시간과 같은 시스템 자원의무제한적인 사용을 방지할 수 있습니다.

O ra c l e의 자원 제한 기능은 시스템 자원이 매우 고가인 대량의 다중 사용자 시스템에매우 유용합니다. 하나 이상의 사용자에 의한 시스템 자원의 과다한 소모는 데이터베이스의 다른 사용자에게 나쁜 영향을 줄 수도 있습니다. 단일 사용자 환경이나 소규모의 다중 사용자 데이터베이스 시스템에서는 사용자가 시스템에 나쁜 영향을 줄 정도의 자원을 소모하는 일은 적을 것이므로 시스템 자원 기능이 그다지 유용하지 않을것입니다.

데이터베이스 액세스 제어 2 9 - 1 5

사용자 자원 제한과 프로파일

Page 383: Oracle8 - Tistory

사용자 프로파일로 사용자의 자원 한계와 암호 관리 환경 설정을 관리합니다. 프로파일은 해당 사용자에게 지정할 수 있는 자원에 대한 제한 사항을 명시한 파일입니다.오라클의 각 데이터베이스는 프로파일을 무제한으로 가질 수 있습니다. 보안 관리자는 O ra c l e을 사용하여 프로파일 자원 제한 사항을 전체적으로 실행 가능 또는 불가능하게 할 수 있습니다.

추가 정보: 보안 관리자에 대한 내용은 O racle8i 관리자 설명서를 참조하십시오.

자원 제한 기능을 설정하면 세션을 생성할 때 성능이 약간 저하되는데 이것은 사용자가 데이터베이스에 접속할 때 O ra c l e이 사용자에 대한 모든 자원 제한 데이터를 로드하기 때문입니다.

시스템 자원과 제한 유형

O ra c l e은 CPU 시간과 논리적 읽기를 포함한 여러 가지 시스템 자원의 사용을 제한할 수 있습니다. 일반적으로 이러한 자원은 세션 레벨, 호출 레벨 또는 모두에서 제어할 수 있습니다.

세션 레벨 사용자가 데이터베이스에 접속할 때마다 세션이 생성됩니다. 각세션은 O ra c l e을 실행하는 컴퓨터의 CPU 시간과 메모리를 사용합니다. 사용자는 세션 레벨에서 일부 자원을 제한할 수 있습니다.

사용자가 세션 레벨의 자원 한계를 초과하면 O ra c l e은 현재 명령문을 종료(롤백)하고 세션 제한에 도달했다는 메시지를 돌려줍니다. 이때 현재 트랜잭션을 종료하기 이전의 모든 명령문은 그대로유지되고 사용자가 유일하게 수행할 수 있는 작업은 C O M M I T,RO L L B ACK 또는 접속을 해제하는 것이며 (이 경우 현재 트랜잭션은 커밋됨) 다른 모든 작업은 오류를 발생시킵니다. 사용자는 트랜잭션이 커밋되거나 롤백되었어도 더 이상 현재 세션 동안 작업을 수행할 수 없습니다.

호출 레벨 모든 SQL 문이 실행될 때마다 명령문을 처리하려면 몇 단계를 거쳐야 합니다. 이 처리 과정 동안 각기 다른 수행 과정으로 데이터베이스에 대한 일부 호출이 이루어집니다. Ora c l e은 시스템을 과다하게 사용하는 호출을 방지하기 위해 호출 레벨에서 일부 자원을 제한하도록 합니다.

2 9 - 1 6 Oracle8i 개념 설명서, 볼륨 2

사용자 자원 제한과 프로파일

Page 384: Oracle8 - Tistory

사용자가 호출 레벨의 자원 한계를 초과하면 O ra c l e은 명령문을실행하는 것을 멈추고 명령문을 롤백한 후 오류를 돌려줍니다. 그러나 현재 트랜잭션의 모든 이전 명령문은 그대로 유지되며 사용자의 세션도 그대로 접속되어 있습니다.

CPU 시간

O ra c l e에 SQL 문과 다른 유형의 호출이 이루어질 때 호출을 처리하기 위해서는 일정한 CPU 시간이 필요합니다. 평균적인 호출은 CPU 시간을 적게 차지하지만 대량의 데이터를 포함하는 SQL 문이나 이탈 질의는 CPU 시간을 많이 소모하므로 다른처리에 필요한 CPU 시간이 줄어들게 됩니다.

세션 동안 O racle 호출에 사용되는 총 CPU 시간과 호출 당 CPU 시간을 제한하여무제한의 CPU 사용을 방지할 수 있습니다. 이 제한은 호출이나 세션에서 사용되는CPU 100분의 1초( 0 . 0 1초) 단위로 설정되고 측정됩니다.

논리적 읽기

입출력은 데이터베이스 시스템에서 가장 비용이 많이 드는 작업 중 하나입니다. 입출력 중심인 SQL 문은 메모리와 디스크 사용을 독점하여 다른 데이터베이스 작업은 이자원을 사용할 수 없게 합니다.

O ra c l e은 호출 및 세션 당 논리적 데이터 블록 읽기를 제한하여 자원을 과다하게 소모하는 입출력 작업을 방지할 수 있습니다. 논리적 데이터 블록 읽기는 메모리와 디스크의 데이터 블록 읽기를 모두 포함합니다. 자원에 대한 제한은 호출이나 세션에서수행되는 블록 읽기 수로 설정되고 측정됩니다.

기타 자원

O ra c l e은 다른 몇 가지 자원도 세션 레벨에서 다음과 같이 제한합니다.

■ 사용자별 동시 세션 수를 제한할 수 있습니다. 모든 사용자는 세션을 이미 정의된동시 세션 수만큼만 생성할 수 있습니다.

■ 세션에 대한 휴지 시간을 제한할 수 있습니다. 세션에서 O racle 호출 간의 시간이휴지 시간 한계에 이르면 현재 트랜잭션은 롤백되고 세션은 중지되며 세션에 할당된 자원은 시스템으로 복귀됩니다. 다음 호출은 사용자가 더 이상 인스턴스에 접속되어 있지 않다는 오류를 발생시킵니다. 이 제한은 경과된 분의 수로 설정됩니다.

데이터베이스 액세스 제어 2 9 - 1 7

사용자 자원 제한과 프로파일

Page 385: Oracle8 - Tistory

주: 세션이 휴지 시간 한계를 넘어 중지된 직후 프로세스 모니터( P M -ON) 백그라운드 프로세스가 중지된 세션을 정리합니다. PMON의 처리가 끝날 때까지는 중지된 세션도 세션/사용자 자원 제한에 대한 세션으로 계산됩니다.

■ 세션 당 접속 경과 시간을 제한할 수 있습니다. 세션이 경과된 시간 한계를 초과해서 계속되면 현재 트랜잭션은 롤백되고 세션은 삭제되며 세션의 자원은 시스템으로 복귀됩니다. 이 제한은 경과된 분의 수로 설정됩니다.

주: O ra c l e은 경과된 휴지 시간이나 접속 경과 시간을 지속적으로 모니터하지 않는데 이것은 시스템의 성능을 저하시킬 수도 있기 때문입니다. 대신 매 분마다 검사합니다. 따라서 어떤 세션은 한계치를 적용하여 세션을 중지하기 전에 이 한계치를 약간(예를 들어, 5분) 초과할 수도 있습니다.

■ 세션에 대한 전용 S GA 영역(전용 SQL 영역에 사용되는)을 제한할 수 있습니다.이러한 제한은 다중 스레드 서버 구성을 사용하는 시스템에서만 유용하며 다른 시스템에서는 전용 SQL 영역이 P GA에 위치합니다. 이 자원에 대한 한계는 인스턴스 S GA의 메모리 바이트 수로 설정되는데“K”나“M”을 사용하여 킬로바이트나메가바이트를 지정합니다.

추가 정보: 자원을 제한하거나 제한할 수 없도록 하는데 대한 내용은O racle8i 관리자 설명서를 참조하십시오.

프로파일

프로파일은 오라클 데이터베이스의 유효한 사용자명에 할당할 수 있는 특정 자원에대한 명명된 자원 한계치 집합입니다. 프로파일을 사용하여 자원을 쉽게 제한할 수있습니다.

프로파일 사용 시기

데이터베이스 보안 정책을 위해 자원을 제한해야 할 경우에만 사용자 프로파일을 생성하고 관리해야 합니다. 프로파일을 사용하려면 먼저 데이터베이스의 해당 사용자를분류합니다. 롤이 해당 사용자의 권한을 사용하는 것처럼 프로파일도 해당 사용자의자원을 제한하는데 사용됩니다.

2 9 - 1 8 Oracle8i 개념 설명서, 볼륨 2

사용자 자원 제한과 프로파일

Page 386: Oracle8 - Tistory

데이터베이스의 모든 사용자를 포함하려면 먼저 필요한 프로파일 수를 결정한 후 각프로파일에 대해 해당 자원의 한계를 정해야 합니다.

프로파일의 자원 한계치 정하기

프로파일을 생성하고 관련된 자원 한계를 설정하기 전에 각 자원에 대해 적합한 한계치를 정해야 합니다. 이 값들은 대부분의 사용자가 수행하는 작업 유형에 따라 다릅니다. 예를 들어, 한 클래스의 사용자가 정상적으로 높은 값의 논리적 데이터 블록 읽기를 수행할 수 없으면 L O G I CA L _ R E A D S _ P E R _ S E S S I O N과 L O G I CA L _ R E A D S _P E R _ CA L L의 한계는 조심스럽게 설정되어야 합니다.

일반적으로 주어진 사용자 프로파일에 대해 적합한 자원 한계치를 정하는 가장 좋은방법은 각 자원 사용에 대한 이전 정보를 수집하는 것입니다. 예를 들어, 데이터베이스 관리자나 보안 관리자는 AUDIT SESSION 옵션을 사용하여 C O N N E C T _ T I -M E, LOGICAL_READS_PER_SESSION 및 L O G I CA L _ R E A D S _ P E R _ CA L L한계에 대한 정보를 얻을 수 있습니다. 자세한 내용은 3 1장“감사”를 참조하십시오.

O racle Enterprise Manager 또는S Q L * P l u s의 Monitor 특히, Statistics 모니터기능을 사용하여 다른 한계에 대한 통계를 구할 수 있습니다.

사용권 지정

O ra c l e은 대개 최대 사용자 수나 최대 동시 연결 사용자 수로 사용권이 지정됩니다.데이터베이스 관리자( D B A )는 각 사이트가 사용권 계약을 따르도록 해야 합니다.DBA 모니터 시스템은 O ra c l e의 사용권 지정 기능을 사용하여 인스턴스에 동시에 접속된 세션 수를 추적하고 제한하거나 데이터베이스에 생성된 사용자 수를 제한하여사이트가 O ra c l e의 사용권 계약을 따르도록 할 수 있습니다.

D B A는 사용권이 지정된 세션 수보다 많은 세션을 접속해야 하거나, 사용권이 지정된 사용자 수보다 많은 사용자를 생성해야 할 때는 O racle 사용권을 갱신하여 적합한한계치로 올릴 수 있습니다. (Oracle 사용권을 업그레이드하려면 오라클사로 문의하십시오. )

주: O ra c l e이 다른 이전 버전의 운영 체제에서 실행되는 O ra c l eO ff i c e와 같은 오라클 응용 프로그램에 포함되었거나 다른 나라에서의사용을 위해 구매되었다면 사용권이 세션 수나 사용자 그룹에 대해 지정되지 않습니다. 이러한 경우에는 O racle 사용권 지정 기법이 적용되지 않으며 비활성화된 상태여야 합니다.

데이터베이스 액세스 제어 2 9 - 1 9

사용권 지정

Page 387: Oracle8 - Tistory

다음 단원에서는 O ra c l e에 유효한 두 가지 주요 사용권 지정에 대해 설명합니다.

추가 정보: 사용권 지정에 대한 자세한 내용은 O racle8i 관리자 설명서를 참조하십시오.

동시 사용권 지정

동시 사용권 지정에서 사용권은 언제든 특정 컴퓨터의 데이터베이스에 동시에 접속할수 있는 세션을 나타내는 동시 사용자 수를 지정합니다. 동시 사용자 수는 모든 일괄처리 프로세스와 온라인 사용자를 나타냅니다. 단일 사용자가 여러 개의 동시 세션을가지는 경우 각 세션은 각각 분리되어 총 세션 수에 계산됩니다. 데이터베이스에 직접 접속되는 세션 수를 줄이기 위해 TP 모니터와 같은 다중화 소프트웨어를 사용하는 경우 동시 사용자 수는 다중화 전위 부분에 대한 서로 다른 입력 숫자입니다.

D B A는 동시 사용권 지정 기법을 사용하여 다음과 같은 작업을 수행할 수 있습니다.

■ LICENSE_MAX_SESSIONS 매개변수를 설정하여 인스턴스에 접속할 수 있는동시 세션 수 제한을 설정할 수 있습니다. 이 한계에 도달하면 R E S T R I C T E DSESSION 시스템 권한이 있는 사용자만이 인스턴스에 접속할 수 있습니다. 따라서 D B A는 불필요한 세션을 종료하여 다른 세션이 접속되도록 할 수 있습니다.

■ L I C E N S E S E S S I O N S _ WARNING 매개변수를 설정하여 인스턴스에 접속할 수있는 동시 세션 수에 대한 경고 한계치를 설정할 수 있습니다. 경고 한계에 도달하면 위에서 설명한 최대 한계에 도달할 때까지 세션을 추가로 접속할 수는 있지만 RESTRICTED SESSION 권한으로접속하려는 사용자에게 경고 메시지를 보내고 데이터베이스의 A L E RT 파일에 경고 메시지를 기록합니다.

D B A는 이러한 한계를 데이터베이스의 매개변수 파일에 설정하여 인스턴스가 시작될때 효력을 발생하도록 할 수 있으며 인스턴스가 실행되는 동안 A LTER SY S T E M명령어를 사용하여 한계치를 변경할 수 있습니다. 이 기능은 오프라인으로 작동하면안 되는 데이터베이스에 유용합니다.

D B A는 세션 사용권 지정 기법을 사용하여 현재 접속된 세션 수와 인스턴스가 시작된 이후의 최대 동시 세션 수를 확인할 수 있습니다. V$LICENSE 뷰가 현재 사용권 한계 설정값, 현재 세션 수, 인스턴스 시작 후의 최대 동시 세션 수(“고수위”세션)를 나타냅니다. DBA는 이 정보를 사용하여 필요한 시스템의 사용권을 평가하고시스템 확장을 위한 계획을 세울 수 있습니다.

2 9 - 2 0 Oracle8i 개념 설명서, 볼륨 2

사용권 지정

Page 388: Oracle8 - Tistory

O racle Pa rallel Serv e r로 실행되는 인스턴스는 각각 자신의 동시 사용 한계와 경고한계를 가질 수 있습니다. 각 인스턴스의 한계를 합한 값은 사이트의 동시 사용권을초과하지 말아야 합니다.

동시 사용 한계는 수신 데이터베이스 링크로 인해 생성된 세션을 포함하여 모든 사용자 세션에 적용됩니다. Ora c l e에 의해 생성된 세션이나 반복 세션에는 적용되지 않습니다. 외부의 다중화 소프트웨어를 통해 접속되는 세션은 각각이 총 O racle 사용권에포함된다 해도 O racle 사용권 지정 기법에서 개별적으로 계산되지 않습니다. DBA는이러한 세션을 모두 책임지고 관리해야 합니다.

명명된 사용자의 사용권 지정

명명된 사용자의 사용권 지정에서 사용권은 명명된 사용자 수를 지정하는데 명명된사용자는 특정 컴퓨터에서 O ra c l e을 사용하도록 인증받은 사람을 의미합니다. 각 사용자가 동시에 가질 수 있는 세션 수나 데이터베이스에 대한 동시 세션 수에 대한 한계는 없습니다.

D B A는 명명된 사용자의 사용권 지정을 사용하여 데이터베이스 링크를 통해 접속되는 사용자를 포함한 데이터베이스의 사용자 수를 제한할 수 있습니다. 이 한계치에도달하면 새로운 사용자를 생성할 수 없습니다. 이 기법은 데이터베이스를 액세스하는 모든 사용자가 고유의 사용자 이름을 가지며 다른 사용자 이름을 공유할 수 없다는 것을 전제로 합니다.

D B A는 이러한 한계를 데이터베이스의 매개변수 파일에 설정하여 인스턴스가 시작될때 효력을 발생하도록 할 수 있으며 인스턴스가 실행되는 동안 A LTER SY S T E M명령어를 사용하여 한계치를 변경할 수 있습니다. 이 기능은 오프라인으로 작동되면안 되는 데이터베이스에 유용합니다.

다중 인스턴스가 O racle Pa rallel Serv e r를 사용하여 동일한 데이터베이스에 접속하는 경우 동일 데이터베이스에 접속된 모든 인스턴스는 동일한 명명된 사용자 한계를가져야 합니다.

추가 정보: O racle Pa rallel Serv e r에 대한 자세한 내용은 O ra c l e 8 iPa rallel Server Concepts and Ad m i n i s t ra t i o n을 참조하십시오.

데이터베이스 액세스 제어 2 9 - 2 1

사용권 지정

Page 389: Oracle8 - Tistory

2 9 - 2 2 Oracle8i 개념 설명서, 볼륨 2

사용권 지정

Page 390: Oracle8 - Tistory

30권한, 롤, 보안 정책

이 장에서는 권한, 롤 및 보안 정책을 사용하여 시스템을 작동하고 스키마 객체에 액세스하는 사용자의 능력을 제어하는 방법에 대해 설명하며 다음 내용을 다룹니다.

■ 권한

- 시스템 권한

- 스키마 객체 권한

- 테이블 보안 항목

- 뷰 보안 항목

- 프로시저 보안 항목

- 유형 보안 항목

■ 롤

■ 상세한 액세스 제어

■ 응용 프로그램 컨텍스트

권한, 롤, 보안 정책 3 0 - 1

Page 391: Oracle8 - Tistory

권한

권한은 특정 유형의 SQL 문을 실행하거나 다른 사용자의 객체에 액세스할 수 있는권리입니다. 다음은 권한에 대한 예입니다.

■ 데이터베이스로의 접속 (세션 생성) 권한

■ 테이블 생성 권한

■ 다른 사용자 테이블의 행을 선택할 수 있는 권한

■ 다른 사용자의 내장 프로시저를 실행할 수 있는 권한

사용자에게 권한이 부여되면 사용자는 자신에게 필요한 작업을 수행할 수 있습니다.불필요한 권한을 과도하게 부여하면 시스템 보안에 손상을 줄 수 있으므로 필수적인작업 수행을 위해 권한이 절대적으로 필요한 사용자에게만 부여해야 합니다. 다음 두가지 방법으로 사용자에게 권한을 부여할 수 있습니다.

■ 사용자에게 권한을 명시적으로 부여할 수 있습니다. 예를 들어, SCOTT 사용자에게 EMP 테이블에 레코드를 삽입하는 권한을 명시적으로 부여할 수 있습니다.

■ 롤(명명된 권한 그룹)에 권한을 부여한 후 한 명 이상의 사용자에게 롤을 부여할수도 있습니다. 예를 들어, CLERK 롤에게 EMP 테이블의 레코드를 선택, 삽입, 갱신, 삭제하는 권한을 부여한 후 SCOTT 사용자와 BRIAN 사용자에게 권한을 부여할 수 있습니다.

롤을 사용하면 보다 쉽게 권한을 관리할 수 있으므로 특별한 경우가 아니라면 특정사용자가 아닌 롤에 권한을 부여합니다.

다음 두 종류의 권한이 있습니다.

■ 시스템 권한

■ 스키마 객체 권한

추가 정보: 권한 관리에 대한 지시 사항과 모든 시스템 권한 및 스키마객체 권한에 대한 완전한 목록은 O racle8i 관리자 설명서를 참조하십시오.

시스템 권한

시스템 권한은 특정 작업을 수행하거나 특정 유형의 임의의 스키마 객체에 대해 특정작업을 수행할 수 있는 권한입니다. 예를 들어, 테이블스페이스를 생성하거나 데이터베이스에 있는 테이블의 행을 삭제하는 권한이며 6 0개 이상의 시스템 권한이 있습니다.

3 0 - 2 Oracle8i 개념 설명서, 볼륨 2

권한

Page 392: Oracle8 - Tistory

시스템 권한 부여 및 철회

사용자와 롤에 시스템 권한을 부여하거나 철회할 수 있습니다. 롤에 시스템 권한을부여하면 롤을 사용하여 시스템 권한을 관리할 수 있습니다. (예를 들어, 롤을 사용하면 권한을 선택적으로 사용 가능하게 만들 수 있습니다. )

주: 보통 일반 사용자는 관련 기능을 필요로 하지 않으므로 관리자나응용 프로그램 개발자에게만 시스템 권한을 부여해야 합니다.

다음 중 하나를 사용하여 사용자와 롤에 권한을 부여하거나 철회할 수 있습니다.

■ O racle Enterprise Manager의G rant System Privileges/Roles 대화상자및R ev o ke System Privileges/Roles 대화상자

■ SQL 명령어 G R A N T와 R E VO K E

시스템 권한을 부여 또는 철회할 수 있는 사람

ADMIN OPTION으로 특정 시스템 권한을 부여받은 사용자나 GRANT ANYPRIVILEGE 시스템 권한이 있는 사용자(보통 데이터베이스 관리자 또는 보안 관리자)만이 다른 사용자에게 시스템 권한을 부여하거나 철회할 수 있습니다.

스키마 객체 권한

스키마 객체 권한(“객체 권한”)은 특정 테이블, 뷰, 시퀀스, 프로시저, 함수 또는 패키지에 특정 작업을 수행할 수 있는 권한입니다. 각기 다른 객체 권한은 각 유형의 스키마 객체에 대해 사용 가능합니다. 예를 들어, DEPT 테이블에서 행을 삭제할 수있는 권한이 이에 속합니다.

클러스터, 인덱스, 트리거, 데이터베이스 링크 같은 일부 스키마 객체는 관련된 객체권한이 없으며 시스템 권한으로 제어됩니다. 예를 들어, 클러스터를 변경하려는 사용자는 해당 클러스터를 소유하거나 A LTER ANY CLUSTER 시스템 권한이 있어야합니다.

스키마 객체와 그 동의어는 권한에 있어서 동등합니다. 즉, 이름으로 기본 객체를 참조하든 동의어를 사용하든 관계없이 테이블, 뷰, 시퀀스, 프로시저, 함수, 패키지에부여된 객체 권한이 적용됩니다.

권한, 롤, 보안 정책 3 0 - 3

권한

Page 393: Oracle8 - Tistory

예를 들어, JWA R D. E M P L OY E E라는 이름의 동의어를 가진 J WA R D.EMP 테이블이 있고 사용자 J WA R D가 다음 명령문을 실행한다고 합시다.

GRANT SELECT ON emp TO swilliams;

사용자 S W I L L I A M S는 이름으로 테이블을 참조하거나 동의어 J WA R D. E M P L OY E E를 사용하여 J WA R D. E M P를 질의할 수 있습니다.

SELECT * FROM jward.emp;SELECT * FROM jward.employee;

테이블, 뷰, 시퀀스, 프로시저, 함수또는 패키지에 대한 객체 권한을 해당 객체의 동의어에 부여한 경우 동의어를 사용하지 않고 권한을 부여한 것처럼 됩니다. 예를 들어,J WA R D가 EMP 테이블에 대한 SELECT 권한을S W I L L I A M S에게 부여하고자 하는경우J WA R D는 다음명령문 중 하나를 실행할 수 있습니다.

GRANT SELECT ON emp TO swilliams;GRANT SELECT ON employee TO swilliams;

동의어가 삭제되면 삭제된 동의어를 지정하여 권한이 부여되었더라도 기본 스키마 객체에 대한 모든 권한은 그대로 유지됩니다.

스키마 객체 권한 부여 및 철회

사용자와 롤에 스키마 객체 권한을 부여하거나 철회할 수 있습니다. 롤에 객체 권한을 부여하면 선택적으로 권한을 사용할 수 있습니다. SQL 명령어 G R A N T와R E VO K E를 각각 사용하거나 O racle Enterprise Manager의 Add Privilege toRole/User 대화상자와 R ev o ke Privilege from Role/User 대화상자를 사용하여사용자와 롤에 대한 객체 권한을 부여하거나 철회할 수 있습니다.

스키마 객체 권한을 부여할 수 있는 사용자

사용자는 사용자가 소유한 스키마에 있는 스키마 객체에 대해 모든 객체 권한을 자동으로 가집니다. 사용자 자신이 소유하는 모든 스키마 객체의 모든 객체 권한을 다른사용자나 롤에 부여할 수 있습니다. 권한이 GRANT 명령어의 GRANT OPTION으로 부여된 경우 권한을 부여받은 사용자는 다른 사용자에게 다시 객체 권한을 부여할 수 있습니다. 그렇지 않으면 권한을 부여받은 사용자는 권한을 사용할 수는 있지만 다른 사용자에게 객체 권한을 부여할 수는 없습니다.

3 0 - 4 Oracle8i 개념 설명서, 볼륨 2

권한

Page 394: Oracle8 - Tistory

테이블 보안 항목

테이블에 대한 스키마 객체 권한은 D M L과 DDL 작업 레벨에서 테이블 보안 기능을지원합니다.

데이터 조작어(DML) 작업

D E L E T E, INSERT, SELECT 및 U P DATE 권한을 사용하여 각각 테이블이나 뷰에 대한 D E L E T E, INSERT, SELECT 및 U P DATE DML 작업을 수행할 수 있습니다. 이러한 권한은 테이블 데이터를 질의하거나 조작해야 하는 사용자와 롤에만부여해야 합니다.

추가 정보: 이러한 DML 작업에 대한 자세한 내용은 O racle8i SQL참조서를 참조하십시오.

테이블에 대한 I N S E RT 및 U P DATE 권한을 테이블의 특정 열로 제한할 수 있습니다. 선택적인 I N S E RT 권한을 가진 사용자는 선택된 열에 대한 값을 가지는 행을 삽입할 수 있고 모든 다른 열은 NULL 값을 가지거나 열의 기본값을 가집니다. 선택적인 U P DATE 권한을 가진 사용자는 행에서 특정 열의 값만을 갱신할 수 있습니다.선택적인 I N S E RT와 U P DATE 권한은 중요한 데이터에 대한 사용자 액세스를 제한하는데 사용됩니다.

예를 들어, 데이터입력 항목 사용자가 사원 테이블의 SAL 열을 변경하지 못하도록 하려면 SAL 열은 제외하도록 I N S E RT와 U P DATE 권한을 선택적으로 부여하면 됩니다. (또는 SAL 열을제외한 뷰가 이러한 추가보안 기능을 만족시킬 수도있습니다. )

데이터 정의어(DDL) 작업

A LT E R, INDEX, REFERENCES 권한을 사용하여 테이블에 DDL 작업을 수행할 수 있습니다. 이러한 권한을 부여하면 다른 사용자가 테이블의 종속성을 변경하거나 생성할 수 있으므로 주의해서 부여해야 합니다. 테이블에 다른 DDL 작업을 수행하려면 다른 시스템 권한이나 객체 권한이 있어야 합니다. (예를 들어, 테이블에 트리거를 생성하려면 테이블에 대해 A LTER TABLE 객체 권한과 C R E AT ETRIGGER 시스템 권한이 있어야 합니다. )

I N S E RT와 U P DATE 권한과 마찬가지로 REFERENCES 권한도테이블의 특정 열에 대해 부여될 수 있습니다. 사용자는 REFERENCES 권한이 부여된 테이블을 자신의 테이블에 생성하려는 모든 외래 키에 대한 상위 키로 사용할 수 있습니다. 외래키의 존재는 상위 키에 대한 데이터 조작과 테이블 변경을 제한하므로 이러한 작업은특정 권한으로 제어됩니다.

권한, 롤, 보안 정책 3 0 - 5

권한

Page 395: Oracle8 - Tistory

열 지정 REFERENCES 권한은 상위 테이블의 기본 키 또는 고유 키를 적어도 하나는 포함해야 하는 명명된 열의 사용을 제한합니다. 기본 키, 고유 키, 무결성 제약 조건 등에 대한 자세한 내용은 2 8장“데이터 무결성”을 참조하십시오.

뷰 보안 항목

뷰에 대한 스키마 객체 권한을 사용하여 실제로 뷰가 파생된 기본 테이블에 영향을주는 다양한 DML 작업을 수행할 수 있습니다. 마찬가지로 테이블에 대한 DML 객체 권한은 뷰에 적용될 수 있습니다.

뷰 생성 시 필요한 권한

뷰를 생성하려면 다음 요구 사항을 만족해야 합니다.

■ C R E ATE VIEW(스키마에 뷰 생성 시)나 C R E ATE ANY VIEW(다른 사용자의 스키마에 뷰 생성 시) 시스템 권한을 명시적으로 또는 롤을 통해 부여받아야합니다.

■ 뷰의 모든 기본 객체에 대해 S E L E C T, INSERT, UPDATE 또는DELETE 등의 객체 권한이나 SELECT ANY TA B L E, INSERT ANY TA B L E,U P DATE ANY TABLE 또는 DELETE ANY TABLE 시스템 권한을 명시적으로 부여받아야 합니다. 이러한 권한은 롤을 통해서는 부여받지 못할 수도 있습니다.

■ 또한 자신의 뷰에 대한 액세스 권한을 다른 사용자에게 부여하려면 기본 객체에대해 GRANT OPTION 옵션이 있는 객체 권한을 가지거나 ADMIN OPTION옵션을 가진 시스템 권한이 있어야 합니다. 그렇지 않으면 자신의 뷰에 액세스할수 없습니다.

뷰를 사용하여 테이블 보안 증가

뷰 자체에 대한 권한만 있으면 뷰를 사용할 수 있습니다. 뷰의 기본 객체에 대한 권한은 필요하지 않습니다.

뷰는 테이블에 대해 열 레벨 보안과 값 기준 보안 레벨을 추가합니다.

■ 뷰는 기본 테이블의 선택된 열에 대한 액세스를 제공할 수 있습니다. 예를 들어,EMPNO, ENAME 및 MGR 열만 보이도록 EMP 테이블에 뷰를 정의할 수 있습니다.

CREATE VIEW emp_mgr ASSELECT ename, empno, mgr FROM emp;

3 0 - 6 Oracle8i 개념 설명서, 볼륨 2

권한

Page 396: Oracle8 - Tistory

■ 뷰는 테이블 정보에 대해 값 기준 보안 기능을 제공할 수 있습니다. 뷰 정의에 나타나는 WHERE 절은 기본 테이블에서 선택된 행만 표시합니다. 다음 두 예를 생각해 봅시다.

CREATE VIEW lowsal ASSELECT * FROM empWHERE sal < 10000;

L OW SAL 뷰를 사용하여 EMP 테이블에서 월급이 1 0 0 0 0보다 작은 모든 행을 액세스할 수 있습니다. EMP 테이블의 모든 열을 L OW SAL 뷰에서 액세스할 수있습니다.

CREATE VIEW own_salary ASSELECT ename, salFROM empWHERE ename = USER;

OW N _ SA L A RY 뷰에서 뷰를 사용하고 있는 사용자와 일치하는 E NA M E을 사용하는 행만 액세스할 수 있습니다. OW N _ SA L A RY 뷰는 USER 의사 열을 사용합니다. USER 의사 열의 값은 항상 현재 사용자입니다. 이 뷰는 열 레벨 보안과값 기준 보안 기능을 결합합니다.

프로시저 보안 항목

독립형 프로시저, 함수, 패키지를 포함하는 프로시저에 대한 유일한 스키마 객체 권한은 E X E C U T E입니다. 이 권한은 프로시저를 실행하거나 이 프로시저를 호출한 다른 프로시저를 컴파일해야 하는 사용자에게만 부여되어야 합니다.

프로시저 실행 및 보안 도메인

특정 프로시저에 대한 EXECUTE 객체 권한을 가진 사용자는 프로시저를 실행하거나해당 프로시저를 참조하는 프로그램 단위를 컴파일할 수 있습니다. 프로시저가 호출될때 런타임 권한 검사는 이루어지지 않습니다. EXECUTE ANY PROCEDURE 시스템 권한을 가진 사용자는 데이터베이스의 프로시저를 실행할 수 있습니다.

사용자는 롤을 통해 권한을 부여받아 프로시저를 실행할 수 있습니다. 롤에 대한 자세한 내용은 30-20 페이지“PL/SQL 블록과롤”을 참조하십시오.

참조 객체에 대한 추가 권한은 호출자 권한 프로시저에 대해서는 필요하지만 정의자권한 프로시저에는 필요하지 않습니다. (18-9 페이지“정의자 권한 및 호출자 권한”참조)

정의자 권한 정의자 권한 프로시저 사용자는 프로시저 실행 권한만 필요로 하고 프로시저를 액세스하는 기본 객체에 대한 권한은 필요로 하지 않습니다. 정의자 권한 프로

권한, 롤, 보안 정책 3 0 - 7

권한

Page 397: Oracle8 - Tistory

시저는 이 프로시저를 실행하는 사용자와 관계없이 프로시저를 소유하고 있는 사용자의 보안 도메인에서 작동되기 때문입니다. 프로시저 소유자는 참조 객체에 대해 필요한 모든 객체 권한을 가져야 하므로 정의자 권한 프로시저의 사용자에게 권한이 적게부여될수록 데이터베이스에 대한 액세스를 보다 상세히 제어할 수 있습니다.

정의자 권한 프로시저를 사용하여 데이터베이스 보안 레벨을 추가합니다. 정의자 권한 프로시저를 작성하고 EXECUTE 권한만을 사용자에게 부여하여 사용자가 프로시저를 통해서만 참조된 객체를 액세스하도록 합니다. (즉, 사용자는 임시 SQL 문을데이터베이스에 제출할 수 없습니다. )

프로시저를 실행하기 전에 항상 정의자 권한 내장 프로시저 소유자의 현재 권한이 확인됩니다. 정의자 권한 프로시저 소유자가 참조 객체에 대해 필요한 권한을 철회하면소유자나 다른 사용자는 해당 프로시저를 실행할 수 없습니다.

주: 트리거 실행도 정의자 권한 프로시저와 동일한 패턴을 따릅니다.사용자가 실행할 수 있도록 권한이 부여된 SQL 문을 실행합니다.SQL 문의 결과로 트리거가 실행됩니다. 트리거된 작업의 명령문은 해당 트리거를 소유하는 사용자의 보안 도메인에서 임시로 실행됩니다.

호출자 권한 호출자 권한 프로시저는 사용 가능한 롤을 포함하여 모든 호출자 권한으로 실행됩니다. 호출자 권한 프로시저의 사용자는 프로시저 이름을 호출자의 스키마에서 분석하기 위해 프로시저가 액세스하는 기본 객체에 대한 권한을 필요로 합니다.

■ 호출자의 스키마에서 분석되는 외부 참조의 경우 (예를 들어, DML 또는 동적SQL 문 이름) 호출자는 기본 객체 액세스 권한을 필요로 합니다.

■ 다른 모든 객체의 경우 (예를 들어, 함수 및 프로시저) 소유자 권한은 컴파일 시간에 검사되고 런타임 검사는 이루어지지 않습니다.

18-10 페이지“외부 참조 분석”을 참조하십시오.

DML 문 또는 동적 SQL 문에 포함된 프로그램 참조는 런타임에 효과적으로 다시 컴파일되므로 호출자의 권한으로 런타임에 검사됩니다.

대부분의 DBMS_* 패키지와 같이 O ra c l e이 제공하는 많은 패키지는 호출자 권한으로 실행됩니다. 즉, 소유자( SY S )로 실행되지 않고 현재 사용자로 실행됩니다. 그러

3 0 - 8 Oracle8i 개념 설명서, 볼륨 2

권한

Page 398: Oracle8 - Tistory

나 DBMS_RLS 패키지와 같은 일부 예외가 있습니다. (30-22 페이지“상세한 액세스 제어”참조)

추가 정보: O racle 지원 패키지에 대한 자세한 설명은 O racle8i Sup-plied Packages Refe re n c e를 참조하십시오.

정의자 권한을 가진 프로그램 단위와 호출자 권한을 가진 프로그램 단위로 이루어진소프트웨어 묶음을 생성할 수 있고 프로그램 시작점( c o n t rolled step-in)을 제한할수 있습니다. 시작점 프로시저를 실행할 권한을 가진 사용자는 내부 프로그램 단위를직접 실행할 수 있지만 내부 프로그램을 직접 호출할 수는 없습니다.

프로시저 생성 또는 변경에 필요한 시스템 권한

프로시저를 생성하려면 사용자는 C R E ATE PRO C E D U R E나 C R E ATE ANYP ROCEDURE 시스템 권한이 있어야 합니다. 프로시저를 변경 즉, 프로시저를 수동으로 다시 컴파일하려면 해당 프로시저를 소유하거나 A LTER ANY PRO C E D U R E시스템 권한이 있어야 합니다.

프로시저를 소유한 사용자는 프로시저 본문에서 참조되는 스키마 객체에 대한 권한도있어야 합니다. 프로시저가 참조하는 모든 객체에 대해 필요한 권한(시스템 또는 객체)을 명시적으로 부여받아야 프로시저를 생성할 수 있습니다. 롤을 통해서는 필요한권한을 얻을 수 없습니다. 이러한 권한은 생성될 프로시저에서 호출되는 모든 프로시저에 대한 EXECUTE 권한을 포함합니다.

트리거 또한 참조하는 객체에 대한 권한이 트리거 소유자에게 명시적으로 부여되어야합니다. 익명의 PL/SQL 블록은 권한이 명시적으로 부여되든 롤을 통해 부여되든 모든 권한을 사용할 수 있습니다.

패키지와 패키지 객체

패키지에 대해 EXECUTE 객체 권한을 가진 사용자는 패키지에 있는 모든 (공용)프로시저나 함수를 실행할 수 있으며 임의의 (공용) 패키지 변수 값을 액세스하거나수정할 수 있습니다. 특정 EXECUTE 권한은 패키지 생성자에게 부여될 수 없습니다. 따라서 데이터베이스 응용 프로그램에 대한 프로시저, 함수, 패키지를 개발할 때다음 예에서 설명하는 두 가지 보안 설정 방법을 생각하는 것이 좋습니다.

예 1 다음 예는 두 패키지 본문에서 생성된 네 개의 프로시저를 나타냅니다.

CREATE PACKAGE BODY hire_fire ASPROCEDURE hire(...) IS

권한, 롤, 보안 정책 3 0 - 9

권한

Page 399: Oracle8 - Tistory

BEGININSERT INTO emp . . .

END hire;PROCEDURE fire(...) IS

BEGINDELETE FROM emp . . .

END fire;END hire_fire;

CREATE PACKAGE BODY raise_bonus ASPROCEDURE give_raise(...) IS

BEGINUPDATE EMP SET sal = . . .

END give_raise;PROCEDURE give_bonus(...) ISBEGIN

UPDATE EMP SET bonus = . . .END give_bonus;

END raise_bonus;

다음 명령문을 사용하여 패키지에 대해 EXECUTE 권한을 부여하여 프로시저를 실행할 수 있습니다.

GRANT EXECUTE ON hire_fire TO big_bosses;GRANT EXECUTE ON raise_bonus TO little_bosses;

패키지에 부여된 EXECUTE 권한은 모든 패키지 객체에 대한 액세스를 제공합니다.

예 2 다음 예는 단일 패키지 본문 내에 네 개의 프로시저 정의를 나타냅니다. 주 패키지에 정의되어 있는 프로시저를 액세스하기 위해 두 개의 추가 독립형 프로시저와패키지가 생성됩니다.

CREATE PACKAGE BODY employee_changes ASPROCEDURE change_salary(...) IS BEGIN ... END;PROCEDURE change_bonus(...) IS BEGIN ... END;PROCEDURE insert_employee(...) IS BEGIN ... END;PROCEDURE delete_employee(...) IS BEGIN ... END;

END employee_changes;

CREATE PROCEDURE hireBEGIN

employee_changes.insert_employee(...)END hire;

3 0 - 1 0 Oracle8i 개념 설명서, 볼륨 2

권한

Page 400: Oracle8 - Tistory

CREATE PROCEDURE fireBEGIN

employee_changes.delete_employee(...)END fire;

PACKAGE raise_bonus ISPROCEDURE give_raise(...) AS

BEGINemployee_changes.change_salary(...)

END give_raise;

PROCEDURE give_bonus(...)BEGINemployee_changes.change_bonus(...)

END give_bonus;

이 방법을 사용하여 실제로 작업을 수행하는 프로시저( E M P L OYEE_CHANGES 패키지에 있는 프로시저)를 단일 패키지에서 정의하며 선언한 전역 변수, 커서 등을 공유할 수 있습니다. 최상위 프로시저 H I R E와 F I R E를 선언하고 RAISE_BONUS 패키지를 추가 선언하여 다음과 같이 선택적인 EXECUTE 권한을 주 패키지의 프로시저에 부여할 수 있습니다.

GRANT EXECUTE ON hire, fire TO big_bosses;GRANT EXECUTE ON raise_bonus TO little_bosses;

유형 보안 항목

이 단원에서는 유형, 메소드 및 객체에 대한 권한을 설명합니다.

시스템 권한

O ra c l e 8은 명명된 유형(객체 유형, VA R R AY 및 중첩 테이블)에 대해 다음 시스템권한을 정의합니다.

권한 기능

CREATE TYPE 자신의 스키마에 명명된 유형을 생성합니다.

CREATE ANY TYPE 임의의 스키마에 명명된유형을 생성합니다.

ALTER ANY TYPE 임의의스키마에서 명명된 유형을 변경합니다.

DROP ANY TYPE 임의의 스키마에서 명명된 유형을 삭제합니다.

EXECUTE ANY TYPE 임의의 스키마에서 명명된 유형을 사용하고 참조합니다.

권한, 롤, 보안 정책 3 0 - 1 1

권한

Page 401: Oracle8 - Tistory

CONNECT 및 R E S O U RCE 롤은 C R E ATE TYPE 시스템 권한을 포함합니다.DBA 롤은 위의 권한 모두를 포함합니다.

객체 권한

명명된 유형에 적용되는 유일한 객체 권한은 E X E C U T E입니다. EXECUTE 권한이명명된 유형에 있는 경우 사용자는 명명된 유형을 사용하여 다음 작업을 수행할 수있습니다.

■ 테이블 정의

■ 관계 테이블에 열 정의

■ 명명된 유형의 변수 또는 매개변수 선언

EXECUTE 권한으로 사용자는 유형 생성자가 있는 해당 유형의 메소드를 불러올 수있습니다. 이것은 내장 PL/SQL 프로시저에 있는 EXECUTE 권한과 유사합니다.

메소드 실행 모델

메소드 실행은 다른 내장 PL/SQL 프로시저와 동일합니다. 자세한 내용은 30-7 페이지“프로시저 보안 항목”을 참조하십시오.

유형 생성 시 필요한 권한과 유형을 사용하는 테이블

유형을 생성하려면 사용자는 다음 요구 사항을 만족해야 합니다.

■ 자신의 스키마에 유형을 생성하려면 C R E ATE TYPE 시스템 권한을 가져야 하며다른 사용자의 스키마에 유형을 생성하려면 C R E ATE ANY TYPE 시스템 권한을 가져야 합니다. 이러한 권한은 명시적으로 또는 롤을 통해 획득할 수 있습니다.

■ 유형 정의 내에서 참조된 다른 유형을 모두 액세스하려면 EXECUTE 객체 권한이 유형 소유자에게 명시적으로 부여되어 있거나 EXECUTE ANY TYPE 시스템 권한이 부여되어 있어야 합니다. 소유자는 필요한 권한을 롤을 통해 획득할 수없습니다.

■ 유형 소유자가 유형에 대한 액세스 권한을 다른 사용자에게 부여하려는 경우 소유자는 GRANT OPTION과 함께 참조 유형에 대한 EXECUTE 권한을 받거나ADMIN OPTION과 함께 EXECUTE ANY TYPE 시스템 권한을 받아야 합니다. 그렇지 않으면 유형 소유자는 권한이 부족하여 유형에 대한 액세스 권한을다른 사용자에게 부여할 수 없습니다.

유형을 사용하는 테이블을 생성하려면 30-5 페이지“테이블 보안 항목”에서 설명한테이블 생성에 필요한 요구 사항과 다음과 같은 추가 요구 사항을 만족해야 합니다.

■ 테이블 소유자는 테이블이 참조하는 모든 유형에 액세스하려면 EXECUTE 객체권한을 명시적으로 부여받거나 EXECUTE ANY TYPE 시스템 권한을 부여받

3 0 - 1 2 Oracle8i 개념 설명서, 볼륨 2

권한

Page 402: Oracle8 - Tistory

아야 합니다. 소유자는 롤을 통해 필요한 권한을 획득할 수 없습니다.

■ 테이블 소유자가 테이블에 대한 액세스 권한을 다른 사용자에게 부여하려는 경우소유자는 GRANT OPTION과 함께 참조 유형에 대한 EXECUTE 권한을 받거나 ADMIN OPTION과 함께 EXECUTE ANY TYPE 시스템 권한을 받아야합니다. 그렇지 않으면 테이블 소유자는 권한이 부족하여 유형에 대한 액세스 권한을 다른 사용자에게 부여할 수 없습니다.

CONNECT 및 R E S O U RCE 롤을 가진 세 명의 사용자가 있다고 합시다.

■ U S E R 1

■ U S E R 2

■ U S E R 3

U S E R 1은 자신의 스키마에서 다음 D D L을 수행합니다.

CREATE TYPE type1 AS OBJECT (attr1 NUMBER);

CREATE TYPE type2 AS OBJECT (attr2 NUMBER);

GRANT EXECUTE ON type1 TO user2;GRANT EXECUTE ON type2 TO user2 WITH GRANT OPTION;

U S E R 2는 자신의 스키마에서 다음 D D L을 수행합니다.

CREATE TABLE tab1 OF user1.type1;CREATE TYPE type3 AS OBJECT (

attr3 user1.type2);CREATE TABLE tab2 (

col1 user1.type2);

U S E R 2가 GRANT OPTION과 함께 U S E R 1의 T Y P E 2에 대한 EXECUTE 권한을 가지므로 다음 명령문은 성공적으로 수행됩니다.

GRANT EXECUTE ON type3 TO user3;GRANT SELECT on tab2 TO user3;

그러나 다음과 같이 부여하면 U S E R 2가 GRANT OPTION과 함께 U S E R 1의T Y P E 1에 대한 EXECUTE 권한을 가지지 않으므로 실패합니다.

GRANT SELECT ON tab1 TO user3;

권한, 롤, 보안 정책 3 0 - 1 3

권한

Page 403: Oracle8 - Tistory

U S E R 3은 다음 명령문을 성공적으로 수행할 수 있습니다.

CREATE TYPE type4 AS OBJECT (attr4 user2.type3);

CREATE TABLE tab3 OF type4;

유형 액세스 권한 및 객체 액세스 권한

DML 명령어에 대한 기존 열 레벨 및 테이블 레벨 권한은 열 객체와 행 객체 모두에적용됩니다.

객체 테이블에 대한 SELECT 권한으로 사용자가 객체와 테이블에서 해당 속성을 액세스할 수 있습니다. 객체 테이블에 대한 U P DATE 권한으로 사용자는 해당 행을 구성하는 객체의 속성을 수정할 수 있습니다. 객체 테이블에 대한 I N S E RT 권한으로사용자는 테이블에 새로운 객체를 생성할 수 있으며 객체 테이블에 대한 D E L E T E권한으로 사용자는 행 즉, 객체를 삭제할 수 있습니다.

유사한 테이블 권한 및 열 권한이 열 객체에 적용됩니다. 인스턴스를 읽어 들여도 그자체로 유형 정보를 보여주지는 않습니다. 그러나 클라이언트는 유형 인스턴스 이미지를 해석하려면 명명된 유형 정보를 액세스해야 합니다. 클라이언트가 이러한 유형정보를 요청하면 O ra c l e은 해당 유형에 대한 EXECUTE 권한을 확인합니다.

다음 스키마를 생각해 봅시다.

CREATE TYPE emp_type (eno NUMBER, ename CHAR(31), eaddr addr_t);

CREATE TABLE emp OF emp_t;

그리고 다음 두 개의 질의를 생각해 봅시다.

SELECT VALUE(emp) FROM emp;SELECT eno, ename FROM emp;

각 질의에 대해 O ra c l e은 EMP 테이블에 대한 사용자의 SELECT 권한을 확인합니다. 첫 번째 질의에서 사용자는 데이터를 해석하기 위한 EMP_TYPE 유형 정보를얻어야 합니다. 질의가 EMP_TYPE 유형을 액세스할 때 O ra c l e은 사용자의EXECUTE 권한을 확인합니다.

그러나 두 번째 질의 실행에서는 명명된 유형은 포함되지 않으므로 O ra c l e은 유형에대한 권한을 확인하지 않습니다.

또한 이전 단원의 스키마를 사용하여 U S E R 3은 다음 질의를 수행할 수 있습니다.

SELECT tab1.col1.attr2 from user2.tab1 tab1;

3 0 - 1 4 Oracle8i 개념 설명서, 볼륨 2

권한

Page 404: Oracle8 - Tistory

SELECT attr4.attr3.attr2 FROM tab3;

위의 두 SELECT 문에서 U S E R 3은 기본 유형에 대한 명시적인 권한을 가지지 않지만 유형과 테이블 소유자가 GRANT OPTION과 함께 필요한 권한을 가지므로 명령문이 성공적으로 수행됩니다.

O ra c l e은 다음 이벤트에 대한 권한을 확인하고 클라이언트가 작업에 대한 권한을 가지지 않는 경우 오류 메시지를 돌려줍니다.

■ REF 값을 사용하여 객체 캐시에 있는 객체를 고정하면 O ra c l e은 포함하는 객체테이블에 대한 SELECT 권한을 확인합니다.

■ 기존 객체를 수정하거나 객체 캐시에서 객체를 보내면 O ra c l e은 대상 객체 테이블에 대한 U P DATE 권한을 확인합니다.

■ 새로운 객체를 보내면 O ra c l e은 대상 객체 테이블에 대한 I N S E RT 권한을 확인합니다.

■ 객체를 삭제하면 O ra c l e은 대상 테이블에 대한 DELETE 권한을 확인합니다.

■ 명명된 유형의 객체를 고정하면 O ra c l e은 객체에 대한 EXECUTE 권한을 확인합니다.

클라이언트 3GL 응용 프로그램에서 객체 속성을 수정하면 O ra c l e은 전체 객체를 갱신합니다. 따라서 사용자는 객체 테이블에 대한 U P DATE 권한이 필요합니다. 응용프로그램이 일부 열에 해당하는 속성만을 수정하는 경우에도 객체 테이블의 일부 열에 대해서만 U P DATE 권한을 가지는 것은 충분하지 않습니다. 따라서 O ra c l e은 객체 테이블에 대한 열 레벨 권한은 지원하지 않습니다.

유형 종속성

프로시저와 테이블과 같이 저장된 객체와 같이 다른 객체에 의해 참조되는 유형을 종속성이라고 합니다. 테이블에 종속되는 유형에 대한 특별한 몇 가지 문제가 있습니다. 테이블에 액세스를 위한 유형 정의에 의존하는 데이터가 포함되므로 유형을 변경하면 저장된 모든 데이터에 액세스할 수 없게 됩니다. 유형이 필요로 하는 필수 권한이 철회되거나 유형이나 종속 유형이 삭제되는 경우 변경 사항은 이러한 결과를 초래할 수 있습니다. 이러한 작업 중 하나가 수행되면 테이블이 부적합하게 되므로 액세스할 수 없습니다.

권한이 누락되어 부적합한 테이블은 필요한 권한이 다시 부여되면 자동으로 적합해지고 액세스할 수 있게 됩니다. 종속 유형이 삭제되어 부적합한 테이블은 다시 액세스할 수 없고 테이블 삭제 작업만 허용됩니다.

권한, 롤, 보안 정책 3 0 - 1 5

권한

Page 405: Oracle8 - Tistory

유형에 대한 권한을 철회하거나 유형을 삭제하여 발생할 수 있는 심각한 결과로 인해SQL 명령어 R E VOKE 및 D ROP TYPE은 기본적으로 제한적 의미를 적용합니다.이것은 다른 명령어로 명명된 유형이 테이블 또는 유형 종속성을 가지면 오류 메시지를 받고 명령어가 중지됩니다. 그러나 이 두 명령어에 대해 F O RCE 옵션이 사용되면명령어가 성공적으로 수행되고 테이블에 종속되어 있으면 두 명령어는 무효화됩니다.

추가 정보: R E VO K E, DROP TYPE 및 F O RCE 옵션 사용에 대한자세한 내용은 O racle8i Refe re n c e를 참조하십시오.

O ra c l e은 롤을 통해 권한 관리를 쉽게 제어하는 방법을 제공합니다. 롤은 사용자나다른 롤에 부여한 관련된 권한의 명명된 그룹입니다. 롤은 일반 사용자 시스템과 스키마 객체 권한을 쉽게 관리하도록 설계되었지만 내장 프로그램 구조 내의 스키마 객체를 액세스하는 권한은 직접 부여되어야 하므로 응용 프로그램 개발자에게는 유용한방법이 아닙니다. 프로시저 제한 사항에 대한 자세한 내용은 30-20 페이지“데이터정의어 명령문과 롤”을 참조하십시오.

다음과 같은 롤 특성을 사용하여 데이터베이스 내의 권한을 보다 쉽게 관리할 수 있습니다.

축소된 권한 관리 여러 사용자에게 동일한 권한을 명시적으로 부여하기보다는 롤에 관련된 사용자 그룹에 대한 권한을 부여한 후 롤을 그룹의각 멤버에게 부여할 수 있습니다.

동적 권한 관리 그룹의 권한을 변경해야 한다면 롤의 권한만을 수정해야 합니다. 그룹의 롤이 부여된 모든 사용자의 보안 도메인은 자동으로롤에 변경 사항을 반영합니다.

권한의 선택적 사용자에게 부여된 롤을 선택적으로 사용하게 하거나 사용하지가용성 못하도록 할 수 있습니다. 이 특성을 사용하여 모든 상황에서

사용자의 권한을 제어할 수 있습니다.

응용 프로그램 데이터 딕셔너리는 존재하는 롤을 기록하므로 사용자명을 통해인식성 응용 프로그램을 실행할 때 해당 응용 프로그램이 딕셔너리를

질의하여 선택적인 롤을 자동으로 사용하게 하거나 사용하지 못하도록 설계할 수 있습니다.

3 0 - 1 6 Oracle8i 개념 설명서, 볼륨 2

Page 406: Oracle8 - Tistory

특정 응용 프로 암호를 사용하여 롤을 보호할 수 있습니다. 정확한 암호를 입력그램 보안 해야 롤을 사용할 수 있도록 응용 프로그램을 개발할 수 있습니

다. 암호를 모르는 사용자는 롤을 사용할 수 없습니다.

추가정보: 응용프로그램에서롤을 사용가능하게 하는방법은 O ra c l e 8 iApplication Dev e l o p e r’s Guide - Fundamentals를참조하십시오.

롤의 일반적 사용

일반적으로 롤을 생성하여 다음 두 가지 용도 중 하나로 제공합니다.

■ 데이터베이스 응용 프로그램에 대한 권한 관리

■ 사용자 그룹에 대한 권한 관리

그림 3 0 - 1과 다음 단원에서는 이 두 가지 롤 사용에 대해 설명합니다.

그림 30-1 롤의 일반적 사용

권한, 롤, 보안 정책 3 0 - 1 7

ACCTS_PAY 응용프로그램을 실행할수 있는 권한

ACCTS_REC 응용프로그램을 실행할수 있는 권한

PAY_CLERK 롤 MANAGER 롤 REC_CLERK 롤

ACCTS_PAY 롤 ACCTS_REC 롤

사용자

사용자롤

응용 프로그램 롤

응용 프로그램권한

Page 407: Oracle8 - Tistory

응용 프로그램 롤

응용 프로그램 롤에 주어진 데이터베이스 응용 프로그램을 실행하는데 필요한 모든권한을 부여한 후 응용 프로그램 롤을 다른 롤이나 특정 사용자에게 부여합니다. 응용 프로그램은 여러 가지 다른 롤을 가질 수 있는데 각 롤은 응용 프로그램을 사용하는 동안 일부 데이터를 액세스할 수 있는 각기 다른 권한을 부여받습니다.

사용자 롤

사용자 롤은 데이터베이스 사용자 그룹이 공통으로 필요로 하는 권한을 부여한 것입니다. 사용자 롤에 응용 프로그램 롤과 권한을 부여한 후 사용자 롤을 다시 해당 사용자에게 부여하여 사용자 권한을 관리할 수 있습니다.

롤의 기법

데이터베이스 롤의 기능은 다음과 같습니다.

■ 롤에 시스템 권한이나 스키마 객체 권한을 부여할 수 있습니다.

■ 다른 롤에 롤을 부여할 수 있지만 롤을 해당 롤 객체나 순환적인 방법으로 부여할수는 없습니다. (예를 들어, A 롤에 B 롤을 부여했다면 B 롤에 A 롤을 다시 부여할 수 없습니다. )

■ 모든 롤을 모든 데이터베이스 사용자에게 부여할 수 있습니다.

■ 사용자에게 부여된 롤을 항상 사용 가능/불가능 상태로 만들 수 있습니다. 현재사용할 수 있는 모든 롤 권한은 사용자의 보안 도메인에 포함되지만 현재 사용할수 없는 롤 권한은 제외됩니다. Ora c l e에서 데이터베이스 응용 프로그램과 사용자는 롤의 사용 가능 상태를 변경하여 권한을 선택적으로 사용 가능하도록 할 수 있습니다.

■ 간접적으로 부여된 롤(롤에 부여된 롤)은 사용자에 대해 명시적으로 사용 가능/불가능 상태를 지정할 수 있습니다. 그러나 직접 부여된 롤에 간접적으로 부여된 모든 롤은 다른 롤을 포함한 롤을 사용 가능 상태로 만들어 암시적으로 사용할 수있도록 합니다.

롤 부여 및 철회

다음 옵션을 사용하여 사용자 롤이나 다른 롤을 부여하거나 철회할 수 있습니다.

■ O racle Enterprise Manager의 G rant System Privileges/Roles 대화상자와R ev o ke System Privileges/Roles 대화상자

■ SQL 명령어 G R A N T와 R E VO K E

3 0 - 1 8 Oracle8i 개념 설명서, 볼륨 2

Page 408: Oracle8 - Tistory

동일한 옵션을 사용하여 권한을 부여하거나 철회할 수 있습니다. 또한 O ra c l e을 실행하는 운영 체제를 사용하거나 네트워크 서비스를 통해 롤을 부여하거나 철회할 수도있습니다.

추가 정보: 롤 관리에 대한 자세한 내용은 O racle8i 관리자 설명서를참조하십시오.

롤을 부여하거나 철회할 수 있는 사용자

GRANT ANY ROLE 시스템 권한을 가진 사용자라면 모두 데이터베이스의 다른사용자나 롤에 권한을 부여하거나 철회할 수 있습니다. 이 권한은 매우 강력하므로이 시스템 권한을 주의해서 부여해야 합니다.

추가 정보: 전역 롤에 대한 내용은 O racle8i Distributed DatabaseS y s t e m s를 참조하십시오.

ADMIN OPTION 롤을 부여받은 모든 사용자는 데이터베이스의 다른 사용자나 롤에 롤을 부여하거나 철회할 수 있습니다. 이 옵션을 사용하여 선택적인 방법으로 롤을 관리할 수 있습니다.

롤 이름 지정

데이터베이스 내에서 롤 이름은 고유해야 하며 사용자명과 동일하면 안됩니다. 롤은스키마 객체와는 달리 어떤 스키마에도“포함”될 수 없습니다. 따라서 롤을 생성하는사용자는 롤에 아무런 영향을 주지 않고 삭제될 수 있습니다.

롤과 사용자의 보안 도메인

각 롤과 사용자는 자신의 고유한 보안 도메인을 가집니다. 롤의 보안 도메인은 롤에직접 부여된 권한과 해당 롤에 부여된 다른 모든 롤의 권한을 포함합니다.

사용자의 보안 도메인은 해당 스키마의 모든 스키마 객체에 대한 권한, 사용자에게부여된 권한, 사용자의 현재 사용 가능한 롤의 권한 등을 포함합니다. (하나의 롤을동시에 한 사용자에게 활성화하고 다른 사용자에게 비활성화할 수 있습니다.) 또한사용자의 보안 도메인은 사용자 그룹 P U B L I C에 부여된 권한과 롤도 포함합니다.

권한, 롤, 보안 정책 3 0 - 1 9

Page 409: Oracle8 - Tistory

PL/SQL 블록과 롤

PL/SQL 블록에서의 롤 사용은 익명 블록인지 명명된 블록(내장 프로시저, 함수 또는 트리거)인지의 여부와 정의자 권한으로 실행되는지 호출자 권한으로 실행되는지의여부에 따라 다릅니다.

정의자 권한을 가진 명명된 블록

모든 롤은 정의자 권한으로 실행되는 임의의 명명된 PL/SQL 블록(내장 프로시저,함수 또는 트리거)에서는 사용 불가능 상태입니다. 롤은 권한 확인에 사용되지 않으며 정의자 권한 프로시저 내에 롤을 설정할 수 없습니다.

S E S S I O N _ ROLES 뷰는 현재 사용 가능한 모든 롤을 보여줍니다. 정의자 권한으로실행되는 명명된 PL/SQL 블록이 S E S S I O N _ RO L E S를 질의하는 경우 질의는 행을돌려주지 않습니다.

호출자 권한과 익명 블록

호출자 권한으로 실행되는 명명된 PL/SQL 블록과 익명의 PL/SQL 블록은 사용 가능한 롤을 통해 부여된 권한에 준하여 실행됩니다. 현재 롤은 호출자 권한 P L / S Q L블록 내에서 권한을 확인하는데 사용되며 동적 S Q L을 사용하여 세션에서 롤을 설정할 수 있습니다.

호출자 권한과 정의자 권한에 대한 설명은 18-9 페이지“정의자 권한 및 호출자 권한”을, 동적 S Q L에 대한 내용은 16-19 페이지“P L / S Q L의 동적 S Q L”을 참조하십시오.

데이터 정의어 명령문과 롤

데이터 정의어(DDL) 문을실행하려면 명령문 유형에 따라 하나 이상의 권한이 필요합니다. 예를 들어, 테이블을 생성하려는 사용자는 C R E ATE TABLE 또는 C R E AT EANY TABLE 시스템 권한이 있어야 합니다. 다른 사용자의 테이블에 대한 뷰를 생성하려면 테이블 생성자는 C R E ATE VIEW나 C R E ATE ANY VIEW 시스템권한 및테이블에 대한 SELECT 객체 권한 또는 SELECT ANY TABLE 시스템 권한이 있어야 합니다.

O ra c l e은 특정 DDL 문의 특정 권한에 대한 사용을 제한하여 롤을 통해 받는 권한의종속성을 방지합니다. 다음은 DDL 문과 관련하여 권한을 제한하는 규칙에 대한 내용입니다.

■ 사용자가 DDL 작업을 수행할 수 있도록 하는 모든 시스템 권한과 스키마 객체권한은 롤을 통해 부여받을 때 사용할 수 있습니다.

3 0 - 2 0 Oracle8i 개념 설명서, 볼륨 2

Page 410: Oracle8 - Tistory

예:

- 시스템 권한: CREATE TA B L E, CREATE VIEW 및 C R E ATE PRO C E -DURE 권한

- 스키마 객체 권한: 테이블에 대한 A LTER 및 INDEX 권한

예외: 롤을 통해 권한을 받으면 테이블에 대한 REFERENCES 객체 권한을 테이블의 외래 키 정의에 사용할 수 없습니다.

■ DDL 문을 실행하는데 필요한 DML 작업을 수행하도록 하는 모든 시스템 권한과객체 권한은 롤을 통해 받으면 사용할 수 없습니다.

예:

- 롤을 통해 테이블에 대한 SELECT ANY TABLE 시스템권한이나 S E L E C T객체 권한을 받은 사용자는 다른 사용자의 테이블에 대한 뷰를 생성하는 권한을 사용할 수 없습니다.

다음 예는 롤을 통해 받은 권한의 허용된 사용과 제한된 사용을 보다 명시적으로 보여줍니다.

예: 다음과 같은 사용자가 있다고 합시다.

■ C R E ATE VIEW 시스템 권한이 있는 롤을 부여받은 사용자

■ EMP 테이블에 대해 SELECT 객체 권한을 가진 롤을 부여받았지만 EMP 테이블에 대해 직접 SELECT 권한을 부여받지 않은 사용자

■ DEPT 테이블에 대해 직접 SELECT 객체 권한을 부여받은 사용자

이러한 권한을 부여받았다면 사용자는 다음 작업을 수행할 수 있습니다.

■ 사용자는 EMP 및 DEPT 테이블모두에 대해SELECT 문을실행할 수 있습니다.

■ 모두 롤을 통해 EMP 테이블에 대해 C R E ATE VIEW와 SELECT 권한을 가지지만 롤을 통해 EMP 테이블에 대한 SELECT 객체 권한을 부여받았으므로EMP 테이블에 대해 사용 가능한 뷰를 생성할 수 없습니다. 뷰를 생성해도 액세스할 때 오류가 발생합니다.

■ 롤을 통한 C R E ATE VIEW 권한과 DEPT 테이블에 대해 직접적으로 S E L E C T권한을 가지므로 DEPT 테이블에 대한 뷰를 생성할 수 있습니다.

권한, 롤, 보안 정책 3 0 - 2 1

Page 411: Oracle8 - Tistory

미리 정의된 롤

C O N N E C T, RESOURC E, DBA, EXP_FULL_DATABASE 및 I M P _ F U L L _DATABASE 롤은 오라클 데이터베이스에 대해 자동으로 정의됩니다. 이러한 롤은O ra c l e의 이전 버전과 역방향 호환성이 있으며 다른 롤과 동일한 방법으로 수정될 수있습니다.

운영 체제와 롤

일부 환경에서는 운영 체제를 사용하여 데이터베이스 롤 부여 및 철회, 암호 인증 관리 등 데이터베이스 보안을 관리할 수 있습니다. 모든 운영 체제에서 이 기능을 사용할 수 있는 것은 아닙니다.

추가 정보: 운영 체제를 통한 롤 관리에 대한 자세한 내용은 사용자 운영 체제별 오라클 설명서를 참조하십시오.

분산 환경에서의 롤

분산 데이터베이스 환경에서 롤을 사용하려면 필요한 모든 롤을 분산 (원격) 세션의기본 롤로 설정해야 합니다. 롤을 로컬 데이터베이스 세션에서 원격 데이터베이스로접속할 때 사용 가능하게 할 수는 없습니다. 예를 들어, 원격 사이트에 있는 롤을 사용하려는 원격 프로시저는 실행할 수 없습니다.

추가 정보: 분산 데이터베이스 환경에 대한 자세한 내용은 O ra c l e 8 iDistributed Database Systems를참조하십시오.

상세한 액세스 제어

상세한 액세스 제어를 통해 여러 기능을 가진 보안 정책을 구현하고 이러한 보안 정책을 테이블이나 뷰와 관련시킬 수 있습니다. 데이터베이스 서버는 데이터를 액세스하는 방법과 관계없이 자동으로 이러한 보안 정책을 강제로 수행합니다. (예를 들어,임시 질의)

다음을 수행할 수 있습니다.

■ S E L E C T, INSERT, UPDATE 및D E L E T E에 대해 다른 정책 사용

■ 보안 정책이 필요한 위치에만 사용 (예를 들어, 월급 정보)

3 0 - 2 2 Oracle8i 개념 설명서, 볼륨 2

상세한 액세스 제어

Page 412: Oracle8 - Tistory

■ 패키지화된 응용 프로그램에서 최상단의 기본 정책을 구축하는 것을 포함하여 각테이블에 하나 이상의 정책 사용

PL/SQL 패키지 D B M S _ R L S를 사용하여 사용자의 보안 정책을 관리할 수 있습니다. 이 패키지를 사용하여 사용자가 작성한 정책을 추가, 삭제, 활성, 비활성및 갱신할 수 있습니다. PL/SQL 패키지 사용에 대한 자세한 내용은 18-11 페이지“패키지”를 참조하십시오.

추가 정보: 패키지 구현에 대한 내용은 O racle8i Supplied Pa c k a g e sR e fe re n c e를 참조하십시오.

동적 술어

사용자가 작성한 보안 정책을 구현하는 함수 또는 패키지는 술어(WHERE 조건)를돌려줍니다. 이 술어는 정책 단위로 설정된 액세스 권한을 제어합니다. 재작성된 질의는 완벽하게 최적화되고 공유 가능합니다.

보안 정책의 예

다음 보안 정책의 예를 생각해 봅시다.

HR 인적 자원 응용 프로그램에서 E M P L OY E E S는 A L L _ E M P L OYEES 테이블에대한 뷰이고 두 객체 모두 APPS 스키마에 있습니다. 다음은 테이블과 뷰를 작성하는 명령어입니다.

CREATE TABLE all_employees(employee_id NUMBER(15),emp_name VARCHAR2(30),mgr_id NUMBER(15),user_name VARCHAR2(8), .... );

CREATE VIEW employees AS SELECT * FROM all_employees;

회사에서 사용자의 롤에 준하여 액세스 권한을 E M P L OYEES 뷰로 제한하는 보안정책 함수를 작성하려고 합니다. 정책에 대한 술어는 H R _ ACCESS 패키지에서SECURE_PERSON 함수로 생성될 수 있습니다. 패키지는 APPS 스키마에 있고여기에는 HR 응용 프로그램과 관련된 모든 보안 정책을 지원하는 함수가 있습니다.또한 모든 응용 프로그램 컨텍스트는 APPS_SEC 이름 영역에 있습니다. 다음은 위의 예에 대해 응용 프로그램 컨텍스트를 작성하는 명령어입니다.

CREATE CONTEXT hr_role USING apps_sec.hr_role

권한, 롤, 보안 정책 3 0 - 2 3

상세한 액세스 제어

Page 413: Oracle8 - Tistory

다음은 보안 정책 함수를 작성하는 명령어입니다.

CREATE PACKAGE BODY hr_access ISFUNCTION secure_person(obj_schema VARCHAR2, obj_name VARCHAR2)

RETURN VARCHAR2 ISd_predicate VARCHAR2(2000);

B E G I NIF SYS_CONTEXT (’apps_sec’, ’hr_role’) = ’EMP’ THEN

d_predicate = ’emp_name = sys_context(’’userenv’’, ’’user’’)’;IF SYS_CONTEXT (’apps_sec’, ’hr_role’) = ’MGR’ THEN

d_predicate = ’mgr_id = sys_context(’’userenv’’, ’’uid’’))’;E L S E

d_predicate = ’1=2’; -- deny access to other users,-- may use something like ’keycol=null’

RETURN d_predicate;END secure_person;

END hr_access;

다음 단계는 E M P L OYEES 뷰에 대한 정책(여기에서는 P E R _ P E O P L E _ S E C라 함)을 동적 술어를 생성하는 H R _ AC C E S S.SECURE_PERSON 함수에관련시킵니다.

DBMS_RLS.ADD_POLICY(’apps’, ’employees’, ’per_people_sec’, ’apps’’hr_access.secure_person’, ’select, update, delete’);

관련된 E M P L OYEES 뷰를 가진 S E L E C T, UPDATE 및 DELETE 문은 응용 프로그램 컨텍스트 H R _ RO L E의 값에 준하여 세 개의 술어 중 하나를 선택합니다.

동일한 정책을 가지고 데이터에 대한 액세스를 제한하므로 A L L _ E M P L OYEES 테이블에 보안 기능을 갖추는 동일한 보안 정책 함수는 ADDRESSES 테이블에 보안기능을 갖추기 위해 동적 술어를 생성하는데 사용될 수도 있습니다.

추가 정보: 보안 정책 구축에 대한 자세한 내용은 O racle8i Ap p l i c a -tion Dev e l o p e r’s Guide - Fundamentals를참조하십시오.

응용 프로그램 컨텍스트

응용 프로그램 컨텍스트는 상세한 액세스 제어 구현을 쉽게 해줍니다. 이것을 통해함수를 가진 보안 정책을 구현하고 이러한 보안 정책을 응용 프로그램에 연결할 수있습니다. 각 응용 프로그램은 자체의 응용 프로그램별 컨텍스트를 가질 수 있습니다. 사용자는 임의로 자신의 컨텍스트를 변경할 수 없습니다. (예를 들어, SQL*Plus를 통해)

3 0 - 2 4 Oracle8i 개념 설명서, 볼륨 2

응용 프로그램 컨텍스트

Page 414: Oracle8 - Tistory

응용 프로그램 컨텍스트는 응용 프로그램에 관심 있는 속성에 준하여 융통성 있는 매개변수 기준 액세스 제어를 허용합니다. 예를 들어, 인적 자원 응용 프로그램에 대한컨텍스트 속성에는“위치”, “기관”및“국가”가 포함될 수 있습니다. 반면 주문 입력항목 제어에 대한 속성은“고객 번호”및“판매 지역”이 될 수 있습니다.

다음을 수행할 수 있습니다.

■ 컨텍스트 값에 대한 술어를 기준으로

■ 술어 내에서 컨텍스트 값을 바인드 변수로 사용

■ 사용자 속성 설정

■ 사용자 속성 액세스

응용 프로그램 컨텍스트를 정의하려면 다음과 같이 하십시오.

1 . 응용 프로그램에 대한 컨텍스트를 유효화하고 설정하는 함수가 있는 PL/SQL 패키지를 작성합니다. 로그온 시 이벤트 트리거를 사용하여 로그인 사용자에 대한초기 컨텍스트를 설정할 수도 있습니다.

2 . C R E ATE CONTEXT를 사용하여 고유한 컨텍스트 이름을 지정하고 작성한PL/SQL 패키지에 관련시킵니다.

3 . 다음 중 하나를 수행합니다.

■ 상세한 액세스 제어를 구현하는 정책 함수에 있는 응용 프로그램 컨텍스트를참조합니다.

■ 로그온 시 이벤트 트리거를 생성하여 사용자에 대한 초기 컨텍스트를 설정합니다. 예를 들어, 사용자의 사원 번호를 질의하고 이를“사원 번호”컨텍스트값으로 설정합니다.

4 . 응용 프로그램 컨텍스트를 참조합니다.

추가 정보: PL/SQL 패키지를 작성하는데 대한 내용은 PL/SQL 사용설명서 및 참조서와 O racle8i Supplied Packages Refe re n c e를 참조하십시오.

권한, 롤, 보안 정책 3 0 - 2 5

응용 프로그램 컨텍스트

Page 415: Oracle8 - Tistory

3 0 - 2 6 Oracle8i 개념 설명서, 볼륨 2

응용 프로그램 컨텍스트

Page 416: Oracle8 - Tistory

31감사

이 장에서는 O ra c l e의 감사 기능에 대해 설명하며 다음 내용을 다룹니다.

■ 감사 기능 소개

■ 명령문 감사

■ 권한 감사

■ 스키마 객체 감사

■ 명령문, 권한 및 스키마 객체 감사의 범위

감사 3 1 - 1

Page 417: Oracle8 - Tistory

감사 기능 소개

감사는 선택된 사용자 데이터베이스 작업을 모니터하고 기록하는 것으로 감사 기능을

사용하여 다음과 같은 작업을 수행할 수 있습니다.

■ 데이터베이스에 손상을 입힐 수 있는 작업을 감시합니다. 예를 들어, 인증되지 않은 사용자가 테이블에서 데이터를 삭제하는 경우 보안 관리자는 데이터베이스에대한 모든 접속을 감사하고, 데이터베이스에 있는 모든 테이블의 행에 대한 허가된 삭제와 허가되지 않은 삭제 작업을 감사할 수 있을 것입니다.

■ 특정 데이터베이스 작업에 대한 데이터를 모니터하고 수집합니다. 예를 들어, 데이터베이스 관리자는 어떤 테이블이 갱신되고 있는지, 얼마나 많은 논리적 입출력이 일어나고 있는지 또는 절정 시간에 얼마나 많은 사용자가 동시에 접속하는 지에 대한 통계를 낼 수 있습니다.

감사 기능

이 단원에서는 O ra c l e의 감사 기능의 기법에 대해 개략적으로 설명합니다.

감사 유형

O ra c l e은 세 가지 일반적인 감사 유형을 지원합니다.

명령문 감사 SQL 명령문이 실행되는 특정 스키마 객체가 아닌 SQL 명령

문 유형에 대해 선택적으로 감사합니다. 일반적으로 SQL 명

령문 감사 옵션은 범위가 넓어 옵션별로 연관된 몇 가지 작업

에 대해 감사를 수행합니다. 예를 들어, AUDIT TA B L E은

DDL 명령문이 실행된 테이블에 관계없이 DDL 명령문을 추

적합니다. 명령문 감사를 설정하여 데이터베이스의 특정 사용

자나 모든 사용자를 감사할 수 있습니다.

권한 감사 AUDIT CREATE TA B L E과 같이 해당 작업을 수행하는

강력한 시스템 권한 사용에 대해 선택적으로 감사합니다. 권

한 감사는 대상 권한의 사용에 대해서만 감사를 수행하므로

명령문 감사보다 더욱 집중적입니다. 권한 감사를 설정하여

데이터베이스의 특정 사용자나 모든 사용자를 감사할 수 있습

니다.

스키마 객체 AUDIT SELECT ON EMP와같이 특정 스키마 객체의 특

정 명령문에 대한 선택적인 감사 기능입니다. 스키마 객체 감

사는 매우 집중적이어서 특정 스키마 객체에 대한 특정 명령

문만을 감사합니다. 스키마 객체 권한은 항상 데이터베이스의

모든 사용자에게 적용됩니다.

3 1 - 2 Oracle8i 개념 설명서, 볼륨 2

감사 기능 소개

감사

Page 418: Oracle8 - Tistory

감사 범위

광범위하게 감사하거나 특정 범위에 대해서만 중점적으로 감사할 수 있습니다.

■ 성공적인 명령문 실행 또는 비 성공적인 명령문 실행에 대해서만 감사하거나 모두

에 대해 감사

■ 사용자 세션별로 실행된 명령문 또는 명령문이 실행될 때마다 감사

■ 모든 사용자나 특정 사용자에 대한 작업 감사

감사 레코드와 감사 트레일

감사 레코드는 감사가 수행된 작업, 작업을 수행한 사용자, 작업 날짜와 시간 등에 대

한 정보를 포함하며 데이터베이스 감사 트레일이라는 데이터 딕셔너리 테이블이나 운

영 체제 감사 트레일에 저장됩니다.

데이터베이스 감사 트레일은 각각의 오라클 데이터베이스 데이터 딕셔너리의 SYS 스

키마에 있는 AU D $라는 단일 테이블입니다. 미리 정의된 몇 가지 뷰를 사용하여 이

러한 정보를 사용할 수 있습니다.

추가 정보: 뷰 생성 방법 및 사용법에 대한 내용은 O racle8i Serv e r관리자 설명서를 참조하십시오.

감사 트레일 레코드는 감사된 작업과 감사 옵션에 따라 서로 다른 정보를 가질 수 있습니다. 다음 정보는 각 감사 트레일 레코드에 항상 포함되는 것으로 특정 감사 작업에 유용한 정보를 제공합니다.

■ 사용자 이름

■ 세션 식별자

■ 단말기 식별자

■ 액세스한 스키마 객체 이름

■ 수행되었거나 수행할 작업

■ 작업의 완료 코드

■ 날짜와 시간 기록

■ 사용된 시스템 권한

운영 체제 감사 트레일은 암호화되어 읽을 수 없지만 데이터 딕셔너리 파일에서 암호가 해독되며 다음과 같은 오류 메시지를 보여줍니다.

감사 3 1 - 3

감사 기능 소개

Page 419: Oracle8 - Tistory

작업 코드 수행되었거나 수행할 작업을 설명합니다. 이러한 코드와 그에 대한 설

명은 AU D I T _ ACTIONS 데이터 딕셔너리 테이블에 있습니다.

사용 권한 작업에 사용된 시스템 권한을 설명합니다. 이러한 코드와 그에 대한

설명은 SYSTEM_PRIVILEGE_MAP 테이블에있습니다.

완료 코드 작업의 결과를 설명합니다. 작업이 성공적으로 끝나면 0을, 그렇지 않

으면 실패의 원인을 알려주는 O racle 오류 코드 값을 돌려줍니다. 이

러한 코드는 O racle8i Error Messages에나열되어 있습니다.

감사 기법

이 단원에서는 O ra c l e에서 사용하는 감사 기능의 기법에 대해 설명합니다.

감사 레코드가 생성되는 시점

감사 정보 기록을 활성화하거나 비활성화할 수 있습니다. 이 기능을 사용하여 인증된

데이터베이스 사용자는 언제든 감사 옵션을 설정할 수 있지만 감사 정보 기록에 대한

제어는 보안 관리자에게 맡깁니다.

추가 정보: 감사 기능을 활성화하거나 비활성화하는데 대한 내용은O racle8i 관리자 설명서를 참조하십시오.

데이터베이스에서 감사 기능이 활성화되면 명령문 실행 단계 동안 감사 레코드가 생성됩니다.

주: SQL 문의 처리 단계와 공유 S Q L에 대해 잘 모른다면 다음에 설명할 내용에 대한 이해를 위해 1 6장“S Q L과 P L / S Q L”을 참조하십시오.

PL/SQL 프로그램 단위의 SQL 문은 프로그램이 실행될 때 필요한 만큼 각각 감사됩니다.

감사 트레일 레코드 생성 및 삽입은 사용자의 트랜잭션과는 무관하므로 사용자 트랜

잭션이 롤백되더라도 감사 트레일 레코드는 커밋됩니다.

3 1 - 4 Oracle8i 개념 설명서, 볼륨 2

감사 기능 소개

Page 420: Oracle8 - Tistory

주: 감사 레코드는 사용자 SY S가 설정한 세션이나 관리자 권한을 사용한 접속에 의해 생성되지 않습니다. 이러한 사용자에 의한 접속은 특정관리 작업(예를 들어, 데이터베이스 시작, 종료, 복구 등)을 수행할 수있는 O ra c l e의 특정 내부 기능을 무시합니다.

항상 운영 체제 감사 트레일에 감사되는 이벤트

데이터베이스 감사 기능 활성 상태에 관계없이 O racle 서버는 운영 체제 감사 트레일

에 일부 데이터베이스 관련 작업을 항상 기록합니다.

인스턴스 시작 인스턴스를 시작하는 OS 사용자, 사용자의 단말기 식별자,

날짜와 시간 기록, 데이터베이스 감사 기능의 활성 여부를

자세히 기록하는 감사 레코드가 생성됩니다. 이러한 내용은

인스턴스 시작 작업이 성공적으로 끝날 때까지는 데이터베이

스 감사 트레일을 사용할 수 없으므로 OS 감사 트레일에 기

록됩니다. 인스턴스 시작 시 데이터베이스 감사 상태를 기록

하면 관리자는 감사되지 않은 작업을 수행하기 위하여 데이

터베이스 감사 기능이 비활성 상태에서 데이터베이스를 재시

작하는 것을 방지할 수 있습니다.

인스턴스 종료 인스턴스를 종료하는 OS 사용자, 해당 사용자의 단말기 식

별자, 날짜와 시간 기록 등을 자세히 기록하는 감사 레코드

가 생성됩니다.

관리자 권한으로 관리자 권한으로 O ra c l e에 접속하는 OS 사용자를 자세히 기

데이터베이스 접속 록하는 감사 레코드가 생성됩니다. 이 기능은 관리자 권한으

로 접속하는 사용자의 가측성을 제공합니다.

O ra c l e에 액세스할 수 있는 감사 트레일을 생성하지 않는 운영 체제에서 이러한 감사

트레일 레코드는 백그라운드 프로세스 추적 파일과 동일한 디렉토리에 있는 O ra c l e

감사 트레일 파일에 저장됩니다.

추가 정보: 운영 체제 감사 트레일에 대한 자세한 내용은 사용자 운영체제별 오라클 설명서를 참조하십시오.

감사 3 1 - 5

감사 기능 소개

Page 421: Oracle8 - Tistory

감사 옵션의 효력 발생 시기

데이터베이스 사용자가 데이터베이스에 접속할 때 실행된 명령문과 권한 감사 옵션은

세션이 유지되는 동안 효력이 지속됩니다. 세션은 명령문이나 권한 감사 옵션 설정과

변경에 대한 변화를 알 수 없습니다. 현재 세션이 종료되거나 새로운 세션이 생성될

때만 수정된 명령문이나 권한 감사 옵션이 효력을 가집니다. 반대로 스키마 객체 감

사 옵션에서의 변경 사항은 현재 세션에 즉시 영향을 줍니다.

분산 데이터베이스에서 감사

감사는 사이트 자치적이어서 인스턴스는 직접 접속된 사용자가 발생시키는 명령문만

을 감사합니다. Ora c l e의 지역 노드는 원격 데이터베이스에서 수행되는 작업을 감사

할 수 없습니다. 원격 접속은 데이터베이스 링크의 사용자 계정을 통해 설정되므로

O ra c l e의 원격 노드는 데이터베이스 링크 접속을 통해 발생되는 명령문을 감사합니

다. 분산 데이터베이스와 데이터베이스 링크에 대한 자세한 내용은 3 3장“분산 데이

터베이스”를 참조하십시오.

OS 감사 트레일에 감사

O ra c l e은 O ra c l e이 사용할 수 있는 감사 트레일을 운영 체제가 생성하여 운영 체제

감사 트레일에 감사 트레일 레코드를 저장하도록 합니다. 이러한 감사 레코드가 다른

O racle 추적 파일과 유사한 형태로 데이터베이스 외부 파일에 기록되는 운영 체제도

있습니다.

추가 정보: 사용자 운영 체제에 이 기능이 구현되었는지 보려면 사용자플랫폼별 오라클 설명서를 참조하십시오.

O ra c l e은 운영 체제 감사 트레일(또는 감사 레코드가 있는 운영 체제 파일)이 감사

레코드를 기록할 수 없는 경우에도 항상 감사되는 작업을 허용합니다. 이러한 상황은

운영 체제 감사 트레일이나 파일 시스템이 꽉 차서 새로운 레코드를 받아들일 수 없

을 때 발생합니다.

OS 감사 기능을 설정할 때 시스템 관리자는 감사 트레일이나 파일 시스템이 완전히

채워지지 않도록 해야 합니다. 대부분의 운영 체제는 관리자에게 이러한 상황이 발생

하지 않도록 충분한 정보와 경고를 제공합니다.나아가 O racle 서버는 감사 트레일이

명령문에 대한 데이터베이스 감사 레코드를 받아들일 수 없을 때 감사된 이벤트가 발

생하는 상황을 방지하므로 데이터베이스 감사 트레일을 사용하도록 감사 기능을 설정

하면 이러한 현상을 제거할 수 있습니다.

3 1 - 6 Oracle8i 개념 설명서, 볼륨 2

감사 기능 소개

Page 422: Oracle8 - Tistory

명령문 감사

명령문 감사는 다음의 두 범주로 분류되는 관련된 명령문 그룹에 대한 선택적인 감사

기능입니다.

■ DDL 문, 명명된 특정 구조나 스키마 객체가 아닌 데이터베이스 구조 또는 스키마 객체의 특정 유형에 관한 감사 (예를 들어, AUDIT TA B L E은 모든C R E ATE 및 D ROP TABLE 문을 감사합니다.)

■ DML 문, 명명된 특정 구조나 스키마 객체가 아닌 데이터베이스 구조 또는 스키마 객체의 특정 유형에 관한 감사 (예를 들어, AUDIT SELECT TA B L E은 테이블, 뷰 또는 스냅샷에 관계없이 모든 S E L E C T. . . F ROM TA B L E / V I E W/ S NAPSHOT 문을 감사합니다. )

문 감사는 모든 데이터베이스 사용자의 작업을 감사할 수도 있고 특정 데이터베이스

사용자의 작업에 대해서만 중점적으로 감사할 수도 있습니다.

권한 감사

권한 감사는 시스템 권한을 사용하는 명령문에 대한 선택적인 감사 기능입니다. 예를

들어, SELECT ANY TABLE 시스템 권한에 대한 감사는 SELECT ANY

TABLE 시스템 권한을 사용하여 실행되는 사용자의 명령문을 감사합니다. 모든 시스

템 권한의 사용을 감사할 수 있습니다.

모든 권한 감사에서 시스템 권한 전에 소유자 권한과 스키마 객체 권한이 확인됩니

다. 소유자 권한과 스키마 객체 권한이 작업을 허용하면 해당 작업은 감사되지 않습

니다.

유사한 문과 권한 감사 옵션이 모두 설정된 경우 하나의 감사 레코드만이 생성됩니

다. 예를 들어, 문 옵션 TA B L E과 시스템 권한 C R E ATE TA B L E이 모두 감사되는

경우 테이블이 생성될 때마다 하나의 감사 레코드가 생성됩니다.

권한 감사는 각 옵션이 연관된 문 목록이 아닌 특정 유형의 명령문만 감사하므로 명

령문 감사보다는 범위가 집중되어 있습니다. 예를 들어, 문 감사 옵션 TA B L E은

C R E ATE TA B L E, ALTER TA B L E, DROP TABLE 문을 감사하는데 반해 권한

감사 옵션 C R E ATE TA B L E은 C R E ATE TABLE 문이 C R E ATE TABLE 권한만

을 필요로 하므로 C R E ATE TABLE 문만감사합니다.

명령문 감사와 같이 권한 감사는 모든 데이터베이스 사용자의 작업을 감사할 수도 있

고 특정 데이터베이스 사용자의 작업에 대해서만 중점적으로 감사할 수도 있습니다.

감사 3 1 - 7

권한 감사

Page 423: Oracle8 - Tistory

스키마 객체 감사

스키마 객체 감사는 질의를 포함한 특정 DML 문, 특정 스키마 객체에 대한

GRANT 문, REVOKE 문에 대한 선택적 감사 기능입니다. 스키마 객체 감사는 권

한을 제어하는 GRANT 문과 R E VOKE 문뿐 아니라 주어진 테이블에 대한

SELECT 문 또는 DELETE 문과 같이 스키마 객체 권한에 의해 허용된 작업을 감

사합니다.

테이블, 뷰, 시퀀스, 독립형 내장 프로시저, 함수 및 패키지(패키지의 프로시저는 개

별적으로 감사될 수 없음)를 참조하는 명령문을 감사할 수 있습니다.

클러스터, 데이터베이스 링크, 인덱스, 동의어 등을 참조하는 문은 직접 감사할 수 없

습니다. 그러나 기본 테이블에 영향을 주는 작업을 감사하여 이러한 스키마 객체에

대한 액세스를 간접적으로 감사할 수 있습니다.

스키마 객체 감사 옵션은 항상 데이터베이스의 모든 사용자에 대해 설정되며 특정 사

용자에 대해서만 설정될 수는 없습니다. 사용자는 감사할 수 있는 모든 스키마 객체

에 대해 기본 스키마 객체 감사 옵션을 설정할 수 있습니다.

추가 정보: 자세한 내용은 O racle8i SQL 참조서의“AU D I T (스키마객체)”을 참조하십시오.

뷰와 프로시저에 대한 스키마 객체 감사 옵션

뷰와 프로시저(내장 함수, 패키지, 트리거 포함)는 자신이 정의된 기본 스키마 객체를

참조하므로 뷰와 프로시저에 대한 감사는 몇 가지 고유한 특성을 가집니다. 뷰나 프

로시저를 사용한 결과로 여러 감사 레코드가 생성될 수 있습니다. 활성화된 감사 옵

션에 뷰나 프로시저의 사용이 종속되며 뷰나 프로시저를 사용한 결과 발생된 SQL 문

도 기본 스키마 객체의 활성화된 감사 옵션(기본 감사 옵션 포함)에 종속됩니다.

다음의 SQL 문을 살펴봅시다.

AUDIT SELECT ON emp;

CREATE VIEW emp_dept ASSELECT empno, ename, dname

FROM emp, deptWHERE emp.deptno = dept.deptno;

AUDIT SELECT ON emp_dept;

SELECT * FROM emp_dept;

3 1 - 8 Oracle8i 개념 설명서, 볼륨 2

스키마 객체 감사

Page 424: Oracle8 - Tistory

E M P _ D E P T에 대한 질의 결과 EMP_DEPT 뷰와 기본 테이블 E M P의 질의

(EMP_DEPT 뷰를 통한 간접적 질의)에 대한 두 개의 감사 레코드가 생성됩니다.

기본 테이블 D E P T에 대한 질의는 D E P T에 대한 SELECT 감사 옵션이 활성화되지

않았으므로 감사 레코드를 생성하지 않습니다. 모든 감사 레코드는 EMP_DEPT 뷰

를 질의한 사용자에 속합니다.

뷰나 프로시저에 대한 감사 옵션은 뷰나 프로시저가 처음 사용되어 공유 풀에 저장될

때 결정됩니다. 이러한 감사 옵션은 뷰나 프로시저가 공유 풀에서 비워져 다음에 바

뀔 때까지 설정 상태가 계속 유지됩니다. 스키마 객체를 감사하면 캐시에 있는 스키

마 객체는 무효화되고 다시 로드됩니다. 기본 스키마 객체의 감사 옵션에 대한 변경

사항을 공유 풀에 있는 뷰나 프로시저는 인식하지 못합니다.

위의 예에서 EMP 테이블에 대한 SELECT 문 감사를 중지하면 E M P-DEPT 뷰의

사용은 EMP 테이블에 대한 감사 레코드를 더 이상 생성하지 않습니다.

명령문, 권한 및 스키마 객체 감사의 범위

명령문, 권한 및 스키마 객체 감사는 다음의 세 영역에서 집중될 수 있습니다.

■ 감사된 SQL 문의 성공적 실행과 실패

■ BY SESSION 감사와BY ACCESS 감사

■ 데이터베이스에 있는 특정 사용자나 모든 사용자에 대해(명령문 감사와 권한 감사만)

명령문의 성공적 실행과 실패에 대한 감사

명령문, 권한, 스키마 객체 감사 모두에서 성공적으로 실행된 명령문, 실행을 실패한

명령문 또는 모두에 대해 선택적으로 감사할 수 있습니다. 따라서 감사되는 명령문이

성공적으로 실행되지 않은 경우에도 작업을 모니터할 수 있습니다.

실행을 실패한 명령문은 유효한 SQL 명령문이 실행되었지만 필요한 인증이 부족했거

나 존재하지 않는 스키마 객체를 참조해서 실패한 경우에만 감사할 수 있습니다. 명

령문 자체가 유효하지 않기 때문에 실패한 명령문은 감사할 수 없습니다. 예를 들어,

실행을 실패한 명령문을 감사하도록 설정된 권한 감사 옵션은 대상 시스템 권한을 사

용하지만다른이유로실패한명령문(예를들어, CREATE TA B L E을 설정했지만지정된

감사 3 1 - 9

명령문 권한 및 스키마 객체 감사의 범위

Page 425: Oracle8 - Tistory

테이블스페이스의 할당량이 부족하여 C R E ATE TABLE 명령문을 실패한 경우)을 감

사합니다.

AUDIT 명령어의형식을 사용하여 다음 옵션을 포함할 수 있습니다.

■ WHENEVER SUCCESSFUL 옵션. 감사된 명령문이 성공적으로 실행된 경우

에만 감사합니다.

■ WHENEVER NOT SUCCESSFUL 옵션. 감사된 명령문이 실행을 실패한 경우에만 감사합니다.

■ 옵션을 지정하지 않으면 두 경우 모두를 감사합니다.

BY SESSION 감사와 BY ACCESS 감사

대부분의 감사 옵션은 단일 사용자 세션에서 감사된 명령문이 여러 번 실행될 때 감

사 레코드가 생성되는 방법을 설정할 수 있습니다. 이 단원에서는 AUDIT 명령어의

BY SESSION 옵션과BY ACCESS 옵션에대해 설명합니다.

BY SESSION

모든 감사 유형(스키마 객체, 명령문, 권한)에 대해 BY SESSION은 감사 트레일에

사용자와 스키마 객체당 감사되는 작업을 포함하는 세션 동안 하나의 감사 레코드만

을 삽입합니다.

세션은 사용자가 오라클 데이터베이스에 접속할 때와 접속을 해제하는 사이의 시간입

니다.

예제 1 다음 경우를 생각해 봅시다.

■ SELECT TABLE 문감사 옵션을 BY SESSION으로 설정합니다.

■ J WA R D는 데이터베이스에 접속하여 DEPT 테이블에 대해 다섯 개의 S E L E C T문을 실행한 후 접속을 해제합니다.

■ S W I L L I A M S는 데이터베이스에 접속하여 EMP 테이블에 대해 세 개의 S E L E -CT 문을 실행한 후 접속을 해제합니다.

이 경우 감사 트레일은 여덟 개의 SELECT 문에 대해 두 개의 감사 레코드( S E L -

ECT 문을 실행하는 각 세션에 대해 한 개씩)를 가집니다.

3 1 - 1 0 Oracle8i 개념 설명서, 볼륨 2

명령문, 권한 및 스키마 객체 감사의 범위

Page 426: Oracle8 - Tistory

예제 2 다음 경우를 생각해 봅시다.

■ SELECT TABLE 문감사 옵션을 BY SESSION으로 설정합니다.

■ J WA R D는 데이터베이스에 접속하여 DEPT 테이블에 대해 다섯 개의 S E L E C T문을, EMP 테이블에 대해 세 개의 SELECT 문을 실행한 후 데이터베이스 접속을 해제합니다.

이 경우 감사 트레일은 두 개의 레코드(세션에서 SELECT 문을 실행한 각 스키마 객

체에 대해 한 개씩)를 가집니다.

주: 감사 레코드를 운영 체제 감사 트레일로 전환할 때 BY SESSION옵션을 사용하는 경우 O ra c l e은 액세스될 때마다 감사 레코드를 생성하여 저장합니다. 따라서 이와 같은 감사 설정에서는 BY SESSION과BY AC C E S S가 동일하게 됩니다.

BY ACCESS

BY ACCESS 감사 옵션을 설정하면 커서 내에서 감사할 수 있는 매 실행 작업에 대

해 하나의 감사 레코드가 감사 트레일에 삽입됩니다. 다음은 커서를 재사용하도록 하

는 이벤트입니다.

■ O racle Fo r m s와 같이 재사용하기 위해 커서를 열린 채로 두는 응용 프로그램

■ 새로운 바인드 변수를 사용한 커서의 연속적 실행

■ 하나의 커서를 재사용하도록 문을 최적화하는 PL/SQL 엔진이 있는 PL/SQL 루프 내에서 실행되는 문

감사 기능은 커서의 공유 여부에 영향을 받지 않으며 각 사용자는 커서가 처음 실행

될 때 자신의 감사 트레일 레코드를 생성합니다.

예제 다음과 같은 경우를 생각해 봅시다.

■ SELECT TABLE 문감사 옵션을 BY AC C E S S로 설정합니다.

■ J WA R D는 데이터베이스에 접속하여 DEPT 테이블에 대해 다섯 개의 S E L E C T문을 실행한 후 접속을 해제합니다.

■ S W I L L I A M S는 데이터베이스에 접속하여 DEPT 테이블에 대해 세 개의 S E L E -CT 문을 실행한 후 접속을 해제합니다.

이 경우 하나의 감사 트레일은 여덟 개의 SELECT 문에 대해 여덟 개의 레코드를 가

집니다.

감사 3 1 - 1 1

명령문 권한 및 스키마 객체 감사의 범위

Page 427: Oracle8 - Tistory

기본 작업과 제외 작업

AUDIT 명령어를 사용하면 BY SESSION이나 BY AC C E S S를 지정할 수 있습니

다. 그러나 다음을 비롯한 일부 감사 옵션에는 BY AC C E S S만을 설정할 수 있습니

다.

■ DDL 문을 감사하는 모든 문 감사 옵션

■ DDL 문을 감사하는 모든 권한 감사 옵션

다른 모든 감사 옵션에는 기본적으로 BY SESSION을 사용합니다.

사용자에 의한 감사

문 감사와 권한 감사 옵션은 모든 사용자가 발생한 문을 감사할 수도 있고 특정 사용

자가 발생한 문만을 감사할 수도 있습니다. 특정 사용자로 감사를 제한하여 생성되는

감사 레코드 수를 최소화할 수 있습니다.

추가 정보: 사용자에 의한 감사에 대한 자세한 내용은 O racle8i SQL참조서를 참조하십시오.

예제 테이블 또는 뷰를 질의하거나 갱신하는 사용자 S C O T T와 B L A K E에 의해 명령문을 감사하려면 다음 명령문을 실행합니다.

AUDIT SELECT TABLE, UPDATE TABLEBY scott, blake;

3 1 - 1 2 Oracle8i 개념 설명서, 볼륨 2

명령문 권한 및 스키마 객체 감사의 범위

Page 428: Oracle8 - Tistory

32데이터베이스 복구

이 장에서는 데이터베이스 복구 시 사용되는 구조에 대해 소개하고 백업 및 복구 작업을간편하게 하는 R e c o v e ry Manager 유틸리티에대해 설명하며 다음 내용을 다룹니다.

■ 데이터베이스 복구 소개

■ 데이터베이스 복구에 사용되는 구조

■ 롤포워드와 롤백

■ 복구 성능 향상

■ R e c o v e ry Manager

■ 데이터베이스 아카이브 모드

■ 제어 파일

■ 데이터베이스 백업

■ 존재 가능성

추가 정보: 백업 및 복구 구조를 생성하고 유지 관리하는데 필요한 프로시저에 대한 내용은 O racle8i Backup and Recovery Guide를참조하십시오.

데이터베이스 복구 3 2 - 1

Page 429: Oracle8 - Tistory

데이터베이스 복구 소개

데이터베이스 관리자의 주요 임무는 하드웨어, 소프트웨어, 네트워크, 프로세스 또는시스템 장애가 일어날 가능성에 대비하는 것입니다. 이러한 장애가 데이터베이스 시스템의 작업에 영향을 줄 경우 가능한 빨리 데이터베이스를 복구하고 정상 작동으로 돌아가야 합니다. 복구 작업을 통해 데이터베이스 및 관련된 사용자를 불필요한 문제점으로부터 보호하고 작업을 수동으로 복제할 가능성을 방지하거나 줄여야 합니다.

복구 프로세스는 발생한 장애의 유형과 영향을 받은 구조, 수행할 복구 유형에 따라다릅니다. 손실되거나 손상된 파일이 없는 경우 복구 작업은 인스턴스를 다시 시작하는 것에 그칠 수도 있습니다. 데이터가 손실된 경우 복구 작업은 추가 단계를 필요로합니다.

주: R e c o v e ry Manager는 백업 및 복구 작업을 간단하게 해주는 유틸리티입니다. 32-15 페이지“R e c o v e ry Manager”를 참조하십시오.

추가 정보: R e c o v e ry Manager에 대한 자세한 내용과 손실된 데이터를 복구하는 방법에 대한 설명은 O racle8i Backup and RecoveryG u i d e를 참조하십시오.

오류와 장애

일부 문제점은 오라클 데이터베이스의 정상 작동을 중지시키거나 데이터베이스의 디스크 입출력에 영향을 줍니다. 다음 단원에서는 가장 일반적인 유형에 대해 설명합니다. 이러한 문제 중 일부는 자동으로 복구되며 데이터베이스 관리자 또는 데이터베이스 사용자의 작업을 거의 또는 전혀 필요로 하지 않습니다.

사용자 오류

데이터베이스 관리자가 사용자 오류(예를 들어, 실수로 테이블을 삭제한 경우)를 방지하기 위해 수행할 수 있는 일은 별로 없습니다. 일반적으로 사용자 오류는 데이터베이스와 응용 프로그램 원리에 대한 보다 많은 교육을 통해 감소시킬 수 있습니다.또한 관리자는 미리 효과적인 복구 계획을 세워 여러 가지 유형의 사용자 오류로부터쉽게 복구 작업을 수행할 수 있습니다.

명령문 실패

명령문 실패는 O racle 프로그램의 명령문을 처리하는 중에 논리적 오류가 있을 때 발생합니다. 예를 들어, 테이블의 모든 확장 영역(즉, CREATE TABLE 문의 M A X -EXTENTS 매개변수에 지정된 확장 영역의 수)이 할당되고 모두 데이터로 완전히채워져 있는 즉, 테이블이 완전히 가득 찬 상태라고 가정하면 유효한 I N S E RT 문이

3 2 - 2 Oracle8i 개념 설명서, 볼륨 2

데이터베이스 복구 소개

Page 430: Oracle8 - Tistory

라도 사용 가능한 공간이 없으므로 행을 삽입할 수 없습니다. 따라서 이러한 명령문을 실행하면 실패합니다.

명령문이 실패하면 오라클 소프트웨어나 운영 체제는 오류 코드나 메시지를 돌려줍니다. 일반적으로 명령문이 실패해도 수행해야 할 작업이나 복구 단계를 필요로 하지않습니다. Ora c l e은 자동으로 결과(이러한 결과가 있는 경우)를 롤백하여 실패한 명령문을 바르게 수정하고 제어를 응용 프로그램으로 돌려줍니다. 사용자는 오류 메시지에 따른 문제점을 수정한 후 명령문을 다시 실행하기만 하면 됩니다.

프로세스 실패

프로세스 실패는 데이터베이스 인스턴스의 사용자 프로세스, 서버 프로세스 또는 백그라운드 프로세스 (예를 들어, 비정상적인 접속 해제 또는 프로세스 종료) 중에 발생합니다. 프로세스를 실패하면 데이터베이스 인스턴스의 다른 프로세스 작업은 계속되지만 실패한 종속 프로세스는 작업을 계속할 수 없습니다.

O racle 백그라운드 프로세스 P M O N은 중지된 O racle 프로세스를 찾아냅니다. 중지된 프로세스가 사용자 프로세스 또는 서버 프로세스라면 P M O N은 중지된 프로세스의 현재 트랜잭션을 롤백하고 중지된 프로세스가 사용하는 자원을 해제하여 문제를해결합니다. 사용자 또는 서버 프로세스 실패는 자동으로 복구됩니다. 중지된 프로세스가 백그라운드 프로세스라면 인스턴스는 일반적으로 정상적인 작동을 계속할 수 없습니다. 따라서 인스턴스를 종료한 후 다시 시작해야 합니다.

네트워크 장애

클라이언트 워크스테이션을 데이터베이스 서버에 접속하기 위해 또는, 여러 데이터베이스 서버를 접속하여 분산 데이터베이스 시스템을 구성하기 위해 네트워크(예를 들어, 근거리 통신망 또는 전화선 등)를 사용할 때 전화 접속 중단 또는 네트워크 통신소프트웨어 장애와 같은 네트워크 장애로 인해 데이터베이스 시스템의 정상적인 작업이 중단될 수 있습니다. 예를 들어, 다음과 같습니다.

■ 네트워크 장애로 인해 클라이언트 응용 프로그램이 정상적인 실행을 중단하고 프로세스 실패가 발생할 수 있습니다. 이 경우 앞 단원에서 설명한 것처럼 O ra c l e백그라운드 프로세스 P M O N이 접속이 끊어진 사용자 프로세스의 중지된 서버 프로세스를 찾아 문제를 해결합니다.

■ 네트워크 장애로 인해 분산 트랜잭션의 2단계 커밋이 중단될 수 있습니다. 네트워크 문제가 수정되면 관련 데이터베이스 서버의 O racle 백그라운드 프로세스R E C O가 분산 데이터베이스 시스템의 모든 노드에서 아직 해결되지 않은 분산 트랜잭션을 자동으로 해결합니다. 분산 데이터베이스 시스템에 대한 내용은 3 3장

“분산 데이터베이스”를 참조하십시오.

데이터베이스 복구 3 2 - 3

데이터베이스 복구 소개

Page 431: Oracle8 - Tistory

데이터베이스 인스턴스 실패

데이터베이스 인스턴스 실패는 오라클 데이터베이스 인스턴스( S GA와 백그라운드 프로세스)가 계속하여 작업하지 못하도록 하는 문제가 생길 때 발생합니다. 인스턴스 실패는 정전으로 인한 시스템 운행 정지와 같은 하드웨어 문제나 운영 체제가 충돌하는것과 같은 소프트웨어 문제로 인해 발생할 수 있습니다. 또한 인스턴스 실패는S H U T D OWN ABORT 또는 S TA RTUP FORCE 명령어를 실행했을 때의 결과일수도 있습니다.

인스턴스 실패 복구 고장 복구 또는 인스턴스 복구는 데이터베이스를 인스턴스 실패전의 트랜잭션 일관성이 있는 상태로 복원합니다. 고장 복구는 단일 인스턴스 구성에서 데이터베이스를 복구하고 인스턴스 복구는 O racle Pa rallel Server 구성에서 데이터베이스를 복구합니다.

인스턴스 실패 복구는 자동으로 실행됩니다. 예를 들어, Oracle Pa rallel Serv e r를사용할 때 다른 인스턴스가 실패한 인스턴스에 대해 인스턴스 복구를 수행합니다. 단일 인스턴스 구성에서 데이터베이스를 다시 시작하면 (마운트하여 새로운 인스턴스로열면) Ora c l e은 데이터베이스에 대한 고장 복구를 수행합니다. 필요하다면 마운트된상태에서 열린 상태로 변환함으로써 자동으로 고장 복구를 실행합니다.

고장 복구 또는 인스턴스 복구는 다음과 같은 단계로 구성됩니다.

1 . 롤백 세그먼트의 내용을 포함하여 온라인 리두 로그에는 기록되었으나 데이터 파일에는 기록되지 않은 데이터를 복구하기 위해 롤포워드합니다. 이것을 캐시 복구라고 합니다.

2 . 데이터베이스를 엽니다. 데이터베이스가 사용 가능해지기 전에 모든 트랜잭션이롤백되기를 기다리는 대신 O ra c l e은 캐시 복구가 완료되는 즉시 데이터베이스를열도록 합니다. 복구되지 않은 트랜잭션에 의해 잠기지 않은 모든 데이터는 즉시사용할 수 있습니다.

3 . 장애가 발생했을 때 사용 중인 시스템 전체의 모든 트랜잭션을 D E A D로 표시하고 이러한 트랜잭션을 포함한 롤백 세그먼트를 PA RT LY AVA I L A B L E로 표시합니다.

4 . SMON 복구의 일부로 사용 불능 트랜잭션을 롤백합니다. 이것을 트랜잭션 복구라고 합니다.

5 . 인스턴스 실패 시 2단계 커밋을 수행 중이던 미결 분산 트랙잭션을 해결합니다.

6 . 새로운 트랜잭션이 사용 불능 트랜잭션에 의해 잠긴 행을 발견하면 새로운 트랜잭션은 자동으로 사용 불능 트랜잭션을 롤백하여 잠금을 해제할 수 있습니다. 빠른 시작 복구를 사용하는 경우 전체 트랜잭션과는 반대로 데이터 블록만 즉시 롤백됩니다.

3 2 - 4 Oracle8i 개념 설명서, 볼륨 2

데이터베이스 복구 소개

Page 432: Oracle8 - Tistory

추가 정보: 인스턴스 복구에 대한 설명은 O racle8i Pa rallel Serv e rSetup and Configuation Guide를참조하십시오.

인스턴스 복구 조정에 대한 설명은 O racle8i Tuning을참조하십시오.

매체(디스크) 장애

오라클 데이터베이스를 작동하는데 필요한 파일을 읽거나 쓰려고 할 때 오류가 발생할 수 있습니다. 저장 영역 매체에 대한 파일을 읽고 쓰는데 물리적 문제가 있는 것이므로 매체 장애라고 합니다.

매체 장애의 일반적인 예는 디스크 헤드가 손상되어 디스크 드라이브 상의 모든 파일이 손상되는 것입니다. 데이터 파일, 온라인 리두 로그 파일, 제어 파일 등 데이터베이스와 연관된 모든 파일들은 디스크 손상으로 영향을 받기 쉽습니다.

매체 장애로부터의 적합한 복구는 영향을 받은 파일에 따라 다릅니다.

추가 정보: 복구 방법에 대한 설명은 O racle8i Backup and RecoveryG u i d e를 참조하십시오.

매체 장애가 데이터베이스 작업에 미치는 영향 매체 장애는 데이터 파일, 온라인 리두 로그 파일, 제어 파일 등 오라클 데이터베이스 작업에 필요한 모든 유형의 파일에영향을 줄 수 있습니다.

온라인 리두 로그 파일 또는 제어 파일이 들어 있는 매체에 장애가 발생한 후의 데이터베이스 작업은 온라인 리두 로그 또는 제어 파일이 다중화되어 있는지의 여부에 따라 다릅니다. 온라인 리두 로그 또는 제어 파일이 다중화되었다는 것은 단순히 파일의 두 번째 복사본을 유지 관리하는 것을 의미합니다. 매체 장애로 인해 디스크가 손상되었을 때 다중화된 온라인 리두 로그를 가지고 있을 경우 보통 데이터베이스는 특별한 중단 없이 계속 작업할 수 있습니다. 다중화되지 않은 온라인 리두 로그가 손상되면 데이터베이스 작업은 중지되며 데이터는 영구적으로 손실됩니다. 제어 파일이손상된 경우 다중화했는지의 여부에 관계없이 O ra c l e이 손상된 제어 파일을 읽거나쓰려고 할 때(예를 들어, 모든 체크포인트와 로그 스위치에서 자주 발생합니다.) 데이터베이스 작업이 중단됩니다.

데이터 파일에 영향을 주는 매체 장애는 읽기 오류와 쓰기 오류의 두 가지 범주로 나누어집니다. 읽기 오류의 경우 O ra c l e은 데이터 파일을 읽을 수 없음을 발견하고 파일을 찾을 수 없거나 읽을 수 없음 또는 열 수 없음을 나타내는 O racle 오류와 함께운영 체제 오류를 응용 프로그램으로 돌려줍니다. Ora c l e은 실행을 계속하지만 읽기에 실패할 때마다 오류를 돌려줍니다. 다음 체크포인트에서 O ra c l e이 표준 체크포인트 프로세스의 일부로 파일 헤더를 쓰려고 하면 쓰기 오류가 발생합니다.

데이터베이스 복구 3 2 - 5

데이터베이스 복구 소개

Page 433: Oracle8 - Tistory

O ra c l e이 데이터 파일에 쓸 수 없음을 발견하고 채워진 온라인 리두 로그 파일을 아카이브하는 경우 O ra c l e은 D BWn 추적 파일에 오류를 돌려주고 데이터 파일을 자동으로 오프라인으로 설정합니다. 쓸 수 없는 데이터 파일만이 오프라인으로 설정되며파일이 속한 테이블스페이스는 온라인 상태로 유지됩니다.

쓸 수 없게 된 데이터 파일이 SYSTEM 테이블스페이스에 있으면 파일은 오프라인으로 설정되지 않습니다. 대신 오류가 돌아오며 O ra c l e은 인스턴스를 종료합니다.O ra c l e을 제대로 작동하기 위해서는 SYSTEM 테이블스페이스에 있는 모든 파일이온라인 상태여야 하므로 이러한 예외가 발생합니다. 마찬가지 이유로 현재 사용되는롤백 세그먼트를 포함한 테이블스페이스의 데이터 파일은 온라인으로 유지되어야 합니다.

O ra c l e이 데이터 파일에 쓸 수 없음을 발견하고 O ra c l e이 채워진 온라인 리두 로그파일을 아카이브하지 않고 있으면 D BWn 백그라운드 프로세스는 실패하고 현재 인스턴스도 실패합니다. 디스크 제어 장치가 꺼져 있는 등 일시적인 문제가 발생한 경우일반적으로 온라인 리두 로그 파일을 사용한 고장 복구 또는 인스턴스 복구가 수행되며 이 경우 인스턴스를 다시 시작할 수 있습니다. 그러나 데이터 파일이 영구적으로손상되고 아카이브를 사용하지 않을 경우 최근의 콜드 백업을 사용하여 전체 데이터베이스를 복원해야 합니다.

읽기 전용 테이블스페이스 복구 고장 복구 또는 인스턴스 복구 중 읽기 전용 데이터파일을 복구할 필요는 없습니다. 시작 시 복구를 수행하면 각 온라인 읽기 전용 파일은 매체를 복구할 필요가 없다는 것을 검증합니다. 즉, 파일은 읽기 전용으로 되기 전에 수행한 백업에서는 복원되지 않습니다. 읽기 전용 테이블스페이스를 읽기 전용이되기 전에 수행한 백업으로부터 복원하면 매체 복원를 완료해야 해당 테이블스페이스를 액세스할 수 있습니다.

데이터베이스 복구에 사용되는 구조

오라클 데이터베이스의 여러 구조는 발생할 수 있는 장애로부터 데이터를 보호합니다. 이 단원에서는 각각의 구조와 데이터베이스 복구에서 이러한 구조의 역할에 대해소개합니다.

데이터베이스 백업

데이터베이스 백업은 오라클 데이터베이스를 구성하는 물리적 파일(모든 데이터 파일및 제어 파일)의 백업으로 이루어집니다. 매체 장애로부터 매체 복구를 시작하기 위해O ra c l e은 파일 백업을 사용하여 손상된 데이터 파일이나 제어 파일을 복구합니다. 손상되었을 수 있는 현재의 데이터 파일, 테이블스페이스 또는 데이터베이스 복사본을백업 복사본으로 바꾸는 작업을 데이터베이스의 해당 부분 복원이라고 합니다.

3 2 - 6 Oracle8i 개념 설명서, 볼륨 2

데이터베이스 복구에 사용되는 구조

Page 434: Oracle8 - Tistory

O ra c l e은 데이터베이스 백업을 수행할 때 다음과 같은 여러 가지 옵션을 제공합니다.

■ R e c o v e ry Manager

■ 운영 체제 유틸리티

■ Export 유틸리티

■ Enterprise Backup 유틸리티

추가 정보: O racle8i Backup and Recovery Guide를참조하십시오.

리두 로그

리두 로그는 모든 오라클 데이터베이스에 있으며 오라클 데이터베이스에서 수행한 모든 변경 사항을 기록합니다. 데이터베이스 리두 로그는 데이터베이스의 데이터를 실제로 저장하는 데이터 파일과는 분리된 2개 이상의 리두 로그 파일로 구성됩니다.O ra c l e은 인스턴스 또는 매체 장애로부터 데이터베이스를 복구하는 과정의 일부로 데이터베이스 리두 로그의 적합한 변경 사항을 데이터 파일에 적용하여 데이터베이스의데이터를 장애가 발생한 인스턴스로 갱신합니다.

데이터베이스의 리두 로그는 온라인 리두 로그와 아카이브된 리두 로그, 두 부분으로구성됩니다.

온라인 리두 로그

모든 오라클 데이터베이스는 연관된 온라인 리두 로그를 가집니다. Oracle 백그라운드 프로세스 L GW R은 온라인 리두 로그를 사용하여 연관된 인스턴스를 통해 변경된모든 내용을 즉시 기록합니다. 온라인 리두 로그는 계속되는 데이터베이스 변경 사항을 기록하기 위해 순환적인 방법으로 다시 사용되는 두 개 이상의 미리 할당된 파일로 구성됩니다.

아카이브된 (오프라인) 리두 로그

선택적으로 오라클 데이터베이스가 온라인 리두 로그 파일을 아카이브하도록 오라클데이터베이스를 구성할 수 있습니다. 아카이브된 온라인 리두 로그 파일은 고유하게식별되며 아카이브된 리두 로그를 구성합니다. 채워진 온라인 리두 로그 파일을 아카이브하여 미리 할당된 온라인 리두 로그 파일을 최근의 데이터베이스 변경 사항을 저장하는데 계속하여 다시 사용하면서 기존의 리두 로그 정보는 이러한 매체 복구 작업을 위해 보존됩니다.

백업으로부터 복원되었거나 클린 데이터베이스를 종료해도 닫히지 않는 데이터 파일은 완전한 최신 데이터 파일이 아닐 수도 있습니다. 이러한 데이터 파일은 아카이브된 또는 온라인 리두 로그에 변경 사항을 적용하여 갱신되어야 합니다. 이러한 프로세스를 복구라고 합니다.

데이터베이스 복구 3 2 - 7

데이터베이스 복구에 사용되는 구조

Page 435: Oracle8 - Tistory

자세한 내용은 32-18 페이지“데이터베이스아카이브 모드”를 참조하십시오.

롤백 세그먼트

롤백 세그먼트는 오라클 데이터베이스 작업에서 여러 기능에 사용됩니다. 일반적으로데이터베이스의 롤백 세그먼트는 진행 중인 트랜잭션(즉, 커밋되지 않은 트랜잭션)에의해 변경된 데이터의 이전 값을 저장합니다.

무엇보다도 롤백 세그먼트 정보는 데이터베이스 복구 중에 리두 로그로부터 데이터파일에 적용된“커밋되지 않은”모든 변경 사항을“실행 취소”하는데 사용됩니다. 따라서 데이터베이스를 복구해야 할 경우 데이터는 데이터 파일에서 커밋되지 않은 모든 데이터를 제거하기 위해 롤백 세그먼트를 사용한 후에는 일관된 상태가 됩니다.

제어 파일

일반적으로 데이터베이스의 제어 파일은 데이터베이스의 물리적 구조 상태를 저장합니다. 제어 파일에 있는 특정 상태 정보(예를 들어, 현재 온라인 리두 로그 파일, 데이터 파일 이름 등)는 인스턴스 또는 매체 복구 중에 필요합니다.

자세한 내용은 32-21 페이지“제어파일”을 참조하십시오.

롤포워드와 롤백

S GA의 버퍼 캐시에 있는 데이터베이스 버퍼는 필요할 때마다 L RU(Least Rec-ently Used) 알고리즘을 사용하여 디스크에 기록됩니다. DBWn 프로세스가 데이터베이스 버퍼를 데이터 파일에 기록하는데 이 알고리즘을 사용하므로 데이터 파일은커밋되지 않은 트랜잭션이 수정한 데이터 블록이나 커밋된 트랜잭션에 의해 변경 사항이 누락된 데이터 블록을 포함할 수도 있습니다.

인스턴스 실패가 발생하면 다음과 같은 두 가지의 잠재적인 문제점이 발생할 수 있습니다.

■ 트랜잭션에 의해 수정된 데이터 블록이 커밋될 때 데이터 파일에는 기록되지 않고리두 로그에만 나타날 수 있습니다. 따라서 이러한 변경 사항이 포함된 리두 로그는 복구 중에 데이터베이스에 다시 적용되어야 합니다.

■ 롤포워드 단계 이후 데이터 파일은 장애가 발생했을 때 커밋되지 않았던 변경 사항을 포함할 수 있습니다. 커밋되지 않은 변경 사항은 트랜잭션의 일관성을 보장하기 위해 롤백되어야 합니다. 변경 사항은 장애 발생 전에 데이터 파일에 저장되거나 롤포워드 단계 중에 삽입됩니다.

3 2 - 8 Oracle8i 개념 설명서, 볼륨 2

롤포워드와 롤백

Page 436: Oracle8 - Tistory

이러한 딜레마를 해결하기 위해 O ra c l e은 일반적으로 리두 로그로 롤포워드(캐시 복구)하거나 롤백 세그먼트로 롤백(트랜잭션 복구)하는 등 두 가지 개별 단계를 사용하여 시스템 장애를 성공적으로 복구합니다.

리두 로그와 롤포워드

리두 로그는 데이터, 인덱스 및 롤백 세그먼트를 포함한 모든 데이터베이스 버퍼에대해 커밋되었거나 커밋되지 않은 모든 변경 사항을 기록한 운영 체제 파일 집합입니다. 각 리두 입력 항목은 데이터베이스에 단일 요소 변경 사항을 설명하는 변경 벡터의 그룹입니다. 리두 로그는 데이터 파일에 기록되지 않은 메모리의 데이터베이스 버퍼에 적용된 모든 변경 사항을 보호합니다.

인스턴스 실패나 디스크 고장을 복구하는 첫 번째 단계는 롤포워드하거나 리두 로그에 기록된 모든 변경 사항을 데이터 파일에 다시 적용하는 것입니다. 롤백 데이터 역시 리두 로그에 기록되므로 롤포워드도 해당 롤백 세그먼트를 재생성합니다. 이것을캐시 복구라고 합니다.

롤포워드는 데이터베이스를 제 시간에 불러오기 위해 필요한 만큼의 리두 로그 파일에 대해 수행됩니다. 롤포워드는 보통 온라인 리두 로그 파일을 포함하며 아카이브된리두 로그 파일을 포함하기도 합니다.

롤포워드가 끝난 후 데이터 블록은 커밋된 모든 변경 사항을 포함합니다. 또한 데이터 블록은 장애 발생 전에 데이터 파일에 저장되었거나 리두 로그에 기록되고 롤포워드 중에 삽입된 커밋되지 않은 변경 사항도 포함합니다.

롤백 세그먼트와 롤백

롤백 세그먼트는 특정 데이터베이스 작업 중에 실행 취소되어야 할 데이터베이스 작업을 기록합니다. 데이터베이스를 복구하는 동안 롤백 세그먼트는 이전에 롤포워드단계에서 적용된 커밋되지 않은 트랜잭션의 결과를 실행 취소합니다.

롤포워드가 끝난 후 커밋되지 않은 모든 변경 사항은 실행 취소되어야 합니다. 리두로그 파일이 데이터베이스에 적용된 모든 변경 사항을 다시 적용하면 해당 롤백 세그먼트가 사용됩니다. 롤백 세그먼트는 장애 발생 전에 데이터 파일에 저장되었거나 롤포워드 중에 데이터베이스에 적용된 커밋되지 않은 트랜잭션을 식별하여 실행 취소시키는데 사용됩니다. 이러한 프로세스를 롤백 복구 또는 트랜잭션 복구라고 합니다.

그림 3 2 - 1은 모든 유형의 시스템 장애를 복구하는데 필요한 두 가지 단계인 롤포워드와 롤백을 나타냅니다.

데이터베이스 복구 3 2 - 9

롤포워드와 롤백

Page 437: Oracle8 - Tistory

그림 32-1 기본 복구 단계: 롤포워드와 롤백

O ra c l e은 필요에 따라 여러 트랜잭션을 동시에 롤백할 수 있습니다. 장애가 발생했을때 사용 중인 시스템 전체의 모든 트랜잭션은 D E A D로 표시됩니다. 사용 불능 트랜잭션을 롤백하기 위해 S M O N을 기다리지 않고 새로운 트랜잭션이 블로킹 트랜잭션을 자체적으로 복구하여 필요한 행 잠금을 얻도록 할 수 있습니다.

복구 성능 향상

데이터베이스 장애가 발생하면 대부분의 경우 신속하게 복구하는 것이 가장 중요합니다. Ora c l e은 가능한 한 빠르게 복구할 수 있도록 다음과 같은 여러 가지 방법을 제공합니다.

■ 병렬 복구

■ 빠른 시작 복구

■ 투명한 응용 프로그램 복구

병렬 복구 수행

복구는 여러 동시 프로세스가 생성한 변경 사항을 다시 적용합니다. 따라서 인스턴스또는 매체 복구는 초기에 데이터베이스에 대한 변경 사항을 생성하는데 걸리는 시간보다 더 많은 시간이 걸립니다. 직렬 복구에서는 한 프로세스가 리두 로그 파일의 변

3 2 - 1 0 Oracle8i 개념 설명서, 볼륨 2

복구 성능 향상

데이터베이스

리두

리두 로그

데이터베이스 데이터베이스리두 로그적용

롤백 세그먼트적용

복구해야 하는데이터베이스백업

커밋되거나 커밋되지 않은 트랜잭션이 있는 데이터베이스

방금 커밋된 트랜잭션이 있는데이터베이스

커밋됨

커밋되지않음

Page 438: Oracle8 - Tistory

경 사항을 순차적으로 적용합니다. 병렬 복구를 사용하면 여러 프로세스가 리두 로그파일의 변경 사항을 동시에 적용할 수 있습니다.

주의 사항: O ra c l e 8 i는 R e c o v e ry Manager와 함께 제한된 병렬화를제공합니다. Oracle8i Enterprise Edition은제한되지 않은 병렬화를허용합니다. Ora c l e 8 i와 O racle8i Enterprise Edition에서사용 가능한 기능에 대한 자세한 내용은 O racle8i 입문서를 참조하십시오.

다음의 세 가지 방법을 사용하여 병렬 복구를 수행할 수 있습니다.

■ 여러 O racle Enterprise Manager 세션을 생성하고 각 세션에서 서로 다른 데이터 파일 집합에 R E C OVER DATAFILE 명령어를 실행하여 병렬 복구를 수동으로 실행할 수 있습니다. 그러나 이 방법을 사용하면 각 O racle EnterpriseManager 세션이 전체 리두 로그 파일을 읽습니다.

■ R e c o v e ry Manager의 R E S T O R E와 R E C OVER 명령어를 사용하여 모든 복구단계를 자동으로 병렬화할 수 있습니다. Ora c l e은 한 프로세스를 사용하여 로그파일을 순차적으로 읽고 로그 파일의 변경 사항을 데이터 파일에 적용하는 여러복구 프로세스에 리두 정보를 디스패치합니다. 복구 프로세스는 O ra c l e에 의해 자동으로 시작되므로 복구를 실행하기 위해 하나 이상의 세션을 사용할 필요가 없습니다. 또한 자동 병렬 복구로 설정하는 여러 개의 초기화 매개변수가 있습니다.자세한 내용은 O racle8i Pa rallel Server Setup and Configuration Guide를참조하십시오.

■ SQL*Plus RECOVER 명령어를 사용하여 병렬 복구를 실행할 수 있습니다. 자세한 내용은 SQL*Plus 사용 설명서 및 참조서를 참조하십시오.

■ SQL 명령어 A LTER DATABASE RECOV E R를 사용하여 병렬 복구를 실행할수 있으나 권장하지는 않습니다.

병렬 복구로 이익을 얻을 수 있는 상황

일반적으로 병렬 복구는 여러 다른 디스크 상의 여러 데이터 파일을 동시에 복구하려할 경우 복구 시간을 줄이는데 가장 효과적입니다. 여러 디스크 드라이브 상의 여러데이터 파일의 고장 복구(인스턴스 실패 후 복구)와 매체 복구는 병렬 복구의 좋은 예입니다.

병렬 복구를 통해 얻을 수 있는 성능 향상은 운영 체제가 비동기 입출력을 지원하는지의 여부에 따라 다릅니다. 비동기 입출력이 지원되지 않으면 병렬 복구는 복구 시간을 획기적으로 줄일 수 있습니다. 비동기 입출력이 지원되더라도 병렬 복구를 실행하면 복구 시간이 약간 줄어듭니다.

데이터베이스 복구 3 2 - 1 1

복구 성능 향상

Page 439: Oracle8 - Tistory

추가 정보: 시스템에서 비동기 입출력을 지원하는지의 여부를 파악하려면 사용자 운영 체제별 설명서를 참조하십시오.

복구 프로세스

일반적인 병렬 복구 상황에서 하나의 프로세스가 리두 입력 항목을 리두 로그 파일에서 읽고 디스패치하는 역할을 모두 책임집니다. 이것이 복구 세션을 시작하는 전용서버 프로세스입니다. 리두 로그 파일을 읽어 들이는 서버 프로세스는 리두 입력 항목의 변경 사항을 데이터 파일에 적용하기 위해 둘 이상의 복구 프로세스를 사용합니다.

그림 3 2 - 2는 일반적인 병렬 복구 세션을 나타냅니다.

그림 32-2 일반적인 병렬 복구 세션

3 2 - 1 2 Oracle8i 개념 설명서, 볼륨 2

복구 성능 향상

전용 서버프로세스

복구 프로세스

복구 프로세스

데이터 파일1

데이터파일2

데이터파일3

데이터파일4

리두 파일1

리두 파일2

Page 440: Oracle8 - Tistory

대부분의 경우 복구해야 하는 데이터 파일이 있는 디스크 드라이브 당 하나의 복구세션과 하나 또는 두 개의 복구 프로세스가 있으면 충분합니다. 복구는 C P U를 집중적으로 사용하는 작업이 아니라 주로 디스크를 사용하는 작업이므로 필요한 복구 프로세스의 수는 전적으로 복구에 사용되는 디스크 드라이브 수에 좌우됩니다. 일반적으로 병렬 복구가 직렬 복구보다 향상된 성능을 발휘하려면 최소한 8개의 복구 프로세스가 필요합니다.

빠른 시작 복구

빠른 시작 복구는 롤포워드에 필요한 시간을 줄이고 복구를 제한되고 예측 가능하게하는 구조입니다. 또한 시스템 장애로 중지된 트랜잭션 복구로부터 롤백 시간을 제거합니다. 빠른 시작 복구는 다음을 포함합니다.

■ 빠른 시작 체크포인트

■ 요구 시 빠른 시작 롤백

■ 빠른 시작 병렬 롤백

빠른 시작 체크포인트

빠른 시작 체크포인트는 고장 복구 또는 인스턴스 복구가 시작되어야 하는 리두 스레드(로그)에 위치를 기록합니다. 이 위치는 버퍼 캐시에 있는 가장 오래된 더티 버퍼에의해 결정됩니다. 각 D BWn 프로세스는 디스크에 버퍼를 계속 기록하여 정상적으로처리하는 동안 최소한의 오버헤드 또는 오버헤드 없이 체크포인트 위치로 나아갑니다. 빠른 시작 체크포인트는 고장 및 인스턴스 복구 성능을 향상시키지만 매체 복구성능은 향상시키지 않습니다.

고장 복구 또는 인스턴스 복구 기간에 대한 엄격한 제한 사항이 있는 상황에 대해 복구 성능에 영향을 줄 수 있습니다. 고장 복구 또는 인스턴스 복구에 필요한 시간은 데이터 블록 수에 비례합니다. 롤포워드 중에 처리되어야 하는 데이터 블록 수에 대한한계 또는 바운드를 지정할 수 있습니다. Oracle 서버는 최소 수의 쓰기를 실행하면서 체크포인트 작성률을 자동으로 조정하여 지정된 롤포워드 바운드로 맞춥니다.

동적 초기화 매개변수 FA S T _ S TA RT _ I O _ TA RG E T을 설정하여 고장 복구 또는 인스턴스 복구를 위해 읽어 들여야 하는 블록 수를 제한할 수 있습니다.이 매개변수의 값이 더 작아지면 많은 버퍼가 작성되어야 하므로 정상적인 처리 중에 더 높은 오버헤드를 부과합니다. 반대로 이 매개변수의 값이 작으면 작을수록 복구되어야 하는 블록수가 더 적어지므로 복구 성능은 더욱 더 좋아집니다. 또한 동적 초기화 매개변수LOG_ CHECKPOINT_INTERVAL 및 L O G _ C H E C K P O I N T _ T I M E O U T은 빠른시작 체크포인트에 영향을 줍니다.

데이터베이스 복구 3 2 - 1 3

복구 성능 향상

Page 441: Oracle8 - Tistory

추가 정보: FA S T _ S TA RT _ I O _ TA RGET 값을 설정하는 방법은 O ra -cle8i Tuning을, 체크포인트에 대한 자세한 설명은 O racle8i Back-up and Recovery Guide를참조하십시오.

요구 시 빠른 시작 롤백

사용 불능 트랜잭션이 다른 트랜잭션이 필요로 하는 행에 행 잠금을 보유하고 있는경우 요구 시 빠른 시작 롤백은 나머지 사용 불능 트랜잭션을 백그라운드로 복구되도록 남겨둔 채 고려 중인 데이터 블록만을 즉시 복구합니다. 이것은 대량의 사용 불능트랜잭션으로 잠겨진 데이터를 액세스하는 사용자를 위해 데이터베이스의 가용성을향상시킵니다. 빠른 시작 롤백이 사용 가능하지 않은 경우 사용자는 행 잠금을 얻기전에 사용 불능 트랜잭션 전체가 복구될 때까지 대기해야 합니다.

빠른 시작 병렬 롤백

빠른 시작 병렬 롤백을 통해 트랜잭션 집합을 서버 프로세스 한 그룹을 사용하여 병렬로 복구할 수 있습니다. 이 기술은 S M O N이 병렬로 복구를 수행하는 작업량이 순차적으로 수행하는 시간보다 적다고 판단한 경우 사용됩니다.

투명한 응용 프로그램 복구에 의한 장애 마스크

빠르게 복구하면 사용자가 사용할 수 없는 시간 데이터를 최소화합니다. 그러나 사용자 세션이 실패할 때 생기는 중단 원인을 해결하지 않습니다. 사용자는 데이터베이스로 접속을 다시 설정해야 하며 진행 중인 작업 내용을 잃을 수 있습니다. Ora c l e 8 iT ra n s p a rent Application Fa i l o v e r ( TA F )는 다른 응용 프로그램의 상태를 보관하고 장애가 발생했을 때 진행 중이었던 질의를 재개하면서 사용자에게 많은 장애를 마스크할 수 있습니다. 개발자는 TA F를 사용하고 트랜잭션에 영향을 주는 장애를 포함하여 모든 장애가 사용자에게 투명한 응용 프로그램을 작성하여 이러한 기능을 더 확장할 수 있습니다.

추가 정보: 투명한 응용 프로그램 복구에 대한 자세한 내용은 O ra c l e 8 iT u n i n g을 참조하십시오.

3 2 - 1 4 Oracle8i 개념 설명서, 볼륨 2

복구 성능 향상

Page 442: Oracle8 - Tistory

R e c o ve ry Manager

R e c o v e ry Manager는 데이터베이스 파일(데이터 파일, 제어 파일 및 아카이브된 리두 로그 파일)의 백업을 생성하고 백업으로부터 파일을 복원하거나 복구하는 프로세스를 관리하는 유틸리티입니다.

추가 정보: R e c o v e ry Manager에 대한 자세한 내용은 O racle8i Ba-ckup and Recovery Guide를참조하십시오.

복구 카탈로그

R e c o v e ry Manager는 복구 카탈로그라는 저장소를 유지 관리하며 백업 파일과 아카이브된 로그 파일에 대한 정보를 가지고 있습니다. Recovery Manager는복구 카탈로그를 사용하여 복원 작업과 매체 복구를 자동화합니다.

복구 카탈로그는 다음 내용을 포함합니다.

■ 데이터 파일과 아카이브 로그 백업에 대한 정보

■ 데이터 파일 복사본에 대한 정보

■ 아카이브된 리두 로그와 복사본에 대한 정보

■ 대상 데이터베이스의 물리적인 스키마에 대한 정보

■ 내장 스크립트라는 명명된 일련의 명령어

복구 카탈로그는 R e c o v e ry Manager만이 유지 관리합니다. 백업된 데이터베이스의데이터베이스 서버는 복구 카탈로그에 직접 액세스할 수 없습니다. RecoveryM a n a g e r는 백업 데이터 파일 집합, 아카이브된 리두 로그, 백업 제어 파일 및 데이터 파일 복사본에 대한 정보를 장기간 보유하기 위해 복구 카탈로그로 전달합니다.

복원하는 동안 R e c o v e ry Manager는 복구 카탈로그에서 해당 정보를 추출하여 데이터베이스 서버에 전달합니다. 서버는 복원을 위해 지정한 입력 파일에 대한 여러 가지 무결성 검사를 실행합니다. Recovery Manager의 부정확한 작동으로 인해 데이터베이스가 손상되지는 않습니다.

복구 카탈로그 데이터베이스

복구 카탈로그는 오라클 데이터베이스에 저장됩니다. Recovery Manager가 이러한데이터베이스를 사용할 수 있도록 하는 것은 데이터베이스 관리자의 책임입니다. 복구 카탈로그의 백업을 실행하는 것도 데이터베이스 관리자의 책임입니다. 복구 카탈로그가 오라클 데이터베이스에 저장되어 있으므로 R e c o v e ry Manager를 사용하여복구 카탈로그를 백업할 수 있습니다.

데이터베이스 복구 3 2 - 1 5

R ecovery Manager

Page 443: Oracle8 - Tistory

복구 카탈로그가 손상되거나 백업을 사용할 수 없는 경우 현재 제어 파일이나 제어파일 백업으로부터 부분적으로 복구 카탈로그를 다시 작성할 수 있습니다.

복구 카탈로그가 없을 경우의 작업

복구 카탈로그를 꼭 사용할 필요는 없으나 사용하는 것이 좋습니다. 복구 카탈로그에있는 대부분의 정보는 제어 파일로부터 사용할 수도 있으므로 R e c o v e ry Manager는제어 파일만을 사용하는 운영 모드를 지원합니다. 이 운영 모드는 복구 카탈로그 기능 제공을 위해 다른 데이터베이스를 설치하고 관리하기가 어려운 소규모 데이터베이스에 적당합니다.

일부R e c o v e ry Manager 기능은복구카탈로그를사용하는 경우에만 사용할 수 있습니다.

추가 정보: 복구 카탈로그 생성과 복구 카탈로그 사용에 필요한 R e -c o v e ry Manager 기능에 대한 내용은 O racle8i Backup and Reco-v e ry Guide를 참조하십시오.

병렬화

R e c o v e ry Manager는 자체의 작업을 병렬화하여 다중 로그온 세션을 설정하고 차단되지 않은 U P I를 사용하여 병렬로 여러 작업을 진행할 수 있습니다. 동시 작업은 데이터 파일의 중복되지 않는 집합을 대상으로 합니다.

주의 사항: O racle8i Enterprise Edition은 제한되지 않은 병렬화를허용합니다. Ora c l e 8 i는 한 번에 하나의 R e c o v e ry Manager 채널을할당할 수 있어 병렬화가 하나의 스트림으로 제한됩니다. Ora c l e 8 i와O racle8i Enterprise Edition에서 사용할 수 있는 기능에 대한 자세한 내용은 O racle8i 입문서를 참조하십시오.

backup, copy 및 re s t o re 명령어의 병렬화는 R e c o v e ry Manager에 의해 내부적으로 처리됩니다. 사용자는 다음 내용만 지정하면 됩니다.

■ 하나 이상의 순차적 입출력 장치 목록

■ 백업, 복사 또는 복구될 객체

R e c o v e ry Manager는 명령어를 순차적으로 실행합니다. 즉, 이전 명령어를 완료한후 다음 명령어를 시작합니다. 병렬성은 단일 명령어의 문맥 내에서만 추출됩니다.따라서 1 0개의 데이터 파일 복사본이 필요한 경우 1 0개의 독립적인 c o py 명령어 보다는 1 0개의 모든 복사본을 지정하는 하나의 c o py 명령어를 실행하는 것이 바람직합니다.

3 2 - 1 6 Oracle8i 개념 설명서, 볼륨 2

R ecovery Manager

Page 444: Oracle8 - Tistory

보고서 생성

re p o r t와 l i s t 명령어는 백업과 이미지 복사본에 대한 정보를 제공합니다. 이러한명령어가 생성하는 결과는 메시지 로그 파일에 기록됩니다.

re p o r t 명령어는 다음과 같은 질문에 대답할 수 있는 보고서를 생성합니다.

■ 백업해야 할 파일은?

■ 오랫동안 백업이 없는 파일은?

■ 삭제할 수 있는 백업 파일은?

report need backup과 report unre c ove ra b l e 명령어를 사용하여 복구 실행에 필요한 백업을 사용할 수 있는지의 여부와 적당한 기간 내에 복구할 수 있는지를 확인할 수 있습니다. report deletable 명령어는 중복되어 있거나 re c ove r명령어에 의해 사용되지 않으므로 삭제해도 되는 백업 집합과 데이터 파일 복사본을나열합니다.

데이터 파일은 로그되지 않은 작업이 데이터 파일에 있는 스키마 객체에 대해 실행된경우 복구가 불가능한 것으로 간주됩니다.

(백업이 없는 데이터 파일은 복구가 불가능한 것으로 간주되지 않습니다. 이러한 데이터 파일은 파일이 생성된 이후에 시작된 로그가 아직 없는 경우 c reate datafile명령어를 사용하여 복구할 수 있습니다. )

l i s t 명령어는 복구 카탈로그를 질의하거나 내용 목록을 생성할 수 있습니다. 이 명령어를 사용하여 사용할 수 있는 백업과 복사본을 알아낼 수 있습니다.

■ 지정된 데이터 파일 목록의 백업이나 복사본

■ 지정된 테이블스페이스의 멤버인 데이터 파일의 백업이나 복사본

■ 지정된 이름을 가진 아카이브 로그 또는 지정된 범위 내에 있는 아카이브 로그의백업이나 복사본

■ 지정된 데이터베이스 구체화

데이터베이스 복구 3 2 - 1 7

R ecovery Manager

Page 445: Oracle8 - Tistory

데이터베이스 아카이브 모드

데이터베이스는 N OA RCHIVELOG 모드(매체복구 비활성화) 또는 A RC H I V E L O G모드(매체 복구 활성화)라는 두 개의 서로 다른 모드에서 작동합니다.

N O A R C H I V E LOG 모드 (매체 복구 비활성화)

데이터베이스를 N OA RCHIVELOG 모드에서 사용할 경우 온라인 리두 로그의 아카이브 기능은 비활성화됩니다. 데이터베이스 제어 파일에 있는 정보는 채워진 그룹이아카이브될 필요가 없음을 나타냅니다. 따라서 채워진 그룹이 비활성화되자 마자 L G -WR 프로세스가 그룹을 재사용할 수 있습니다.

N OA RCHIVELOG 모드에서는 데이터베이스가 인스턴스 장애로부터 보호될 뿐 디스크나 매체 장애로부터는 보호되지 않습니다. 온라인 리두 로그 그룹에 저장된 데이터베이스 변경 사항 중 최근에 실행된 변경 사항만을 고장 복구 또는 인스턴스 복구에 사용할 수 있습니다. 이것은 데이터베이스의 변경 사항이 데이터 파일에 안전하게기록될 때까지 O ra c l e은 필요한 온라인 리두 로그를 겹쳐 쓰지 않으므로 고장 복구와인스턴스 복구의 요구를 만족시키기에 충분합니다. 그러나 매체 복구 작업은 가능하지 않습니다.

A R C H I V E LOG 모드 (매체 복구 활성화)

오라클 데이터베이스를 A RCHIVELOG 모드에서 사용할 경우 온라인 리두 로그의아카이브 기능은 활성화됩니다. 데이터베이스 제어 파일에 있는 정보는 그룹이 아카이브될 때까지 L GW R이 채워진 온라인 리두 로그 파일 그룹을 재사용할 수 없음을나타냅니다.

그림 3 2 - 3은 A RCHIVELOG 모드에서 데이터베이스 온라인 리두 로그 파일이 사용되는 방법과 채워진 그룹(예를 들어, 이 그림에서 A RC 0 )을 아카이브하는 프로세스에 의해 아카이브된 리두 로그가 생성되는 방법을 나타냅니다.

A RCHIVELOG 모드에서는 데이터베이스에 대한 모든 변경 사항이 아카이브된 리두로그에 영구적으로 저장되므로 인스턴스 장애뿐 아니라 디스크 고장을 완전히 복구할수 있습니다.

3 2 - 1 8 Oracle8i 개념 설명서, 볼륨 2

데이터베이스 아카이브 모드

Page 446: Oracle8 - Tistory

그림 32-3 ARCHIVELOG 모드에서온라인 리두 로그 파일 사용

자동 아카이브와 A R C n (아카이버) 백그라운드 프로세스

온라인 리두 로그 파일의 그룹이 비활성화되면 자동으로 아카이브하는 추가 백그라운드 프로세스인 아카이버( A RC 0 )를 갖도록 인스턴스를 구성할 수 있습니다. 따라서자동 아카이브를 사용하면 데이터베이스 관리자는 채워진 그룹을 수동으로 아카이브하고 기록을 보존할 필요가 없습니다. 이러한 편의 때문에 A RCHIVELOG 모드에서실행되는 대다수의 데이터베이스 시스템에서 자동 아카이브를 선택합니다. 데이터의대량 로드와 같이 과중한 작업 로드를 대비해 초기화 매개변수 L O G _ A RC H I V E _M A X _ P RO C E S S E S를 설정하여 여러 아카이버 프로세스( A RC 9까지)를 구성할 수있습니다.

초기화 매개변수 L O G _ A RC H I V E _ S TA RT를 설정하여 인스턴스를 시작할 때 자동 아카이브를 요청하면 O ra c l e은 인스턴스를 시작할 때 L O G _ A RC H I V E _ M A X _ P RO C E -

데이터베이스 복구 3 2 - 1 9

데이터베이스 아카이브 모드

LGWR LGWR LGWR LGWR

로그 0 0 0 1 로그 0002 로그 0003 로그 0 0 0 4

시간

0001

0001

0002

0001

0002

0 0 0 3

ARC0 ARC0 ARC0

아카이브된리두 로그파일

온라인리두 로그파일

Page 447: Oracle8 - Tistory

S S E S에 의해 지정된 수의 A RCn 프로세스를 시작합니다. 그렇지 않으면 A RCn 프로세스는 인스턴스가 시작할 때 시작되지 않습니다.

그러나 데이터베이스 관리자는 언제라도 자동 아카이브를 대화식으로 시작하거나 중단할 수 있습니다. 자동 아카이브가 인스턴스를 시작할 때 시작되도록 지정되어 있지않고 관리자가 자동 아카이브 기능을 시작하는 경우 O ra c l e은 A RCn 백그라운드 프로세스를 생성합니다. 이후 자동 아카이브 기능이 일시적으로 해제되거나 다시 설정되는 경우에도, ALTER SYSTEM 명령어로 L O G _ A RC H I V E _ M A X _ P RO C E S -S E S를 설정하여 A RCn 프로세스의 수가 동적으로 변경될 수 있는 경우에도 A RC n은 인스턴스가 지속되는 동안 남아 있습니다.

A RC n은 가장 낮은 시퀀스 번호에서 시작하여 그룹을 순서대로 아카이브합니다.A RC n은 그룹이 비활성화되는 대로 채워진 그룹을 자동으로 아카이브합니다. ARC n프로세스는 모든 자동 아카이브의 레코드를 A RCn 추적 파일에 기록합니다. 각 입력항목은 아카이브가 시작된 시간과 중단된 시간을 나타냅니다.

A RC n이 로그 그룹을 아카이브하려는 중에 오류가 발생한 경우 (대상이 잘못되었거나 꽉 찼기 때문에) ARC n은 그룹을 계속 아카이브하려 합니다. 오류 내용은 A RC n추적 파일과 A L E RT 파일에 기록됩니다. 문제가 해결되지 않으면 실제로 모든 온라인 리두 로그 그룹은 가득 채워지지만 아카이브되지 않아 L GW R이 사용할 수 있는그룹이 없으므로 시스템이 중지됩니다. 따라서 문제가 발생하면 A RC n이 아카이브를계속 실행할 수 있도록 아카이브 대상을 변경하여 문제를 해결하거나 문제가 해결될때까지 수동으로 그룹을 아카이브해야 합니다.

수동 아카이브

데이터베이스가 A RCHIVELOG 모드에서 작동하는 경우 데이터베이스 관리자는 자동 아카이브 기능의 활성화 여부에 관계없이 필요에 따라 비활성화된 온라인 리두 로그 파일의 채워진 그룹을 수동으로 아카이브할 수 있습니다. 자동 아카이브 기능이비활성화된 경우에는 데이터베이스 관리자가 채워진 그룹을 모두 수동으로 아카이브해야 합니다.

대부분의 시스템에서는 관리자가 그룹이 비활성화되어 아카이브할 수 있는지 지켜볼필요가 없으므로 자동 아카이브를 선택합니다. 또한 자동 아카이브 기능이 비활성화된 상태에서 수동 아카이브가 충분히 빠르게 실행되지 않으면 L GW R이 비활성화된그룹을 다시 사용할 수 있을 때까지 기다릴 때마다 데이터베이스 작업이 일시적으로중단될 수도 있습니다.

데이터베이스 관리자가 다음과 같은 작업을 실행할 수 있도록 수동 아카이브 옵션이제공됩니다.

■ 문제점(예를 들어, 아카이브된 리두 로그 대상으로 지정된 오프라인 저장 영역 장치에 장애가 있거나 가득 채워진 경우)으로 인해 자동 아카이브가 중지되었을 때그룹을 아카이브할 수 있습니다.

3 2 - 2 0 Oracle8i 개념 설명서, 볼륨 2

데이터베이스 아카이브 모드

Page 448: Oracle8 - Tistory

■ 표준이 아닌 방식(예를 들어, 한 그룹은 오프라인 저장 영역 장치에 아카이브하고다음 그룹은 다른 오프라인 저장 영역 장치에 아카이브하는 방식 등)으로 그룹을아카이브할 수 있습니다.

■ 원래 아카이브된 버전이 손실되었거나 손상된 경우 그룹을 다시 아카이브할 수 있습니다.

그룹을 수동으로 아카이브하면 그룹을 아카이브하는 명령문을 발생시키는 사용자 프로세스는 실제로 그룹을 아카이브합니다. ARCn 백그라운드프로세스가 연관된 인스턴스에 있어도 온라인 리두 로그 파일의 그룹을 아카이브하는 것은 사용자 프로세스입니다.

제어 파일

데이터베이스 제어 파일은 데이터베이스를 성공적으로 시작하고 작동시키는데 필요한소규모 이진 파일입니다. Ora c l e은 데이터베이스를 사용하는 동안 제어 파일을 계속갱신하여 데이터베이스가 열릴 때마다 기록할 수 있도록 합니다. 제어 파일을 액세스할 수 없게 되면 데이터베이스는 제대로 작동할 수 없습니다.

각 제어 파일은 하나의 오라클 데이터베이스에만 연관됩니다.

제어 파일의 내용

제어 파일은 인스턴스가 시작할 때와 정상적으로 작동하는 동안 데이터베이스를 액세스하는데 필요한 관련 데이터베이스에 대한 정보를 포함합니다. 제어 파일 정보는O ra c l e에 의해서만 수정될 수 있으며 데이터베이스 관리자나 일반 사용자는 데이터베이스 제어 파일을 편집할 수 없습니다.

제어 파일은 다음과 같은 정보를 포함합니다.

■ 데이터베이스 이름

■ 데이터베이스를 생성할 때의 시간 기록

■ 연관된 데이터 파일과 온라인 리두 로그 파일의 이름 및 위치

■ 테이블스페이스 정보

■ 데이터 파일 오프라인 범위

■ 로그 기록

■ 아카이브된 로그 정보

■ 백업 집합 및 백업 부분 정보

■ 백업 데이터 파일 및 리두 로그 정보

데이터베이스 복구 3 2 - 2 1

제어 파일

Page 449: Oracle8 - Tistory

■ 데이터 파일 복사 정보

■ 현재의 로그 시퀀스 번호

■ 체크포인트 정보

데이터베이스 이름과 시간 기록은 데이터베이스를 생성할 때 만들어집니다. 데이터베이스 이름은 초기화 매개변수 D B _ NA M E으로 지정한 이름이나 C R E ATE DATA B -ASE 문에서 사용된 이름에서 얻습니다.

데이터 파일이나 온라인 리두 로그 파일이 추가되거나, 이름을 바꾸거나, 데이터베이스에서 삭제될 때 제어 파일은 이러한 물리적 구조 변경 사항을 반영하도록 갱신됩니다. 이러한 변경 사항은 다음과 같은 이유로 기록됩니다.

■ O ra c l e이 데이터베이스를 시작할 때 열 데이터 파일과 온라인 리두 로그 파일을식별할 수 있습니다.

■ O ra c l e이 데이터베이스를 복구해야 할 경우에 필요하거나 사용할 수 있는 파일을식별할 수 있습니다.

따라서 데이터베이스의 물리적 구조를 변경할 경우 제어 파일을 즉시 백업해야 합니다.

추가 정보: 데이터베이스제어 파일백업에 대한 내용은 O racle8i Back-up and Recovery Guide를참조하십시오.

제어 파일은 체크포인트에 대한 정보도 기록합니다. 3초마다 체크포인트 프로세스( C K P T )는 온라인 리두 로그에서 체크포인트 위치에 대한 정보를 제어 파일에 기록합니다. 이 정보는 데이터베이스를 복구하는 동안 이 지점 이전에 온라인 리두 로그그룹에 기록된 모든 리두 입력 항목이 데이터베이스 복구용으로 필요하지 않다는 것을 O ra c l e에 알리는데 사용됩니다. 모든 리두 입력 항목은 이미 데이터 파일에 기록되어 있습니다.

다중화된 제어 파일

온라인 리두 로그 파일에서와 같이 O ra c l e에서는 동일한 여러 개의 제어 파일을 동일한 데이터베이스에서 동시에 열고 기록할 수 있습니다.

단일 데이터베이스에 대한 여러 개의 제어 파일을 다른 디스크에 저장함으로써 단일시점 실패로부터 제어 파일을 보호합니다. 제어 파일이 있는 단일 디스크가 깨졌을경우 현재 인스턴스는 O ra c l e이 손상된 제어 파일을 액세스할 때 실패하게 됩니다.그러나 다른 디스크에 현재 제어 파일의 다른 복사본이 있으므로 데이터베이스를 복구할 필요없이 쉽게 인스턴스를 다시 시작할 수 있습니다.

3 2 - 2 2 Oracle8i 개념 설명서, 볼륨 2

제어 파일

Page 450: Oracle8 - Tistory

모든 데이터베이스 제어 파일의 복사본이 영구적으로 손실되면 데이터베이스를 보호할 수 없는 심각한 문제가 발생합니다. 데이터베이스의 모든 제어 파일이 작동 중에영구적으로 손실되었다면 (예를 들어, 디스크 고장 등) 인스턴스는 중지되고 매체 복구를 실행해야 합니다. 이 경우 현재 복사본을 사용할 수 없어 제어 파일의 이전 백업을 사용해야 한다면 매체 복구는 쉽게 실행되지 않습니다. 따라서 각 데이터베이스의제어 파일을 다중화하여 서로 다른 물리적 디스크에 저장할 것을 강력히 권장합니다.

데이터베이스 백업

O ra c l e의 이중화된 로그, Ora c l e의 이중화된 제어 파일 및 아카이브 로그를 사용하여 매체 고장으로부터 복구할 수 있으나 복구를 진행하는 동안 데이터의 일부 또는전체가 사용 가능하지 않을 수도 있습니다. 상위 레벨의 복구를 실행하기 위해 O ra -c l e은 적어도 데이터 파일과 제어 파일에 대해 운영 체제 또는 하드웨어 데이터 중복성을 사용할 것을 권장합니다. 이것은 시스템이 완전히 사용 가능한 경우 모든 매체고장이 복구될 수 있음을 보장합니다.

오라클 데이터베이스를 위해 고안한 백업 및 복구 방식에 관계없이 데이터베이스의데이터 파일과 제어 파일에 대한 백업은 파일에 손상을 입힐 수 있는 잠재적인 매체장애에 대한 안전 장치의 한 부분으로 절대적으로 필요합니다. 다음 단원에서는 여러가지 다른 복구 방법에서 유용하게 사용할 수 있는 여러 가지 백업 유형에 대한 개념적인 설명을 제공합니다.

추가 정보: 데이터베이스 백업 실행에 대한 지침 사항과 자세한 내용은O racle8i Backup and Recovery Guide를참조하십시오.

전체 데이터베이스 백업

전체 데이터베이스 백업은 오라클 데이터베이스를 구성하는 모든 데이터 파일과 제어파일을 운영 체제를 통해 백업하는 것입니다. 데이터베이스가 종료되거나 열려 있는동안 전체 데이터베이스 백업을 실행할 수 있습니다. 보통 일시적인 장애나 다른 비정상적인 상황 후에는 전체 백업을 실행하면 안됩니다.

일관성 있는 전체 백업 대 일관성 없는 전체 백업

완전히 종료한 후에는 데이터베이스를 구성하는 모든 파일이 닫히며 현재 시점에 대해 일관성을 유지합니다. 따라서 종료한 후에 실행한 전체 백업은 해당 백업이 실행된 시점으로 복구하는데 사용될 수 있습니다. 데이터베이스가 열려 있는 중에 실행한전체 백업은 주어진 시점에 대해 일관성이 없으므로 데이터베이스가 사용 가능해지기전에 온라인 및 아카이브된 리두 로그 파일과 함께 복구해야 합니다.

데이터베이스 복구 3 2 - 2 3

데이터베이스 백업

Page 451: Oracle8 - Tistory

백업 및 아카이브 모드

전체 백업으로부터 얻은 데이터 파일은 다음 매체 복구 방식 유형에서 유용합니다.

■ 데이터베이스가 N OA RCHIVELOG 모드에서 작동하고 디스크 고장으로 인해 데이터베이스를 구성하는 파일 전체 또는 일부가 손상된 경우 최근에 실행한 전체백업을 사용하여 데이터베이스를 최근에 백업해 놓은 상태로 복원(원래 상태로 복구하는 것이 아니라)할 수 있습니다.

아카이브된 리두 로그로는 현재 시점으로 데이터베이스를 가져오는데 사용할 수없으므로 전체 백업 후에 실행한 모든 데이터베이스 작업을 반복해야 합니다. 특별한 상황에서는 N OA RCHIVELOG 모드에서 디스크 고장이 완전히 복구될 수있지만 이것에 의존하면 안됩니다.

■ 데이터베이스가 A RCHIVELOG 모드에서 작동하고 디스크 고장으로 인해 데이터베이스를 구성하는 파일 전체 또는 일부가 손상된 경우 최근에 실행한 전체 백업에 의해 수집된 데이터 파일이 데이터베이스 복구의 일부로 사용될 수 있습니다.

데이터베이스 복구는 전체 백업으로 필요한 데이터 파일을 복원한 후 아카이브된온라인 리두 로그 파일과 현재 온라인 리두 로그 파일을 현재 시점에 적용하여 계속 실행함으로써 복원된 데이터 파일을 가져올 수 있습니다.

요약하면 데이터베이스가 N OA RCHIVELOG 모드에서 작동하는 경우 일관성 있는전체 데이터베이스 백업은 디스크 고장으로부터 데이터베이스를 부분적으로 보호하는유일한 방법입니다. 데이터베이스가 A RCHIVELOG 모드에서 작동하는 경우 일관성있는 전체 데이터베이스 백업 또는 일관성 없는 전체 데이터베이스 백업은 디스크 고장으로부터 손상된 파일을 데이터베이스 복구의 일부로 복원할 때 사용될 수 있습니다.

부분 데이터베이스 백업

부분 데이터베이스 백업은 데이터베이스가 열려 있거나 종료되는 동안에 실행된 전체백업에는 미치지 못하는 백업입니다. 다음은 부분 데이터베이스 백업의 모든 예를 나타냅니다.

■ 각 테이블스페이스에 대한 모든 데이터 파일 백업

■ 단일 데이터 파일 백업

■ 제어 파일 백업

부분 백업은 A RCHIVELOG 모드에서작동하는 데이터베이스에만 유용합니다. 아카이브된 리두 로그가 있으므로 부분 백업으로 복원된 데이터 파일은 복구 프로시저 중에 데이터베이스의 나머지 부분과 일관성이 있습니다.

3 2 - 2 4 Oracle8i 개념 설명서, 볼륨 2

데이터베이스 백업

Page 452: Oracle8 - Tistory

데이터 파일 백업

부분 백업은 데이터베이스에 있는 데이터 파일의 일부만을 포함합니다. 각각의 데이터 파일이나 특정 데이터 파일 모음은 데이터베이스의 다른 데이터 파일, 온라인 리두 로그 파일 및 제어 파일과는 독립적으로 백업될 수 있습니다. 데이터 파일이 오프라인이거나 온라인인 동안 데이터 파일을 백업합니다.

온라인 데이터 파일 백업을 선택할 것인지 오프라인 데이터 파일 백업을 선택할 것인지의 여부는 데이터의 가용성 요구 사항에 따라 달라집니다. 즉, 온라인 데이터 파일백업은 백업될 데이터가 항상 사용 가능해야 하는 경우에 선택할 수 있는 유일한 방법입니다.

제어 파일 백업

부분 백업의 다른 유형이 제어 파일 백업입니다. 제어 파일이 연관된 데이터베이스의물리적 파일 구조를 추적하므로 데이터베이스 구조가 변경될 때마다 데이터베이스 제어 파일을 백업합니다.

주: R e c o v e ry Manager는 데이터 딕셔너리가 있는 데이터 파일 1을포함하는 모든 백업에서 제어 파일을 자동으로 백업합니다.

다중화된 제어 파일은 단일 제어 파일이 손상되는 경우를 대비한 안전 장치입니다.그러나 디스크 고장으로 데이터 파일이 손상되어 불완전 복구를 실행하거나 특정 시간에 복구하게 되는 경우 현재 제어 파일이 아닌 원하는 데이터베이스 구조에 해당하는 제어 파일 백업을 사용해야 합니다. 따라서 다중화된 제어 파일을 사용해도 데이터베이스 구조가 변경될 때마다 실행되는 제어 파일 백업을 대신할 수는 없습니다.

R e c o v e ry Manager를 사용하여 불완전 복구 또는 적시 복구에 우선하여 제어 파일을 복원하면 R e c o v e ry Manager는 대부분의 적합한 백업 제어 파일을 자동으로 복원합니다.

Export 및 Import 유틸리티

Export 및 Import 유틸리티는 데이터를 오라클 데이터베이스 안으로 이동시키거나밖으로 이동시킬 때 사용합니다. Export는 오라클 데이터베이스의 데이터를 오라클데이터베이스 형식을 가지는 운영 체제 파일로 작성하는 유틸리티입니다. Export 파일은 데이터베이스에서 생성한 스키마 객체에 대한 정보를 저장합니다. Import는Export 파일을 읽어 들여 기존 데이터베이스에 해당하는 정보로 복원하는 유틸리티입니다. Export와 I m p o r t가 오라클 데이터를 이동시키기 위해 설계되었다 해도 오라클 데이터베이스의 데이터를 보호하는 보조적인 방법으로도 사용할 수 있습니다.

데이터베이스 복구 3 2 - 2 5

데이터베이스 백업

Page 453: Oracle8 - Tistory

추가 정보: O racle8i Utilities를참조하십시오.

읽기 전용 테이블스페이스 및 백업

데이터베이스가 열려 있는 동안 읽기 전용 테이블스페이스를 백업할 수 있습니다. 테이블스페이스를 읽기 전용으로 만든 즉시 테이블스페이스를 백업해야 합니다. 테이블스페이스가 읽기 전용으로 되어 있다면 테이블스페이스에 대한 기타 백업을 실행할필요가 없습니다.

읽기 전용 테이블스페이스를 읽고 쓸 수 있는 테이블스페이스로 변경한 후 오프라인이면서 읽고 쓸 수 있는 테이블스페이스를 다시 온라인으로 설정한 후 실행하는 것과같이 테이블스페이스의 정상적인 백업을 재개해야 합니다.

읽기 전용 테이블스페이스의 데이터 파일을 온라인으로 설정하면 파일을 쓸 수 없을뿐만 아니라 파일 헤더를 갱신할 수도 없습니다. 따라서 쓰기 가능한 데이터 파일을다시 온라인으로 설정할 때 필요하듯이 파일 백업을 실행하지 않아도 됩니다.

존재 가능성

O ra c l e은 전원 장애, 하드웨어 장애 또는 시스템을 중단시키는 문제가 발생했을 경우를 대비하여 자동화된 대기 데이터베이스 기능을 제공합니다. 대기 데이터베이스는존재 가능성 및 손상 복구가 매우 중요한 사이트에 사용됩니다. (데이터베이스 복제기능을 사용할 수도 있습니다. 이 기능에 대해서는 3 4장“데이터베이스 복제”를 참조하십시오. )

손상 복구 계획

구체적인 절차를 가지고 신중하게 계획을 세움으로써 시스템 장애나 다른 손상으로부터 신속히 복구할 수 있습니다. 대기 데이터베이스를 구현하거나 단일 데이터베이스시스템을 가지고 있는지에 관계없이 커다란 영향을 주는 장애에 대처하는 방법에 대한 계획이 있어야 합니다.

자동화된 대기 데이터베이스

O ra c l e은 데이터베이스를 손상으로부터 신속히 복구할 수 있는 대기 데이터베이스 시스템을 구현하기 위한 신뢰성 있고 지원되는 처리 방법을 제공합니다. 이 처리 방법을 자동화된 대기 데이터베이스라고 합니다. 최대 네 개의 대기 시스템이 자동 전송과 기본 사이트에서 아카이브된 로그 파일의 적용을 통해 매체 복구의 일정한 상태로유지 관리될 수 있습니다. 기본 시스템 장애가 발생했을 때 대기 시스템 중 하나가 활성화되어 즉시 시스템을 사용할 수 있습니다. Ora c l e은 손상 복구 방법의 신뢰성을

3 2 - 2 6 Oracle8i 개념 설명서, 볼륨 2

존재 가능성

Page 454: Oracle8 - Tistory

향상시키는 대기 시스템 생성 및 유지 관리와 관련된 작업에 대한 명령어와 내부적인검증 절차를 제공합니다.

대기 데이터베이스는 기본 데이터베이스의 아카이브된 로그 정보를 사용하여 언제든지 복구를 수행하고 온라인으로 설정될 수 있습니다. 기본 데이터베이스가 자체 리두로그를 아카이브할 때 로그는 원격 사이트에 전송되어 대기 데이터베이스에 적용됩니다. 따라서 대기 데이터베이스는 시간과 트랜잭션 기록 면에서 항상 기본 데이터베이스의 뒤에 있는 한두 개의 로그가 됩니다.

자동화된 대기 데이터베이스는 데이터를 전원 고장과 같은 정전 또는 화재, 홍수 또는 지진과 같은 물리적 자연 재해로부터 보호합니다. 대기 데이터베이스는 손상 복구용으로 설계되었으므로 기본 데이터베이스와는 물리적으로 분리된 위치에 저장되는것이 바람직합니다.

대기 데이터베이스는 읽기 전용으로만 열 수 있으며 보고를 위해 대기 데이터베이스를 사용할 수 있습니다. 대기 데이터베이스를 읽기 전용으로 열면 리두 로그는 대기열에 위치하게 되며 적용되지는 않습니다. 데이터베이스가 대기 모드로 되돌아오자마자 대기열에 있는 로그와 새로 도착한 로그가 적용됩니다.

추가 정보: 대기 데이터베이스 작성 및 유지 관리에 대한 내용은 O ra c -le8i Backup and Recovery Guide를참조하십시오.

데이터베이스 복구 3 2 - 2 7

존재 가능성

Page 455: Oracle8 - Tistory

3 2 - 2 8 Oracle8i 개념 설명서, 볼륨 2

존재 가능성

Page 456: Oracle8 - Tistory

IX분산 데이터베이스와 복제

I X부에서는 네트워크 상의 분산 데이터베이스 구조와 데이터 복제에 대해 설명합니다.

I X부에서는 다음 장을 포함하고 있습니다.

■ 3 3장“분산 데이터베이스”

■ 3 4장“데이터베이스 복제”

Page 457: Oracle8 - Tistory

33분산 데이터베이스

이 장에서는 오라클 분산 데이터베이스 구조의 기본 개념과 용어를 설명하며 다음 내용을다룹니다.

■ 오라클 분산 데이터베이스 구조

■ 이기종 분산 데이터베이스

■ 분산 데이터베이스 응용 프로그램 개발

■ 오라클 분산 데이터베이스 시스템 관리

■ 국가별 언어 지원

분산 데이터베이스 3 3 - 1

Page 458: Oracle8 - Tistory

오라클 분산 데이터베이스 구조

분산 데이터베이스는 일반적으로 응용 프로그램에는 단일 데이터베이스로 나타나지만여러 컴퓨터에 저장되어 있는 데이터베이스 집합입니다. 따라서 응용 프로그램은 네트워크 상의 여러 데이터베이스에 있는 데이터를 동시에 액세스하고 수정할 수 있습니다. 시스템에 있는 각 오라클 데이터베이스는 자신의 로컬 O racle 서버로 제어되지만 전역 분산 데이터베이스의 일관성을 유지 관리하기 위해 통합됩니다. 그림 3 3 - 1은대표적인 오라클 분산 데이터베이스 시스템을 나타냅니다.

클라이언트와 서버

데이터베이스 서버는 데이터베이스를 관리하는 오라클 소프트웨어이고 클라이언트는서버의 정보를 필요로 하는 응용 프로그램입니다. 시스템에 있는 각 컴퓨터를 노드라고 하는데 분산 데이터베이스 시스템의 노드는 클라이언트, 서버 또는 양쪽 모두가될 수 있습니다. 예를 들어, 그림 3 3 - 1에서 HQ 데이터베이스를 관리하는 컴퓨터는로컬 데이터에 대한 명령문(예를 들어, 각 트랜잭션에서 로컬 DEPT 테이블을 질의하는 두 번째 명령문)이 실행될 때는 데이터베이스 서버로 작동하는 반면, 원격 데이터에 대한 명령문(예를 들어, 각 트랜잭션에서 SALES 데이터베이스의 EMP 원격테이블에 실행되는 첫 번째 명령문)이 실행될 때는 클라이언트로 작동합니다.

직접 및 간접 접속

클라이언트는 직접 또는 간접적으로 데이터베이스 서버에 접속할 수 있습니다. 그림3 3 - 1에서 클라이언트 응용 프로그램이 각 트랜잭션에 대해 첫 번째 명령문과 세 번째명령문을 실행할 때 클라이언트는 중간 HQ 데이터베이스로 직접 접속된 후 원격 데이터를 포함하는 SALES 데이터베이스로 간접 접속됩니다.

3 3 - 2 Oracle8i 개념 설명서, 볼륨 2

오라클 분산 데이터베이스 구조

Page 459: Oracle8 - Tistory

그림 33-1 오라클 분산 데이터베이스 시스템

분산 데이터베이스 3 3 - 3

오라클 분산 데이터베이스 구조

데이터베이스서버

데이터베이스서버

Net8 Net8

네트워크

데이터베이스 링크

CONNECT TO...IDNENTIFY BY...

DEPT 테이블 EMP 테이블

HQ데이터베이스

판매데이터베이스

응용 프로그램

TRANSACTION

TRANSACTION

INSERT INTO EMP@SALES..;

DELETE FROM DEPT..;

SELECT...FROM EMP@SALES...;

COMMIT;

INSERT INTO EMP@SALES..;

DELETE FROM DEPT..;

SELECT...FROM EMP@SALES...;

COMMIT;

···

Page 460: Oracle8 - Tistory

네트워크

분산 데이터베이스 시스템의 개별 데이터베이스를 링크하려면 네트워크가 필요합니다. 다음 단원에서는 오라클 분산 데이터베이스 시스템에서의 네트워크 문제에 대해자세하게 설명합니다.

N e t 8

분산 데이터베이스 시스템의 모든 오라클 데이터베이스는 O ra c l e의 네트워킹 소프트웨어인 N e t 8을 사용하여 네트워크를 통해 데이터베이스 간에 통신합니다. Net8이네트워크 상의 서로 다른 컴퓨터에서 운영되고 있는 클라이언트와 서버에 접속하면분산 데이터베이스에서 데이터베이스 서버는 네트워크를 통해 통신하여 원격 트랜잭션과 분산 트랜잭션을 지원할 수 있습니다.

N e t 8은 시스템을 사용하는 응용 프로그램에 대해 SQL 요구 사항을 전송하고 데이터를 받는데 필요한 투명한 접속성을 제공합니다. Net8은 클라이언트로부터 SQL 문을받아 지원된 산업 표준 통신 프로토콜이나 프로그램 가능한 인터페이스를 통해O racle 서버로 전송하기 위해 이를 패키지화합니다. 또한 N e t 8은 서버로부터 응답을받아 해당 클라이언트로 전송하기 위해 이를 패키지화합니다. Net8은 기본 네트워크운영 체제와 관계없이 모든 처리를 수행합니다.

추가 정보: N e t 8과 해당 기능에 대한 자세한 내용은 Net8 Ad m i n i s -t ra t o r’s Guide를 참조하십시오.

O racle Names

선택적으로 O racle 네트워크는 O racle Names를 사용하여 시스템에 전역 디렉토리서비스를 제공할 수 있습니다. Oracle 네트워크가 분산 데이터베이스 시스템을 지원하는 경우 사용자는 O racle Names 서버를 시스템에 있는 각 데이터베이스에 대한정보의 중앙 정보 저장소로 사용하여 분산 데이터베이스 액세스 구성을 쉽게 할 수 있습니다.

데이터베이스와 데이터베이스 링크

분산 데이터베이스에 있는 각 데이터베이스는 시스템에 있는 모든 다른 데이터베이스와 구별되며 각각 자신의 전역 데이터베이스 이름을 가지고 있습니다. Ora c l e은 개별데이터베이스 이름 앞에 데이터베이스의 네트워크 도메인을 붙여 데이터베이스의 전역 데이터베이스 이름을 구성합니다. 예를 들어, 그림 3 3 - 2는 네트워크를 통한 데이터베이스의 대표적인 계층적 배열을 나타냅니다.

3 3 - 4 Oracle8i 개념 설명서, 볼륨 2

오라클 분산 데이터베이스 구조

Page 461: Oracle8 - Tistory

그림 33-2 네트워크디렉토리와 전역 데이터베이스 이름

여러 개의 데이터베이스가 동일한 개별 이름을 가질 수 있는 반면 각 데이터베이스는고유한 전역 데이터베이스 이름을 가져야 합니다. 예를 들어, 네트워크 도메인 U S. -A M E R I CA S. AC M E _ AU T O . C O M과 U K. E U RO P E. AC M E _ AU T O . C O M은 각각 SALES 데이터베이스를 가지고 있습니다.

SALES.US.AMERICAS.ACME_AUTO.COMSALES.UK.EUROPE.ACME_AUTO.COM

분산 데이터베이스 3 3 - 5

오라클 분산 데이터베이스 구조

EDU COM ORG

교육 기관 기타 회사 비영리조직

ACME_TOOLS ACME_AUTO

DIVISION1 DIVISION2 DIVISION3 ASIA AMERICAS EUROPE

JAPAN US MEXICO UK GERMANY

HQ 재정 판매 MFTG

판매 HQ 판매 판매 판매 판매HUMAN_RESOURCES.EMP

HUMAN_RESOURCES.EMP

Page 462: Oracle8 - Tistory

데이터베이스 링크

O ra c l e은 데이터베이스 링크를 사용하여 분산 데이터베이스 시스템의 응용 프로그램요구 사항을 쉽게 합니다. 데이터베이스 링크는 오라클 데이터베이스에서 다른 데이터베이스로의 한 방향 통신 경로를 정의합니다.

기본적으로 데이터베이스 링크 이름은 링크가 가리키는 데이터베이스의 전역 이름과동일하므로 오라클 분산 데이터베이스 시스템 사용자에게 투명합니다.

예를 들어, 다음 SQL 문은 원격 SA L E S. U S. A M E R I CA S. AC M E _ AU T O . C O M데이터베이스로의 경로를 나타내는 데이터베이스 링크를 로컬 데이터베이스에 생성합니다.

CREATE DATABASE LINK sales.us.americas.acme_auto.com ... ;

데이터베이스 링크를 생성한 다음 로컬 데이터베이스에 접속된 응용 프로그램은 원격SA L E S. U S. A M E R I CA S. AC M E _ AUTO.COM 데이터베이스에 있는 데이터에 액세스할 수 있습니다. 다음 단원에서는 응용 프로그램이 분산 데이터베이스에 있는 원격 스키마 객체를 참조하는 방법에 대해 설명하며 SQL 문이 데이터베이스 링크를 사용하는 방법의 예를 포함합니다.

추가 정보: O ra c l e은 여러 가지 다른 유형의 데이터베이스 링크를 지원합니다. 자세한 내용은 O racle8i Distributed Database Systems를 참조하십시오.

스키마 객체 이름 분석

O ra c l e은 계층적 접근 방법을 사용하여 객체 이름을 형성하고 스키마 객체로의 응용프로그램 참조(이름 분석이라는 프로세스)를 분석합니다. 예를 들어, 단일 데이터베이스에서 O ra c l e은 모든 스키마가 고유한 이름을 가지며 각 스키마 내에서 모든 객체가 고유한 이름을 가지도록 합니다. 결과적으로 스키마 객체의 이름은 데이터베이스내에서 항상 고유합니다. 또한 O ra c l e은 객체의 지역 이름에 대한 응용 프로그램 참조를 쉽게 분석할 수 있습니다.

분산 데이터베이스에서 테이블과 같은 스키마 객체는 시스템의 모든 응용 프로그램에서 액세스할 수 있습니다. Ora c l e은 전역 객체 이름을 효과적으로 생성하고 분산 데이터베이스 시스템의 스키마 객체에 대한 참조를 분석하기 위해 전역 데이터베이스이름과 함께 계층적으로 명명한 모델을 확장합니다. 예를 들어, 질의는 그것이 저장된 데이터베이스를 포함하여 완전히 제한된 이름을 지정하여 원격 테이블을 참조할수 있습니다.

SELECT * FROM [email protected]_auto.com;

3 3 - 6 Oracle8i 개념 설명서, 볼륨 2

오라클 분산 데이터베이스 구조

Page 463: Oracle8 - Tistory

로컬 데이터베이스 서버는 원격 SALES 데이터베이스에 접속된 데이터베이스 링크를암시적으로 사용하여 요구 사항을 완료합니다.

O racle 서버 버전 간의 접속

오라클 분산 데이터베이스 시스템은 다른 버전의 오라클 데이터베이스를 통합할 수있습니다. 지원되는 모든 오라클 릴리스는 분산 데이터베이스 시스템에 참여할 수 있습니다. 그러나 분산 데이터베이스와 함께 작동하는 응용 프로그램은 시스템의 각 노드에서 사용할 수 있는 기능을 이해해야 합니다.

예를 들어, 분산 데이터베이스 응응 프로그램은 O racle7 데이터베이스가 O ra c l e 8 i에서 사용할 수 있는 객체 SQL 확장 기능을 알고 있는 것으로 가정할 수는 없습니다.

분산 데이터베이스와 분산 처리

분산 데이터베이스와 분산 처리란 용어는 밀접한 관계가 있지만 매우 다른 의미를 가지고 있습니다.

분산 데이터베이스 분산 데이터베이스는 응용 프로그램에는 단일 데이터베이스로 나타나지

만 실제로는 여러 컴퓨터에 저장되어 있는 데이터베이스 집합입니다.

분산 처리 분산 처리는 응용 프로그램 시스템이 자신의 작업을 네트워크 상에 있

는 다른 컴퓨터에 분산시킬 경우에 발생합니다. 예를 들어, 데이터베

이스 응용 프로그램은 일반적으로 프론트 엔드 표시 작업을 클라이언

트 PC 또는 N C에 분산시키며, 백 엔드 데이터베이스 서버가 데이터

베이스에 대한 공유 액세스를 관리하도록 합니다. 결론적으로 분산 데

이터베이스 응용 프로그램 처리 시스템을 일반적으로“클라이언트 서

버”데이터베이스 응용 프로그램 시스템이라고 합니다.

오라클 분산 데이터베이스 분산 처리 구조를 사용하여 시스템은 기능을 수행합니다.예를 들어, Oracle 서버는 다른 O racle 서버가 관리하는 데이터를 요구하면 이것이클라이언트 역할을 하게 됩니다.

분산 데이터베이스와 데이터베이스 복제

“분산 데이터베이스”와“데이터베이스 복제”란 용어도 밀접한 관계가 있지만 차이가있습니다. 순수한 분산 데이터베이스에서 시스템은 모든 데이터와 지원 데이터베이스객체에 대해 하나의 복사본만을 관리합니다. 분산 데이터베이스 응용 프로그램은 일반적으로 로컬 데이터와 원격 데이터를 모두 액세스하기 위해 분산 트랜잭션을 사용하며 전역 데이터베이스를 실시간에 수정합니다.

분산 데이터베이스 3 3 - 7

오라클 분산 데이터베이스 구조

Page 464: Oracle8 - Tistory

주: 이 장에서는 순수한 분산 데이터베이스를 설명합니다. 복제에 대한설명은 3 4장“데이터베이스 복제”를 참조하십시오.

복제는 분산 데이터베이스 시스템을 구성하는 여러 데이터베이스에 있는 데이터베이스 객체를 복사하고 유지 관리하는 프로세스입니다. 복제는 기능을 수행하기 위해 분산 데이터베이스 기술에 의존하는 반면 데이터베이스 복제는 순수한 분산 데이터베이스 환경에서 불가능한 장점을 응용 프로그램에 제공할 수 있습니다.

가장 일반적으로 복제는 대체 데이터 액세스 옵션이 있으므로 성능을 향상시키고 응용 프로그램의 가용성을 보호하는데 유용하게 사용됩니다. 예를 들어, 응용 프로그램은 일반적으로 원격 서버가 아닌 로컬 데이터베이스에 액세스하여 네트워크 통신량을최소화하고 최고의 성능을 얻을 수 있습니다. 또한 로컬 서버에 장애가 발생해도 복제된 데이터가 있는 다른 서버에 액세스할 수 있는 경우라면 응용 프로그램은 계속기능을 수행합니다.

추가 정보: O ra c l e의 복제 기능에 대한 자세한 내용은 O racle8i Rep-l i c a t i o n을 참조하십시오.

이기종 분산 데이터베이스

O ra c l e에서 이기종 분산 데이터베이스 시스템은 적어도 하나의 데이터베이스 시스템이O racle 시스템이 아닙니다. 응용 프로그램의 경우 이기종 분산 데이터베이스 시스템은단일, 로컬, 오라클 데이터베이스로 나타납니다. 로컬 O racle 서버는 데이터의 분산및 이기종을 숨길 수 있습니다. Oracle 서버는 O racle8i 이기종 서비스와 O ra c l e이아닌 시스템별 이기종 서비스 대리 프로세서를 사용하여 O ra c l e이 아닌 시스템에 액세스할 수 있습니다.

이기종 서비스

이기종 서비스는 O racle8i 서버 내에 통합된 구성 요소이고 Open Gatew ay 제품의O racle 차세대 기술입니다. 이기종 서비스는 초기 O racle Open Gatew ay 릴리스사용자에게 호환 가능한 향상된 기능을 제공하면서 공통 구조와 관리 기법을 이후의O racle 게이트웨이 제품과 기타 이기종 액세스 설비에 제공합니다.

3 3 - 8 Oracle8i 개념 설명서, 볼륨 2

이기종 분산 데이터베이스

Page 465: Oracle8 - Tistory

이기종 서비스 대리 프로세서

액세스하려는 각각의 O ra c l e이 아닌 시스템에 대해 이기종 서비스는 O ra c l e이 아닌특정 시스템을 액세스하는 대리 프로세서를 필요로 합니다. 이기종 서비스 대리 프로세서는 O ra c l e이 아닌 시스템과 통신하고 O racle 서버에 있는 이기종 서비스 구성요소와 통신합니다. Oracle 서버를 위해 대리 프로세서는 O ra c l e이 아닌 시스템에서S Q L, 프로시저 및 트랜잭션 요청을 실행합니다.

버전 8의 G a t ew ay는 O ra c l e이 아닌 시스템에 절차적으로 또는 S Q L을 사용하여 액세스하는 이기종 서비스 대리 프로세서에 대한 O racle 제품 이름입니다. 그러나 이기종 서비스 대리 프로세서는 O racle Tra n s p a rent Gatew ay 또는 O racle Pro c e d u ra lG a t ew ay 이외의 다른 제품으로 사용 가능하게 됩니다. 이 설명서에서는 보다 일반적인 용어로 이기종 서비스 대리 프로세서를 사용합니다. Oracle Open Gatew ay 버전8을 구입한 경우 이기종 서비스 대리 프로세서 대신“O racle Gatew ay 버전 8”을 사용할 수 있습니다.

버전 8의 게이트웨이의 설치 및 구성에 대한 자세한 내용은“O racle Open Gatew ayInstallation and User’s Guide version 8.0”을 참조하십시오.

기능

이기종 서비스 기능에는 다음 사항이 포함됩니다.

■ 분산 트랜잭션. 트랜잭션은 O ra c l e과 O ra c l e이 아닌 시스템에 적용되며 이 경우에도 O ra c l e의 2단계 커밋 기법을 통해 변경 사항이 모두 커밋되거나 모두 롤백되도록 보장합니다.

■ 투명한 SQL 액세스. 데이터가 하나의 단일 로컬 데이터베이스에 저장되어 있는것처럼 O ra c l e이 아닌 시스템에 있는 데이터를 O racle 환경으로 통합합니다. 응용 프로그램에 의해 실행된 SQL 문은 O ra c l e이 아닌 시스템에 의해 이해된 S Q L문으로 그대로 변환됩니다.

■ 절차적 액세스. 메시징 시스템과 대기열 처리 시스템과 같이 절차형 시스템은PL/SQL 원격 프로시저 호출을 사용하는 O ra c l e 8 i에서 액세스할 수 있습니다.

■ 데이터 딕셔너리 변환. Ora c l e이 아닌 시스템을 다른 O racle 서버처럼 보이게 하기 위해 O ra c l e의 데이터 딕셔너리 테이블에 대한 참조를 포함하는 SQL 문은O ra c l e이 아닌 시스템의 데이터 딕셔너리 테이블에 대한 참조를 포함하는 S Q L문으로 변환됩니다.

■ S Q L을 사용한 전달. 선택적으로 응응 프로그램 프로그래머는 O ra c l e이 아닌 시스템의 S Q L을 사용하여 O racle 응용 프로그램에서 O ra c l e이 아닌 시스템에 직접 액세스할 수 있습니다.

분산 데이터베이스 3 3 - 9

이기종 분산 데이터베이스

Page 466: Oracle8 - Tistory

■ 내장 프로시저 액세스. SQL 기준 O ra c l e이 아닌 시스템에 있는 내장 프로시저는이것이 PL/SQL 원격 프로시저인 것처럼 액세스할 수 있습니다.

■ 국가별 언어 지원. 이기종 서비스는 다중 바이트 문자 집합을 지원하며 O ra c l e이아닌 시스템과 O racle8i 서버 사이에 문자 집합을 변환합니다.

■ 다중 스레드 대리 프로세서. 다중 스레드 대리 프로세서는 운영 체제의 스레드 기능을 이용하며 다중 스레드 서버 기능을 이용하여 필요한 프로세스 수를 줄입니다.

■ 대리 프로세서 자체 등록. 대리 프로세서 자체 등록은 이기종 데이터베이스 링크에 대해 올바른 작업을 확인하면서 이기종 서비스 구성 데이터를 원격 호스트에서갱신하는 프로세스를 자동화합니다.

■ 관리 인터페이스. 활성 이기종 서비스와 그러한 대리 프로세서에 액세스하고 있는사용자 세션의 그래픽 표시를 제공합니다.

주: 위에 나열된 모든 기능이 사용자의 이기종 서비스 대리 프로세서또는 O racle Gatew ay에 의해 지원되는 것은 아닙니다. 지원되는 기능은 사용자의 이기종 서비스 대리 프로세서 또는 O racle Open Gat-ew ay 설명서를 참조하십시오.

분산 데이터베이스 응용 프로그램 개발

분산 데이터베이스 시스템 상단에서 응용 프로그램을 개발하는 경우 몇 가지 고려해야 할 사항이 있습니다. 다음 단원에서는 응용 프로그램이 분산 데이터베이스에 있는데이터를 액세스하는 방법에 대해 설명합니다.

분산 질의 최적화

분산 질의 최적화는 분산된 SQL 문에서 참조된 원격 테이블에서 데이터를 읽어 들일때 사이트 간에 필요한 데이터 전송 양을 줄이는 O ra c l e 8 i의 기본 기능입니다.

분산 질의 최적화는 O ra c l e의 비용 기준 최적기를 사용하여 원격 테이블로부터 필요한 데이터만 추출하고 원격 사이트에서 데이터를 처리하며 최종 처리할 로컬 사이트로 결과를 돌려보내는 SQL 표현식을 찾거나 생성할 수 있습니다. 이것은 모든 테이블 데이터를 처리할 로컬 사이트로 전송하는 것과 비교하여 필요한 데이터 전송 양을줄입니다.

3 3 - 1 0 Oracle8i 개념 설명서, 볼륨 2

분산 데이터베이스 응용 프로그램 개발

Page 467: Oracle8 - Tistory

D R I V I N G _ S I T E, NO_MERGE 및 INDEX 힌트와 같은 비용 기준 최적기 힌트를사용하여 O ra c l e이 데이터를 처리하는 위치와 데이터를 액세스하는 방법을 더 잘 제어할 수 있습니다.

원격 및 분산 SQL 문

원격 질의는 동일한 원격 노드에 존재하는 하나 이상의 원격 테이블에서 정보를 선택하는 질의입니다. 예를 들어, 다음과 같습니다.

SELECT * FROM [email protected]_auto.com;

원격 갱신은 동일한 원격 노드에 있는 하나 이상의 테이블에 있는 데이터를 수정하는갱신입니다.

예를 들어, 다음과 같습니다.

UPDATE [email protected]_auto.comSET loc = ’NEW YORK’WHERE deptno = 10;

주: 원격 갱신은 하나 이상의 원격 노드에서 데이터를 읽어 들이는 하위 질의를 포함할 수 있지만 하나의 원격 노드에서만 갱신되므로 이러한 명령문을 원격 갱신으로 분류합니다.

분산 질의는 둘 이상의 노드에서 정보를 읽어 들입니다. 예를 들어, 다음과 같습니다.

SELECT ename, dnameFROM scott.emp e, [email protected]_auto.com dWHERE e.deptno = d.deptno;

분산 갱신은 둘 이상의 노드에 있는 데이터를 수정합니다. 분산갱신은 각기 다른 노드에 있는 데이터를 액세스하는 둘 이상의 원격 갱신을 포함하는 프로시저나 트리거와 같은 PL/SQL 하위 프로그램 단위를 사용할 수 있습니다. 예를들어, 다음과 같습니다.

분산 데이터베이스 3 3 - 1 1

분산 데이터베이스 응용 프로그램 개발

Page 468: Oracle8 - Tistory

BEGINUPDATE [email protected]_auto.com

SET loc = ’NEW YORK’WHERE deptno = 10;

UPDATE scott.empSET deptno = 11WHERE deptno = 10;

END;

프로그램 내의 명령문은 원격 노드에 전송되며 명령문 실행은 단위별로 성공하거나실패합니다.

원격 프로시저 호출( R P C )

개발자는 분산 데이터베이스와 함께 작동하는 응용 프로그램 지원을 위해 P L / S Q L패키지와 프로시저를 코딩할 수 있습니다. 응용 프로그램은 로컬 데이터베이스에서의작업 수행을 위해 로컬 프로시저 호출을 수행할 수 있으며 원격 데이터베이스에서의작업 수행을 위해 원격 프로시저 호출( R P C )을 수행할 수 있습니다. 프로그램이 원격프로시저를 호출하는 경우 로컬 서버는 모든 프로시저 매개변수를 호출 중인 원격 서버에 전달합니다. 예를 들어, 다음과 같습니다.

[email protected]_auto.com(1257);END;

분산 데이터베이스 시스템에 대한 패키지와 프로시저를 개발하는 경우 개발자는 원격위치에서 수행되어야 하는 프로그램과 결과를 호출한 응용 프로그램에 돌려주는 방법등을 이해한 후 코딩해야 합니다.

원격 및 분산 트랜잭션

원격 트랜잭션은 동일한 원격 노드를 참조하는 하나 이상의 원격 명령문을 포함하는트랜잭션입니다. 예를 들어, 다음과 같습니다.

UPDATE [email protected]_auto.comSET loc = ’NEW YORK’WHERE deptno = 10;

UPDATE [email protected]_auto.comSET deptno = 11WHERE deptno = 10;

COMMIT;

분산 트랜잭션은 개별적으로나 그룹으로 분산 데이터베이스에 있는 두 개 이상의 서로 다른 노드에 있는 데이터를 갱신하는 하나 이상의 명령문을 포함하는 트랜잭션입니다. 예를 들어, 다음과 같습니다.

3 3 - 1 2 Oracle8i 개념 설명서, 볼륨 2

분산 데이터베이스 응용 프로그램 개발

Page 469: Oracle8 - Tistory

UPDATE [email protected]_auto.comSET loc = ’NEW YORK’WHERE deptno = 10;

UPDATE scott.empSET deptno = 11WHERE deptno = 10;

COMMIT;

주: 트랜잭션의 모든 명령문이 단일 원격 노드만 참조하는 경우 트랜잭션은 원격이지만 분산은 아닙니다.

2단계 커밋 기법

D B M S는 분산 트랜잭션이든 분산 트랜잭션이 아니든 제대로 설계된 경우 트랜잭션의모든 명령문이 하나의 단위로 커밋되거나 롤백되어 로컬 데이터베이스의 데이터가 일관성을 갖도록 해야 합니다. 진행 중인 트랜잭션의 효과는 모든 다른 트랜잭션에 동일하게 영향을 주지 않아야 하며 질의, 갱신 또는 원격 프로시저 호출 등 모든 유형의작업을 포함하는 트랜잭션에 해당됩니다.

비 분산 데이터베이스의 일반적인 트랜잭션 제어 기법은 O racle8i 개념 설명서에 설명되어 있습니다. 분산 데이터베이스에서 O ra c l e은 네트워크 장애나 시스템 장애가발생해도 네트워크 상의 동일한 특성으로 트랜잭션 제어를 조정하고 데이터 일관성을유지 관리해야 합니다.

O ra c l e의 2단계 커밋 기법은 분산 트랜잭션에 참여하는 모든 데이터베이스 서버가 트랜잭션에 있는 명령문을 모두 커밋하거나 롤백하도록 보장해야 합니다. 또한 2단계커밋 기법은 무결성 제한, 원격 프로시저 호출 및 트리거 등에 의해 수행되는 암시적인 DML 작업을 보호합니다.

추가 정보: O ra c l e의 2단계 커밋 기법에 대한 자세한 내용은 O ra c l e 8 iDistributed Database Systems를참조하십시오.

분산 데이터베이스 3 3 - 1 3

분산 데이터베이스 응용 프로그램 개발

Page 470: Oracle8 - Tistory

분산 데이터베이스 시스템의 투명성

최소의 노력으로 오라클 분산 데이터베이스 시스템 기능이 시스템으로 작업하는 사용자에게 투명하게 적용되도록 할 수 있습니다. 투명성의 목적은 분산 데이터베이스 시스템이 단일 오라클 데이터베이스처럼 보이도록 하는 것입니다. 따라서 시스템은 개발자나 사용자에게 분산 데이터베이스 응용 프로그램 개발을 어렵게 하고 생산성을저하시키는 복잡성을 덜어줍니다. 다음 단원에서는 분산 데이터베이스 시스템의 투명성에 대해 자세하게 설명합니다.

위치 투명성

오라클 분산 데이터베이스 시스템은 응용 프로그램 개발자와 관리자가 데이터베이스객체의 물리적 위치를 응용 프로그램과 사용자에게 보이지 않도록 하는 기능을 가집니다. 위치 투명성은 사용자가 응용 프로그램이 접속되어 있는 노드에 관계없이 테이블과 같은 데이터베이스 객체를 참조할 수 있을 때 존재합니다. 위치 투명성은 다음과 같은 여러 가지 장점을 가집니다.

■ 데이터베이스 사용자는 데이터베이스 객체의 물리적 위치를 알 필요가 없으므로원격 데이터로의 액세스가 간단합니다.

■ 일반 사용자나 기존 데이터베이스 응용 프로그램에 영향을 주지 않고 데이터베이스 객체를 이동할 수 있습니다.

일반적으로 관리자와 개발자는 동의어를 사용하여 응용 프로그램 스키마에 있는 테이블과 지원하는 객체에 대한 위치 투명성을 설정합니다. 예를 들어, 다음 명령문은 다른 원격 데이터베이스에 있는 테이블에 대한 동의어를 데이터베이스에 생성합니다.

CREATE PUBLIC SYNONYM empFOR [email protected]_auto.com

CREATE PUBLIC SYNONYM deptFOR [email protected]_auto.com

이전에는 다음과 같은 질의로 원격 테이블을 액세스합니다.

SELECT ename, dnameFROM [email protected]_auto.com e,

[email protected]_auto.com dWHERE e,deptno = d.deptno;

이제 응용 프로그램은 원격 테이블의 위치를 생각할 필요가 없는 훨씬 간단한 질의를실행할 수 있습니다.

3 3 - 1 4 Oracle8i 개념 설명서, 볼륨 2

분산 데이터베이스 응용 프로그램 개발

Page 471: Oracle8 - Tistory

SELECT ename, dnameFROM emp e, dept dWHERE e,deptno = d.deptno;

동의어 외에도 개발자는 뷰와 내장 프로시저를 사용하여 분산 데이터베이스 시스템에서 작동하는 응용 프로그램에 대한 위치 투명성을 설정할 수 있습니다.

명령문과 트랜잭션 투명성

오라클 분산 데이터베이스 구조는 질의, 갱신 기능과 트랜잭션 투명성을 제공해야 합니다. 예를 들어, SELECT, INSERT, UPDAT E, DELETE 등과 같은 표준 S Q L명령어는 비 분산 데이터베이스 환경에서 수행하는 것처럼 작업합니다. 또한 응용 프로그램은 표준 SQL 명령어 C O M M I T, SAVEPOINT 및 RO L L B AC K을 사용하여트랜잭션을 제어합니다. 복잡한 프로그램이나 다른 특정 작업에 대한 요구 사항 없이다음과 같이 분산 트랜잭션 제어 기능을 제공합니다.

■ 한 트랜잭션의 명령문은 모든 로컬 테이블이나 원격 테이블을 참조할 수 있습니다.

■ O ra c l e은 분산 트랜잭션에 포함된 모든 노드가 동일한 작업을 취하도록 보장합니다. 즉, 트랜잭션을 모두 커밋하거나 모두 롤백하도록 보장합니다.

■ 분산 트랜잭션이 커밋되는 동안 네트워크 장애나 시스템 장애가 발생하면 트랜잭션은 전역적으로 자동, 투명하게 복원됩니다. 즉, 네트워크나 시스템이 복원되면노드는 트랜잭션을 모두 커밋하거나 모두 롤백합니다.

내부 작업 각 커밋된 트랜잭션은 해당 트랜잭션 내의 명령문에 의한 변경 사항을 고유하게 식별할 수 있도록 관련된 시스템 변경 번호( S C N )를 가지고 있습니다. 분산데이터베이스에서 통신하는 노드의 S C N은 다음과 같은 경우에 조정됩니다.

■ 접속이 하나 이상의 데이터베이스 링크에 의해 기술되는 경로를 사용하여 설정된경우

■ 분산 SQL 문이 실행된 경우

■ 분산 트랜잭션이 커밋된 경우

다른 장점 중에서 분산 데이터베이스 시스템의 노드 간 S C N을 조정하여 명령문과 트랜잭션 레벨 모두에서 전역 분산 읽기 일관성을 유지할 수 있습니다. 필요하다면 전역 분산 시간 기준 복구도 완료할 수 있습니다.

분산 데이터베이스 3 3 - 1 5

분산 데이터베이스 응용 프로그램 개발

Page 472: Oracle8 - Tistory

복제 투명성

O ra c l e에는 또한 시스템의 노드 간에 데이터를 투명하게 복제하는 다양한 기능도 있습니다. Ora c l e의 복제 기능에 대한 자세한 내용은 O racle8i Replication을 참조하십시오.

오라클 분산 데이터베이스 시스템 관리

오라클 분산 데이터베이스 시스템의 응용 프로그램을 개발할 때 고려해야 할 고유한사항이 있는 것처럼 분산 데이터베이스 관리를 위해서도 알아야 할 특별한 사항이 있습니다. 다음 단원에서는 오라클 분산 데이터베이스 시스템에서의 데이터베이스 관리를 위한 특수 항목에 대해 설명합니다.

사이트 자율성

사이트 자율성은 각 데이터베이스가 비 분산 데이터베이스처럼 작동하므로 분산 데이터베이스를 구성하는 각 서버는 서로 독립적으로 관리됩니다.

여러 가지 데이터베이스가 함께 작동될 수 있지만 각 데이터베이스는 사용자가 개별적으로 관리할 수 있는 다르고 개별적인 데이터 저장소입니다. 이러한 오라클 분산데이터베이스의 사이트 자율성이 갖는 장점은 다음과 같습니다.

■ 시스템의 노드는 회사의 논리적 조직이나“긴밀한”관계를 유지 관리해야 하는 협동 조직을 이중화할 수 있습니다.

■ 로컬 데이터베이스 관리자는 해당 로컬 데이터를 제어합니다. 따라서 각 데이터베이스 관리자의 책임 영역이 줄어듭니다.

■ 각각의 독립적인 장애는 분산 데이터베이스의 다른 노드를 손상시킬 가능성이 적습니다. 하나의 데이터베이스와 네트워크를 사용할 수 있다면 O ra c l e의 전역 데이터베이스는 부분적으로 사용할 수 있습니다. 한 데이터베이스에 장애가 발생한다해도 전체 데이터베이스 작동을 중지하거나 성능의 병목 현상을 초래하지는 않습니다.

■ 관리자는 시스템에 있는 다른 노드와 독립적인 시스템 장애로부터 복구할 수 있습니다.

■ 각 로컬 데이터베이스에 대해 데이터 딕셔너리가 존재합니다. 로컬 데이터를 액세스하는데 전역 카탈로그는 필요하지 않습니다.

■ 노드별로 독립적으로 소프트웨어를 업그레이드할 수 있습니다.

O ra c l e을 사용하여 분산 데이터베이스 시스템에 있는 각 데이터베이스를 독립적으로관리할 수 있지만 시스템의 전역 요구 사항을 무시해도 된다는 것은 아닙니다.

3 3 - 1 6 Oracle8i 개념 설명서, 볼륨 2

오라클 분산 데이터베이스 시스템 관리

Page 473: Oracle8 - Tistory

예를 들어, 서버와 서버 접속을 쉽게 하기 위해 사용자가 생성한 링크를 지원하는데필요한 각 데이터베이스에서 추가 사용자 계정이 필요합니다. 다음 단원에서는 이러한 특정 항목에 대해 설명하고 시스템의 개별 노드 관리 시 전체 분산 데이터베이스환경의 전역 관점의 필요성을 예시합니다.

분산 데이터베이스 보안

O ra c l e은 다음 사항을 포함하는 분산 데이터베이스 시스템에 대해 비 분산 데이터베이스 시스템에서 사용할 수 있는 모든 보안 기능을 지원합니다.

■ 사용자와 롤에 대한 암호 또는 외부 서비스 인증

■ 클라이언트와 서버, 서버와 서버 접속을 위한 로그인 패킷 암호화

다음 단원에서는 오라클 분산 데이터베이스 시스템을 구성할 때 고려해야 할 몇 가지사항에 대해 설명합니다.

사용자 계정과 롤 지원

분산 데이터베이스 시스템에서 시스템을 사용하는 응용 프로그램을 지원하는데 필요한 사용자 계정과 롤을 신중하게 계획해야 합니다.

■ 서버와 서버 접속을 설정하는데 필요한 사용자 계정은 분산 데이터베이스 시스템의 모든 데이터베이스에서 사용 가능해야 합니다.

■ 분산 데이터베이스 응용 프로그램 사용자에 대해 사용 가능한 응용 프로그램 권한을 설정하는데 필요한 롤은 분산 데이터베이스 시스템의 모든 데이터베이스에 제공되어야 합니다.

분산 데이터베이스 시스템에 있는 노드에 대해 데이터베이스 링크를 생성한 경우 사용자는 각 사이트가 링크를 사용하는 서버와 서버 접속을 지원하기 위해 필요한 사용자 계정과 롤을 결정합니다.

추가 정보: 시스템에서 다른 유형의 데이터베이스 링크를 지원하기 위해 사용할 수 있는 사용자 계정에 대한 자세한 내용은 O racle8i Dist-ributed Database Systems를참조하십시오.

전역 사용자와 롤

분산 환경에서 사용자는 일반적으로 많은 네트워크 서비스에 대한 액세스를 필요로합니다. 각 사용자가 각 네트워크 서비스에 액세스하기 위해 별도의 인증을 구성해야하는 경우 보안 관리가 어려워지며 대규모 시스템에서는 특히 그렇습니다.

분산 데이터베이스 3 3 - 1 7

오라클 분산 데이터베이스 시스템 관리

Page 474: Oracle8 - Tistory

전역 인증 서비스 사용은 분산 환경을 위한 보안 관리를 간편하게 하는 일반적인 기법입니다.

O racle 클라이언트/서버 또는 분산 데이터베이스 환경에서 사용자는 사용자 및 롤에대한 전역 인증을 지원하는 2가지 옵션을 가집니다.

■ O racle Security Manager는O racle 네트워크에서 중앙 집중 인증과 분산 인증을 지원하는 제품입니다.

주: O ra c l e 8에서 사용 가능한 전역 사용자 기능은 수정되고 있으며 현재 베타 고객만 사용할 수 있습니다. 다음 릴리스에는 O ra c l e 8 i의 일부가 될 것입니다.

■ 전역 데이터베이스 사용자 및 롤 인증은 O ra c l e이 아닌 인증 서비스의 프레임워크내에서 작동해야 하는 경우(예를 들어, DCE) 오라클 분산 데이터베이스 환경은O ra c l e의 고급 보안 옵션을 사용할 수 있습니다. Oracle Advanced Security 옵션은 N e t 8과 오라클 분산 데이터베이스 시스템의 보안을 향상시키기 위해 사용할수 있는 많은 기능을 가진 선택적 제품입니다. 자세한 내용은 O racle Ad v a n c e dS e c u r i ty Ad m i n i s t ra t o r’s Guide를 참조하십시오.

데이터 암호화

O racle Advanced Security 옵션을사용하면 N e t 8과 관련된 제품이 네트워크 데이터 암호화와 체크섬을 사용할 수 있게 되어 데이터가 읽혀지거나 수정되지 않도록 할수 있습니다. 이것은 인증받지 못한 사용자가 R SA 데이터 보안 RC 4나 데이터 암호화 표준(DES) 등을 사용하여 데이터를 보는 것을 방지할 수 있습니다.

전송되는 동안 데이터가 수정되거나 삭제되지 않았음을 보장하기 위해 O ra c l eAdvanced Security 옵션의 보안 서비스는 암호화된 보안 메시지 요약을 생성하고이것을 네트워크를 통해 전송되는 각 패킷에 포함할 수 있습니다.

추가 정보: O racle Advanced Security 옵션의기타 기능에 대한 자세한 내용은 O racle Advanced Security Ad m i n i s t ra t o r’s Guide를, Oracle8i Enterprise Edition에서사용 가능한 기능과 옵션에 대한 내용은 O racle8i 입문서를 참조하십시오.

3 3 - 1 8 Oracle8i 개념 설명서, 볼륨 2

오라클 분산 데이터베이스 시스템 관리

Page 475: Oracle8 - Tistory

오라클 분산 데이터베이스 관리 도구

데이터베이스 관리자는 오라클 분산 데이터베이스 시스템을 관리할 때 사용할 수 있는 도구에 대한 여러 가지 선택 사항을 가지며 다음 단원에서 설명합니다.

■ Enterprise Manager

■ 협력 업체 관리 도구

■ SNMP 지원

E n terprise Manager

Enterprise Manager는O ra c l e의 데이터베이스 관리 도구입니다. Enterprise Ma-n a g e r의 그래픽 구성 요소(Enterprise Manager/GU I )를 사용하면 그래픽 사용자인터페이스( GU I )의 편리한 기능으로 데이터베이스 관리 작업을 수행할 수 있습니다.

Enterprise Manager의라인 모드 구성 요소는 라인 모드 인터페이스를 제공합니다.

Enterprise Manager는 사용하기 쉬운 인터페이스를 통해 관리 기능을 제공합니다.사용자는 Enterprise Manager를사용하여 다음 작업을 수행할 수 있습니다.

■ 데이터베이스 시작, 종료, 백업, 복구 등 기존 관리 작업을 수행할 수 있습니다.이러한 작업 수행을 위해 직접 SQL 명령어를 입력하지 않은 채 마우스로 가리키거나 눌러 신속하고 간편하게 명령어를 실행할 수 있는 Enterprise Manager의그래픽 인터페이스를 사용할 수 있습니다.

■ 다중 작업을 동시에 수행할 수 있습니다. Enterprise Manager에서 여러 창을동시에 열 수 있으므로 여러 관리 작업과 비 관리 작업을 동시에 수행할 수 있습니다.

■ 다중 데이터베이스를 관리할 수 있습니다. 단일 데이터베이스를 관리하거나 E n t -erprise Manager를사용하여 동시에 다중 데이터베이스를 관리할 수 있습니다.

■ 데이터베이스 관리 작업을 중앙 집중화할 수 있습니다. 전세계적으로 임의의 위치에 있는 임의의 O racle 플랫폼에서 실행되고 있는 로컬 데이터베이스와 원격 데이터베이스를 관리할 수 있습니다. 또한 이러한 O racle 플랫폼은 N e t 8이 지원하는모든 네트워크 프로토콜에 의해 접속될 수 있습니다.

■ S Q L, PL/SQL, Enterprise Manager 명령어를동적으로 실행할 수 있습니다.Enterprise Manager를사용하여 명령문을 입력, 편집, 실행할 수 있습니다. 또한 Enterprise Manager는 실행된 명령문의 현재까지의 기록을 유지 관리할 수있습니다.

분산 데이터베이스 3 3 - 1 9

오라클 분산 데이터베이스 시스템 관리

Page 476: Oracle8 - Tistory

따라서 명령문을 다시 입력하지 않고도 명령문을 재실행할 수 있으며 이것은 특히분산 데이터베이스 시스템에서 긴 명령문을 반복적으로 실행해야 할 때 매우 유용합니다.

■ 그래픽 사용자 인터페이스를 사용할 수 없거나 사용하는 것이 바람직하지 않은 경우 Enterprise Manager의 라인 모드 인터페이스를 사용하여 관리 작업을 수행할 수 있습니다.

협력업체 관리 도구

현재 6 0개 이상의 회사에서 오라클 데이터베이스와 네트워크 관리에 필요한 1 5 0개 이상의 제품을 개방 환경으로 제공하고 있습니다.

SNMP 지원

네트워크 관리 기능 외에도 O racle Simple Network Management Pro t o c o l(SNMP) 지원 기능을 사용하면 SNMP 기반 네트워크 관리 시스템으로 O racle 서버의 위치를 찾고 질의할 수 있습니다. SNMP는 다음과 같은 유명한 네트워크 관리시스템에서 사용되는 표준입니다.

■ H P의 O p e n V i ew

■ D i g i t a l의 P O LYCENTER Manager on NetView

■ I B M의 N e t V i ew / 6 0 0 0

■ N o v e l l의 N e t Wa re Management System

■ S u n S o ft의 SunNet Manager

추가정보:O racle SNMP Support Refe rence Guide를참조하십시오.

국가별 언어 지원

O ra c l e은 클라이언트와 서버가 서로 다른 문자 집합을 사용하는 클라이언트/서버 환경을 지원합니다. 클라이언트가 사용하는 문자 집합은 클라이언트에 대한 N L S _ L A N G매개변수의 값에 의해 정의됩니다. 서버가사용하는 문자 집합은 데이터베이스 문자 집합입니다. 문자집합이 서로 다른 경우 이러한 문자 집합 간의 데이터 변환이 자동으로수행됩니다.

추가 정보: 국가별 언어 지원 기능에 대한 자세한 내용은 O racle8i Na-tional Language Support Guide를참조하십시오.

3 3 - 2 0 Oracle8i 개념 설명서, 볼륨 2

국가별 언어 지원

Page 477: Oracle8 - Tistory

34데이터베이스 복제

이 장에서는 O ra c l e의 복제 기능과 관련된 기본 개념과 용어에 대해 설명합니다.

■ 복제란

■ 복제 객체, 그룹 및 사이트

■ 다중 마스터 복제

■ 스냅샷 복제

■ 다중 마스터와 스냅샷 하이브리드 구성

■ 복제 환경 관리

■ 복제 충돌

■ 특수 복제 옵션

추가 정보: 데이터베이스 복제에 대한 자세한 내용은 O racle8i Replication을 참조하십시오.

데이터베이스 복제 3 4 - 1

Page 478: Oracle8 - Tistory

복제란

복제는 분산된 데이터베이스 시스템을 구성하는 다중 데이터베이스의 데이터베이스 객체를 복사하고 유지 관리하는 프로세스입니다. 한 사이트에 적용된 변경 사항은 각 원격 위치에 전송되고 적용되기 전에 지역적으로 캡처되어 저장됩니다. 복제를 통해 사용자는 공유 데이터에 지역적으로 빠르게 액세스할 수 있고 대체 데이터 액세스 옵션이 존재하므로 응용 프로그램의 가용성을 보호할 수 있습니다. 한 사이트를 사용할 수없게 되는 경우에도 사용자는 계속 질의하거나 나머지 위치를 갱신할 수도 있습니다.

복제 객체, 그룹 및 사이트

이 단원에서는 복제 사이트, 복제 그룹 및 복제 객체를 포함하여 복제 시스템의 기본적인 구성 요소에 대해 설명합니다.

복제 객체

복제 객체는 분산 데이터베이스 시스템의 여러 서버에 있는 데이터베이스 객체입니다.O ra c l e의 복제 기능을 사용하여 테이블 및 뷰, 데이터베이스 트리거, 패키지, 인덱스,동의어 등과 같은 지원 객체를 복제할 수 있습니다. 그림 3 4 - 1에 있는 S C O T T . E M P와 S C O T T . B O N U S는 복제 객체의 예입니다.

복제 그룹

복제 환경에서 O ra c l e은 복제 그룹을 사용하여 복제 객체를 관리합니다. 관련 데이터베이스 객체를 복제 그룹 내에 유기적으로 구성하면 많은 객체를 함께 보다 쉽게 관리할 수 있습니다. 일반적으로 사용자는 복제 그룹을 생성하고 사용하여 특정 데이터베이스 응용 프로그램을 지원하는데 필요한 스키마 객체를 유기적으로 구성할 수 있습니다. 그러나 복제 그룹과 스키마는 서로 일치하지 않아도 됩니다. 복제 그룹 내 객체는 여러 데이터베이스 스키마로부터 발생할 수 있고 한 스키마가 다른 복제 그룹의멤버인 객체를 포함할 수도 있습니다. 복제 객체는 오직 한 그룹의 멤버여야 한다는것이 제한 사항입니다.

3 4 - 2 Oracle8i 개념 설명서, 볼륨 2

복제란

Page 479: Oracle8 - Tistory

주: 읽기 전용 스냅샷은 반드시 스냅샷 그룹에 속하지 않아도 되며 마스터 그룹의 일부인 마스터 테이블에 준하지 않아도 됩니다.

이 장에서는 기본 또는 고급 복제에 사용되는 구체화된 뷰를 지칭하는용어로 구체화된 뷰 대신 스냅샷이라는 용어를 사용합니다. 스냅샷은더 이상 사용되지 않는 용어이며 이후 릴리스의 설명서에서는“구체화된 뷰”라는 용어로 대체될 것입니다. SQL 문에서 키워드 S NA P S H -O T과 M ATERIALIZED VIEW는 서로 바꿔 사용할 수 있습니다.

구체화된 뷰에 대한 자세한 내용은 10-17 페이지“구체화된 뷰”를 참조하십시오.

다중 마스터 복제 환경에서는 복제 그룹을 마스터 그룹이라고 합니다. 각각 다른 사이트에서 해당하는 마스터 그룹은 동일한 집합의 복제 객체를 포함해야 합니다. (34-2 페이지“복제 객체”참조) 그림 3 4 - 1은 마스터 그룹“S C O T T _ M G”가 각 마스터사이트에서 복제된 객체와 똑같은 복사본을 포함하고 있음을 보여줍니다.

데이터베이스 복제 3 4 - 3

복제 객체, 그룹 및 사이트

Page 480: Oracle8 - Tistory

그림 34-1 마스터 그룹 S C O T T _ M G가 모든 사이트에서 동일한 복제 객체 포함

스냅샷 사이트에서 조직은 스냅샷 그룹을 사용하여 유지 관리됩니다. 스냅샷 그룹은대상 마스터 그룹에서 객체의 일부 또는 전체 복사본을 유지 관리합니다. 그림 3 4 - 2는 스냅샷 사이트의 스냅샷 그룹“그룹 A”는 마스터 사이트의 마스터 그룹“그룹 A”의 일부 복사본만 유지 관리하는 반면“그룹 B”스냅샷과 마스터 그룹은 전체 복사본을 유지 관리하고 있음을 나타냅니다.

또한 그림 3 4 - 2는 각 사이트가 다중 복제 그룹을 포함할 수도 있음을 나타냅니다.

3 4 - 4 Oracle8i 개념 설명서, 볼륨 2

복제 객체, 그룹 및 사이트

SCOTT MGSCOTT.EMPSCOTT.DEPTSCOTT.BONUSSCOTT.SALGRADE

O R C 1 . W O R L D

SCOTT MGSCOTT.EMPSCOTT.DEPTSCOTT.BONUSSCOTT.SALGRADE

O R C 3 . W O R L D

SCOTT MGSCOTT.EMPSCOTT.DEPTSCOTT.BONUSSCOTT.SALGRADE

O R C 2 . W O R L D

Page 481: Oracle8 - Tistory

그림 34-2 마스터 그룹과 대응하는 스냅샷 그룹

복제 사이트

복제 그룹은 다중 복제 사이트에 있을 수 있습니다. 복제 환경은 두 가지 기본 유형의사이트 즉, 마스터 사이트와 스냅샷 사이트를 지원합니다.

■ 마스터 사이트는 복제 그룹 내 모든 객체의 전체 복사본을 유지 관리합니다. 다중마스터 복제 환경에서 모든 마스터 사이트는 상호 간에 직접 통신하여 복제 그룹의 데이터와 스키마 변경 사항을 전달합니다. 마스터 사이트의 복제 그룹을 마스터 그룹이라고 합니다. 또한 모든 마스터 그룹은 단 하나의 마스터 정의 사이트를가집니다. (예를 들어, 그림 3 4 - 3의 O RC 1 . W O R L D가 마스터 정의 사이트일 수있습니다.) 복제 그룹의 마스터 정의 사이트는 해당 복제 그룹과 그 그룹 내의 객체를 관리하는 제어 지점 역할을 하는 마스터 사이트입니다.

■ 스냅샷 사이트는 관련 마스터 사이트에서 테이블 데이터의 읽기 전용 및 갱신 가능 스냅샷을 지원합니다. 스냅샷 사이트의 테이블 스냅샷은 복제 그룹 내의 테이블 데이터의 일부 또는 모두를 가질 수 있습니다. 그러나 이것은 마스터 사이트의테이블과 일 대 일 대응되는 단순 스냅샷이어야 합니다. 예를 들어, 스냅샷 사이트는 복제 그룹 내 선택된 테이블에 대해서만 스냅샷을 포함할 수 있으며 특정 스냅샷은 단지 특정 복제 테이블의 선택된 부분일 수 있습니다. 스냅샷 사이트의 복

데이터베이스 복제 3 4 - 5

복제 객체, 그룹 및 사이트

그룹 A

SCOTT.EMPSCOTT.DEPTSCOTT.SALGRADESCOTT.BONUS

그룹 B

MIKE.CUSTOMERMIKE.DEPARTMENTMIKE.EMPLOYEEMIKE.ITEM

그룹 A

SCOTT.EMPSCOTT.DEPT

그룹 B

MIKE.CUSTOMERMIKE.DEPARTMENTMIKE.EMPLOYEEMIKE.ITEM

마스터사이트 스냅샷사이트

Page 482: Oracle8 - Tistory

제 그룹을 스냅샷 그룹이라고 합니다. 스냅샷 그룹은 다른 복제 객체를 포함할 수도있습니다.

그림 34-3 세 개의 마스터 사이트와 한 개의 스냅샷 사이트

다중 마스터 복제

O ra c l e의 다중 마스터 복제를 사용하여 동등한 피어로 작동하는 여러 개의 사이트로복제된 데이터베이스 객체 그룹을 관리할 수 있습니다. 응용 프로그램은 다중 마스터구성에서 모든 사이트의 모든 복제 테이블을 갱신할 수 있습니다. 그림 3 4 - 4는 다중마스터 복제 시스템을 나타냅니다.

다중 마스터 환경에서 마스터 사이트로 작동하는 오라클 데이터베이스 서버는 모든테이블 복사본의 데이터를 집중시켜 자동으로 작업하며 전역 트랜잭션의 일관성과 데이터 무결성을 보장합니다.

다중 마스터 복제 사용

다중 마스터 복제는 특별한 요구 사항을 가지는 여러 가지 유형의 응용 프로그램 시스템에 유용합니다. 다음 시나리오는 다중 마스터 복제의 몇 가지 사용에 대해 설명합니다.

복구 사이트

다중 마스터 복제는 중요한 임무 수행 데이터베이스의 가용성을 보호하는데 사용될수 있습니다. 예를 들어, 다중 마스터 복제 환경은 시스템 또는 네트워크 중단으로 인

3 4 - 6 Oracle8i 개념 설명서, 볼륨 2

다중 마스터 복제

O R C 1 . W OR LD O R C 2 . W O R L D

마스터 사이트 마스터 사이트

S N A P 1 . W O R L D O R C 3 . W O R L D

스냅샷 사이트 마스터사이트

Page 483: Oracle8 - Tistory

해 기본 사이트를 사용할 수 없을 경우 복구 사이트를 구축하여 사용자 데이터베이스의 모든 데이터를 복제할 수 있습니다. Ora c l e의 대기 데이터베이스 기능과는 달리이러한 복구 사이트는 기본 사이트가 동시에 작동하고 있을 때 응용 프로그램 액세스를 지원하는 완전한 기능의 데이터베이스로도 제공될 수 있습니다.

그림 34-4 다중 마스터 복제 시스템

응용 프로그램 로드 분산

다중 마스터 복제는 과중한 응용 프로그램 로드를 분산시키고 지속적인 가용성을 보장하거나 보다 지역화된 데이터 액세스를 제공하기 위한 목적으로 데이터베이스 정보의 여러 지점을 액세스해야 하는 트랜잭션 프로세싱 응용 프로그램에 유용합니다.

응용 프로그램 로드 분산이 필요한 응용 프로그램은 일반적으로 고객 서비스 지향 응용프로그램을 포함하고 있습니다. (갱신 가능 스냅샷을 사용하여 응용 프로그램 로드를분산할 수도 있습니다. 자세한 내용은 34-8 페이지“스냅샷복제”를 참조하십시오. )

데이터베이스 복제 3 4 - 7

다중 마스터 복제

마스터사이트

복제 그룹

테이블

테이블

마스터사이트

복제 그룹

테이블

테이블

마스터사이트

복제 그룹

테이블

테이블

Page 484: Oracle8 - Tistory

그림 34-5 여러 지점의 갱신 액세스를 지원하는 다중 마스터 복제

스냅샷 복제

스냅샷은 적시에 한 지점으로부터 대상 마스터 테이블의 전체 또는 일부 복사본을 포함할 수 있습니다. 스냅샷은 읽기 전용이거나 갱신 가능합니다.

읽기 전용 스냅샷

기본 구성에서 스냅샷은 기본 또는“마스터”사이트에서 생성된 테이블 데이터에 읽기 전용 액세스를 제공할 수 있습니다. 응용 프로그램은 네트워크 가용성에 관계없이네트워크 액세스를 방지하는 로컬 데이터 복사본으로부터 데이터를 질의할 수 있습니다. 그러나 시스템 상의 응용 프로그램은 갱신이 필요한 경우 기본 사이트의 데이터에 액세스해야 합니다. 그림 3 4 - 6은 기본적인 읽기 전용 복제를 나타냅니다.

다음은 읽기 전용 스냅샷의 장점을 나열합니다.

■ 마스터 테이블은 마스터 그룹에 속하지 않아도 됩니다.

■ 복합 스냅샷을 지원할 수 있습니다. (스냅샷은 하나 이상의 테이블에 준하며 합계, 조인, 집합 연산 또는 CONNECT BY 절을 포함할 수 있습니다.)

3 4 - 8 Oracle8i 개념 설명서, 볼륨 2

스냅샷 복제

Page 485: Oracle8 - Tistory

■ 로컬 액세스를 제공하여 응답 시간과 가용성을 향상시킵니다.

■ 마스터 사이트로부터 질의를 오프로드합니다.

그림 34-6 읽기 전용 스냅샷 복제

갱신 가능 스냅샷

보다 고급 구성에서는 사용자가 대상 마스터 테이블의 행을 삽입, 갱신 및 삭제할 수있는 갱신 가능 스냅샷을 생성할 수 있습니다. 갱신 가능 스냅샷은 대상 마스터 테이블의 데이터 집합의 일부만을 포함할 수도 있습니다. 그림 3 4 - 7은 갱신 가능 스냅샷을 사용하는 복제 환경을 나타냅니다.

갱신 가능 스냅샷은 다중 마스터 복제를 지원하도록 설정된 마스터 사이트에 있는 테이블에 준합니다. 실제로 갱신 가능 스냅샷은 마스터 사이트의 마스터 그룹에 준하는스냅샷 그룹의 일부여야 합니다.

데이터베이스 복제 3 4 - 9

스냅샷 복제

클라이언트응용 프로그램

로컬질의

원격 갱신

네트워크

테이블데이터복제데이터베이스 마스터데이터베이스

테이블복사본(읽기전용)

마스터 테이블(갱신가능)

Page 486: Oracle8 - Tistory

그림 34-7 갱신 가능 스냅샷 복제

갱신 가능 스냅샷은 다음과 같은 특성을 가집니다.

■ 갱신 가능 스냅샷은 항상 단일 테이블에 준하여 점진적으로(또는“빠르게“) 갱신될 수 있습니다.

■ O ra c l e은 갱신 가능 스냅샷에서 생긴 변경 사항을 해당 스냅샷의 원격 마스터 테이블에 전달합니다. 필요한 경우 다른 모든 마스터 사이트에서 갱신 작업이 단계적으로 수행됩니다.

■ O ra c l e은 읽기 전용 스냅샷과 동일한 갱신 그룹의 일부로 갱신 가능 스냅샷을 갱신합니다. (갱신 그룹은 트랜잭션의 일관성을 유지 관리하는 구조적 기법입니다. )

갱신 가능 스냅샷은 다음과 같은 장점을 가집니다.

■ 마스터 사이트로부터 접속이 해제된 경우에도 사용자는 로컬 복제 데이터 집합을질의하거나 갱신할 수 있습니다.

■ 대상 마스터 테이블의 데이터 집합 중 선택된 부분만을 복제하여 얻은 데이터 보안을 증가시킬 수 있습니다.

■ 다중 마스터 복제보다 적은 영역을 사용합니다.

3 4 - 1 0 Oracle8i 개념 설명서, 볼륨 2

스냅샷 복제

마스터사이트

복제 그룹

복제

테이블

테이블

스냅샷사이트

복제 그룹의 일부

테이블

스냅샷사이트

복제 그룹의 전체 복사본

테이블

테이블

Page 487: Oracle8 - Tistory

스냅샷 복제 사용

스냅샷 복제는 여러 가지 유형의 응용 프로그램에 유용합니다. 이 단원에서는 스냅샷복제의 몇 가지 일반적인 사용에 대해 설명합니다.

정보 오프로딩

읽기 전용 스냅샷 복제는 전체 데이터베이스 또는 오프로드 정보를 복제하는 방법으로 유용합니다. 예를 들어, 대량의 트랜잭션 프로세싱 시스템에서 성능이 매우 중요시되는 경우 복제 데이터베이스를 유지 관리하여 의사 결정 지원 응용 프로그램의 요구 질의를 분리시킴으로써 성능을 향상시킬 수 있습니다.

그림 34-8 정보 오프로딩

정보 분산

읽기 전용 스냅샷 복제는 정보를 분산하는데 유용합니다. 예를 들어, 대형 백화점 체인의 운영을 생각해 봅시다. 이 경우 제품 가격 정보를 항상 사용할 수 있는 상태이고비교적 가장 최근의 것이며 모든 소매점에서 일관되도록 하는 것이 매우 중요합니다.이 목적을 달성하기 위해 각 소매점에서는 각자의 제품 가격 데이터 복사본을 가지고기본 가격 테이블에서 매일 밤마다 데이터를 갱신할 수 있습니다.

데이터베이스 복제 3 4 - 1 1

스냅샷 복제

OLT P데이터베이스

D S S데이터베이스

Page 488: Oracle8 - Tistory

그림 34-9 정보 분산

정보 전송

읽기 전용 및 갱신 가능 스냅샷 복제는 정보 전송 방법으로 유용합니다. 예를 들어,읽기 전용 스냅샷 복제는 제품 트랜잭션 프로세싱 데이터베이스로부터 데이터 웨어하우스로 데이터를 정기적으로 이동할 수 있습니다.

접속 해제 환경

갱신 가능 스냅샷 복제는 접속이 해제된 구성 요소를 사용할 때 동작하는 트랜잭션프로세싱 응용 프로그램을 배치하는데 유용합니다. 예를 들어, 생명 보험 회사의 일반적인 영업 자동화 시스템을 생각해 봅시다. 각 영업 사원은 랩톱 컴퓨터를 들고 정기적으로 고객을 방문하여 회사의 컴퓨터 네트워크와 중앙 집중된 데이터베이스 시스템으로부터 접속이 해제된 상태에서 개인 데이터베이스에 주문을 기록해야 합니다.사무실로 돌아오자 마자 각 영업 사원은 모든 주문을 회사의 중앙 집중된 데이터베이스로 전송해야 합니다.

예를 들어, 스냅샷 환경을 영업 환경에 배치하기 위해 배치 템플리트를 사용하여 데이터베이스 관리자는 스냅샷 환경의 분산과 설치를 쉽게 하고 사용자가 정의하며 보안 기능을 갖추기 위해 마스터 사이트의 스냅샷 환경을 미리 작성할 수 있습니다. 배치 템플리트를 사용하여 D B A는 스냅샷 환경을 한 번 작성하여 대상 스냅샷 사이트에 필요할 때마다 배치할 수 있습니다.

3 4 - 1 2 Oracle8i 개념 설명서, 볼륨 2

스냅샷 복제

가격

가격 가격 가격

소매점데이터베이스

소매점데이터베이스

소매점데이터베이스

H Q데이터베이스

Page 489: Oracle8 - Tistory

다중 마스터와 스냅샷 하이브리드 구성

다중 마스터 복제와 스냅샷은 다양한 응용 프로그램 요구 사항을 만족시키는 하이브리드 또는“혼합”구성으로 결합될 수 있습니다. 혼합 구성은 몇 개의 마스터 사이트와 각 마스터의 다중 스냅샷 사이트로 이루어집니다.

예를 들어, 그림 3 4 - 1 0에 나타난 바와 같이 2개의 마스터 간에 n 방식(또는 다중 마스터) 복제는 2개의 지리적 영역을 지원하는 데이터베이스 간에 전체 테이블 복제를지원할 수 있습니다. 각 영역 내의 사이트로 테이블 전체 또는 일부를 복제하도록 마스터에서 스냅샷을 정의할 수 있습니다.

그림 34-10 하이브리드구성

스냅샷과 복제된 마스터 간에는 다음과 같은 주요한 차이점이 있습니다.

■ 복제된 마스터는 복제될 전체 테이블의 데이터를 포함해야 하는 반면 스냅샷은 마스터 테이블 데이터의 일부를 복제할 수 있습니다.

■ 다중 마스터 복제 기능을 사용하여 변경 사항이 발생했을 때 각 트랜잭션에 대한변경 사항을 복제할 수 있습니다. 스냅샷 갱신은 보다 효율적이며 일괄처리 지향작업으로 너무 빈번하지 않게 여러 트랜잭션의 변경 사항을 전달하도록 설정되어있습니다.

데이터베이스 복제 3 4 - 1 3

다중 마스터와 스냅샷 하이브리드 구성

마스터사이트

복제 그룹

N 방식마스터사이트 복제 그룹

스냅샷사이트

복제 그룹

스냅샷사이트 복제 그룹

스냅샷사이트 복제 그룹

Page 490: Oracle8 - Tistory

■ 동일한 데이터의 여러 복사본에 대한 변경으로 충돌이 발생한 경우 마스터 사이트는 이 충돌을 감지하여 해결합니다.

복제 환경 관리

복제 환경을 관리하고 모니터할 수 있는 여러 가지 도구가 있습니다. Oracle Repli-cation Manager는사용자 환경 관리를 돕는 강력한 GUI 인터페이스를 제공하는 반면, 복제 관리 A P I는 복제 관리를 위한 사용자 정의 스크립트를 작성할 수 있는 친숙한 응용 프로그래밍 인터페이스( A P I )를 제공합니다. 또한 복제 카탈로그는 사용자복제 환경에 관해 정보를 지속적으로 제공합니다.

복제 카탈로그

복제 환경의 모든 마스터와 스냅샷 사이트에는 복제 카탈로그가 있습니다. 사이트의복제 카탈로그는 해당 사이트의 복제 객체와 복제 그룹에 대한 관리 정보를 유지 관리하는 구분된 데이터 딕셔너리 테이블과 뷰 집합입니다. 복제 환경 내의 모든 서버는 복제 카탈로그의 정보를 사용하여 복제 그룹에 있는 객체의 복제 작업을 자동화할수 있습니다.

복제 관리 A P I와 관리 요청

복제 환경을 구성하고 관리하기 위해 참여하는 각 서버는 O ra c l e의 복제 응용 프로그래밍 인터페이스( A P I )를 사용합니다. 서버의 복제 관리 A P I는 관리자가 O ra c l e의복제 기능을 구성하는데 사용할 수 있는 프로시저와 함수를 캡슐화한 PL/SQL 패키지입니다. Oracle Replication Manager는각 사이트에 있는 복제 관리 A P I의 프로시저와 함수를 사용하여 작업을 수행합니다.

관리 요청은 O ra c l e의 복제 관리 A P I에 있는 프로시저 또는 함수에 대한 호출입니다. 예를 들어, 사용자가 Replication Manager를 사용하여 새로운 마스터 그룹을생성할 때 Replication Manager는 D B M S _ R E P CAT. C R E AT E _ M A S T E R _ R E -P G ROUP 프로시저를 호출하여 작업을 완료합니다. 일부 관리 요청은 추가 복제 관리 API 호출을 생성하여 요청을 완료합니다.

O racle Replication Manager

다중 마스터와 스냅샷 복제 환경을 모두 지원하는 복제 환경을 구성하고 관리하는데어려움이 있을 수 있습니다. Ora c l e은 O racle Replication Manager라는 관리 도

3 4 - 1 4 Oracle8i 개념 설명서, 볼륨 2

복제 환경 관리

Page 491: Oracle8 - Tistory

구를 제공하여 관리자가 복제 환경을 관리하는 것을 돕습니다. 이 개념 설명서의 다른 단원에서는 O racle Replication Manager를 사용하는데 필요한 정보와 예를 다룹니다.

복제 충돌

비동기 다중 마스터와 갱신 가능 스냅샷 복제 환경은 예를 들어, 다른 사이트로부터생성된 두 개의 트랜잭션이 거의 동시에 동일한 행을 갱신할 때 발생할 수 있는 복제충돌 가능성을 해결해야 합니다.

데이터 충돌이 발생하면 충돌이 사용자의 업무 규칙대로 해결되며 데이터가 모든 사이트에서 제대로 수렴된다는 것을 보장하는 기법이 필요합니다.

또한 사용자의 복제 환경에서 발생할 수 있는 충돌을 기록하기 위해 O racle 복제는업무 규칙대로 충돌을 해결할 데이터베이스의 충돌 해결 시스템을 정의할 수 있는 다양한 충돌 해결 방법을 제시합니다. Ora c l e의 기존 충돌 해결 방법으로 해결할 수 없는 고유한 상황에 처해 있다면 사용자만의 충돌 루틴을 구축하고 사용할 수 있습니다.

추가 정보: O racle8i Replication에서는데이터 충돌을 피하도록 데이터베이스를 설계하는 방법과 충돌 발생 시 해결할 수 있는 충돌 해결루틴을 구축하는 방법에 대해 설명합니다. 또한 복제 관리 A P I를 사용하여 충돌 해결 루틴을 구축하는 방법에 대해서도 설명합니다.

특수 복제 옵션

일부 응용 프로그램에는 복제 시스템에 대한 특별한 요구 사항이 있습니다. 이 단원에서는 O ra c l e의 고유한 복제 옵션에 대해 설명하며 다음 내용을 다룹니다.

■ 프로시저 복제

■ 동기식 (실시간) 데이터 전달

프로시저 복제

일괄처리 응용 프로그램은 하나의 트랜잭션을 사용하여 대량의 데이터를 변경할 수있습니다. 이 경우 일반적인 행 레벨 복제는 대량의 데이터 변경 사항으로 네트워크정체를 유발할 수 있습니다. 이러한 문제점을 피하기 위해 복제 환경에서 작동하는일괄처리 응용 프로그램은 데이터 복제를 집중시키는 간단한 내장 프로시저 호출을

데이터베이스 복제 3 4 - 1 5

특수 복제 옵션

Page 492: Oracle8 - Tistory

복제하는 O ra c l e의 프로시저 복제 기능을 사용할 수 있습니다. 프로시저 복제는 응용프로그램이 테이블을 갱신하는데 사용하는 내장 프로시저에 대한 호출만을 복제하며데이터 수정 사항은 복제하지 않습니다.

프로시저 복제를 사용하려면 모든 사이트의 시스템에 있는 데이터를 수정하는 패키지를 모두 복제해야 합니다. 패키지를 복제한 다음 각 사이트에 해당 패키지에 대한 래퍼를 생성해야 합니다. 데이터를 수정하기 위해 응용 프로그램이 로컬 사이트에서 패키지 프로시저를 호출하면 래퍼는 복제 환경에 있는 다른 모든 사이트에서도 궁극적으로 동일한 패키지 프로시저 호출이 발생하도록 합니다. 프로시저 복제는 비동기적또는 동기적으로 발생할 수 있습니다.

충돌 감지와 프로시저 복제 복제 시스템이 프로시저 복제를 사용하여 데이터를 복제할 때 데이터를 복제하는 프로시저는 복제된 데이터의 무결성을 보장해야 합니다.즉, 사용자는 복제 충돌을 피하거나 복제 충돌을 감지하여 충돌을 적합하게 해결하도록 프로시저를 설계해야 합니다. 따라서 프로시저 복제는 데이터베이스가 대량의 일괄처리 작업에만 사용될 때 가장 일반적으로 사용됩니다. 이 경우 여러 트랜잭션이동일한 데이터를 액세스하는 일은 없으므로 복제 충돌이 발생하는 경우는 극히 드뭅니다.

동기식 (실시간) 데이터 전달

복제 환경에서는 비동기식 데이터 전달이 일반적인 구성입니다. 그러나 O ra c l e은 특별한 요구 사항을 가지는 응용 프로그램에 대해서는 동기식 데이터 전달도 지원합니다. 동기식 데이터 전달은 응용 프로그램이 테이블의 로컬 복사본을 갱신하는 동시에동일한 트랜잭션 내에서 동일한 테이블의 모든 다른 복사본도 갱신하고자 할 때 발생합니다. 따라서 동기식 데이터 복제를 실시간 데이터 복제라고도 합니다. 응용 프로그램에서 계속 동기화 상태인 복제 사이트를 필요로 하는 경우에만 동기식 복제를 사용하십시오.

다른 사용자가 비동기식 전달(지연된 트랜잭션)을 사용하고 있는 동안 동기식으로 변경 사항을 전달하는 사이트가 있는 복제 환경을 생성할 수 있습니다.

주: 복제 데이터의 실시간 전달을 사용하는 복제 시스템은 시스템에 있는 모든 사이트를 동시에 사용할 수 있을 경우에만 복제 시스템이 제대로 작동하므로 시스템과 네트워크 가용성에 상당히 종속적입니다.

복제 충돌과 동기식 데이터 복제 공동 소유 시스템이 모든 변경 사항을 동기식(실시간)으로 복제하면 복제 충돌은 발생하지 않습니다. 실시간 복제에서 응용 프로그램은

3 4 - 1 6 Oracle8i 개념 설명서, 볼륨 2

특수 복제 옵션

Page 493: Oracle8 - Tistory

분산 트랜잭션을 사용하여 동시에 테이블의 모든 복제를 갱신합니다. 분산되지 않은데이터베이스 환경과 마찬가지로 O ra c l e은 트랜잭션 간에 모든 유형의 파괴적인 방해현상이 발생하지 않도록 하기 위해 각 분산된 트랜잭션에 대해 자동으로 행을 잠급니다. 실시간 복제 시스템은 복제 충돌을 막아줍니다.

데이터베이스 복제 3 4 - 1 7

특수 복제 옵션

Page 494: Oracle8 - Tistory

3 4 - 1 8 Oracle8i 개념 설명서, 볼륨 2

특수 복제 옵션

Page 495: Oracle8 - Tistory

X부록

X부에서는 다음 부록을 포함하고 있습니다.

■ 부록 A “운영 체제별 정보”

Page 496: Oracle8 - Tistory

운영 체제별 정보 A - 1

A운영 체제별 정보

이 설명서에서는 특정 운영 체제에서 O racle 사용에 대한 자세한 정보를 포함하는 다른오라클 설명서를 참조하는 경우가 있습니다. 정확한 이름은 운영 체제마다 다르지만 이러한 오라클 설명서를 설치 및 구성 설명서라고도 합니다. 이 설명서에서는 이러한 설명서에대한 참조를 왼쪽 여백에 아이콘으로 표시합니다.

이 부록은 이 설명서에서 참조한 운영 체제별 오라클 설명서를 나열하며 운영 체제( O S )별초기화 매개변수를 나열합니다. 여러 운영 체제에서 O ra c l e을 사용한다면 이 부록은 응용프로그램을 여러 운영 체제 상에서의 이식 여부를 확인하는데 유용합니다.

Page 497: Oracle8 - Tistory

A - 2 O r a c l e 8i 개념 설명서, 볼륨 2

다음은 이 설명서의 운영 체제별 항목을 문자순으로 나열합니다.

■ 관리자 권한, 필요 조건: 5-3 페이지의“관리자권한으로 접속”

■ 감사: 31-5 페이지의“항상 운영 체제 감사 트레일에 감사되는 이벤트”및 3 1 - 6페이지의“OS 감사 트레일에 감사”

■ 사용자 인증: 29-4 페이지의“운영체제에 의한 인증”

■ DBA 인증: 5-3 페이지의“관리자 권한으로 접속”및 29-12 페이지의“데이터베이스 관리자 인증”

■ 백그라운드 프로세스, ARCn: 8-12 페이지의“아카이버프로세스( A RCn)”

■ 백그라운드 프로세스, 생성: 8-5 페이지의“백그라운드프로세스”

■ 백그라운드 프로세스, DBWn 프로세스: 8-8 페이지의“데이터베이스 기록자( D BWn)”

■ 클라이언트/서버 통신: 8-22 페이지의“전용서버 구성”

■ 통신 소프트웨어: 8-26 페이지의“운영체제 통신 소프트웨어”

■ O racle 구성: 8-2 페이지의“프로세스유형”

■ 데이터 블록, 크기: 4-3 페이지의“데이터블록”

■ 데이터 파일, 파일 헤더 크기: 3-16 페이지의“데이터파일”

■ 전용 서버, 관리 작업 요청: 8-20 페이지의“다중스레드 서버의 제한된 작업”

■ 인덱스, 인덱스 블록의 오버헤드: 10-26 페이지의“인덱스블록 형식”

■ Net8, 네트워크 드라이버 선택 및 설치: 8-26 페이지의“프로그램 인터페이스 드라이버”

■ Net8, Net8 소프트웨어에포함된 드라이버: 6-5 페이지의“Net8 작동방법”

■ 병렬 복구 및 비동기 입출력: 32-11 페이지의“병렬 복구로 이익을 얻을 수 있는상황”

■ 프로그램 글로벌 영역( P GA): 7-15 페이지의“P GA의 크기”

■ 운영 체제에 의한 롤 관리: 30-22 페이지의“운영체제와 롤”

■ 롤백 세그먼트, 트랜잭션 수: 4-20 페이지의“트랜잭션과롤백 세그먼트”

■ 소프트웨어 코드 영역, 공유 또는 비공유: 7-17 페이지의“소프트웨어코드 영역”

Page 498: Oracle8 - Tistory

운영 체제별 정보 A - 3

데이터베이스, 테이블스페이스및 데이터 파일

Page 499: Oracle8 - Tistory

색인

색인-1

2 0 0 0년, 12-12

2단계 커밋

병렬 D M L, 26-40

설명, 1-35, 33-13

수동 무시 기능, 1-36

트랜잭션 관리, 17-7

트리거, 20-2

A

ADMIN OPTION

EXECUTE ANY TYPE, 14-14

롤, 30-19

시스템 권한, 30-3

A D T, 객체 유형 참조

AFTER 트리거, 20-9

실행된 경우, 20-21

정의, 20-9

A L E RT 파일, 8-14

A RCn 프로세스, 8-12

리두 로그, 8-9

A L L, 23-6

ALL_ 뷰, 2-6

A L L _ ROWS 힌트, 23-33

A L L _ U P DATABLE_COLUMNS 뷰, 10-15

A LTER ANY TYPE 권한, 14-13

권한 참조

A LTER DATABASE 명령어

대기 데이터베이스, 5-7

A LTER INDEX 명령어

REBUILD PA RTITION, 11-60

SPLIT PA RT I T I O N에 대해 N O L O G G I N G모드, 11-58, 25-7

분할 영역 속성, 11-37

A LTER SESSION

F O RCE PARALLEL DDL, 26-24, 26-27

C reate Table as Select, 26-26, 26-27

분할 영역 이동 또는 분할, 26-25, 2 6 - 2 8

인덱스 생성 또는 재구축, 26-25, 26-27

F O RCE PARALLEL DML

갱신 및 삭제, 26-22, 26-27

삽입, 26-23, 26-24, 26-27

A LTER SESSION 명령어, 16-5

E NABLE PARALLEL DML, 26-38

HASH_JOIN_ ENA B L E D, 24-7

O P T I M I Z E R _ G OA L, 23-32

SET CONSTRAINTS DEFERRED, 28-21

동적 매개변수, 5-5

트랜잭션 분리 레벨, 27-7, 27-31

A LTER SYSTEM 명령어, 16-5

SWITCH LOGFILE 옵션, 8-12

동적 매개변수, 5-5

Page 500: Oracle8 - Tistory

L O G _ A RC H I V E _ M A X _ P RO C E S S E S, 8-12, 32-20

A LTER TABLE 명령어

CACHE 절, 7-4

D E A L L O CATE UNUSED, 4-14

D ROP COLUMN, 10-6

E XCHANGE PA RTITION, 11-11

M E RGE PA RT I T I O N S, 11-16

MODIFY CONSTRAINT, 28-23

SPLIT PA RT I T I O N에 대해 N O L O G G I N G모드, 11-58, 25-7

UNUSED 열, 10-6

감사, 31-7

분할 영역 속성, 11-27

제약 조건 비활성화 또는 활성화, 28-22

제약 조건 준수 또는 위반, 28-22

트리거, 20-6

해시 분할 영역 추가 또는 병합, 11-17

A LTER TA B L E S PACE 명령어

READ ONLY, 3-10

READ WRITE, 3-11

T E M P O R A RY 또는 P E R M A N E N T, 3 - 1 3

A LTER USER 명령어

임시 세그먼트, 4-18

A LTER 명령어, 16-4

감사 분할 영역, 11-63

A LWAYS_ANTI_JOIN 매개변수, 24-13

A LWAYS_SEMI_JOIN 매개변수, 24-13

A NA LYZE 명령어, 16-4

공유 풀, 7-11

막대 그래프 생성, 22-11

분할 영역 통계, 11-14

예측 통계, 22-14

ANSI SQL 표준

O racle 인증, 1-3

데이터 유형, 12-22

ANSI/ISO SQL 표준, 1-3

데이터 동시성, 27-2

분리 레벨, 27-10

조합 외래 키, 28-16

A N Y, 23-6

AQ

대기열 모니터 프로세스, 1-20, 8-13, 19-6

구간 통계, 19-11

실행 윈도우, 19-7

대기열 테이블 엑스포트, 19-12

대기열 테이블, 19-4

등록/구독 지원, 19-10

이벤트 등록, 20-18

메시지 대기열 처리, 19-2

수신자, 19-5

구독 목록, 19-5

규칙 기준 구독, 19-5, 19-6

원격 데이터베이스, 19-9

AQ _ A D M I N I S T R ATOR 롤, 19-7

AQ _ T M _ P ROCESS 매개변수, 19-6, 19-7

A RCHIVELOG 모드

개요, 1-48

부분 데이터베이스 백업, 1-50, 32-24

아카이버 프로세스( A RCn), 1-19, 8-12, 32-18

전체 데이터베이스 백업, 32-24

정의, 32-18

A RCn 백그라운드 프로세스, 1-19, 8-12

아카이버 프로세스 참조

AUDIT 명령어, 16-4

잠금, 27-29

B

B* 트리 인덱스, 10-27

비트맵 인덱스, 10-32, 10-33

색인-2

Page 501: Oracle8 - Tistory

인덱스 구성 테이블, 10-36

BEFORE 트리거, 20-9

실행된 경우, 20-21

정의, 20-9

BETWEEN, 23-7

BFILE 데이터 유형, 12-14

B L O B, 12-13

BOOLEAN 데이터 유형, 12-2

BSP 백그라운드 프로세스, 27-6

BUFFER_POOL_KEEP 매개변수, 7-5

B U F F E R _ P O O L _ R E C YCLE 매개변수, 7-5

B U I L D _ PA RT_INDEX 프로시저, 11-30

C

CACHE 절, 7-4

CA S CADE 작업

DELETE 문, 28-17

CHAR 데이터 유형, 12-5

공백 채움 비교 의미, 12-5

C H A RT O ROWID 함수, 12-23

CHECK 제약 조건, 28-17

검사 방법, 28-20

부분적으로 널인 외래 키, 28-16

분할 영역 뷰, 11-11

열에 대한 여러 개의 제약 조건, 28-18

정의, 28-17

하위 질의 금지, 28-18

CHOOSE 힌트, 23-33

CKPT 백그라운드 프로세스, 1-19, 8-11

CLOB 데이터 유형, 12-13

COMMENT 명령어, 16-4

COMMIT 명령어, 16-5

2단계 커밋, 17-7, 33-13

D D L에 의해 함축, 17-2, 17-4

병렬 D M L에서 2단계 커밋, 26-40

빠른 커밋, 8-10

트랜잭션 종료, 17-2, 17-4

C O M PATIBLE 매개변수

읽기 전용 테이블스페이스, 3-11

CONNECT BY 절

뷰 질의 최적화, 23-16

CONNECT INTERNA L, 5-3

CONNECT 롤, 30-22

사용자 정의 유형, 14-13, 14-14

CPU 시간 제한, 29-17

C R E ATE ANY TYPE 권한, 14-13

권한 참조

C R E ATE CLUSTER 명령어

HASHKEYS 절, 10-53, 10-57

SINGLE TABLE HASHKEYS, 10-57

저장 영역 매개변수, 4-17

C R E ATE FUNCTION 명령어, 18-17

C R E ATE INDEX 명령어

NOLOGGING 모드, 11-58, 25-7

객체 유형, 14-6

병렬화 규칙, 26-25

분할 영역 속성, 11-37

임시 세그먼트, 4-18

저장 영역 매개변수, 4-17

C R E ATE OUTLINE 문, 22-6

C R E ATE PAC K AGE BODY 명령어, 18-12, 1 8 - 1 7

C R E ATE PAC K AGE 명령어

예, 18-12, 20-10

잠금, 27-29

패키지 이름, 18-17

C R E ATE PROCEDURE 명령어

예, 18-6

잠금, 27-29

프로시저 이름, 18-17

C R E ATE SYNONYM 명령어

잠금, 27-29

색인-3

Page 502: Oracle8 - Tistory

C R E ATE TABLE AS SELECT

병렬화 규칙

인덱스 구성 테이블, 26-31

C R E ATE TABLE 명령어

AS SELECT

NOLOGGING 모드, 11-58, 25-7

병렬화 규칙, 26-25

영역 단편화, 26-33

의사 결정 지원 시스템, 26-31

임시 저장 영역, 26-33

직접 로드 I N S E RT, 25-2

CACHE 절, 7-4

감사, 31-7, 31-10

병렬화, 26-31

인덱스 구성 테이블, 26-31

분할 영역 속성, 11-27

객체 테이블, 13-8, 13-12, 14-5, 14-8

열 객체, 13-5, 14-8

중첩 테이블, 13-12

잠금, 27-29

저장 영역 매개변수, 4-17

제약 조건 활성화 또는 비활성화, 28-22

트리거, 20-6

C R E ATE TA B L E S PACE 명령어

T E M P O R A RY 절, 3-13

C R E ATE TEMPORARY TABLE 명령어, 1 0 - 1 0

C R E ATE TEMPORARY TA B L E S PACE 명령어, 3-13

C R E ATE TRIGGER 명령어

예, 20-11, 20-14, 20-24

객체 테이블, 14-7

잠금, 27-29

컴파일 및 저장됨, 20-25

C R E ATE TYPE 권한, 14-13

권한 참조

C R E ATE TYPE 명령어

VA R R AY, 13-11

객체 뷰, 15-3

객체 유형, 13-4, 14-3, 14-4, 14-8

불완전 유형, 14-16

중첩 테이블, 13-4, 13-12, 14-4

C R E ATE USER 명령어

임시 세그먼트, 4-18

C R E ATE VIEW 명령어

예, 20-14

객체 뷰, 15-3

잠금, 27-29

C R E ATE 명령어, 16-4

C R E ATE_STORED_OUTLINES 세션매개변수, 22-6

D

DATE 데이터 유형, 12-10

기본 형식 변경, 12-10

분할 영역 제거, 11-22

분할, 11-14, 11-21

산술 연산, 12-11

율리우스 날짜, 12-11

자정, 12-11

DBA 롤, 30-22

사용자 정의 유형, 14-13

DBA_ 뷰, 2-6

DBA_QUEUE_SCHEDULES 뷰, 19-10

D B A _ SY N O N Y M S.SQL 스크립트 사용,

2 - 7

D B A _ U P DATABLE_COLUMNS 뷰, 10-15

D B M S, 1-2

일반 요구 사항, 1-51

객체 관계형 D B M S, 13-2

D B M S _ AQ 패키지, 19-4

색인-4

Page 503: Oracle8 - Tistory

D B M S _ AQADM 패키지, 19-4, 19-7

DBMS_JOB 패키지, 8-13

O racle 지원 패키지, 18-16

DBMS_LOCK 패키지, 27-39

O racle 지원 패키지, 18-16

DBMS_PCLXUTIL 패키지, 11-30

DBMS_RLS 패키지

보안 정책, 30-23

정의자 권한 사용, 30-8

DBMS_SQL 패키지, 16-19

DDL 문 구문 분석, 16-19

O racle 지원 패키지, 18-16

D B M S _ S TATS 패키지, 22-12

막대 그래프 생성, 22-11

분할 영역 통계, 11-14

예측 통계, 22-14

D BWn 백그라운드 프로세스, 8-8

데이터베이스 기록자 프로세스 참조

DB_BLOCK_BUFFERS 매개변수

버퍼 캐시, 7-5

시스템 글로벌 영역 크기, 7-13

D B _ B L O C K _ L RU _ L ATCHES 매개변수, 8-8

DB_BLOCK_SIZE 매개변수

버퍼 캐시, 7-5

시스템 글로벌 영역 크기, 7-13

DB_FILES 매개변수, 7-15

D B _ F I L E _ M U LTIBLOCK_READ_COUNT 매개변수, 23-51

비용 기준 최적화, 24-9

D B _ NAME 매개변수, 32-22

D B _ W R I T E R _ P ROCESSES 매개변수, 1-18, 8 - 8

D D L, 1-52, 16-4

데이터 정의어 참조

DELETE 명령어, 16-4

NOLOGGING 모드, 25-7

L O B, 25-7

데이터 블록에서 사용 가능한 영역, 4-9

병렬 D E L E T E, 26-21

외래 키 참조, 28-16

트리거, 20-2, 20-6

DETERMINISTIC 함수, 23-9

함수 기준 인덱스, 21-8

D I SABLE 제약 조건, 28-22

D I SABLED 인덱스, 21-8

DISTINCT 연산자

뷰 최적화, 23-17

D I S T R I B U T E D _ T R A N SACTIONS 매개변수, 8 - 1 2

DML 하위 분할 영역 잠금, 11-46

D M L, 1-52, 16-3

데이터 조작어 참조

D ROP ANY TYPE 권한, 14-13

권한 참조

D ROP COLUMN 절, 10-6

D ROP TABLE 명령어

감사, 31-7

트리거, 20-6

D ROP TYPE 명령어

종속성, 14-17

F O RCE 옵션, 14-17

D ROP 명령어, 16-4

DSS 데이터베이스

디스크 스트리핑, 26-48

병렬 D M L, 26-37

분할 영역, 11-6

성능, 11-9

인덱스 분할, 11-37

점수 기록 테이블, 26-38

D UAL 테이블, 2-7

D i g i t a l의 P O LYCENTER Manager on Net V i ew, 33-20

색인-5

Page 504: Oracle8 - Tistory

D i re c t o ry-enabled Oracle Security Manager,2 9 - 5

Dnnn 백그라운드 프로세스, 8-14

디스패처 프로세스 참조

E

E NABLE 제약 조건, 28-22

Enterprise Manager, 33-19

A L E RT 파일, 8-15

P L / S Q L, 16-17, 16-19

S GA의 크기 보기, 7-13

SQL 문, 16-2

롤 부여, 30-18

병렬 복구, 32-11

분산 데이터베이스, 33-19

스키마 객체 권한, 30-4

시스템 권한 부여, 30-3

시작, 5-5

잠금과 래치 모니터, 27-29

종료, 5-9, 5-10

체크포인트 통계, 8-11

통계 모니터, 29-19

패키지 실행, 18-6

프로시저 실행, 18-4

E XCHANGE PA RTITION, 11-11

EXECUTE ANY TYPE 권한, 14-13, 14-14

권한 참조

EXECUTE 권한

권한 참조

사용자 액세스 검증, 18-18

사용자 정의 유형, 14-14

EXECUTE 권한에 대한 GRANT 옵션, 14-14

EXECUTE 사용자 정의 유형, 14-13

E X P _ F U L L _ DATABASE 롤, 30-22

EXPLAIN PLAN 명령어, 16-4

분할 영역 제거, 11-22

스타 변형, 24-18

스타 질의, 24-17

액세스 경로, 23-38, 23-39, 23-40, 23-41,23-42, 23-43, 23-44, 23-45, 23-46, 23-47, 23-48, 23-49, 23-50

Export 유틸리티, 1-5

백업에 사용, 32-25

분할 영역 유지 관리 작업, 11-48

사용자 정의 유형, 14-20

통계 복사, 22-8

F

FA S T _ S TA RT _ I O _ TA RGET 매개변수, 32-13

FIPS 표준, 16-6

F I R S T _ ROWS 힌트, 23-33

F O RCE PARALLEL DDL 옵션, 26-24, 26-27

C reate Table as Select, 26-26, 26-27

분할 영역 이동 또는 분할, 26-25, 26-28

인덱스 생성 또는 재구축, 26-25, 26-27

F O RCE PARALLEL DML 옵션

갱신 및 삭제, 26-22, 26-27

삽입, 26-23, 26-24, 26-27

F O RCE 옵션

객체 유형 종속성, 14-17

FOREIGN KEY 제약조건

널, 28-15

상위 키 값 변경, 28-16

상위 키 테이블 갱신, 28-16

상위 테이블 행 삭제, 28-17

열의 최대 수, 28-13

제약 조건 검사, 28-20

G

GRANT ANY PRIVILEAGE 시스템권한, 3 0 - 3

색인-6

Page 505: Oracle8 - Tistory

GRANT 명령어, 16-4

잠금, 27-29

G ROUP BY 절

뷰 최적화, 23-17

임시 테이블스페이스, 3-12

H

HASHKEYS 매개변수, 10-53, 10-57

H A S H _ AJ 힌트, 24-13

HASH_AREA_SIZE 매개변수, 24-8

H A S H _ J O I N _ AVAILABLE 매개변수, 24-7

H A S H _ M U LTIBLOCK_IO_COUNT 매개변수,2 4 - 8

HASH_SJ 힌트, 24-13

H E X T O R AW 함수, 12-23

H I G H _ VALUE 통계, 23-52

H I _ S H A R _ M E M O RY_ADRESSES 매개변수, 7 - 1 3

H P의 O p e n V i ew, 33-20

I

I B M의 N e t V i ew/6000, 33-20

I L M S, 16-20

I M P _ F U L L _ DATABASE 롤, 30-22

IN 연산자, 23-5

뷰 병합, 23-18

IN 하위 질의, 23-17

INDEX_FFS 힌트, 23-36

INDEX_JOIN 힌트, 23-36

I N I T.ORA 파일, 5-4, 5-5

I N S E RT 명령어, 16-3

I N S E RT...SELECT 병렬화, 26-23

병렬 I N S E RT에 대한 저장 영역, 25-8

사용 가능 영역 목록, 4-9

직접 로드 I N S E RT, 25-2

NOLOGGING 모드, 11-58, 25-5, 25-7

트리거, 20-2, 20-6

BEFORE 트리거, 20-9

INSTEAD OF 트리거, 20-12

객체 뷰, 15-5

중첩 테이블, 15-5

I N T E R NAL 접속, 5-3

감사되지 않는 명령문 실행, 31-5

INTERSECT 연산자

뷰 질의 최적화, 23-16

예, 23-29

혼합 질의, 23-4

I N VALID 상태, 21-2

IS NULL 술어, 10-8

ISO SQL 표준, 1-3, 12-22

조합 외래 키, 28-16

Import 유틸리티, 1-6

복구 시 사용, 32-25

분할 영역 유지 관리 작업, 11-48

사용자 정의 유형, 14-20

통계 복사, 22-8

Inter-Language Method Service(ILMS), 1 6 - 2 0

J

J O B _ Q U E U E _ P ROCESSES 매개변수, 19-10

J ava

트리거, 20-1, 20-7

L

LCK0 백그라운드 프로세스, 1-20, 8-13

L GWR 백그라운드 프로세스, 8-9

로그 기록자 프로세스 참조

LICENSE_MAX_SESSIONS 매개변수, 29-20

L I C E N S E _ S E S S I O N S _ WARNING 매개변수, 2 9 - 2 0

L I K E, 23-5

L I S T E N E R.ORA 파일, 6-6

L I S T E N E R.ORA 파일의 S I D, 6-6

LOB 데이터 유형, 12-12

색인-7

Page 506: Oracle8 - Tistory

B F I L E, 12-14

B L O B, 12-13

CLOB 및 N C L O B, 12-13

NOLOGGING 모드, 25-7

기본 로깅 모드, 25-7

제한 사항

병렬 D D L, 26-31

병렬 D M L, 26-44

LOCK TABLE 명령어, 16-4

L O C K _ S GA 매개변수, 7-13, 7-17

L O G _ A RC H I V E _ M A X _ P ROCESSES 매개변수, 1-19, 8-12

자동 아카이브, 32-19

L O G _ A RC H I V E _ S TA RT 매개변수, 32-19

LOG_BUFFER 매개변수, 7-6

시스템 글로벌 영역 크기, 7-13

L O G _ C H E C K P O I N T _ I N T E RVAL 매개변수, 3 2 - 1 3

LOG_CHECKPOINT_TIMEOUT 매개변수, 3 2 - 1 3

LONG RAW 데이터유형, 12-14

LONG 데이터 유형과 유사, 12-15

인덱스 금지, 12-15

제한 사항 분할, 11-14

LONG 데이터 유형

자동으로 마지막 열, 10-7

저장 영역, 10-7

정의, 12-7

제한 사항 분할, 11-14

L OW _ VALUE 통계, 23-52

L RU(Least Recently Used) 알고리즘

공유 SQL 풀, 7-8, 7-10

데이터베이스 버퍼, 7-3

딕셔너리 캐시, 2-4

래치, 8-8

전체 테이블 스캔, 7-4

L RU, 7-3, 7-4, 8-8

공유 SQL 풀, 7-8, 7-10

딕셔너리 캐시, 2-4

래치, 8-8

M

MAXEXTENTS UNLIMITED 저장영역 매개변수, 26-40

M A X VALUE

분할된 테이블과 인덱스, 11-20

M E RGE 힌트, 23-17

M E RG E _ AJ 힌트, 24-13

M E RGE_SJ 힌트, 24-13

MINIMUM EXTENT

병렬 D M L, 25-9, 25-10

MINIMUM EXTENT 매개변수, 26-33

MINUS 연산자

뷰 질의 최적화, 23-16

혼합 질의, 23-4

MODIFY CONSTRAINT 옵션, 28-23

M OVE PA RTITION 명령어

NOLOGGING 모드, 11-58, 25-7

병렬화 규칙, 26-25

MPP

대형 병렬 처리 참조

M T S _ M A X _ S E RVERS 매개변수, 8-19

인위적인 교착 상태, 8-20

M T S _ S E RVERS 매개변수, 8-19

NNCHAR 데이터 유형, 12-6

NCLOB 데이터 유형, 12-13

NEXT 저장 영역 매개변수

병렬 직접 로드 I N S E RT, 25-9

값 계산, 25-9

NLS

색인-8

Page 507: Oracle8 - Tistory

국가별 언어 지원 참조

N L S _ DAT E _ F O R M AT 매개변수, 12-10

NLS_LANG 환경 변수, 11-20

N L S _ L A N GUAGE 매개변수, 11-20

N L S _ N U M E R I C _ C H A R ACTERS 매개변수, 1 2 - 9

N L S _ S O RT 매개변수

ORDER BY 액세스 경로, 23-47

키 분할 시 영향 없음, 11-20

N OA RCHIVELOG 모드, 32-18

LOGGING 모드, 25-5

개요, 1-48

복구를 위해 데이터베이스 백업, 32-24

정의, 32-18

N OAUDIT 명령어, 16-4

잠금, 27-29

NOLOGGING 모드

병렬 D D L, 26-31, 26-32

분할 영역, 11-58

영향을 받은 SQL 연산, 25-7

직접 로드 I N S E RT, 25-5

NOT IN 하위 질의, 24-13

NOT NULL 제약 조건

P R I M A RY KEY로 암시적으로 생성, 28-12

UNIQUE 키, 28-11

정의, 28-7

제약 조건 검사, 28-20

N O T, 23-7

N OVA L I DATE 제약 조건, 28-22

NUMBER 데이터 유형, 12-8

내부 형식, 12-9

반올림, 12-9

NUM_DISTINCT 열

U S E R _ TAB_COLUMNS 뷰, 23-52

N U M _ ROWS 열

U S E R _ TABLES 뷰, 23-52

N VA RCHAR2 데이터 유형, 12-6

NVL 함수, 10-8

Net8, 1-7, 1-37, 6-5, 33-4

개요, 6-5

고급 보안 옵션, 33-18

다중 스레드 서버 요구 사항, 8-14, 8-16

응용 프로그램, 6-5

클라이언트/서버 시스템 사용, 6-5

N o v e l l의 N e t Wa re Management System, 3 3 - 2 0

O

O C I, 8-25

O C I O b j e c t F l u s h, 15-4

O C I O b j e c t P i n, 15-4

객체 캐시, 13-14

내장 프로시저, 16-18

바인드 변수, 16-13

익명 블록, 16-17

O D C I I n d ex, 10-43

O I D, 14-18, 15-3, 15-4

WITH OBJECT OID 절, 15-3, 15-4

모음

키 압축, 10-30, 10-38

O LTP 데이터베이스, 11-5

병렬 D M L, 26-37

분할 영역, 11-6

인덱스 분할, 11-36

일괄처리 작업, 26-38

OPEN_CURSOR 매개변수, 16-7

전용 SQL 영역 관리, 7-9

OPEN_LINKS 매개변수, 7-15

OPTIMAL 저장 영역 매개변수, 4-25

O P T I M I Z E R _ F E AT U R E S _ E NABLE 매개변수, 23-17, 23-36, 24-12

색인-9

Page 508: Oracle8 - Tistory

O P T I M I Z E R _ G OAL 옵션, 23-32

O P T I M I Z E R _ M O D E, 23-31

영향 받은 힌트, 23-33

O P T I M I Z E R _ P E RC E N T _ PARALLEL 매개변수, 22-8

O R D B M S, 1-22, 13-2

ORDERED 힌트, 24-9

O T T, 13-15

OUTLN 스키마

DBA 권한, 22-6

O racle

O racle 서버, 1-4

Pa rallel Server 옵션, 1-8

Pa rallel Server 참조

SQL 처리, 16-8

구성, 8-2

다중 프로세스 O ra c l e, 8-2

구조, 1-8, 1-14

기능, 1-2

네트워크 상에서 사용, 1-2, 1-37

데이터 액세스, 1-51

사용권 지정, 29-19

이식성, 1-3

인스턴스, 1-6, 1-16, 5-2

작업 예, 1-21

전용 서버, 8-24

다중 스레드 서버, 8-20

접속성, 1-2

다른 O racle 버전, 33-7

클라이언트/서버 구조, 6-2

표준 준수, 1-3

무결성 제약 조건, 28-5

프로세스, 1-17, 8-5

호환성 레벨, 3-14

호환성, 1-3

확장성, 6-4

O racle AQ, 19-1

대기열 모니터 프로세스, 1-20, 8-13, 19-6

구간 통계, 19-11

실행 윈도우, 19-7

대기열 테이블 엑스포트, 19-12

대기열 테이블, 19-4

등록/구독 지원, 19-10

이벤트 등록, 20-18

메시지 대기열 처리, 19-2

수신자, 19-5

구독 목록, 19-5

규칙 기준 구독, 19-5, 19-6

원격 데이터베이스, 19-9

O racle Call Interface(OCI), 8-25

O C I O b j e c t F l u s h, 15-4

O C I O b j e c t P i n, 15-4

객체 캐시, 13-14

내장 프로시저, 16-18

바인드 변수, 16-13

익명 블록, 16-17

O racle Data Cartridge Interfa c e, 10-43

O racle Enterprise Manager

Enterprise Manager 참조

O racle Forms

객체 종속성, 21-13

P L / S Q L, 16-16

O racle Internet Dire c t o ry, 29-5

O racle Open Gatew ay 제품, 33-8

O racle Pa rallel Serv e r, 1-8

Pa rallel Server 참조

O racle Replication Manager, 34-15

O racle Security Manager, 29-5, 33-18

O racle Wallet Manager, 29-5

O racle XA

대용량 풀의 세션 메모리, 7-12

O racle 블록, 1-10, 4-2

색인-1 0

Page 509: Oracle8 - Tistory

데이터 블록 참조

O racle 서버, 1-4

O racle 참조

O racle 선행 컴파일러

FIPS 플래그 표시자, 16-6

내장 프로시저, 16-18

내장된 S Q L, 16-5

바인드 변수, 16-13

익명 블록, 16-17

커서, 16-11

O racle 유형 번역기(OTT), 13-15

O racle 이름

전역 디렉토리 서비스, 33-4

O racle 인증서, 29-5

O racle 전자 지갑, 29-5

O racle 코드, 8-2, 8-25

O racle 프로그램 인터페이스(OPI), 8-25

P

P 코드, 18-18

PARALLEL SERVER 매개변수, 5-6

PARALLEL 절

병렬화 규칙, 26-20

PARALLEL 힌트, 26-17

병렬화 규칙, 26-20

U P DATE 및 D E L E T E, 26-21

PARALLEL_INDEX 힌트, 26-17

PA R A L L E L _ M A X _ S E RVERS 매개변수, 26-8

PA R A L L E L _ M I N _ P E RCENT 매개변수, 2 6 - 1 8

PA R A L L E L _ M I N _ S E RVERS 매개변수, 26-7,2 6 - 8

PA RTITION 옵션, 11-63

PA RT I T I O N _ V I E W _ E NABLED 매개변수, 1 1 - 1 2

PCTFREE 저장 영역 매개변수

P C T U S E D, 4-8

작업 방법, 4-6

PCTINCREASE 저장 영역 매개변수

병렬 D M L, 25-9, 25-10

PCTUSED 저장 영역 매개변수

P C T F R E E, 4-8

작업 방법, 4-6

P GA, 1-17, 7-14

다중 스레드 서버, 8-19

P K I, 29-5

P L / S Q L, 16-15

DDL 문 구문 분석, 16-19

DETERMINISTIC 함수, 23-9

PL/SQL 엔진, 16-15, 18-2

컴파일러, 18-17

포함된 제품, 16-16

프로시저 실행, 18-19

개요, 1-55, 16-15

객체 뷰, 15-4

구문 분석 잠금, 27-29

내장 프로시저, 1-25, 16-15, 18-2, 18-6

데이터 유형, 12-2

데이터베이스 트리거, 1-59, 20-1

동적 S Q L, 16-19

명령문 감사, 31-4

바인드 변수

사용자 정의 유형, 13-14

분할 영역 확장된 테이블 이름, 11-65

사용자 잠금, 27-39

사용자 정의 데이터 유형, 13-13

실행, 16-15, 18-18, 18-19

언어 구성자, 16-17

예외 사항 처리, 16-18

외부 프로시저, 16-20, 18-11

익명 블록, 16-15, 18-9

최적기 목적, 23-33

색인-1 1

Page 510: Oracle8 - Tistory

패키지, 18-4, 18-11

프로그램 단위, 1-25, 7-10, 16-15, 18-2

공유 SQL 영역, 7-10

컴파일됨, 16-16, 18-9, 18-17

프로시저의 롤, 30-20

PMON 백그라운드 프로세스, 8-11

프로세스 모니터 프로세스 참조

P R I M A RY KEY 제약 조건, 28-11

강제 수행에 사용된 인덱스, 28-12

이름, 28-12

설명, 28-11

열의 최대 수, 28-12

제약 조건 검사, 28-20

함축된 NOT NULL 제약 조건, 28-12

PUBLIC 사용자 그룹, 29-14, 30-19

프로시저의 유효성, 18-19

PUSH_JOIN_PRED 힌트, 24-12

Pa rallel Serv e r, 1-8

DML 잠금 및 성능, 11-47

PCM 잠금, 27-20

공유 모드

롤백 세그먼트, 4-27

데이터베이스 마운트, 5-6

데이터베이스 및 인스턴스, 5-3

동시성 제한, 29-21

디스크 친화력, 26-48

명명된 사용자의 사용권 지정, 29-21

배타 모드

롤백 세그먼트, 4-27

병렬 S Q L, 26-1

분리 레벨, 27-11

분산 잠금, 27-20

시스템 모니터 프로세스, 8-11, 26-41

시스템 변경 수, 8-10

역방향 키 인덱스, 10-31

인스턴스 그룹, 26-19

읽기 일관성, 27-6

임시 테이블스페이스, 3-12

잠금 프로세스, 1-20, 8-13

파일 및 로그 관리 잠금, 27-30

P ro*C/C++

SQL 문 처리, 16-10

사용자 정의 데이터 유형, 13-14

Q

QMNn 백그라운드 프로세스, 1-20, 8-13, 19-6

구간 통계, 19-11

실행 윈도우, 19-7

R

R A D I U S, 29-6

R AW 데이터 유형, 12-14

R AWTOHEX 함수, 12-23

R D B M S, 1-22

객체 관계형 D B M S, 1-22, 13-2

O racle 참조

READ ONLY 옵션

A LTER TA B L E S PAC E, 3-10

READ WRITE 옵션

A LTER TA B L E S PAC E, 3-11

REBUILD INDEX PA RTITION 명령어, 11-60

NOLOGGING 모드, 25-7

병렬화 규칙, 26-25

REBUILD INDEX 명령어

NOLOGGING 모드, 11-58, 25-7

병렬화 규칙, 26-25

REF

객체 뷰의 행, 15-3

객체 식별자에서 구성, 14-18, 14-19

무위, 13-9, 13-10

상호 종속 유형, 14-16

색인-1 2

Page 511: Oracle8 - Tistory

암시적 참조 해제, 13-10

인덱스, 14-6

제한됨, 13-9, 14-19

참조 해제, 13-10

크기, 14-19

테이블 별칭 사용, 14-8

핑, 14-16, 15-4

REFERENCES 권한

롤을 통해 부여된 경우, 30-21

REFTOHEX 함수, 12-23

REMOTE_INDEPENDECY_MODE 매개변수,2 1 - 1 1

R E NAME 명령어, 16-4

R E S O U RCE 롤, 30-22

사용자 정의 유형, 14-13, 14-14

RESTRICTED SESSION 권한, 29-20

R E VOKE 명령어, 16-4

F O RCE 옵션, 14-17

객체 유형 및 종속성, 14-17

잠금, 27-29

RO L L B ACK 명령어, 16-5

ROWID 데이터 유형, 12-15, 12-16

제한된 ROWID 형식, 12-18

확장된 ROWID 형식, 12-17

ROW I D, 10-7

O ra c l e이 아닌 데이터베이스, 12-22

내부 사용, 12-16, 12-19

논리적 ROW I D, 12-20

못 쓰게 된 추측, 12-21

물리적 추측, 10-39, 12-20

인덱스 구성 테이블의 인덱스, 10-39

추측을 위한 통계, 12-21

논리적, 12-15

물리적, 12-15

범용, 12-15

변경 사항, 12-16

액세스, 12-15

인덱스 정렬, 10-28

클러스터화된 행, 10-7

테이블 액세스, 23-34

행 이전, 4-10

ROWIDTOCHAR 함수, 12-23

ROWNUM 의사 열

뷰 질의 최적화, 23-16, 23-25

인덱스를 사용할 수 없음, 23-49

R P C, 33-12

RULE 힌트

O P T I M I Z E R _ M O D E, 23-33

R e c o v e ry Manager, 1-51, 32-15

병렬 복구, 32-11

병렬 연산, 32-16

보고서 생성, 32-17

복구 카탈로그, 32-15

카탈로그 없이 작업, 32-16

Replication Manager, 34-15

S

SAMPLE BLOCK 옵션, 23-34

액세스 경로, 23-49

힌트가 무효화할 수 없음, 23-50

SAMPLE 옵션, 23-34

액세스 경로, 23-49

힌트가 무효화할 수 없음, 23-50

SAMPLE 절

비용 기준 최적화, 22-16

SAVEPOINT 명령어, 16-5

SCN, 17-5

시스템 변경 수 참조

SELECT 명령어, 16-3

SAMPLE 옵션, 23-34

액세스 경로, 23-49, 23-50

SAMPLE 절

색인-1 3

Page 512: Oracle8 - Tistory

비용 기준 최적화, 22-16

조합 인덱스, 10-22

질의 참조

하위 질의, 16-12

S E RV I C E _ NAME 매개변수, 6-6

S E S S I O N _ ROLES 뷰

PL/SQL 블록에서 질의됨, 30-20

SET CONSTRAINTS 명령어

DEFERRABLE 또는 I M M E D I AT E, 2 8 - 2 1

SET ROLE 명령어, 16-5

SET TRANSACTION 명령어, 16-5

I S O L ATION LEVEL, 27-7, 27-31

READ ONLY, 4-21

S GA

시스템 글로벌 영역 참조

S H A R E D _ M E M O RY_ADDRESS 매개변수, 7 - 1 3

SHARED_POOL_SIZE 매개변수, 7-6

시스템 글로벌 영역 크기, 7-13

S H U T D OWN ABORT 명령어, 5-10

필요한 고장 복구, 32-4

SINGLE TABLE HASHKEYS, 10-57

S K I P _ U N U SABLE_INDEXES 매개변수, 2 1 - 8

SMON 백그라운드 프로세스, 8-11

시스템 모니터 프로세스 참조

SMP 구조

디스크 친화력, 26-49

SNMP 지원

데이터베이스 관리, 33-20

snapshot too old 메시지, 27-5

SNPn 백그라운드 프로세스, 1-20, 8-13 메시지 전달, 19-10

S O M E, 23-6

S O RT _ A R E A _ R E TAINED_SIZE 매개변수, 7 - 1 6

S O RT_AREA_SIZE 매개변수, 4-18, 7-16

비용 기준 최적화, 24-9

SPLIT PA RTITION 명령어

NOLOGGING 모드, 11-58, 25-7

병렬화 규칙, 26-25

SQL 문, 1-52, 16-3, 16-8

감사, 31-7, 31-9

개요, 1-44

레코드가 생성된 경우, 31-4

개요, 1-52

구문 분석 잠금, 27-29

구문 분석, 16-11

내장됨, 16-5

단순, 23-3

단일로 실행되는 트리거 수, 20-21

딕셔너리 캐시 잠금, 27-30

배열 처리, 16-13

변환

예, 23-10

병렬 실행, 26-2

병렬화, 26-2, 26-10

복합, 23-3, 23-13

최적화, 23-13

분산

노드로 라우트, 16-11

정의, 23-4, 33-11

최적화, 23-30

실패, 32-2

실행 계획, 22-2

실행 성공, 17-3

실행, 16-8, 16-13

원격

정의, 23-4, 33-11

유형, 1-52, 16-3, 23-3

자원 제한, 29-16

재귀적

색인-1 4

Page 513: Oracle8 - Tistory

O P T I M I Z E R _ G OA L이 적용되지 않음, 23-32

종속 객체 참조, 21-4

최적화

명령문 유형, 23-3

복합 명령문, 23-13

커서 생성, 16-11

트랜잭션, 16-14

트리거, 20-2, 20-8

트리거링 이벤트, 20-6

필요한 권한, 30-3

핸들, 1-17

SQL 문에 대한 처리, 1-17, 7-9

SQL 영역

공유, 1-16, 7-8, 16-7

전용, 7-8

실행 시간, 7-8

지속, 7-8

S Q L * L o a d e r, 1-6

분할 영역 작업, 11-48, 11-50

직접 로드

NOLOGGING 모드, 11-58, 25-7

병렬 직접 로드, 25-2

직접 로드 I N S E RT와 유사, 25-2

SQL*Menu

P L / S Q L, 16-16

SQL*Module

FIPS 플래그 표시자, 16-6

내장 프로시저, 16-18

SQL*Net

Net8 참조

SQL*Plus

A L E RT 파일, 8-15

S GA 크기 표시, 7-13

SQL 문, 16-2

내장 프로시저, 16-18

병렬 복구, 32-11

세션 변수, 16-17

익명 블록, 16-17

잠금 및 래치 모니터, 27-29

접속, 29-4

통계 모니터, 29-19

패키지 실행, 18-6

프로시저 실행, 18-4

S Q L, 16-2

P L / S Q L, 1-55, 16-15

개요, 1-52, 16-2

공유 S Q L, 16-7

구문 분석, 16-7

내장된, 1-53, 16-5

사용자 정의 데이터 유형, 13-14

데이터 정의어(DDL), 16-4

데이터 조작어(DML), 16-3

동적 S Q L, 16-19

메모리 할당, 7-11

명령문 레벨 롤백, 17-4

명령문 유형, 1-52, 16-3

최적화, 23-3

병렬 실행, 26-2

사용된 커서, 16-6

사용자 정의 데이터 유형, 13-13, 14-8

O C I, 13-15

내장된 S Q L, 13-14

세션 제어문, 16-5

시스템 제어문, 16-5

예약어, 16-3

재귀적, 16-6

커서, 16-7

트랜잭션 제어문, 16-5

트랜잭션, 1-53, 17-2, 17-5

함수, 16-2

CHECK 제약 조건, 28-18

색인-1 5

Page 514: Oracle8 - Tistory

C O U N T, 10-35

N V L, 10-8

뷰 질의 최적화, 23-23

열 기본값, 10-8

확장 영역

분할 영역 또는 하위 분할 영역 이름, 11-63

SQL92, 27-2

S Q L _ T R ACE 매개변수, 8-15

S TAR 힌트, 24-15

S TA RTUP FORCE 명령어

필요한 고장 복구, 32-4

S TA R _ T R A N S F O R M ATION 힌트, 24-19

S TA R _ T R A N S F O R M AT I O N _ E NABLED 매개변수, 24-19

S T O R AGE 절

병렬 실행, 26-33

사용, 4-11

S U B PA RTITION 옵션, 11-63

SYS 사용자명

소유한 데이터 딕셔너리 테이블, 2-3

보안 도메인, 29-3

감사되지 않은 명령문 실행, 31-5

소유한 임시 스키마 객체, 29-14

V$ 뷰, 2-7

SY S. AUD$ 뷰

제거, 2-5

SYSDBA 권한, 5-3

SYSOPER 권한, 5-3

SYSTEM 롤백 세그먼트, 4-26

SYSTEM 사용자명

보안 도메인, 29-3

SYSTEM 테이블스페이스, 3-6

저장된 데이터 딕셔너리, 2-2, 2-5, 3-6

데이터 파일 1, 3-16

매체 고장, 32-6

온라인 요구 사항, 3-9

내장 프로시저, 3-6, 18-18

S e rver Manager

P L / S Q L, 16-17, 16-19

SQL 문, 16-2

Simple Network Management Protocol (SNMP)

데이터베이스 관리, 33-20

Simple Network Management Protocol (SNMP) 지원

데이터베이스 관리, 33-20

Snnn 백그라운드 프로세스, 8-14

S u n S o ft의 SunNet Manager, 33-20

T

TAF, 32-14

TO_CHAR 함수

CHECK 제약 조건에서 NLS 기본값, 28-18

데이터 변환, 12-23

뷰에서 NLS 기본값, 10-14

율리우스 날짜, 12-11

T O _ DATE 함수, 12-10

CHECK 제약 조건에서 NLS 기본값, 28-18

데이터 변환, 12-23

분할 영역, 11-14, 11-21

뷰에서 NLS 기본값, 10-14

율리우스 날짜, 12-11

TO_NUMBER 함수, 12-9

CHECK 제약 조건에서 NLS 기본값, 28-18

데이터 변환, 12-23

뷰에서 NLS 기본, 10-14

율리우스 날짜, 12-11

T R A N SACTIONS 매개변수, 4-27

T R A N SAC T I O N S _ P E R _ RO L L B ACK_

색인-1 6

Page 515: Oracle8 - Tistory

SEGMENT 매개변수, 4-27

T RU N CATE 명령어, 16-4

U

UNION ALL 뷰, 11-11

UNION ALL 연산자

OR 변형, 23-10

뷰 질의 최적화, 23-16

예, 23-11, 23-13, 23-27

UNION 연산자

뷰 질의 최적화, 23-16

예, 23-18, 23-28

혼합 질의, 23-4

UNIQUE 키 제약 조건, 28-8

NOT NULL 제약 조건, 28-11

강제 수행에 사용된 인덱스, 28-10

널, 28-11

열의 최대 수, 28-10

제약 조건 검사, 28-20

조합 키, 28-9, 28-11

크기 제한, 28-10

UNLIMITED 확장 영역, 26-40

U N U SABLE 인덱스

함수 기준, 21-8

UNUSED 열, 10-6

U P DATE 명령어, 16-4

NOLOGGING 모드, 25-7

L O B, 25-7

데이터 블록에서 사용 가능한 영역, 4-9

병렬 U P DAT E, 26-21

외래 키 참조, 28-16

트리거, 20-2, 20-6

BEFORE 트리거, 20-9

U ROWID 데이터 유형, 12-15

USER 의사 열, 30-7

USER_ 뷰, 2-6

U S E R _ TABLES 뷰, 23-52

U S E R _ TAB_COLUMNS 뷰, 23-52

U S E R _ TA B _ C O L _ S TATISTICS 뷰, 23-52

U S E R _ U P DATABLE_COLUMNS 뷰, 10-15

U S E _ I N D I R E C T _ DATA_BUFFERS 매개변수, 7 - 1 4

USE_STORED_OUTLINES 세션매개변수, 2 2 - 6

V

VA L I DATE 제약 조건, 28-22

VALUES LESS THAN 절, 11-20

DATE 데이터 유형, 11-21

M A X VA L U E, 11-21, 11-23

다중 열 키, 11-23

예, 11-16, 11-18

VA RCHAR 데이터 유형, 12-6

VA RCHAR2 데이터 유형, 12-5

R AW 데이터 유형과 유사, 12-15

채우지 않음 비교 의미, 12-6

VA R R AY, 13-11

인덱스 구성 테이블, 10-38

키 압축, 10-30

VLDB

병렬 S Q L, 26-2

분할 영역, 11-5

V_$ 및 V$ 뷰, 2-7

V $ L I C E N S E, 29-20

W

WITH OBJECT OID 절, 15-3, 15-4

Wallet Manager, 29-5

X

X.509 인증서, 29-5

XA

색인-1 7

Page 516: Oracle8 - Tistory

대용량 풀의 세션 메모리, 7-12

ㄱ가상 메모리, 7-17

가상 읽기, 27-3, 27-10

가상 테이블, 1-24

구독

규칙 기준, 19-5, 19-6

감사, 1-44, 31-1

BY AC C E S S, 31-11

위임, 31-12

BY SESSION, 31-10

금지, 31-12

DDL 문, 31-7

DML 문, 31-7

감사 레코드, 31-3

감사 옵션, 31-3

감사 트레일, 31-3

데이터베이스, 31-3

운영 체제, 31-5, 31-6

관리자 권한으로 접속, 31-5

권한 사용, 31-2, 31-7

데이터 딕셔너리 사용, 2-5

데이터베이스와 OS 사용자명, 29-4

명령문, 31-2, 31-7

보안, 31-6

분산 데이터베이스, 31-6

분할된 테이블 및 인덱스, 11-63

사용자, 31-12

설명, 1-44, 31-2

스키마 객체, 31-2, 31-8

시작 및 종료, 31-5

실행 성공, 31-9

실행 실패, 31-9

옵션이 효과를 나타내는 경우, 31-6

유형, 31-2

트랜잭션 독립성, 31-4

특정 범위, 31-3, 31-9

감사 트레일

딕셔너리의 데이터 삭제, 2-5

객체

권한, 30-11

객체 관계형 DBMS(ORDBMS), 1-22, 13-2

객체 권한, 30-3

스키마 객체 권한 참조

객체 뷰, 10-16, 15-1

INSTEAD OF 트리거사용, 15-5

객체 식별자, 15-3, 15-4

갱신, 15-5

수정 가능성, 20-12

장점, 15-2

정의, 15-3

중첩 테이블, 15-5

객체 식별자, 15-3

WITH OBJECT OID 절, 15-3, 15-4

객체 뷰, 15-3, 15-4

객체 유형, 14-18

객체 유형 메소드, 1-57, 13-4

P L / S Q L, 13-14

구매 주문 예, 13-2, 13-5

생성자 메소드, 1-57, 14-18

맵 메소드, 1-57, 13-7

빈 괄호 사용, 14-9

순서 메소드, 1-57, 13-7

실행 권한, 14-13

호출의 자체 스타일, 13-6

객체 유형 속성, 13-2, 13-4

객체 유형 컴파일, 14-17

객체 유형, 1-22, 13-2, 13-4

O racle 유형 번역기, 13-15

객체 뷰, 10-16

구매 주문 예, 13-2, 13-4

색인-1 8

Page 517: Oracle8 - Tistory

생성자 메소드, 1-57, 13-6, 14-18

메소드, 1-57, 13-4

P L / S Q L, 13-14

구매 주문 예, 13-2, 13-5

메소드 호출, 14-9

메시지 대기열 처리, 19-6

병렬 질의, 26-29

제한 사항, 26-30

불완전, 14-17

비교 메소드, 13-6

상호 종속성, 14-16

속성, 13-2, 13-4

열 객체, 13-8

인덱스, 14-6

제한 사항

병렬 D D L, 26-31

병렬 D M L, 26-44

캐시 잠금, 13-15

테이블 별칭 사용, 14-8

행 객체, 13-8

객체 캐시

O C I, 13-14

P ro * C, 13-14

객체 뷰, 15-4

권한, 14-16

객체 테이블, 13-3, 13-7

가상 객체 테이블, 15-2

인덱스, 14-6

제약 조건, 14-5

트리거, 14-6

행 객체, 13-8

객체 테이블에 대한 DELETE 권한, 14-15, 1 4 - 1 6

객체 테이블에 대한 I N S E RT 권한, 14-15, 1 4 - 1 6

객체 테이블에 대한 SELECT 권한, 14-15,

1 4 - 1 6

객체 테이블에 대한 U P DATE 권한, 14-15, 1 4 - 1 6

갱신

객체 뷰, 15-5

객체 뷰의 갱신 가능성, 15-5

갱신 가능한 조인 뷰, 10-15

갱신 집중 환경, 27-8

구체화된 뷰, 10-18

분산, 33-11

뷰의 갱신 가능성, 10-15, 20-12,위치 투명성, 33-15

작업 대기열 프로세스(SNPn), 1-20, 8-13

증분, 10-18

갱신 가능한 스냅샷, 34-9

게이트웨이, 33-8

경합

데이터

교착 상태, 8-19, 27-17

잠금 단계적 확대가 발생하지 않음, 27-17

롤백 세그먼트, 4-21

계단식 제약 조건 삭제, 28-17

계층, 1-29, 10-18

레벨, 1-29, 10-18

조인 키, 1-29, 10-19

계획

OR 연산자, 23-12

SQL 실행, 16-4, 16-11

복합 명령문, 23-14

뷰 액세스, 23-19, 23-22, 23-23

뷰 조인, 23-25

스타 변형, 24-18

조인, 24-2, 24-8

혼합 질의, 23-27, 23-28, 23-29

고급 대기열 처리( O racle AQ), 19-1

색인-1 9

Page 518: Oracle8 - Tistory

대기열 모니터 프로세스, 1-20, 8-13, 19-6

구간 통계, 19-11

실행 윈도우, 19-7

대기열 테이블 엑스포트, 19-12

대기열 테이블, 19-4

등록/구독 지원, 19-10

이벤트 등록, 20-18

메시지 대기열 처리, 19-2

수신자, 19-5

구독 목록, 19-5

규칙 기준 구독, 19-5, 19-6

예외 사항 처리, 19-11

원격 데이터베이스, 19-9

고급 보안 옵션, 33-18

고급 복제

다중 마스터 구성, 34-6

동기식 전달, 34-16

사용, 34-6, 34-12

프로시저 복제, 34-15

하이브리드 구성, 34-13

고수위

직접 로드 I N S E RT, 25-3

고유 인덱스, 10-22

고유 키, 1-58, 1-59, 28-9

검색, 23-40

조합, 28-9, 28-11

최적화, 23-14

고유하지 않은 인덱스, 10-22

고장 복구, 32-4, 32-13

SMON 프로세스, 1-19, 8-11

데이터베이스 열기, 5-8

인스턴스 실패, 1-46, 5-10, 32-4

인스턴스 중지 후 필요함, 5-10

읽기 전용 테이블스페이스, 32-6

고정된 뷰, 2-7

공간 응용 프로그램

인덱스 구성 테이블, 10-42

공용 롤백 세그먼트, 4-26

공용 키 기반 구조, 29-5

공유 SQL 영역, 7-8, 16-7

A NA LYZE 명령어, 7-11

SQL 로드, 16-11

개요, 1-16, 16-7

구문 분석 잠금, 27-29

설명, 7-8

종속성 관리, 7-11

크기, 7-8

프로시저, 패키지, 트리거, 7-10

공유 글로벌 영역( S GA), 7-2

시스템 글로벌 영역 참조

공유 모드

롤백 세그먼트, 4-27

공유 서버, 1-18

관리자 권한으로 접속할 수 없음, 5-3

공유 서버 프로세스(Snnn), 8-14, 8-19

설명, 8-19

공유 잠금

공유 테이블 잠금(S), 27-24

공유 풀, 7-6

A NA LYZE 명령어, 7-11

개요, 1-16

객체 종속성, 21-10

설명, 7-6

종속성 관리, 7-11

지우기, 7-11

크기, 7-6

프로시저 및 패키지, 18-17

할당, 7-10

행 캐시, 7-10

관계, 1-23

관계형 DBMS(RDBMS)

O racle 참조

색인-2 0

Page 519: Oracle8 - Tistory

S Q L, 16-2

객체 관계형 D B M, 13-2

원칙, 1-22

관계형 데이터베이스에서 작업, 1-22

관리자 권한, 5-3

OUTLN 스키마, 22-6

감사되지 않은 명령문 실행, 31-5

접속 감사, 31-5

괄호, 메소드 호출 시 사용, 14-9

교착 상태

감지, 27-18

분산 트랜잭션, 27-18

인위적인, 8-19

정의, 27-17

회피, 27-19

구매 주문 예

객체 유형, 13-2, 13-4

구문 분석, 16-11

DBMS_SQL 패키지, 16-19

SQL 문, 16-11, 16-19

구문 분석 잠금, 16-11, 27-29

구문 분석 호출, 16-8

내장된 S Q L, 16-6

수행, 16-8

구문 분석 트리, 18-17

공유 SQL 영역, 7-8

구성, 16-7

데이터베이스에 저장됨, 18-18

생성자 메소드, 1-57, 13-6, 14-18

리터럴 호출, 14-4

구조

M P P, 26-49

O ra c l e, 1-14

S M P, 26-49

논리적, 1-5, 1-9, 4-1

데이터 블록, 1-10, 4-2, 4-3

세그먼트, 1-10, 4-2, 4-16

스키마 객체, 1-10, 10-2

테이블스페이스, 1-9, 3-1, 3-6

확장 영역, 1-10, 4-2, 4-11

데이터 딕셔너리, 1-30, 2-1

데이터 블록

ROW I D에 표시, 12-18

데이터 파일

ROW I D에 표시, 12-18

메모리, 1-14, 7-1

물리적, 1-5, 1-11

데이터 파일, 1-11, 3-1, 3-16

리두 로그 파일, 1-12, 32-7

제어 파일, 1-13, 32-21

잠금, 27-28

프로세스, 1-14, 1-17, 8-1

클라이언트/서버, 1-33

구조화된 질의 언어(SQL), 1-52, 16-2

SQL 참조

구체화된 뷰, 10-17

개요, 1-25

갱신, 10-18

구체화된 뷰 로그, 10-18

분할됨, 10-18, 11-2

스냅샷과 동일, 1-25, 34-3

확장 영역 할당 해제, 4-15

구체화된 뷰 로그, 10-18

국가별 언어 지원(NLS)

CHECK 제약 조건, 28-18

DATE 데이터 유형 및 분할 영역, 11-14, 11-21

NCHAR 및 N VA RCHAR2 데이터 유형, 12-6

NCLOB 데이터 유형, 12-13

매개변수, 5-5

문자 집합, 12-6

색인-2 1

Page 520: Oracle8 - Tistory

뷰, 10-14

클라이언트 및 서버가 분기될 수 있음, 33-20

권한

관리자, 5-3

OUTLN 스키마, 22-6

감사되지 않은 명령문 실행, 31-5

감사된 접속, 31-5

RESTRICTED SESSION, 29-20

감사 사용, 1-44, 31-7

개요, 1-41, 30-2

구문 분석 시 검사, 16-11

데이터베이스 시작 또는 종료, 5-3

롤, 30-16

제한 사항, 30-20

롤로 그룹화, 1-41

부여, 1-41, 30-3, 30-4

예, 30-9, 30-10

분할된 테이블 및 인덱스, 11-62

뷰, 30-6

사용, 30-6

생성, 30-6

사용자 정의 유형

ADMIN OPTION을 가진 EXECUTE ANY TYPE, 14-14

A LTER ANY TYPE, 14-13

C R E ATE ANY TYPE, 14-13

C R E ATE TYPE, 14-13

D ROP ANY TYPE, 14-13

EXECUTE ANY TYPE, 14-13, 14-14

E X E C U T E, 14-13, 14-14

GRANT 옵션을 가진 E X E C U T E, 14-14

I N S E RT, 14-15, 14-16

S E L E C T, 14-15, 14-16

U P DAT E, 14-15, 14-16

객체 테이블에 대한 열 레벨, 14-16

고정 시 검사, 14-16

롤로 획득, 14-13

사용, 14-13, 14-17

삭제, 14-15, 14-16

시스템 권한, 14-13

스키마 객체, 30-3

DML 및 DDL 연산, 30-5

개요, 1-41

부여 및 철회, 30-4

패키지, 30-9

프로시저, 30-7

시스템, 30-2

개요, 1-41

부여 및 철회, 30-3

사용자 정의 유형, 14-13

철회, 30-3, 30-4

철회됨

객체 종속성, 21-6

트리거 권한, 30-8

프로시저, 30-7

생성 및 변경, 30-9

실행, 18-18, 30-7

패키지, 30-9

함수 기준 인덱스, 10-26, 21-8

규칙 기준 구독, 19-5, 19-6

규칙 기준 최적화, 22-18

그룹 커밋, 8-10

그룹, 인스턴스, 26-19

그림자 프로세스, 8-22

글로벌 사용자, 18-21, 33-18

현재 사용자 링크, 18-21

글로벌 인덱스

분할, 11-32

분할 영역 관리, 11-33, 11-60

색인-2 2

Page 521: Oracle8 - Tistory

인덱스 유형 요약, 11-34

기록 데이터베이스

분할 영역, 11-6

유지 관리 작업, 11-48

기록자가 독자 방해, 27-10

기본 복제

사용, 34-11

기본 복제 시, 34-12

기본 키, 1-59, 28-11

검색, 23-40

장점, 28-11

정의, 28-3

최적화, 23-14

기본 테이블, 1-24

데이터 딕셔너리, 2-2

뷰 참조

기본값, 10-8

사용자 정의 유형, 14-4

제약 조건 결과, 10-8, 28-20

기수, 10-33

ㄴ내부 캡처, 14-8

내장 프로시저, 1-26, 16-15, 18-2, 18-6

변수 및 상수, 16-17

익명 블록과 대조, 18-9

트리거와 대조, 20-2

프로시저 참조

호출, 16-18

내장 함수, 1-26, 18-2, 18-6

내장된 SQL 문, 1-53, 16-5

P L / S Q L의 동적 S Q L, 16-19

UNIQUE 키 제약 조건, 28-11

UNIQUE 키에서의 동일하지 않은 값, 28-11

값으로 변환, 10-8

최적화, 24-11

객체 유형, 14-3

금지, 28-7

기본 키에서 금지, 28-11

기본값, 10-8

널이 아닌 값, 10-8, 24-11

단위, 14-3

분할된 테이블 및 인덱스, 11-21

비교에서 알 수 없음, 10-8

열 순서, 10-7

외래 키, 28-15, 28-16

인덱스, 10-8, 10-24, 10-35

저장 방법, 10-7

정의, 10-7

네트워크

Net8, 6-5, 33-4

O racle 사용, 1-7, 1-37

O racle 이름, 33-4

네트워크 인증 서비스, 29-4

두 작업 모드, 8-23

드라이버, 8-26

디스패처 프로세스, 8-14, 8-16

리스너 프로세스, 6-6, 8-14

분산 데이터베이스 사용, 33-2

분산 데이터베이스, 33-4

실패, 32-3

클라이언트/서버 구조 사용, 6-2

통신 프로토콜, 6-5, 8-26

네트워크 리스너 프로세스, 6-6

다중 스레드 서버 예, 8-20

서비스 이름, 6-6

전용 서버 예, 8-24

접속 요청, 8-14, 8-16

노드

Pa rallel Serv e r에서의 디스크 친화력,

색인-2 3

Page 522: Oracle8 - Tistory

26-48

분산 데이터베이스, 1-35

논리적 ROW I D, 12-20

못 쓰게 된 추측, 12-21

물리적 추측, 10-39, 12-20

인덱스 구성 테이블의 인덱스, 10-39

추측을 위한 통계, 12-21

논리적 ROW I D에서 추측, 12-20

못 쓰게 됨, 12-21

통계, 12-21

논리적 ROW I D에서의 물리적 추측, 12-20

못 쓰게 됨, 12-21

통계, 12-21

논리적 데이터베이스 구조, 1-5, 1-9

테이블스페이스, 3-6

논리적 블록, 4-2

논리적 읽기 제한, 29-17

ㄷ다른 행 기록자가 기록자 방해, 27-10

다중 마스터 복제, 34-6

다중 버전 일관성 모델, 1-31

다중 버전 일관성 제어, 27-5

다중 블록 쓰기, 8-8

다중 사용자 환경, 1-2, 8-2

다중 스레드 서버, 8-16

Net8 또는 SQL*Net V2 요구 사항, 8-14, 8-16

공유 서버 프로세스, 8-14, 8-19

대용량 풀의 세션 메모리, 7-12

디스패처 프로세스, 1-20, 8-14

병렬 SQL 실행, 26-8

사용 예, 8-20

서버 프로세스, 1-18, 8-14, 8-19

설명, 8-3, 8-16

세션 정보, 7-14

인위적 교착 상태, 8-19

전용 SQL 영역 제한, 29-18

전용 SQL 영역, 7-9

정렬 영역, 7-16

전용 서버와 대조, 8-16

제한된 작업, 8-20

필요한 프로세스, 8-16

다중 프로세스 시스템(다중 사용자 시스템), 8-2

다중화

리두 로그 파일, 1-48

복구, 32-5

제어 파일, 1-49, 32-22

단위 널, 14-3

단일 테이블 해시 클러스터, 10-57

단편화

병렬 D D L, 26-33

대기 데이터베이스

마운트, 5-7

존재 가능성, 32-26

대기열 모니터 프로세스(QMNn), 1-20, 8-13, 19-6

구간 통계, 19-11

실행 윈도우, 19-7

대기열 처리, 19-2

대기열 레벨 액세스 제어, 19-9

대기열 모니터 프로세스, 1-20, 8-13, 19-6

구간 통계, 19-11

실행 윈도우, 19-7

대기열 테이블 엑스포트, 19-12

대기열 테이블, 19-4, 19-12

등록/구독 지원, 19-10

이벤트 등록, 20-18

수신자, 19-5

구독 목록, 19-5

규칙 기준 구독, 19-5, 19-6

예외 사항 처리, 19-11

색인-2 4

Page 523: Oracle8 - Tistory

원격 데이터베이스, 19-9

인스턴스 친화력, 19-10

대기열 처리용 대리 프로세서, 19-4

대용량 데이터베이스(VLDB), 11-5

병렬 S Q L, 26-2

분할 영역, 11-5

대용량 풀, 7-12

개요, 1-16

대형 병렬 처리(MPP)

다중 O racle 인스턴스, 5-3

병렬 SQL 실행, 26-2

친화력, 26-6, 26-48, 26-49

무위 REF, 13-9, 13-10

더티 버퍼, 7-3

빠른 시작 체크포인트, 32-13

증분 체크포인트, 8-8

더티 쓰기, 27-10

더티 읽기, 27-2, 27-10

덤프 파일

Export 및 Import, 14-20

데이터

동시 액세스, 27-2

무결성, 1-30, 10-4, 28-2

2단계 커밋, 1-35

CHECK 제약 조건, 28-17

강제 수행, 28-4, 28-5

개요, 1-57

병렬 DML 제한 사항, 26-45

유형, 28-3

참조, 28-3

복제, 1-36

분산 조작, 1-35

액세스, 1-51

메시지 대기열, 19-7

보안 도메인, 29-2

상세한 액세스 제어, 30-22

제어, 29-2

일관성

기본 원칙, 27-15

반복 읽기, 27-6

수동 잠금, 27-31

읽기 일관성, 1-31

잠금 기능의 예, 27-32

잠금, 27-3

정의, 1-55

트랜잭션 레벨, 27-6

잠금, 27-20

테이블에 저장 방법, 10-4

데이터 객체 수

확장된 ROW I D, 12-17

데이터 딕셔너리

ALL 접두어를 가진 뷰, 2-6

DBA 접두어를 가진 뷰, 2-6

D UAL 테이블, 2-7

SYSTEM 테이블스페이스, 2-2, 2-5, 3-6

USER 접두어를 가진 뷰, 2-6

감사 트레일( SY S. AUD$), 2-5

객체 추가, 2-4

갱신, 2-5

공용 동의어, 2-4

구조, 2-2

내용, 2-2, 7-10

프로시저, 18-18

데이터 파일 1, 3-6, 32-25

동적 성능 테이블, 2-7

딕셔너리 관리 테이블스페이스, 3-7

백업, 32-25

뷰 접두어, 2-5

사용, 2-3

테이블 및 열 정의, 16-11

사용자, 2-3

액세스, 2-2

색인-2 5

Page 524: Oracle8 - Tistory

잠금, 27-28

정의, 1-30, 2-2

최적화에 사용된 뷰, 22-14

추적된 종속성, 21-3

캐시, 7-10

위치, 7-6

통계, 22-14, 23-32

분할 영역 통계, 11-14

프로시저의 유효성, 18-18

행 캐시, 7-10

데이터 딕셔너리 뷰의 접두어, 2-5

데이터 모델, 1-22

데이터 변환

ANSI 데이터 유형, 12-22

SQL/DS 및 DB2 데이터 유형, 12-22

프로그램 인터페이스, 8-25

데이터 블록, 1-10, 4-2

ROW I D에 표시, 12-17, 12-18

개요, 4-2

디스크에 쓰기, 8-8

메모리에 캐시됨, 8-8

버퍼 캐시에 내장, 7-3

블록 레벨 복구, 32-14

블록의 사용 가능한 영역 합치기, 4-9

사용 가능 영역 목록, 4-9

사용 가능한 영역 제어, 4-5

삽입된 행의 사용 가능 영역, 4-9

읽기 전용 트랜잭션, 27-32

클러스터에서 공유됨, 10-46

클러스터화됨, 10-49

해시 키, 10-55

행 디렉토리, 10-5

행 저장 방법, 10-5

형식, 4-3

확장 영역 할당, 4-13

확장 영역 합치기, 4-13

데이터 블록의 사용 가능한 영역 압축, 4-9

데이터 세그먼트, 1-11, 4-16, 10-4

데이터 웨어하우스

계층, 1-29, 10-18

구체화된 뷰, 10-17

기본 복제, 34-12

비트맵 인덱스, 10-32

스타 질의, 24-14

요약, 10-17

차원 스키마 객체, 1-29, 10-18

차원, 24-14

테이블 데이터 갱신, 26-37

데이터 유형, 12-2, 12-3

A N S I, 12-22

BOOLEAN, 12-2

C H A R, 12-5

DAT E, 12-10

DB2, 12-22

LOB 데이터 유형, 12-12

B F I L E, 12-14

B L O B, 12-13

CLOB 및 N C L O B, 12-13

기본 로깅 모드, 25-7

L O N G, 12-7

저장 영역, 10-7

NCHAR 및 N VA RCHAR2, 12-6

N U M B E R, 12-8

P L / S Q L, 12-2

R AW 및 LONG RAW, 12-14

ROW I D, 12-15, 12-16

S Q L / D S, 12-22

VA RC H A R, 12-6

VA RCHAR2, 12-5

객체 유형, 1-22, 13-4

멀티미디어, 13-3

모음, 13-10

색인-2 6

Page 525: Oracle8 - Tistory

문자, 12-5, 12-13

배열 유형, 13-11

변환

O ra c l e을 다른 O racle 유형으로, 12-23

O ra c l e이 아닌 유형, 12-22

프로그램 인터페이스, 8-25

사용 가능 목록, 12-2

사용자 정의, 13-1, 13-3

통계, 22-17

열, 1-23

요약, 12-3

중첩 테이블, 10-9, 13-12

테이블에 연관 짓는 방법 10-3

데이터 일관성, 1-55

다중 버전 일관성 모델, 1-31

읽기 일관성 참조

데이터 잠금

기간, 27-15

단계적 확대, 27-16

변환, 27-16

데이터 정의어(DDL)

D B M S _ S Q L로 구문 분석, 16-19

P L / S Q L에 내장, 16-19

감사, 31-7

롤 및 권한, 30-20

명령문 처리, 16-14

병렬 D D L, 26-3

설명, 16-4

잠금, 27-28

정의, 1-52

함축된 커밋, 17-4

데이터 조작어(DML)

감사, 31-7

권한 제어, 30-5

병렬 D M L, 26-3, 26-35

병렬 D M L에 대한 트랜잭션 모델, 26-39

분산 트랜잭션, 33-11

분할 영역 잠금, 11-45

설명, 16-3

잠금 획득, 27-25

정의, 1-52

처리 명령문, 16-10

트리거, 20-3, 20-23

하위 질의에 대해 연속 분리, 27-14

데이터 파일 1, 3-16

SYSTEM 테이블스페이스, 3-6, 3-16

데이터 딕셔너리, 3-6, 32-25

백업, 32-25

데이터 파일

ROW I D에 표시, 12-17, 12-18

개요, 1-9, 1-12, 3-16

내용, 3-16

데이터 파일 1, 3-6, 3-16

SYSTEM 테이블스페이스, 3-6, 3-16

백업, 32-25

물리적 데이터베이스 구조, 1-5

백업, 32-25

병렬 복구, 32-11

복구 불가능, 32-17

오프라인으로 설정, 3-17

온라인 또는 오프라인 테이블스페이스, 3-17

읽기 전용 테이블스페이스, 3-12

읽기 전용, 3-10

복구, 32-6

임시, 3-17

제어 파일에서 명명, 32-21

테이블스페이스와 관계, 3-2

데이터베이스

관리

Enterprise Manager, 33-19

구성, 5-4

구조

색인-2 7

Page 526: Oracle8 - Tistory

ROW I D와 함께 나타내기, 12-18

논리적, 1-5, 1-9, 4-1

데이터 딕셔너리, 1-30, 2-1

데이터 블록, 1-10, 4-2, 4-3

데이터 파일, 1-11, 3-1, 3-16

리두 로그 파일, 1-12, 32-7

메모리, 1-14, 7-1

물리적, 1-5, 1-11

세그먼트, 1-10, 4-2, 4-16

스키마 객체, 1-10, 10-2

제어 파일, 1-13, 32-21

테이블스페이스, 1-9, 3-1, 3-6

프로세스, 1-14, 1-17, 8-1

확장 영역, 1-10, 4-2, 4-11

닫기, 5-10

인스턴스 중지, 5-10, 32-4

대기, 5-7, 32-26

마운트 해제, 5-10

마운트, 5-6

백업, 1-50, 32-23

복구, 1-45, 32-2

복제 데이터베이스, 5-7

분산, 1-35, 33-1

2단계 커밋, 1-35

개요, 1-33, 1-34, 33-1

노드, 1-35

명령문 최적화, 23-30

사이트 자율성, 33-16

전역 데이터베이스 이름 변경, 7-11

테이블 복제, 1-36

사용 제한 사항, 29-15

스키마 포함, 29-2

시작, 5-2

강제 수행됨, 5-10

아카이브 모드, 32-18

액세스 제어

개요, 1-51

보안 도메인, 29-2

암호 보안 처리, 29-7

열고 닫힘, 5-2

열기, 5-7

롤백 세그먼트 획득, 4-26

읽기 전용 열기, 5-9

전역 데이터베이스 이름, 33-4

정의, 1-8, 1-9

제어 파일에 저장된 이름, 32-21

종료, 5-9

크기

결정 방법, 3-4

확장성, 6-4, 26-2, 26-37

데이터베이스, 5-3

데이터베이스 관리 시스템(DBMS), 1-2

O racle 서버, 1-4

객체 관계형 D B M S, 13-2

원칙, 1-22

데이터베이스 관리자(DBA)

DBA 롤, 14-13, 30-22

데이터 딕셔너리 뷰, 2-6

백업 및 복구 책임, 32-2

암호 파일, 29-13

인증, 29-12

데이터베이스 구성

매개변수 파일, 5-4

프로세스 구조, 8-2

데이터베이스 구조

ROW I D와 함께 나타내기, 12-18

논리적, 1-5, 1-9

데이터 딕셔너리, 1-30, 2-1

데이터 블록, 1-10, 4-2, 4-3

데이터 파일, 1-11, 3-1, 3-16

리두 로그 파일, 1-12, 32-7

메모리, 1-14, 7-1

색인-2 8

Page 527: Oracle8 - Tistory

물리적, 1-5

세그먼트, 1-10, 4-2, 4-16

스키마 객체, 1-10, 10-2

제어 파일, 1-13, 32-21

테이블스페이스, 1-9, 3-1, 3-6

프로세스, 1-14, 1-17, 8-1

확장 영역, 1-10, 4-2, 4-11

데이터베이스 기록자 프로세스( D BWn), 8-8

L RU(Least Recently Used) 알고리즘, 8-8

개요, 1-18

다중 D BWn 프로세스, 8-8

매체 고장, 32-6

먼저 쓰기, 8-9

정의, 8-8

체크포인트, 8-8

체크포인트에서 디스크에 쓰기, 8-11

추적 파일, 32-6

활성화된 경우, 8-8

데이터베이스 링크, 1-29

개요, 33-6

분할 영역 확장 테이블 이름, 11-65

정의, 1-29

데이터베이스 버퍼

고정됨, 7-3

다중 버퍼 풀, 7-5

더티, 7-3, 8-8

버퍼 캐시, 7-3, 8-8

사용 가능, 7-3

작성, 8-8

정의, 1-16, 7-3

캐시 크기, 7-5

클린, 8-8

트랜잭션 커밋, 8-10

트랜잭션 커밋 후, 17-6

데이터베이스 스키마의 객체, 1-5

스키마 객체 참조

데이터베이스 트리거, 1-59, 20-1

트리거 참조

도메인 인덱스, 10-43

사용자 정의 통계, 22-17

확장 가능한 최적화, 22-16

독자가 기록자 방해, 27-10

동기식 데이터 전달, 34-16

동등 분할, 11-24

LOB 열, 11-38

로컬 인덱스, 11-29

범위 분할, 11-24

예, 11-25, 11-30, 11-32

인덱스 구성 테이블 개요, 11-42, 11-44

하나의 차원, 11-24

동시성

분할 영역 유지 관리, 11-50

설명, 27-2

잠금 강제 수행, 1-32

정의, 1-30

제한

데이터베이스 당, 29-20

사용자 당, 29-17

제한 사항, 1-43, 25-11

직접 로드 I N S E RT, 25-11

트랜잭션, 27-15

동의어, 21-8

개요, 1-26

객체로부터 권한 상속, 30-3

공용, 10-20

데이터 딕셔너리 뷰, 2-4

분할 영역 확장된 테이블 이름, 11-65

사용, 10-20

설명, 10-20

전용, 10-20

제약 조건의 간접적인 영향, 28-5

색인-2 9

Page 528: Oracle8 - Tistory

동일 행 기록자가 기록자 방해, 27-10

동적 SQL

DBMS_SQL 패키지, 16-19

내장됨, 16-19

이름 분석, 18-20

동적 분할, 26-6

동적 성능 테이블(V$ 테이블), 2-7

동적 술어

보안 정책, 30-23

두 모드, 8-3

네트워크 통신, 8-23

리스너 프로세스, 8-14

프로그램 인터페이스, 8-23

드라이버, 8-26

등가 조인

정렬 병합, 24-4

정의, 23-3

클러스터 조인, 24-5

해시 조인, 24-7

등록

DDL 문, 20-20

DML 문, 20-20

로그온/로그오프 이벤트, 20-19

시스템 이벤트

서버 오류, 20-19

시작/종료, 20-19

트리거 사용, 20-18

등록/구독 지원, 19-10

규칙 기반 구독자, 19-6

리슨 기능, 19-11

메시지 전달, 19-9

비동기식 알림, 19-11

이벤트 등록, 20-18

트리거, 20-18

디스크 고장, 1-46, 32-5

디스크 스트리핑

분할 영역, 11-9

친화력, 26-48

디스크 영역

테이블에 대한 할당 제어, 10-4

할당하는데 사용된 데이터 파일, 3-16

디스크 친화력

병렬 D M L, 26-49

분할 영역, 26-48

디스패처 프로세스(Dnnn)

N e t 8을 통해 접속된 사용자 프로세스, 8-14, 8-16

네트워크 프로토콜, 8-14

리스너 프로세스, 8-14

설명, 8-14

세션 당 S GA 영역 제한, 29-18

시작 및 종료 금지, 8-20

응답 대기열, 8-17

정의, 1-20

딕셔너리

데이터 딕셔너리 참조

딕셔너리 관리 테이블스페이스, 3-7

딕셔너리 캐시 잠금, 27-30

ㄹ라이브러리 캐시, 7-6, 7-7, 7-10

래치

L RU, 8-8

설명, 27-30

래퍼

프로시저 복제, 34-16

로그 관리 잠금, 27-30

로그 기록자 프로세스( L GWR), 1-19, 8-9

그룹 커밋, 8-10

리두 로그 버퍼, 7-6

먼저 쓰기, 8-9

새 A RCn 프로세스 시작, 8-12

색인-3 0

Page 529: Oracle8 - Tistory

수동 아카이브, 32-20

시스템 변경 수, 17-6

아카이브 모드, 32-18

로그 스위치

A LTER SYSTEM SWITCH LOGFILE, 8-12

아카이버 프로세스, 1-19, 8-12

로그 시퀀스 번호, 1-48

로그 입력 항목, 1-12, 32-9

리두 로그 파일 참조, 1-12

로깅 모드

N OA RCHIVELOG 모드, 25-5

병렬 D D L, 26-31, 26-32

분할 영역, 11-58

영향을 받은 SQL 연산, 25-7

직접 로드 I N S E RT, 25-5

로컬 데이터베이스, 1-35

로컬 인덱스, 11-29, 11-34

등가 분할, 11-29

병렬로 분할 영역 구축, 11-30

분할 영역 관리, 11-59

비트맵 인덱스

병렬 질의 및 D M L, 10-33

분할된 테이블, 10-36

롤, 1-41, 30-16

CONNECT 롤, 14-13, 14-14, 30-22

DBA 롤, 14-13, 30-22

DDL 문, 30-20

E X P _ F U L L _ DATABASE 롤, 30-22

I M P _ F U L L _ DATABASE 롤, 30-22

PL/SQL 블록에서 설정, 30-20

R E S O U RCE 롤, 14-13, 14-14, 30-22

개요, 1-41

권한 제한 사항, 30-20

기능, 30-2

대기열 관리자, 19-7

미리 정의됨, 30-22

보안 도메인, 30-19

부여, 30-3, 30-18

부여한 사용자 기능, 30-19

분산 데이터베이스 응용 프로그램, 33-17

사용, 30-17

사용 가능 또는 사용 불가능, 30-18

사용자, 30-18

스키마가 포함하지 않음, 30-19

암호 사용, 1-42

운영 체제를 통해 관리, 30-22

응용 프로그램, 1-42

응용 프로그램, 30-18

이름 지정, 30-19

전역 인증 서비스, 33-17

정의자 권한 프로시저 사용 불가능, 30-20

종속성 관리, 30-20

철회, 30-18

호출자 권한 프로시저 사용, 30-20

롤백, 4-20, 17-6

명령문 레벨, 17-4

복구 중, 1-51, 32-9

설명, 17-6

저장점, 17-6

정의, 1-53

트랜잭션 종료, 17-2, 17-4, 17-6

롤백 세그먼트, 1-11, 4-19

MAXEXTENTS UNLIMITED, 26-40

O P T I M A L, 26-40

SYSTEM 롤백 세그먼트, 4-26

개요, 4-19, 32-8

경합, 4-21

공용, 4-26

다른 확장 영역으로 이동, 4-22

미확정 분산 트랜잭션, 4-24

병렬 D M L, 26-40

색인-3 1

Page 530: Oracle8 - Tistory

병렬 복구, 32-10

복구에 사용, 1-49, 32-9

부분적으로 사용 가능, 4-28, 32-4

부적합, 4-28

사용된 경우, 4-20

삭제, 4-25

제한 사항, 4-30

상태, 4-28

순환적으로 기록, 4-21

시작 중 획득, 5-8

액세스, 4-20

오프라인 테이블스페이스, 4-30

오프라인, 4-28, 4-30

온라인, 4-28, 4-30

읽기 일관성, 1-31, 4-20, 27-4

잠금, 27-30

전용, 4-26

정의, 1-11

지연됨, 4-30

트랜잭션, 4-20

트랜잭션 수, 4-21

트랜잭션 작성 방법, 4-22

트랜잭션 커밋, 4-21

필요한 복구, 4-28

확장 영역 할당, 4-22

새로운 확장 영역, 4-24

확장 영역 할당 해제, 4-25

획득 시 고장, 4-27

획득된 경우, 4-26

롤백 입력 항목, 4-20

롤백 트랜잭션, 1-54, 17-2, 17-6, 32-4

루트 블록, 10-55

리두 레코드, 1-12

리두 로그, 1-12, 32-9

롤포워드, 32-8, 32-9

인스턴스 실패, 32-4

아카이브 모드, 32-18

리두 로그 버퍼, 1-16, 7-6

로그 기록자 프로세스, 7-6

순환, 8-9

쓰기, 8-9

크기, 7-6

트랜잭션 커밋, 8-10

리두 로그 입력 항목

커밋되지 않은 데이터, 32-9

커밋된 데이터, 32-8, 32-9

리두 로그 파일, 1-12, 32-7

개요, 1-12, 1-47

다중화됨, 1-48

목적, 1-12

로그 기록자 프로세스, 8-9

로그 스위치

A LTER SYSTEM SWITCH L O G F I L E, 8-12

아카이버 프로세스, 1-19, 8-12

로그 시퀀스 번호, 1-48

제어 파일에 기록됨, 32-22

롤포워드, 32-9

리두 입력 항목, 1-12, 32-9

모드, 1-48

물리적 데이터베이스 구조, 1-5

버퍼 관리, 8-9

병렬 복구, 32-10

복구, 32-7

아카이버 프로세스( A RCn), 1-19, 8-12

아카이브됨, 1-48, 32-18

수동, 32-20

아카이브 오류, 32-20

자동, 32-19

온라인 또는 오프라인, 1-47, 1-48, 32-7

임시 세그먼트인 경우, 4-19

제어 파일에서 명명된 파일, 32-21

색인-3 2

Page 531: Oracle8 - Tistory

트랜잭션이 커밋되기 전에 기록, 8-10

리두 입력 항목, 1-12, 32-9

리스너 프로세스, 6-6, 8-14

서비스 이름, 6-6

리터럴 호출

생성자 메소드, 14-4

링크, 33-6

ㅁ마스터 그룹, 34-5

마스터 사이트, 34-5

마스터 정의 사이트, 34-5

막대 그래프, 22-8

매개변수

국가별 언어 지원, 5-5

저장 영역, 4-5, 4-11

초기화, 5-4

작업 잠금, 27-19

초기화 매개변수 참조

매개변수 파일, 5-4

시작 시 사용됨, 5-5

예, 5-4

매체 고장, 1-46, 32-5

맵 메소드, 1-57, 13-7

먼저 쓰기, 8-9

멀티미디어 데이터 유형, 13-3

메모리

SQL 문 할당, 7-11

가상, 7-17

공유 SQL 영역, 7-8

구조 개요, 1-14

구조, 7-2

내용, 7-2

내장 프로시저, 18-8, 18-17

소프트웨어 코드 영역, 7-17

시스템 글로벌 영역 참조

시스템 글로벌 영역( S GA)

S GA 크기, 7-12

물리적 메모리 잠금, 7-13, 7-17

시작 주소, 7-13

초기화 매개변수, 7-12, 7-13

할당, 7-2

정렬 영역, 7-16

커서(명령문 핸들), 1-17

프로세스 사용, 8-2

확장된 버퍼 캐시( 3 2비트), 7-14

메소드

생성자 메소드, 13-6

리터럴 호출, 14-4

권한, 30-11

비교 메소드, 13-6

메소드 호출 자체 스타일, 13-6

메시지 대기열 처리, 19-2

대기열 모니터 프로세스, 1-20, 8-13, 19-6

구간 통계, 19-11

실행 윈도우, 19-7

대기열 테이블 엑스포트, 19-12

대기열 테이블, 19-4

등록/구독 지원, 19-10

이벤트 등록, 20-18

메시지, 19-4

수신자, 19-5

구독 목록, 19-5

규칙 기준 구독, 19-5, 19-6

원격 데이터베이스, 19-9

명령문

SQL 문 참조

명령문 레벨 읽기 일관성, 27-5

명령문 트리거, 20-8

설명, 20-8

실행된 경우, 20-21

트리거 참조

색인-3 3

Page 532: Oracle8 - Tistory

명령문으로 뷰 병합, 23-15

명명된 사용자의 사용권 지정, 29-21

명시적 잠금, 27-31

모드

두 작업, 8-3

아카이브 로그, 32-18

테이블 잠금, 27-22

모음, 13-10

가변 배열( VA R R AY), 13-11

인덱스 구성 테이블, 10-38

키 압축, 10-30

중첩 테이블, 13-12

모음 메소드

생성자 메소드, 1-57

무결성 규칙, 1-22

병렬 DML 제한 사항, 26-45

무결성 제약 조건, 28-2

기본 열 값, 10-8

제약 조건 참조

문자 집합

CLOB 및 NCLOB 데이터 유형, 12-13

NCHAR 및 N VA RCHAR2, 12-6

다양한 언어, 5-5

열 길이, 12-6

물리적 데이터베이스 구조, 1-5, 1-11

데이터 파일, 1-12, 3-16

리두 로그 파일, 1-12, 32-7

제어 파일, 1-13, 32-21

미확정 트랜잭션, 4-24, 5-8

ㅂ바인드 변수

사용자 정의 유형, 13-14

최적화, 23-52

반대 조인, 24-13

반복 읽기, 27-3

배열

VA R R AY 크기, 13-11

가변( VA R R AY), 13-11

배열 처리, 16-13

배타 모드, 4-27

배타 잠금

RX 잠금, 27-23

테이블 잠금(TM), 27-21

행 잠금(TX), 27-20

백그라운드 프로세스, 1-18, 8-5

개요, 1-18

도표화, 8-6

설명, 8-5

추적 파일, 8-14

프로세스 참조

백업

R e c o v e ry Manager, 1-51, 32-15

개요, 1-45, 32-23

데이터 파일, 32-25

병렬, 32-16

보조할 Export 사용, 32-25

부분, 1-50, 32-24

유형, 1-49

읽기 전용 테이블스페이스, 32-26

전체 데이터베이스 백업, 1-50, 32-23

제어 파일, 32-25

백엔드, 6-2

버퍼

데이터베이스 버퍼 캐시, 1-16, 7-3, 8-8

빠른 시작 체크포인트, 32-13

증분 체크포인트, 8-8

리두 로그 버퍼, 1-16, 7-6

버퍼 캐시, 7-3, 8-8

다중 버퍼 풀, 7-5

확장된 버퍼 캐시( 3 2비트), 7-14

버퍼 풀, 7-5

색인-3 4

Page 533: Oracle8 - Tistory

범위 분할, 11-15

기본 키 열, 11-42

동등 분할, 11-24

분할 영역 바운드, 11-20

키 압축, 11-20, 11-22

변수

객체 변수, 15-4

내장 프로시저, 16-17

내장된 S Q L, 16-6

바인드 변수

사용자 정의 유형, 13-14

최적화, 23-52

별칭

열 이름 제한, 14-8, 14-9

하위 질의 제한(인라인 뷰), 10-16

병렬 D D L, 26-30

병렬화 규칙, 26-20

병렬화 유형, 26-3

분할된 테이블 및 인덱스, 26-31

로컬 인덱스 구축, 11-30

제한 사항

L O B, 26-31

객체 유형, 26-30, 26-31

함수, 26-46

확장 영역 할당, 26-33

병렬 D E L E T E, 26-21

병렬 DML 작업 로드 편중, 26-19

병렬 D M L, 26-35

PARALLEL DML 활성화, 26-38

롤백 세그먼트, 26-40

병렬도, 26-20, 26-23

병렬화 규칙, 26-20

병렬화 유형, 26-3

복구, 26-40

비트맵 인덱스, 10-33

응용 프로그램, 26-37

자원 잠금 및 대기열에 넣기, 26-42

제한 사항, 26-43

객체 유형, 26-30, 26-44

원격 트랜잭션, 26-46

트랜잭션 모델, 26-39

함수, 26-46

병렬 S Q L, 26-2

Pa rallel Serv e r, 26-1

다중 스레드 서버, 26-8

병렬 실행 서버 수, 26-7

병렬 실행 서버로 행 할당, 26-11

병렬 실행 참조

병렬도, 26-16

병렬화 규칙, 26-20

서버 프로세스, 26-6

NEXT 확장 영역 크기, 25-9

직접 로드 I N S E RT, 25-3, 25-8

실행 계획 작업, 26-10

요약 또는 롤업 테이블, 26-31

인스턴스 그룹, 26-19

조정자 프로세스, 26-6

직접 로드 I N S E RT, 25-3

최적기, 26-10

병렬 U P DAT E, 26-21

병렬 백업 작업, 32-16

병렬 복구, 32-10, 32-16

병렬 실행, 26-2

병렬 SQL 참조

분할된 테이블 및 인덱스, 26-4

병렬 실행 서버, 26-6

직접 로드 I N S E RT, 25-3

NEXT 확장 영역 크기, 25-9

인덱스 유지 관리, 25-8

임시 세그먼트, 25-8

병렬 실행 조정자, 26-6

직접 로드 I N S E RT, 25-3

색인-3 5

Page 534: Oracle8 - Tistory

서버, 25-3, 26-6

NEXT 확장 영역 크기, 25-9

인덱스 유지 관리, 25-8

임시 세그먼트, 25-8

연산자 간 병렬화, 26-13

연산자 내 병렬화, 26-13

전체 테이블 스캔, 26-5

조정자, 25-3, 26-6

병렬 작업을 위한 인스턴스 그룹, 26-19

병렬 질의, 26-28

객체 유형, 26-29

제한 사항, 26-30

병렬화 규칙, 26-20

비트맵 인덱스, 10-33

인덱스 구성 테이블, 26-29

함수, 26-46

병렬도, 26-20, 26-23

병렬 S Q L, 26-7, 26-16

질의 연산 간, 26-13

보안, 1-41, 29-2

감사 데이터 삭제, 2-5

감사, 31-2, 31-6

강제 수행 기법, 1-39

관리자 권한, 5-3

데이터, 1-38

도메인, 1-40, 29-2

동적 술어, 30-23

메시지 대기열, 19-7

보안 정책, 30-22

분산 데이터베이스, 33-17

뷰 기술 향상, 30-6

뷰, 10-13

사용자 작업 감사, 1-44

상세한 액세스 제어, 30-22

설명, 1-38

시스템, 1-38, 2-3

암호, 29-7

응용 프로그램 강제 수행, 1-42

재량적 액세스 제어, 1-39, 29-2

정의자 권한, 18-9, 18-19

정책

구현, 30-24

프로그램 인터페이스 강제 수행, 8-25

프로시저 기술 향상, 30-8

호출자 권한, 18-9, 18-19

보안 도메인, 1-40, 29-2

사용 가능한 롤, 30-18

테이블스페이스 할당량, 29-13

복구

R e c o v e ry Manager, 1-51, 32-15

개요, 1-45, 32-8

고장 복구, 1-46, 32-4, 32-13

SMON 프로세스, 1-19, 8-11

데이터베이스 열기, 5-8

인스턴스 실패, 5-10

인스턴스 중단 후 요청됨, 5-10

읽기 전용 테이블스페이스, 32-6

권장 사항, 32-13

기본 단계, 1-50, 32-9

대기 데이터베이스, 32-26

데이터베이스 버퍼, 32-8

도표화, 32-13

롤백 트랜잭션, 32-9

롤포워드, 32-9

매체 복구

디스패처 프로세스, 8-20

활성화 또는 비활성화, 32-18

명령문 실패, 32-3

병렬 D M L, 26-40

병렬 복구, 32-10

병렬 복원, 32-16

분산 처리, 8-12

색인-3 6

Page 535: Oracle8 - Tistory

분산 트랜잭션, 5-8

블록 레벨 복구, 27-21, 32-14

사용 불능 트랜잭션, 32-4

사용된 구조, 1-47, 32-6

손상 복구, 32-26

인스턴스 복구, 32-4

SMON 프로세스, 1-19, 8-11, 26-41

병렬 D M L, 26-41

빠른 시작 체크포인트, 32-13

인스턴스 실패, 1-46, 32-4

읽기 전용 테이블스페이스, 32-6

적시

복제 데이터베이스, 5-7

전체 데이터베이스 백업, 32-24

프로세스 복구, 8-11, 32-3

복구 사이트

고급 복제, 34-6

복구 중 롤백, 32-9

복구 중 롤포워드, 1-50, 32-9

복구자 프로세스(RECO), 1-20, 8-12

미확정 트랜잭션, 1-36, 5-8, 17-8

복제

객체, 34-2

고급, 사용, 34-6

구체화된 뷰(스냅샷), 10-17

그룹, 34-2

사이트, 34-5

실시간, 34-16

읽기 전용 사용, 34-11

정의, 34-2

분산 데이터베이스, 33-7

제한 사항

병렬 D M L, 26-44

직접 로드 I N S E RT, 25-12

충돌

프로시저 복제, 34-16

카탈로그, 34-14

프로시저, 34-15

복제 관리 A P I, 34-14

관리 요청, 34-14

복제 데이터베이스

마운트, 5-7

복합 뷰 병합, 23-17

부분 백업, 32-24

부여

권한 및 롤, 30-3

사용자 정의 유형 실행, 14-14

분기 블록, 10-28

분리 레벨

선택, 27-12

설정, 27-7, 27-31

커밋된 읽기, 27-8

분산 데이터베이스, 33-1

2단계 커밋, 1-35, 33-13

O racle 버전 간, 33-7

감사, 31-6

개요, 1-34, 33-2

관리 도구, 33-19

교착 상태, 27-18

노드, 33-2

데이터베이스 링크, 33-6

도표화, 33-2

메시지 전달, 19-9

명령문 최적화, 23-30

복구자 프로세스(RECO), 8-12

분산 갱신, 33-11

분산 질의, 33-11

사이트 자율성, 33-16

원격 종속성, 21-11

원격 질의 및 갱신, 33-11

이기종, 33-8

작업 대기열 프로세스(SNPn), 1-20, 8-13

색인-3 7

Page 536: Oracle8 - Tistory

전역 객체 이름, 33-6

종속 스키마 객체, 21-10

클라이언트/서버 구조, 6-2

클라이언트일 수도 있는 서버, 6-2

테이블 복제, 1-36

투명성, 33-14

분산 데이터베이스에서 이름 분석, 33-6

분산 질의 최적화, 33-10

분산 처리 환경

구체화된 뷰(스냅샷), 10-17

데이터 조작문, 16-10

분산 데이터베이스, 33-7

설명, 1-33, 6-2

클라이언트/서버 구조, 1-33, 6-2

분산 트랜잭션

2단계 커밋, 1-35, 17-7

노드로 명령문 라우트, 16-11

병렬 DDL 제한 사항, 26-28

병렬 DML 제한 사항, 26-28, 26-46

분산 명령문, 23-4

정의, 33-12

지원되지 않은 표본 테이블 스캔, 23-34

최적화, 23-30

분할

LOB

DML 잠금, 11-46

유지 관리 작업, 11-57

LOB 열을 가진 테이블, 11-38

분할 방식 조인, 11-5

분할 영역, 11-2, 11-13

DATE 데이터 유형, 11-14, 11-21

DML 분할 영역 잠금, 11-45

E XCHANGE PA RTITION, 11-11

LONG 및 LONG RAW 제한 사항, 11-14

NOLOGGING 모드, 25-7

O LTP 데이터베이스, 11-6

V L D B, 11-5

구체화된 뷰, 10-18, 11-2

글로벌 인덱스, 11-32, 11-60

기본 분할 모델, 11-13

동등 분할, 11-24

LOB 열, 11-38

로컬 인덱스, 11-29

범위 분할, 11-24

예, 11-25, 11-30, 11-32

인덱스 구성 테이블의 오버플로우, 11-42,11-44

하나의 차원, 11-24

동시 유지 관리 작업, 11-50

동적 분할, 26-6

로컬 인덱스, 11-29, 11-59

병렬로 구축, 11-30

물리적 속성, 11-27, 11-37

범위 분할, 11-15

디스크 스트리핑, 26-48

병렬 D D L, 26-31

병렬 질의, 26-4

병렬화 규칙, 26-25, 26-27

병합, 11-16

분할 방식 조인, 11-5

분할 영역 바운드, 11-20

분할 영역 이름, 11-18

분할 영역 재구축, 11-60

분할 영역 제거, 11-4

DATE 데이터 유형, 11-22

디스크 스트리핑, 26-48

블록 범위로 병렬화, 26-4

인덱스, 11-36

분할 영역 참조, 11-19

분할 영역 투명성, 11-10

분할 영역 확장된 테이블 이름, 11-63

비트맵 인덱스, 10-36

색인-3 8

Page 537: Oracle8 - Tistory

세그먼트, 4-17

실행 계획, 11-11, 11-14

유지 관리 작업, 11-48

인덱스 분할, 11-29, 11-36

장점, 11-5, 11-7

접두어 없는 인덱스, 11-31, 11-35

접두어가 있는 인덱스, 11-30

제한 사항

데이터 유형, 11-14, 11-21

분할 영역 확장된 테이블 이름, 11-64

비트맵 인덱스, 11-14

친화력, 26-48

키 분할, 11-15, 11-19

테이블 분할, 11-27

통계, 11-14, 22-11

해시 분할, 11-16

분할 영역 병합, 11-16

분할 영역 뷰, 11-11

분할 영역 제거, 11-4, 26-4, 26-48

DATE 데이터 유형, 11-22

EXPLAIN PLAN, 11-22

인덱스, 11-36

인덱스 분할 영역, 11-4

불완전 객체 유형, 14-17

뷰, 1-24, 10-11

INSTEAD OF 트리거, 20-12

I N VALID 상태, 21-2

NLS 매개변수, 10-14

N U L L에 대해 널이 아닌 값, 24-11

SQL 함수, 10-14

감사, 31-8

개요, 1-24, 10-11

객체 뷰, 10-16, 15-1

갱신 가능성, 15-5

갱신 가능성, 10-15, 15-5, 20-13

고정된 뷰, 2-7

구체화된 뷰, 1-25, 10-17

스냅샷과 동일, 1-25, 34-3

권한, 30-6

기본 테이블 변경, 21-5

기본 테이블, 1-24

데이터 딕셔너리

갱신 가능한 열, 10-15

사용자 액세스 가능 뷰, 2-3

막대 그래프, 22-11

보안 응용 프로그램, 30-6

복합 뷰 병합, 23-17

본래 수정 가능, 20-13

분할 영역 뷰, 11-11

분할 영역 통계, 11-14

비정규화됨

스타 스키마, 24-15

사용, 10-13

선택 투영 조인 뷰, 23-15

수정 가능, 20-13

수정, 20-12

스키마 객체 종속성, 10-15, 21-4, 21-8

열의 최대 수, 10-12

의사 열, 20-13

인덱스, 10-14

인라인 뷰, 10-16

저장 방법, 10-12

정의 확장됨, 21-5

제약 조건 및 트리거 금지, 10-12

제약 조건의 간접적인 영향, 28-5

종속성 상태, 21-5

최적화, 23-15

컴파일 필요 조건, 21-5

통계, 22-14

표현식 포함, 20-13

블로킹 트랜잭션 대기, 27-10

블록

색인-3 9

Page 538: Oracle8 - Tistory

데이터베이스, 4-3

데이터 블록 참조

블록 레벨 복구, 32-14

익명, 16-15, 18-9

블록 레벨 복구, 27-21, 32-14

블록 서버 프로세스(BSP), 27-6

블록 표본 추출, 22-14

비 반복 읽기, 27-3, 27-10

비 표준 기능 플래그, 16-6

비교 방법, 13-6

비동기식 입출력

병렬 복구, 32-11

비동기식 처리, 19-2

비등가 조인

정의, 23-3

비용 기준 최적화, 22-7

막대 그래프, 22-8

사용자 정의 비용, 22-17

술어의 선택성, 22-8

막대 그래프, 22-8, 22-10

사용자 정의, 22-17

스타 질의, 24-14

질의 재작성, 10-17

통계, 22-8, 23-32

사용자 정의, 22-17

확장 가능한 최적화, 22-16

비용 기준 최적화, 33-10

비정규화된 뷰

스타 스키마, 24-15

비정규화된 테이블, 1-29, 10-19

비지속 대기열, 19-10

비트맵 인덱스, 10-32

기수, 10-33

널, 10-8, 10-35

병렬 질의 및 D M L, 10-33

분할된 테이블, 11-14

스캔, 23-36

스타 변형, 24-16

비트맵 테이블스페이스 관리 , 3-8

임시 테이블스페이스, 3-13

빠른 갱신, 10-18

빠른 시작 병렬 롤백, 32-14

빠른 시작 복구, 32-13

빠른 시작 체크포인트, 32-13

빠른 전체 인덱스 스캔, 23-36

빠른 커밋, 8-10

ㅅ사용 가능 영역

데이터 블록 내 합치기, 4-9

데이터 블록 섹션, 4-5

데이터 블록에 대한 매개변수, 4-5

사용 가능 영역 목록, 4-9

확장 영역 합치기, 4-13

SMON 프로세스, 1-19, 8-11

사용 가능 영역 목록, 4-9

사용 가능 영역 합치기

데이터 블록 내, 4-9

확장 영역, 4-13

SMON 프로세스, 1-19, 8-11

사용 불능 트랜잭션, 32-4

블록 레벨 복구, 32-14

사용권 지정

동시 사용, 29-20

명명된 사용자, 29-21

현재 제한 사항 보기, 29-20

사용자, 29-2

PUBLIC 사용자 그룹, 29-14, 30-19

감사, 31-12

관련 스키마, 10-2

권한, 1-41

기본 테이블스페이스, 29-13

색인-4 0

Page 539: Oracle8 - Tistory

다중 사용자 환경, 1-2, 8-2

데이터 딕셔너리에 나열됨, 2-2

동시 작업 조정, 1-30

롤, 30-16

사용자 유형, 30-18

보안 도메인, 1-40, 29-2, 30-19

분산 데이터베이스, 33-17

사용권 지정, 29-19

사용자명, 1-40, 29-2

세션 및 접속, 8-4

수로 사용권 지정, 29-21

스키마, 1-38, 29-2

암호 보안 처리, 29-7

액세스 권한, 29-2

인증, 29-3

임시 테이블스페이스, 1-43, 4-18, 29-13

자원 사용에 대한 제한 사항, 1-42

자원 제한, 29-16

전용 서버, 8-22

테이블스페이스 할당량, 1-43, 29-13

테이블스페이스, 1-42

프로세스, 1-17, 8-4

프로파일, 1-43, 29-18

현재 사용자, 18-10

사용자 작업 모니터링, 1-44, 31-2

사용자 잠금, 27-39

사용자 정의 데이터 유형, 13-1, 13-3, 14-1

Export 및 Import, 14-20

객체 관계형 모델, 1-22

객체 유형, 13-2, 13-4

테이블 별칭 사용, 14-8

권한, 14-13

모음, 13-10

가변 배열( VA R R AY), 13-11

중첩 테이블, 13-12

불완전 유형, 14-16

저장 영역, 14-18

사용자 정의 비용, 22-17

사용자 정의 연산자, 10-44

사용자 프로그램 인터페이스(UPI), 8-25

사용자 프로세스

P GA 할당, 7-14

공유 서버 프로세스, 8-19

세션, 8-4

수동 아카이브, 32-21

전용 서버 프로세스, 8-22

접속, 8-4

사이트 자율성, 1-35, 33-16

상관명

인라인 뷰, 10-16

상세한 액세스 제어, 30-22

상수

계산된 경우, 23-5

내장 프로시저, 16-17

비교, 23-5

표현식 평가, 23-5

서명 확인, 21-11

서버, 1-33

공유, 1-18

다중 스레드, 1-18

구조, 8-3, 8-16

전용과 대조, 8-16

프로세스, 8-14, 8-16, 8-19

전용, 1-18, 8-22

다중 스레드와 대조, 8-16

전용 서버 구조, 8-3

정의, 1-34

클라이언트/서버 구조, 6-2

프로세스, 1-18

서버 프로세스, 1-18, 8-5

리스너 프로세스, 6-6

서비스

색인-4 1

Page 540: Oracle8 - Tistory

이기종, 33-8

서비스 이름, 6-6

선택 프로젝트 조인 뷰, 23-15

선행 컴파일러

FIPS 플래그 표시자, 16-6

내장 프로시저, 16-18

내장된 S Q L, 16-5

바인드 변수, 16-13

익명 블록, 16-17

커서, 16-11

성능

DSS 데이터베이스, 11-9, 26-37

I/O, 11-9

O racle Pa rallel Server 및 DML 잠금, 1 1 - 4 7

S GA 크기, 7-12

그룹 커밋, 8-10

동적 성능 테이블(V$), 2-7

병렬 복구, 32-11

복구, 32-13

분할 영역, 11-9

실행 계획 보기, 22-4

인덱스 구축, 10-22

자원 제한, 29-16

접두어가 있는 인덱스와 접두어가 없는인덱스, 11-35

정렬 작업, 3-12

제약 조건의 결과, 28-6

클러스터, 10-48

패키지, 18-16

향상된 구조, 1-26, 1-27

세 개의 값으로된 로직(참, 거짓, 알 수 없음)

널로 생성, 10-8

세그먼트, 1-11, 4-16

개요, 1-11, 4-16

데이터, 4-16

롤백, 4-19

인덱스, 4-17

임시, 1-11, 4-17, 10-10

S M O N으로 정리, 8-11

병렬 I N S E RT, 25-8

삭제, 4-16

요청한 작업, 4-18

테이블스페이스 포함, 4-16, 4-18

할당, 4-17

할당량 무시, 29-14

정의, 4-3

테이블

고수위, 25-3

헤더 블록, 4-11

확장 영역 할당 해제, 4-14

세기, 12-12

세미 조인, 24-13

세션

PARALLEL DML 활성화, 26-38

P GA 스택 영역, 7-14

감사 옵션이 효과를 나타내는 경우, 31-6

감사, 31-10

대용량 풀에서 메모리 할당, 7-12

동시성 제한, 1-43

사용권, 29-20

사용자 당 제한, 29-17

시간 제한, 29-17

자원 제한, 29-16

접속과 대조, 8-4

정보가 저장되는 위치, 7-14

정의, 8-4, 31-10

트랜잭션 분리 레벨, 27-31

패키지 상태, 21-6

현재 사용자, 18-10

세션 제어문, 1-53, 16-5

소프트웨어 코드 영역, 7-17

색인-4 2

Page 541: Oracle8 - Tistory

프로그램 및 유틸리티에 의한 공유, 7-17

속성

최하위 레벨, 14-18

최하위 레벨 스칼라, 14-18

손상 복구, 32-26

수동 잠금, 1-33, 27-31

수신자, 19-5

구독 목록, 19-5

순서 메소드, 1-57, 13-7

순차적으로 액세스할 수 없음, 27-11

술어

동적

보안 정책, 30-23

분할 영역 제거, 11-4

인덱스, 11-36

뷰 질의 최적화, 23-15

뷰에 넣기, 23-18, 23-23

예, 23-19, 23-21

선택성, 22-8

막대 그래프, 22-8, 22-10

사용자 정의, 22-17

술어의 선택성, 22-8

막대 그래프, 22-8, 22-10

사용자 정의 선택성, 22-17

스냅샷

갱신, 8-13

갱신 가능, 34-9

구체화된 뷰와 동일, 1-25, 34-3

그룹, 34-6

사이트, 34-5

읽기 전용, 34-8

스냅샷 갱신

작업 대기열 프로세스(SNPn), 1-20, 8-13

스레드

다중 스레드 서버, 8-14, 8-16

스캔, 23-34

고유, 23-35, 23-40, 23-41

빠른 전체 인덱스 스캔, 23-36

범위, 23-35, 23-42MAX 또는 MIN, 23-46

ORDER BY, 23-47

제한되지 않음, 23-45

제한됨, 23-44

인덱스 조인, 23-36, 23-49

인덱스, 23-35

MAX 또는 MIN, 23-46

ORDER BY, 23-47

단일 열, 23-42

비트맵, 23-36

선택성, 23-51

제한 사항, 23-48

제한되지 않은 범위, 23-45

제한된 범위, 23-44

조합, 23-42

클러스터 키, 23-41

전체 테이블, 23-34, 23-48

L RU 알고리즘, 7-4

규칙 기준 최적기, 23-54

다중 블록 읽기, 23-51

병렬 질의, 26-5

클러스터, 23-38, 23-39, 23-40, 23-41

인덱스화됨, 23-41

테이블 스캔 및 CACHE 절, 7-4

표본 테이블, 23-34, 23-49

힌트가 무효화할 수 없음, 23-50

해시 클러스터, 23-39, 23-41

스키마, 29-2

OUTLN, 22-6

객체, 10-2

관련 사용자, 1-38, 10-2

내용, 10-2

사용자 정의 데이터 유형, 13-14

색인-4 3

Page 542: Oracle8 - Tistory

스타 스키마, 24-14, 24-15

정규화된 테이블, 24-15

정의, 29-2

테이블스페이스와 대조, 10-2

스키마 객체, 10-1

I N VALID 상태, 21-2

감사, 1-44, 31-8

개요, 1-10, 1-23, 10-2

구체화된 뷰, 10-17

권한, 30-3

기본 테이블스페이스, 29-13

데이터 딕셔너리 정보, 2-2

데이터 파일과의 관계, 3-16, 10-2

도메인 인덱스, 10-43

분산 데이터베이스 이름 지정 규약, 33-6

분산 데이터베이스의 이름, 33-6

사용자 정의 연산자, 10-44

사용자 정의 유형, 13-3

생성

필요한 테이블스페이스 할당량, 29-14

인덱스 유형, 10-43

잃어버린 권한에 대한 종속, 21-6

전역 이름, 33-6

정의, 1-5

종속성, 21-2

분산 데이터베이스, 21-12

뷰, 10-15

존재하지 않은 다른 객체, 21-8

트리거 관리, 20-21

차원, 10-18

취소된 테이블스페이스, 29-14

트리거 종속성, 20-25

스키마 객체 권한, 30-3

DML 및 DDL 연산, 30-5

개요, 1-41

부여 및 철회, 30-4

뷰, 30-6

스키마 이름

데이터베이스 내에서 고유, 33-6

분산 데이터베이스, 33-6

열 이름 제한, 14-9

스타 변형, 24-16

예, 24-16

제한 사항, 24-20

스타 스키마

비정규화된 뷰, 24-15

스타 조인, 24-14

스타 질의, 24-14

비정규화된 뷰, 24-15

스타 변형, 24-16

인덱스, 24-15

조정, 24-15

확장된 스타 스키마, 24-15

힌트, 24-15

스택 영역, 7-14

시간 기록 검사, 21-11

시스템 권한, 30-2

ADMIN OPTION, 14-14, 30-3

권한 참조

부여 및 철회, 30-3

사용자 정의 유형, 14-13

설명, 30-2

시스템 글로벌 영역( S GA), 7-2

개요, 1-16, 7-2

고정됨, 7-3

공유 및 쓰기 가능, 7-3

공유 풀, 7-6

내용, 7-3

대용량 풀, 7-12

데이터 딕셔너리 캐시, 2-4, 7-10

데이터베이스 버퍼 캐시, 7-3

도표, 5-2

색인-4 4

Page 543: Oracle8 - Tistory

롤백 세그먼트, 17-5

리두 로그 버퍼, 7-6, 17-5

전용 SQL 영역 제한, 29-18

크기, 7-12

가변 매개변수, 5-4

할당, 5-5

할당된 경우, 7-2

시스템 모니터 프로세스(SMON), 8-11

Pa rallel Serv e r, 8-11, 26-41

병렬 DML 시스템 복구, 26-41

병렬 DML 인스턴스 복구, 26-41

인스턴스 복구, 32-4

임시 세그먼트 지우기, 8-11

정의, 1-19, 8-11

트랜잭션 롤백, 32-10

시스템 변경 번호(SCN)

결정된 경우, 27-5

리두 로그, 8-10

읽기 일관성, 27-5

정의, 17-5

커밋된 트랜잭션, 17-5

시스템 제어문, 1-53, 16-5

시작, 5-2, 5-5

S GA 할당, 7-2

시작 주소, 7-13

감사 레코드, 31-5

강제 실행, 5-6

단계, 5-5

디스패처 프로세스로 금지, 8-20

복구 중, 32-4

제한 모드, 5-6

시퀀스, 1-25, 10-19

CHECK 제약 조건 금지, 28-18

감사, 31-8

번호 생성, 10-19

번호의 길이, 10-19

테이블로부터 독립, 10-20

실시간

데이터 복제, 34-16

복제, 34-16

실행 계획

EXPLAIN PLAN, 16-4

OR 연산자, 23-12

SQL 구문 분석, 16-11

개요, 22-2

계획 안정성, 22-6

보기, 22-4

복합 명령문, 23-14

분할 영역 및 분할 영역 뷰, 11-11, 11-14

뷰 액세스, 23-19, 23-22, 23-23

뷰 조인, 23-25

스타 변형, 24-18

실행 시퀀스, 22-5

예, 23-14

위치, 7-8

조인, 24-2, 24-8

혼합 질의, 23-27, 23-28, 23-29

실행 시간 영역, 7-8

실행 취소, 1-11

롤백 참조

ㅇ아카이버 프로세스( A RCn)

다중 프로세스, 1-19, 8-12

설명, 1-19, 8-12

수동 아카이브에 대해 사용되지 않음, 32-21

예, 32-18

자동 아카이브, 32-19

추적 파일, 32-20

아카이브된 리두 로그, 1-48

수동 아카이브, 32-20

자동 아카이브, 32-19

색인-4 5

Page 544: Oracle8 - Tistory

활성화, 32-18

암시적 참조 해제, 13-10

암호

계정 잠금, 29-7

관리자 권한, 5-3

데이터베이스 사용자 인증, 29-7

롤에서 사용, 1-42

만기, 29-8

보안 처리, 29-7

복합성 검증, 29-8

암호 없이 접속, 29-4

암호 있는 접속, 8-4

암호 재사용, 29-8

암호 파일, 29-13

압축, 인덱스 키, 10-29

액세스 경로

ROW I D에 의한 단일 행, 23-38

고유 또는 기본 키에 의한 단일 행, 23-40

목록, 23-36

인덱스화된 클러스터 키, 23-41

정의, 22-4

조합 인덱스, 23-42

최적화, 23-33

클러스터 조인, 23-40

클러스터 조인에 의한 단일 행, 23-38

해시 클러스터 키, 23-41

해시 클러스터 키에 의한 단일 행 (고유 키 가짐), 23-39

액세스 방식, 23-34

실행 계획, 22-2

인덱스 스캔, 23-35

클러스터 스캔, 23-34

테이블 스캔, 23-34

해시 스캔, 23-35

액세스 제어, 30-2

권한, 30-2

롤, 30-16

상세한 액세스 제어, 30-22

암호 보안 처리, 29-7

재량적, 1-39

업무 규칙

내장 프로시저 사용 강제 수행, 28-5

응용 프로그램 코드에 강제 수행, 28-5

제약 조건으로 강제 수행, 1-58, 28-1

장점, 28-5

트리거로 강제 수행, 1-59

역방향 키 인덱스, 10-31

연결된 인덱스, 10-22

연산자 간 병렬화, 26-13

연산자 내 병렬화, 26-13

기본값, 10-8

기수, 10-33

널 금지, 28-7

무결성 제약 조건, 10-4, 10-8, 28-4, 28-7

미사용, 10-6

뷰 또는 테이블의 최대값, 10-12

삭제, 10-6

선택성, 22-8

막대 그래프, 22-8, 22-10

설명, 10-3

순서, 10-7

연결된 인덱스의 최대값, 10-23

열 객체, 13-8

인덱스, 14-6

열 이름

질의 제한, 14-8, 14-9

의사 열

ROW I D, 12-15

ROW N U M, 23-16, 23-25, 23-49

U S E R, 30-7

색인-4 6

Page 545: Oracle8 - Tistory

정의, 1-23

중첩 테이블, 10-9

열 분할, 11-15

열에 대한 SET UNUSED 옵션, 10-6

영역 관리

MINIMUM EXTENT 매개변수, 26-33

P C T F R E E, 4-6

P C T U S E D, 4-6

데이터 블록, 4-5

병렬 D D L, 26-33

블록에서 사용 가능한 영역 압축, 4-9

세그먼트, 4-16

직접 로드 I N S E RT, 25-8

행 체인화, 4-10

확장 영역, 4-11

예약어, 16-3

예외 사항

내장 프로시저, 16-18

발생, 16-18

트리거 실행 중, 20-23

오류

내장된 S Q L, 16-6

추적 파일에 추적됨, 8-14

오류 및 트리거, 20-22

오프라인 리두 로그 파일, 1-48, 32-7

오프라인 백업

전체 데이터베이스 백업, 32-23

온라인 리두 로그, 1-47, 32-7

다중화됨, 32-5

매체 고장, 32-5

아카이브, 32-18, 32-19

제어 파일에 기록됨, 32-21

체크포인트, 32-22

온라인 분석 처리(OLAP)

인덱스 구성 테이블, 10-42

온라인 트랜잭션 프로세싱( O LTP), 11-5

역방향 키 인덱스, 10-31

외래 키, 1-58

부분적으로 널, 28-16

상위 키 사용 권한, 30-5

정의, 1-59

외래 키 일치

전체, 부분 또는 불일치, 28-16

외부 조인

N U L L에 대해 널이 아닌 값, 24-11

정의, 23-3

외부 참조, 18-10

이름 분석, 18-19

외부 프로시저, 16-20, 18-11

요구 시 빠른 시작 롤백, 32-10

요약, 10-17

운영 체제

관리자 권한, 5-3

롤, 30-22

블록 크기, 4-3

인증, 29-4

통신 소프트웨어, 8-26

원격 데이터베이스, 1-35

데이터베이스 링크, 33-6

원격 종속성, 21-11

원격 트랜잭션, 33-12

병렬 DML 및 DDL 제한 사항, 26-28

원격 프로시저 호출, 33-12

원격 프로시저 호출(RPC), 33-12

웨어하우스

구체화된 뷰, 10-17

데이터 웨어하우스 참조

테이블 데이터 갱신, 26-37

위치 투명성, 1-35

유형

권한, 30-11

데이터 유형, 객체 유형 참조

색인-4 7

Page 546: Oracle8 - Tistory

응답 대기열, 8-17

응답 시간, 22-7

비용 기준 접근 방법, 23-31

응용 프로그램

객체 종속성, 21-13

공간적 응용 프로그램, 10-42

네트워크 통신, 6-5

데이터 딕셔너리 참조, 2-4

데이터 웨어하우스, 10-32

스타 질의, 24-14

데이터베이스 액세스, 8-2

롤, 30-18

병렬 D M L, 26-37

보안

응용 프로그램 컨텍스트, 30-24

보안 기술 향상, 1-42, 28-5

온라인 분석 처리(OLAP), 10-42

온라인 트랜잭션 처리( O LTP)

역방향 키 인덱스, 10-31

응용 프로그램 대 데이터베이스 트리거, 20-3

의사 결정 지원 시스템(DSS), 10-33

병렬 S Q L, 26-2, 26-31

이산 트랜잭션, 17-8

인덱스 구성 테이블, 10-40

정보 검색(IR), 10-40

제약 조건 위반 사항 검색 가능, 28-6

종속성, 21-11

직접 로드 I N S E RT, 26-38

코드 공유, 7-17

트랜잭션 종료, 17-5

프로그램 인터페이스, 8-25

프로세스, 8-4

응용 프로그램 로드 분산

고급 복제, 34-7

응용 프로그램 컨텍스트, 30-24

의사 결정 지원 시스템(DSS), 11-6

구체화된 뷰, 10-17

디스크 스트리핑, 26-48

병렬 D M L, 26-37

병렬 S Q L, 26-2, 26-31, 26-37

분할 영역, 11-6

비트맵 인덱스, 10-33

성능, 11-9, 26-37

점수 기록 테이블, 26-38

의사 결정 지원 응용 프로그램

기본 복제, 34-11

의사 열

CHECK 제약 조건 금지

LEVEL 및 ROW N U M, 28-18

ROW I D, 12-15

ROWNUM

뷰 질의 최적화, 23-16, 23-25

인덱스 사용할 수 없음, 23-49

U S E R, 30-7

뷰 수정, 20-13

의사 코드, 18-18

트리거, 20-25

이기종 분산 데이터베이스, 33-8

이기종 서비스, 33-8

대리 프로세서, 33-9

이동 가능한 테이블스페이스, 3-13

이동 컴퓨팅 환경

구체화된 뷰, 10-17

이산 트랜잭션 관리

요약, 17-8

이식성, 1-3

이진 데이터

B F I L E, 12-14

B L O B, 12-13

R AW 및 LONG RAW, 12-14

익명 PL/SQL 블록, 16-15, 18-9

색인-4 8

Page 547: Oracle8 - Tistory

내장 프로시저 호출, 16-19

내장 프로시저와 대조, 18-9

동적 S Q L, 16-19

성능, 18-9

응용 프로그램, 16-17

인덱스, 1-26, 10-21

B* 트리 구조, 10-27

INDEX UNUSABLE(IU), 11-61

LONG RAW 데이터 유형 금지, 12-15

NOLOGGING 모드, 25-7

REF, 14-6

ROW I D, 10-28

개요, 1-26, 10-21

객체 열 속성, 14-6

고유, 10-22

고유 스캔, 23-35

고유하지 않음, 10-22

구축

기존 인덱스 사용, 10-22

기수, 10-33

내부 구조, 10-27

널, 10-8, 10-24, 10-35

도메인, 10-42

도메인 인덱스

사용자 정의 통계, 22-17

확장 가능한 최적화, 22-16

로컬 인덱스, 11-29, 11-59

병렬로 분할 영역 구축, 11-30

명령문 변환, 23-10

무결성 제약 조건 강제 수행, 28-10, 28-12

범위 스캔, 23-35

병렬 DDL 저장 영역, 26-33

병렬 인덱스 스캔, 26-5

복합 데이터 유형, 10-42

분기 블록, 10-28

분할 영역, 11-2, 11-29

분할 영역 감사, 11-63

분할 영역 관리, 11-59

분할 영역 재구축, 11-60

분할 영역 제거, 11-4

분할 영역에 대한 권한, 11-62

분할 지침 사항, 11-36

분할된 글로벌 인덱스, 11-32

분할 영역 관리, 11-33, 11-60

분할된 테이블, 10-36

뷰로 사용된 경우, 10-14

비트맵 인덱스, 10-32, 10-36

널, 10-8

병렬 질의 및 D M L, 10-33

빠른 전체 스캔, 23-36

사용자 정의 유형, 14-6

설명, 1-26, 10-21

성능, 10-22

스캔, 23-35

MAX 또는 MIN, 23-46

ORDER BY, 23-47

단일 열, 23-42

제한 사항, 23-48

제한되지 않은 범위, 23-45

제한된 범위, 23-44

조합, 23-42

클러스터 키, 23-41

역방향 키 인덱스, 10-31

연결됨, 10-22

위치, 10-26

인덱스 구성 테이블, 10-36

논리적 ROW I D, 10-39, 12-20

보조 인덱스, 10-39

인덱스 조인, 23-36, 23-49

저장 영역 형식, 10-26

조합, 10-22

스캔, 23-42

색인-4 9

Page 548: Oracle8 - Tistory

직접 로드 I N S E RT 후 재구축, 25-8

최적화, 23-10

최하위 블록, 10-28

클러스터, 10-50

분할될 수 없음, 11-2

삭제, 10-50

스캔, 23-41

테이블과 대조, 10-50

키, 10-23

고유 키 제약 조건, 28-10

기본 키 제약 조건, 28-12

키 압축, 10-29

함수 기준, 10-24

DETERMINISTIC 함수, 21-8

D I SA B L E D, 21-8

권한, 10-26, 21-8

종속성, 10-26, 21-7, 21-9

최적화, 10-25

확장성, 10-42

인덱스 구성 테이블, 10-36

논리적 ROW I D, 10-39, 12-20

대기열 테이블, 19-12

병렬 C R E AT E, 26-31

병렬 질의, 26-29

보조 인덱스, 10-39

분할 영역, 11-42

분할된 보조 인덱스, 11-45

응용 프로그램, 10-40

장점, 10-38

재구축, 10-39

키 압축, 10-30, 10-38

행 오버플로우 영역, 10-38

인덱스 세그먼트, 1-11, 4-17

인덱스 유형, 10-43

인덱스 조인, 23-36, 23-49

인덱스에 대한 NOREVERSE 옵션, 10-31

인덱스에 대한 REVERSE 옵션, 10-31

인라인 뷰, 10-16

예, 10-16

인수 테이블

스타 조인, 24-14

스타 질의, 24-14

인스턴스, 1-6

가상 메모리, 7-17

개요, 1-6

관련 데이터베이스, 5-2, 5-6

다중 프로세스, 8-2

데이터베이스 공유, 1-8

도표화, 8-6

롤백 세그먼트 획득, 4-26

메모리 구조, 7-2

복구, 5-10, 32-4

SMON 프로세스, 8-11

데이터베이스 열기, 5-8

빠른 시작 체크포인트, 32-13

서비스 이름, 6-6

설명, 5-2

시스템 식별자(SID), 6-6

시작, 5-5

감사 레코드, 31-5

실패, 1-46, 32-4

인스턴스 그룹, 26-19

정의, 1-16

제한 모드, 5-6

종료, 5-9, 5-10

감사 레코드, 31-5

중지, 5-10, 32-4

프로세스 구조, 8-2

인스턴스 복구, 32-4

SMON 프로세스, 1-19, 8-11, 26-41

고장 복구 참조

인스턴스 실패, 1-46, 32-4

색인-5 0

Page 549: Oracle8 - Tistory

읽기 전용 테이블스페이스, 32-6

인스턴스 중지, 5-10, 32-4

인증

O ra c l e, 29-7

공용 키 기반 구조, 29-5

네트워크, 29-4

다중 계층, 29-9

데이터베이스 관리자, 29-12

설명, 29-3

운영 체제, 29-4

원격, 29-6

인증서, 29-5

읽기

더티, 27-2

데이터 블록

제한, 29-17

반복, 27-6

읽기 스냅샷 시간, 27-10

읽기 일관성, 27-2, 27-4

D M L의 하위 질의, 27-14

O racle Pa rallel Serv e r, 27-6

snapshot too old 메시지, 27-5

가상 읽기, 27-3, 27-10

다중 버전 일관성 모드, 1-31, 27-4

더티 읽기, 27-2, 27-10

롤백 세그먼트, 4-20

명령문 레벨, 27-5

비 반복 읽기, 27-3, 27-10

정의, 1-31

질의, 16-12, 27-4

캐시 결합, 27-6

트랜잭션, 1-31, 27-4, 27-6

트리거, 20-21, 20-23

읽기 전용 데이터베이스

열기, 5-9

읽기 전용 복제

사용, 34-11

읽기 전용 스냅샷, 34-8

읽기 전용 테이블스페이스

과도적 읽기 전용 모드, 3-11

백업, 32-26

설명, 3-10

제한 사항, 3-12

읽기 전용 테이블스페이스 트랜잭션, 3-11

읽기 전용 트랜잭션, 1-32

임시 세그먼트, 4-16, 4-18, 10-10

리두 로그에 없는 경우, 4-19

병렬 D D L, 26-33

병렬 I N S E RT, 25-8

삭제, 4-16

요구한 작업, 4-18

질의에 대한 할당, 4-18

테이블스페이스 포함, 4-16, 4-18

할당, 4-18

할당량 무시, 29-14

확장 영역 할당 해제, 4-16

임시 테이블, 10-10

임시 테이블스페이스, 3-12

임시 파일, 3-17

ㅈ자동화된 대기 데이터베이스, 32-26

자원 제한

CPU 시간 제한, 29-17

값 결정, 29-19

개요, 1-43

논리적 읽기 제한, 29-17

사용자 당 세션, 29-17

세션 당 전용 S GA 영역, 29-18

세션 당 접속 시간, 29-18

세션 당 휴지 시간, 29-17

세션 레벨, 29-16

색인-5 1

Page 550: Oracle8 - Tistory

호출 레벨, 29-16

작업 대기열 프로세스(SNPn), 1-20, 8-13

메시지 전달, 19-10

작업 로드 편중, 26-19

작업 안함 갱신 제약 조건, 28-16

작업 안함 삭제 제약 조건, 28-16

작업, 8-2

잠금, 1-32, 27-3

DML 분할 영역 잠금, 11-45

DML 획득, 27-27

도표화, 27-25

O racle 사용법, 27-15

O racle 잠금 관리 서비스, 27-39

개요, 1-32, 27-3

객체 레벨 잠금, 13-15

공유 테이블 잠금(S), 27-24

공유 하위 독점 잠금(SSX), 27-25

공유 행 독점 잠금(SRX), 27-25

교착 상태, 27-17, 27-18

회피, 27-19

구문 분석, 16-11, 27-29

내부, 27-29

단계적으로 확대시키지 않음, 27-17

데이터, 27-20

기간, 27-15

독점 테이블 잠금(X), 27-25

딕셔너리 캐시, 27-30

딕셔너리, 27-28

기간, 27-29

클러스터, 27-29

래치, 27-30

로그 관리 잠금, 27-30

롤백 세그먼트, 27-30

변환, 27-16

병렬 D M L, 26-42

병렬 캐시 관리(PCM), 27-20

수동, 1-33, 27-31

작업 예, 27-32

유형, 27-19

자동, 1-32, 27-15, 27-19

테이블 잠금 모드, 27-22

테이블(TM), 27-21

테이블스페이스, 27-30

트랜잭션 커밋 후, 17-6

파일 관리 잠금, 27-30

하위 공유 테이블 잠금(SS), 27-23

하위 독점 테이블 잠금(SX), 27-23

행 공유 테이블 잠금(RS), 27-23

행 독점 잠금(RX), 27-23

행(TX), 27-20

블록 레벨 복구, 32-14

잠금 프로세스(LCK0), 1-20, 8-13

장애, 32-2

내부 오류

추적 파일에 추적됨, 8-14

네트워크, 32-3

데이터베이스 버퍼, 32-8

리두 로그 파일 아카이브, 32-20

매체, 1-46, 32-5

명령문과 프로세스, 1-45, 8-11, 32-2

복구 참조

사용자 오류, 1-45, 32-2

설명, 1-45, 32-2

인스턴스, 1-46, 32-4

복구, 5-8, 5-10, 32-4

제공된 안전 장치, 32-6

존재 가능성, 32-26

재귀적 SQL

커서, 16-7

재량적 액세스 제어, 1-39, 29-2

재작성

구체화된 뷰 사용, 10-17

색인-5 2

Page 551: Oracle8 - Tistory

보안 정책의 술어, 30-23

저장 영역

REF, 14-19

객체 테이블, 14-18

널, 10-7

논리적 구조, 3-6, 10-2

데이터 파일, 3-16

병렬 D D L의 단편화, 26-33

병렬 I N S E RT, 25-8

뷰 정의, 10-14

사용자 제한, 29-14

사용자 할당량, 1-42

인덱스, 10-26

인덱스 분할 영역, 11-37

중첩 테이블, 14-19

클러스터, 10-49

테이블 분할 영역, 11-27

테이블스페이스 할당량, 29-14

테이블스페이스 호출, 29-14

트리거, 20-2, 20-25

해시 클러스터, 10-51

저장 영역 매개변수

MAXEXTENTS UNLIMITED, 26-40

N E X T, 25-8

계산, 25-9

O P T I M A L (롤백 세그먼트), 4-25, 26-40

P C T I N C R E A S E, 25-8, 25-10

병렬 직접 로드 I N S E RT, 25-8

설정, 4-11

저장점, 1-55, 17-7

개요, 1-55

롤백, 17-6

설명, 17-7

암시적, 17-4

적시 복구

복제 데이터베이스, 5-7

전달 계획 잡기 기능, 19-10

전역 데이터베이스 이름

공유 풀, 7-11

전역 스키마 객체 이름, 1-29, 33-6

전용 SQL 영역

관리 방법, 7-9

설명, 7-8

실행 시간 영역, 7-8

지속 영역, 7-8

커서, 7-9

전용 롤백 세그먼트, 4-26

전용 서버, 8-22

다중 스레드 서버, 8-16

사용 예, 8-24

정의, 1-18

전자 지갑, 29-5

전체 데이터베이스 백업, 1-50, 32-23

전체 인덱스 스캔, 23-35

전체 테이블 스캔, 23-34, 23-48

L RU 알고리즘, 7-4

규칙 기준 최적기, 23-54

다중 블록 읽기, 23-51

병렬 실행, 26-5, 26-6

선택성, 23-51

접두어가 없는 인덱스, 11-31, 11-35

분할된 글로벌 인덱스, 11-33

접두어가 있는 인덱스, 11-30, 11-34

접속

관리자 권한, 5-3

감사 레코드, 31-5

내장된 S Q L, 16-6

리스너 프로세스, 6-6, 8-14

사용자명, 29-2

세션과 대조, 8-4

정의, 8-4

제한, 5-6

색인-5 3

Page 552: Oracle8 - Tistory

접속 해제 환경

고급 복제, 34-12

접속성, 1-2

정규화된 테이블, 1-29, 10-19

스타 스키마, 24-15

정렬 병합 조인, 24-4

비용 기준 최적화, 24-9

액세스 경로, 23-46

예, 23-46

정렬 세그먼트, 3-12

정렬 영역, 7-16

정렬 작업, 3-12

정보

분산

기본 복제, 34-11

오프로드

기본 복제, 34-11

전송, 34-12

정보 검색(IR) 응용 프로그램

인덱스 구성 테이블, 10-40

정보 분산

기본 복제, 34-11

정의자 권한, 18-9

이름 분석, 18-19

프로시저 보안, 30-7

제약 조건, 1-58

C H E C K, 28-17

E NABLE 또는 D I SA B L E, 28-22

FOREIGN KEY, 1-59, 28-13

NOT NULL, 28-7, 28-11

P R I M A RY KEY, 1-59, 28-11

UNIQUE 키, 1-59, 28-8

부분적으로 널, 28-11

VA L I DATE 또는 N OVA L I DAT E, 28-22

강제 수행 방법, 28-18

개요, 1-58

객체 테이블, 14-5

기본값, 28-20

나열된 유형, 1-58, 28-1

대체 방안, 28-5

병렬 생성 테이블, 26-25

뷰에서 금지, 10-12

성능에 영향, 28-6

수정, 28-23

위반 시 발생 사항, 28-5

응용 프로그램이 위반 사항을 찾을 수 있음, 28-6

인덱스로 강제 수행, 10-23

P R I M A RY KEY, 28-12

U N I Q U E, 28-10

일시적으로 비활성화, 28-7

정의, 10-4

참조

갱신 결과, 28-16

자체 참조, 28-15

트리거는 위반할 수 없음, 20-21

트리거와 대조, 20-5

평가된 경우, 10-8

제어 파일, 1-13, 32-21

개요, 1-13, 32-21

내용, 32-21

다중화됨, 1-49, 32-22

데이터베이스 마운트에 사용, 5-6

물리적 데이터베이스 구조, 1-5

백업, 32-25

변경 사항 기록됨, 32-22

복구, 1-49

지정 방법, 5-4

체크포인트, 32-22

제한 모드

인스턴스 시작, 5-6

제한 사항

색인-5 4

Page 553: Oracle8 - Tistory

병렬 D D L, 26-31

원격 트랜잭션, 26-28

병렬 D M L, 26-43

원격 트랜잭션, 26-28, 26-46

분할 영역

데이터 유형, 11-14, 11-21

분할 영역 확장된 테이블 이름, 11-64

비트맵 인덱스, 11-14

분할 영역 뷰, 11-12

중첩 테이블, 26-30

직접 로드 I N S E RT, 25-11, 26-43

함수 병렬 실행, 26-46

제한된 REF, 13-9, 14-19

제한된 ROWID 형식, 12-18

조인

등가 조인, 23-3

반대 조인, 24-13

분할 방식, 11-5

뷰 캡슐화, 1-24, 10-13

뷰, 1-25, 10-15

비등가 조인, 23-3

상호, 23-3

선택 투영 조인 뷰, 23-15

세미 조인, 24-13

스타 조인, 24-14

스타 질의, 24-14

실행 계획, 24-2

외부, 23-3

N U L L에 대해 널이 아닌 값, 24-11

인덱스 조인, 23-36, 23-49

정렬 병합, 24-4

비용 기준 최적화, 24-9

예, 23-46

정의, 23-3

조인 정렬

술어의 선택성, 22-8, 22-17

실행 계획, 22-2

중첩 루프, 24-2

비용 기준 최적화, 24-8

최적화, 24-9

카티시안 곱, 23-3

클러스터, 10-48, 23-38, 24-5

검색, 23-40

표본 테이블 스캔이 지원되지 않음, 23-34

하위 질의로 변환, 23-13

해시 조인, 24-7

조인 간, 23-3

조인 뷰, 10-15

조합 인덱스, 10-22

조회 테이블

스타 질의, 24-14

존재 가능성, 32-26

종료, 5-9, 5-10

S GA 할당 해제, 7-2

감사 레코드, 31-5

단계, 5-9

디스패처 프로세스로 금지, 8-20

정상, 5-6, 5-10

종속성, 21-1

O racle Forms 트리거, 21-13

객체 유형 정의, 14-16, 14-17

공유 풀, 21-10

관리, 21-1

권한, 21-6

기타 객체 존재하지 않음, 21-8

스키마 객체 간, 21-2

원격 객체, 21-10

존재하지 않는 참조 객체, 21-8

지역, 21-10

함수 기준 인덱스, 10-26, 21-7

중첩 루프 조인, 24-2

비용 기준 최적화, 24-8

색인-5 5

Page 554: Oracle8 - Tistory

중첩 테이블, 10-9, 13-12

INSTEAD OF 트리거, 15-5

뷰에서 갱신, 15-5

인덱스 구성 테이블, 10-38

키 압축, 10-30

인덱스, 14-6

제한 사항, 26-30

즉시 제약 조건, 28-20

증분 갱신, 10-18

증분 체크포인트, 8-8

지속 영역, 7-8

지속적인 대기열 처리, 19-2

지역적으로 관리되는 테이블스페이스, 3-8

임시 테이블스페이스, 3-13

지연된 제약 조건

지연 가능 또는 지연 불가능, 28-21

초기에 지연된 또는 즉시, 28-21

지원 패키지, 18-16

호출자 또는 정의자 권한, 30-8

직접 로드 I N S E RT, 25-2

로깅 모드, 25-5

병렬 I N S E RT, 25-3

병렬 로드 대 병렬 I N S E RT, 25-2

영역 관리, 25-8

제한 사항, 25-11, 26-43

직렬 I N S E RT, 25-3

질의

D M L, 16-3

IN 하위 질의 최적화, 23-17

ROW I D에 의해 병렬화된 테이블 스캔, 26-4

SAMPLE 절

비용 기준 최적화, 22-16

구문, 27-5

기본 잠금, 27-26

병렬 처리, 26-2

분산 또는 원격, 33-11

분할 영역으로 인덱스 스캔 병렬화, 26-5

뷰 질의 최적화, 23-15

뷰 질의로 병합, 10-14

뷰로 저장, 1-24, 10-11

선택성, 23-51

설명 구문 분석, 16-12

스타 질의, 24-14

위치 투명성, 33-15

인라인 뷰, 10-16

읽기 일관성, 1-32, 27-5

임시 세그먼트, 4-18, 16-12

임시, 26-31

정의 구문 분석, 16-12

정의, 23-3

조합 인덱스, 10-22

처리, 16-12

트리거 사용, 20-23

행 인출, 16-12

혼합

변환된 O R, 23-10

정의, 23-4

최적화, 23-27

질의 재작성, 10-17

보안 정책의 동적 술어, 30-23

질의 처리 구문 분석 설명, 16-12

질의 처리 구문 분석 정의, 16-12

질의 행 인출, 16-14

내장된 S Q L, 16-6

질의의 선택성, 23-51

ㅊ차원, 1-29, 10-18

계층, 1-29, 10-18

조인 키, 1-29, 10-19

속성, 1-29, 10-19

색인-5 6

Page 555: Oracle8 - Tistory

스타 조인, 24-14

스타 질의, 24-14

정규화 또는 비정규화 테이블, 1-29, 10-19

참조 무결성, 27-11, 28-13

P R I M A RY KEY 제약 조건, 28-11

계단식 규칙, 28-3

기본값으로 설정 규칙, 28-3

널로 설정 규칙, 28-3

부분적으로 널인 외래 키, 28-16

예, 28-18

자체 참조 제약 조건, 28-15, 28-18

제한 규칙, 28-3

참조 해제, 13-10

암시적, 13-10

참조됨

객체

외부 참조, 18-10, 18-19

종속성, 21-2

분할 영역, 11-19

키, 1-59, 28-13

처리

DDL 문, 16-14

DML 문, 16-10

개요, 16-8

병렬 S Q L, 26-2

분산, 1-33

질의, 16-12

처리 능력, 22-7

비용 기준 접근 방법, 23-31

체크포인트

D BWn 프로세스, 8-8, 8-11

빠른 시작 체크포인트, 32-13

제어 파일, 32-22

증분, 8-8

체크포인트 프로세스(CKPT), 1-19, 8-11

통계, 8-11

체크포인트 프로세스(CKPT), 1-19, 8-11

초기 즉시 제약 조건, 28-21

초기 지연된 제약 조건, 28-21

초기화 매개변수

A LWAYS_ANTI_JOIN, 24-13

A LWAYS_SEMI_JOIN, 24-13

AQ _ T M _ P RO C E S S, 19-6, 19-7

B U F F E R _ P O O L _ K E E P, 7-5

B U F F E R _ P O O L _ R E C YC L E, 7-5

C O M PAT I B L E, 3-11

D B _ B L O C K _ B U F F E R S, 7-5, 7-13

D B _ B L O C K _ L RU _ L AT C H E S, 8-8

D B _ B L O C K _ S I Z E, 7-5, 7-13

D B _ F I L E _ M U LT I B L O C K _ R E A D _

C O U N T, 23-51, 24-9D B _ F I L E S, 7-15

D B _ NA M E, 32-22

D B _ W R I T E R _ P RO C E S S E S, 1-18, 8-8

D I S T R I B U T E D _ T R A N SAC T I O N S, 8-12

FA S T _ S TA RT _ I O _ TA RG E T, 32-13

H A S H _ A R E A _ S I Z E, 24-8

H A S H _ J O I N _ E NA B L E D, 24-7

H A S H _ M U LT I B L O C K _ I O _ C O U N T, 24-8

H I _ S H A R E D _ M E M O RY _ A D D R E S S, 7-13

J O B _ Q U E U E _ P RO C E S S E S, 19-10

L I C E N S E _ M A X _ S E S S I O N S, 29-20

L I C E N S E _ S E S S I O N S _ WA R N I N G, 29-20

L O C K _ S GA, 7-13, 7-17

L O G _ A RC H I V E _ M A X _ P RO C E S S E S, 1-19, 8-12, 32-19

L O G _ A RC H I V E _ S TA RT, 32-19

L O G _ B U F F E R, 7-6, 7-13

L O G _ C H E C K P O I N T _ I N T E RVA L, 32-13

L O G _ C H E C K P O I N T _ T I M E O U T, 32-13

색인-5 7

Page 556: Oracle8 - Tistory

M T S _ M A X _ S E RV E R S, 8-19, 8-20

M T S _ S E RV E R S, 8-19

N L S _ L A N GUAG E, 11-20

N L S _ N U M E R I C _ C H A R AC T E R S, 12-9

N L S _ S O RT, 11-20

O P E N _ C U R S O R S, 7-9, 16-7

O P E N _ L I N K S, 7-15

O P T I M I Z E R _ F E AT U R E S _ E NA B L E, 23-17, 23-36, 24-12

O P T I M I Z E R _ M O D E, 23-31

O P T I M I Z E R _ P E RC E N T _ PA R A L L E L, 22-8

PA R A L L E L _ M A X _ S E RV E R S, 26-8

PA R A L L E L _ M I N _ P E RC E N T, 26-18

PA R A L L E L _ M I N _ S E RV E R S, 26-7, 26-8

PA R A L L E L _ S E RV E R, 5-6

R E M O T E _ D E P E N D E N C I E S _ M O D E, 21-11

RO L L B AC K _ S E G M E N T S, 4-27

S E RV I C E _ NA M E S, 6-6

S H A R E D _ M E M O RY _ A D D R E S S, 7-13

S H A R E D _ P O O L _ S I Z E, 7-6, 7-13

S K I P _ U N U SA B L E _ I N D E X E S, 21-8

S O RT _ A R E A _ R E TA I N E D _ S I Z E, 7-16

S O RT _ A R E A _ S I Z E, 4-18, 7-16, 24-9

S Q L _ T R AC E, 8-15

S TA R _ T R A N S F O R M AT I O N _ E NA B L E D,24-19

T R A N SAC T I O N S, 4-27

T R A N SAC T I O N S _ P E R _ RO L L B ACK_ S E G M E N T, 4-27

U S E _ I N D I R E C T _ DATA _ B U F F E R S, 7 - 1 4

최적화, 22-2

D I S T I N C T, 23-17

G ROUP BY 뷰, 23-17

N U L L에 대해 널이 아닌 값, 24-11

P L / S Q L, 23-33

SQL 문의 유형, 23-3

계획 안정성, 22-6

규칙 기준, 22-18, 24-9

액세스 경로 선택, 23-54

예, 23-54

병렬 S Q L, 26-10

병합 없음, 23-25

복합 뷰 병합, 23-17

분산 SQL 문, 23-30

분할 방식 조인, 11-5

분할 영역 제거, 11-4

인덱스, 11-36

분할 영역에 대한 실행 계획, 11-11, 11-14

분할된 인덱스, 11-35

뷰를 명령문으로 병합, 23-15

비용 기준, 22-7, 24-8

막대 그래프, 22-8

사용자 정의 비용, 22-17

스타 질의, 24-14

액세스 경로 선택, 23-50

예, 23-51

원격 데이터베이스, 23-30

선택 투영 조인 뷰, 23-15

설명, 22-2

세미 조인, 24-13

수동, 23-33

수행된 작업, 23-2

술어의 선택성, 22-8

막대 그래프, 22-8, 22-10

사용자 정의, 22-17

인덱스 구축, 10-22

접근 방법 선택, 23-31

질의 재작성, 10-17

보안 정책, 30-23

색인-5 8

Page 557: Oracle8 - Tistory

질의의 선택성, 23-51

추이성, 23-8

통계, 22-8, 23-32

사용자 정의, 22-17

표현식 및 술어 변환, 23-4

함수 기준 인덱스, 10-25

확장 가능한 최적기, 22-16

힌트, 23-33, 23-36

최적화를 위한 계획 안정성, 22-6

최하위 레벨 블록, 10-28

최하위 레벨 속성, 14-18

최하위 레벨 스칼라 속성, 14-18

추적 파일, 8-14

A RCn 추적 파일, 32-20

D BWn 추적 파일, 32-6

L GWR 추적 파일, 8-9

추적 파일에 추적된 내부 오류, 8-14

충돌

프로시저 복제, 34-16

친화력

병렬 D M L, 26-49

분할 영역, 26-48

ㅋ카탈로그, 복제, 34-14

카티시안 곱, 23-3

캐시

개인 SQL 영역, 7-8

객체 캐시, 13-14, 14-16

객체 뷰, 15-4

공유 SQL 영역, 7-6, 7-8

데이터 딕셔너리, 2-4, 7-10

위치, 7-6

데이터베이스 버퍼, 1-16

라이브러리 캐시, 7-6, 7-7, 7-10

버퍼 쓰기, 8-8

버퍼 캐시, 7-3

다중 버퍼 풀, 7-5

캐시 실패, 7-4

캐시 적중, 7-4

캐시 결합

읽기 일관성, 27-6

캡처 회피 규칙, 14-8

커밋되지 않은 읽기, 27-3

커밋된 읽기 분리, 27-6, 27-8

커서

개요, 1-17

개인 SQL 영역, 7-9, 16-6

객체 종속성, 21-10

내장 프로시저, 16-18

내장된 S Q L, 16-5

생성, 16-11

열기, 7-9, 16-7

재귀 S Q L, 16-7

재귀, 16-7

정의, 16-6

최대 수, 16-7

컴파일된 P L / S Q L, 18-17

공유 풀, 16-16

의사 코드, 18-18, 20-25

장점, 18-8

재컴파일, 18-19

트리거, 20-25

프로시저, 18-9

컴파일된 트리거, 20-25

클라이언트/서버 구조, 6-2

개요, 1-33, 6-2

도표화, 6-2

분산 데이터베이스, 33-2

분산 처리, 6-2

색인-5 9

Page 558: Oracle8 - Tistory

직접 및 간접 접속, 33-2

클라이언트, 1-33

프로그램 인터페이스, 8-25

클러스터

ROW I D, 10-7

개요, 10-46

딕셔너리 잠금, 27-29

매개변수 설정, 10-49

분할될 수 없음, 11-2

성능 고려 사항, 10-48

스캔, 7-4, 23-34, 23-38

조인, 23-40

해시, 23-39, 23-41

인덱스, 10-21, 10-50

분할될 수 없음, 11-2

스캔, 23-41

해시와 대조, 10-51

저장 영역 매개변수, 10-4

저장 영역 형식, 10-49

정의, 1-27

조인, 10-48, 23-38, 23-40, 24-5

클러스터화할 데이터 선택, 10-48

키, 1-27, 10-48, 10-49

널 인덱스 영향, 10-8

해시, 10-50

단일 테이블, 10-57

루트 블록, 10-55

스캔, 23-35, 23-39, 23-41

영역 할당, 10-55

인덱스와 대조, 10-51

저장 영역, 10-51

충돌 분석, 10-53

클러스터 조인, 24-5

클러스터 키, 1-27, 10-48

클러스터화된 컴퓨터 시스템

O racle Pa rallel Serv e r, 5-3

값에 대한 최대 저장 영역, 10-23

검색, 23-39

고유, 28-8

조합, 28-9, 28-11

기본, 28-11

상위, 28-13, 28-15

역방향 키 인덱스, 10-31

외래, 28-13

인덱스, 10-23

P R I M A RY KEY 제약 조건, 28-12

UNIQUE 제약 조건, 28-10

압축, 10-29

역방향 키, 10-31

정의, 28-9

제약 조건, 1-58

참조됨, 1-59, 28-13

클러스터, 1-27, 10-48

키 값, 1-59

해시, 10-53, 10-57

키 분할, 11-15, 11-19

다중 열 키, 11-22

키 압축, 10-29

ㅌ테이블

D UA L, 2-7

LOB 열

분할, 11-38

NOLOGGING 모드, 25-7

PA RTITION 옵션, 11-63

S U B PA RTITION 옵션, 11-63

VA L I DATE 또는 N OVA L I DATE 제약 조건, 28-22

가상 또는 보여진, 1-24

감사, 11-63, 31-8

색인-6 0

Page 559: Oracle8 - Tistory

개요, 1-23, 10-3

객체 테이블, 13-3, 13-7

가상, 15-2

인덱스, 14-6

제약 조건, 14-5

트리거, 14-6

권한, 30-5

기록, 26-38

기준, 1-24

데이터 딕셔너리 사용, 2-2

뷰와의 관계, 10-12

단일 테이블 해시 클러스터, 10-57

대기열 테이블, 19-4, 19-12

데이터 웨어하우스 갱신, 26-37

데이터 저장 상태, 10-4

동적 분할, 26-6

무결성 제약 조건, 28-2, 28-5

무결성 제약 조건 포함, 1-58

병렬 DDL 저장 영역, 26-33

병렬 생성, 26-31

병렬 실행을 사용한 S T O R AGE 절, 26-33

병렬 테이블 스캔, 26-4

복제, 1-36

분할 영역, 11-2, 11-27

분할 영역 확장된 테이블 이름, 11-63

분할 영역에 대한 권한, 11-62

뷰에 있음, 10-11

사용된 트리거, 20-2

열의 최대 수, 10-12

영역 할당 제어, 10-4, 25-8

요약 또는 롤업, 26-31

인덱스, 10-21

인덱스 구성

키 압축, 10-30, 10-38

인덱스 구성 테이블, 10-36

논리적 ROW I D, 10-39, 12-20

인수 테이블

스타 질의, 24-14

임시, 10-10

세그먼트, 4-18

잠금, 11-45, 27-21, 27-23, 27-25

전체 테이블 스캔 및 버퍼 캐시, 7-4

정규화

스타 스키마, 24-15

정규화됨 또는 비정규화됨, 1-29, 10-19

제약 조건 활성화 또는 비활성화, 28-22

조회 테이블, 24-14

종속 뷰 영향, 21-5

중첩 테이블, 10-9, 13-12

인덱스, 14-6

차원

스타 질의, 24-14

클러스터화됨, 10-46

테이블 별칭, 14-8, 14-9

테이블 이름

열 이름 제한, 14-8, 14-9

테이블스페이스 지정, 10-5

테이블스페이스에 포함됨, 10-5

해시, 10-55

테이블 디렉토리, 4-4

테이블스페이스, 3-6

MINIMUM EXTENT

병렬 D M L, 25-10

NOLOGGING 모드, 25-7

SYSTEM 테이블스페이스참조

개요, 1-9, 3-6

객체 생성의 기본값, 1-42, 29-13

다른 데이터베이스로 이동 또는 복사, 3-14

데이터 파일과의 관계, 3-2

딕셔너리 관리, 3-7

사용자로부터 액세스 호출, 29-14

설명, 3-6

색인-6 1

Page 560: Oracle8 - Tistory

스키마와 대조, 10-2

영역 할당, 3-7

오프라인, 1-10, 3-9, 3-17

인덱스 데이터, 3-10

읽기 전용 불가능, 3-11

재마운트 시 오프라인으로 남아 있음, 3-9

온라인, 1-10, 3-9, 3-17

이동 가능, 3-13

읽기 전용, 3-10

객체 삭제, 3-12

과도적 모드, 3-11

읽기 전용 모드로 변경, 3-11

임시, 1-43, 3-12

사용자에 대한 기본값, 29-13

임시 세그먼트로 사용, 4-16, 4-18

잠금, 27-30

지역적으로 관리, 3-8

임시 테이블스페이스, 3-13

크기, 3-4

테이블에 대한 지정 방법, 10-5

할당량, 1-42, 1-43, 29-13, 29-14

기본값 없음, 29-14

제한 및 무제한, 29-14

테이블스페이스 적시 복구

복제 데이터베이스, 5-7

통계

A NA LY Z E, 22-13

B* 트리 또는 비트맵 인덱스, 22-12

D B M S _ S TAT로 생성 및 관리, 22-12

H I G H _ VALUE 및 L OW _ VA L U E, 23-52

대기열 처리, 19-11

분할 영역 및 하위 분할 영역, 22-11

분할된 테이블과 인덱스, 11-14

사용자 정의 통계, 22-17

술어의 선택성, 22-8

막대 그래프, 22-8, 22-10

사용자 정의, 22-17

엑스포트 및 임포트, 22-8

예측됨, 22-14

블록 표본 추출, 22-14

행 표본 추출, 22-14

체크포인트, 8-11

최적기 모드, 23-31

최적기 목적, 23-32

최적기 사용, 22-7, 22-8, 23-32

확장 가능한 최적화, 22-16

통신 프로토콜, 6-5

투명한 응용 프로그램 복구, 32-14

트랜잭션, 1-53, 17-1

개요, 1-53

고급 대기열 처리, 19-3

교착 상태, 17-4, 27-17

끝, 17-4

데이터 일관성, 16-14

데이터 블록에서 사용된 영역, 4-5

동시성, 27-15

롤백, 1-54, 17-6

롤백 세그먼트 사용, 4-20

부분적으로, 17-6

오프라인 테이블스페이스, 4-30

롤백 세그먼트, 4-20

롤백 세그먼트 간 분배, 4-21

롤백 세그먼트에 작성, 4-22

롤백 세그먼트에 할당, 4-21

명령문 레벨 롤백, 17-4

미확정

롤백 세그먼트, 4-24

롤백 세그먼트 액세스 제한, 4-30

부분적으로 사용 가능한 세그먼트 사용, 4-30

수동으로 해결, 1-36

색인-6 2

Page 561: Oracle8 - Tistory

자동으로 해결, 1-36, 5-8, 17-8

병렬 D M L에서 2단계 커밋, 26-40

복구, 32-4

분산, 1-32

2단계 커밋, 1-35, 17-7, 33-13

교착 상태, 27-18

병렬 DDL 제한 사항, 26-28

병렬 DML 제한 사항, 26-28, 26-46

자동으로 해결, 8-12

블록 레벨 복구, 27-21, 32-14

비동기식 처리, 19-2

사용 불능, 32-4

설명, 17-2

수동 잠금, 27-31

시스템 변경 수 할당, 17-5

시스템 변경 수, 8-10

시작, 17-4

연속, 27-7

응용 프로그램 종료, 17-5

이산 트랜잭션, 16-14, 17-8

읽기 일관성, 1-31, 27-6

읽기 전용, 1-32, 27-6

롤백 세그먼트에 할당되지 않음, 4-20

자율적, 17-9

PL/SQL 블록 내, 17-9

저장점, 1-55, 17-7

정의 및 제어, 16-14

커밋, 1-54, 8-10, 17-3, 17-5

그룹 커밋, 8-10

롤백 세그먼트 사용, 4-21

커밋 전에 작성된 리두 로그 파일, 8-10

트랜잭션 제어, 16-14

트랜잭션 제어문, 16-5

트리거, 20-23

트랜잭션 블록화, 27-11

트랜잭션 제어문, 1-53, 16-5

자율적인 PL/SQL 블록, 17-10

트랜잭션 집합 일관성, 27-10

트랜잭션 커밋

개요, 1-54

구현, 8-10

그룹 커밋, 8-10

병렬 D M L, 26-40

빠른 커밋, 8-10

정의, 17-2

트랜잭션 테이블, 4-20

복구 시 재시작, 8-11

트리거, 1-59, 20-1, 21-8

AFTER 트리거, 20-9

BEFORE 트리거, 20-9

INSTEAD OF 트리거, 20-12

객체 뷰, 15-5

I N VALID 상태, 21-2, 21-6

J av a, 20-7

O racle Forms 트리거, 20-3

U N K N OW N이 실행되지 않음, 20-7

감사, 31-8

개요, 1-59, 20-2

계단식, 20-4

공유 SQL 영역, 7-10

다중 트리거 실행 순서, 20-21

데이터 무결성 강제 수행, 28-4

데이터 무결성 유지 관리, 1-59

데이터 액세스, 20-23

등록/구독 지원, 20-18

명령문, 20-8

부분, 20-5

뷰에서 금지, 10-12

사용, 20-3

사용자 정의 유형, 14-6

스키마 객체 종속성, 20-21, 20-25

실행 권한, 30-8

색인-6 3

Page 562: Oracle8 - Tistory

롤, 30-20

실행, 20-2, 20-25

타이밍, 20-21

포함된 단계, 20-21

필요한 권한, 20-25

예, 20-10, 20-13, 20-23

유형, 20-8

이벤트, 20-6

작업, 20-7

타이밍, 20-9

저장 영역, 20-25

제약 조건 적용, 20-21

제약 조건과 대조, 20-5

제한 사항, 20-7, 26-46

병렬 D M L, 26-44

직접 로드 I N S E RT, 25-12

종속성 관리, 20-25, 21-6

활성화된 트리거, 20-21

프로그램 단위, 1-56

프로시저와 대조, 20-2

행, 20-8

활성화 또는 비활성화, 20-21

ㅍ파일

A L E RT 및 추적 파일, 8-9, 8-14

Export 및 Import 덤프 파일, 14-20

L I S T E N E R. O R A, 6-6

암호, 29-13

관리자 권한, 5-3

오라클 데이터베이스, 1-9, 1-11, 32-6

운영 체제, 1-5

제어 파일, 데이터 파일, 리두 로그 파일 참조

초기화 매개변수, 5-4, 5-5

파일 관리 잠금, 27-30

패키지, 18-4, 18-11

O U T L N _ P KG, 22-6

감사, 31-8

개요, 1-26

공용, 18-15

공유 SQL 영역, 7-10

권한

구성자로 나뉨, 30-9

실행, 30-7, 30-9

대기열 처리, 19-4

동적 S Q L, 16-19

세션 상태, 21-6

실행, 16-16, 18-18

예, 18-12, 30-9, 30-10

유효성, 18-18

잠금, 27-39

장점, 18-15

저장, 18-17

전용, 18-15

지원 패키지, 18-16

호출자 또는 정의자 권한, 30-8

프로그램 단위, 1-56

퍼지 읽기, 27-3

페이지, 4-2

표본 테이블 스캔, 23-34, 23-49

힌트가 무효화할 수 없음, 23-50

표준, 1-3

ANSI/ISO, 1-3, 28-5, 28-16

분리 레벨, 27-2, 27-10

F I P S, 16-6

O racle 준수, 1-3

무결성 제약 조건, 28-5, 28-16

프로그램 글로벌 영역( P GA), 1-17, 7-14

기록할 수 있는 비공유, 7-14

내용, 7-14

다중 스레드 서버, 8-19

크기, 7-15

색인-6 4

Page 563: Oracle8 - Tistory

할당, 7-14

프로그램 단위, 1-25, 16-15, 18-2

공유 풀, 7-10

컴파일 필요 조건, 21-5

프로그램 인터페이스, 8-25

O ra c l e측(OPI), 8-25

개요, 1-20

구조, 8-25

두 작업 모드, 8-23

사용자측(UPI), 8-25

프로세스, 8-2

O ra c l e, 1-17, 8-5

개요, 1-17

구조, 8-2

그림자, 8-22

다중 스레드 서버, 8-16

인위적인 교착 상태, 8-19

클라이언트 요청, 8-17

다중 프로세스 O ra c l e, 8-2

대기열 모니터(QMNn), 1-20, 8-13, 19-6

데이터베이스 기록자( D BWn), 1-18, 8-8

디스패처(Dnnn), 1-20, 8-14

로그 기록자( L GWR), 1-19, 8-9

리스너, 6-6, 8-14

공유 서버, 8-16

백그라운드, 1-18, 8-5

도표화, 8-6

병렬 실행 서버, 26-6

NEXT 확장 영역 크기, 25-9

직접 로드 I N S E RT, 25-3, 25-8

병렬 실행 조정자, 26-6

직접 로드 I N S E RT, 25-3

복구 중, 32-12

복구자(RECO), 1-20, 8-12

미확정 트랜잭션, 1-36

분산 트랜잭션 해결, 8-12

블록 서버(BSP), 27-6

사용자, 1-17, 8-4

P GA 할당, 7-14

고장 복구, 8-11

서버 프로세스 공유, 8-14

수동 아카이브, 32-21

서버, 1-18, 1-34, 8-5

공유, 8-14, 8-19

전용, 8-22

시스템 모니터(SMON), 1-19, 8-11

실패, 32-3

아카이버( A RCn), 1-19, 8-12, 32-19

작업 대기열(SNPn), 1-20, 8-13

메시지 전달, 19-10

잠금(LCK0), 1-20, 8-13

전용 서버, 8-19

체크포인트, 8-8

체크포인트(CKPT), 1-19, 8-11

추적 파일, 8-14

프로세스 모니터(PMON), 1-19, 8-11

프로세스 글로벌 영역( P GA), 7-14

프로그램 글로벌 영역 참조

프로세스 모니터 프로세스 (PMON)

네트워크 장애, 32-3

병렬 DML 프로세스 복구, 26-41

설명, 1-19, 8-11

시간 초과 세션 정리, 29-18

프로세스 실패, 32-3

프로시저, 16-15, 18-1, 18-6, 21-8

DETERMINISTIC 함수, 23-9

I N VALID 상태, 21-2, 21-6

감사, 31-8

공유 SQL 영역, 7-10

권한

생성 또는 변경, 30-9

실행, 30-7

색인-6 5

Page 564: Oracle8 - Tistory

패키지에서 실행, 30-9

내장 프로시저, 16-15, 16-18, 18-2

실행, 16-16, 18-18

예, 18-6, 30-9, 30-10

외부 참조, 18-10, 18-19

외부 프로시저, 16-20, 18-11

원격 프로시저 호출, 33-12

유효성, 18-18

익명 블록과 대조, 18-9

장점, 18-7

저장, 18-17

정의자 권한, 18-9, 30-7

롤 사용 불가능, 30-20

종속성 추적, 21-6

지원 패키지, 18-16

호출자 또는 정의자 권한, 30-8

커서, 16-18

컴파일 필요 조건, 21-5

트리거, 20-2

함수와 대조, 1-56, 18-2

향상된 보안, 18-7, 30-8

현재 사용자, 18-10

호출자 권한, 18-9, 30-8

사용된 롤, 30-20

지원 패키지, 30-8

프로시저 복제, 34-15

래퍼, 34-16

충돌 감지, 34-16

프로시저 호출

원격, 33-12

프로시저에 대해 이름 분석, 18-19

프로파일

개요, 1-43

사용 시기, 29-18

암호 관리, 29-7

프론트 엔드, 6-2

ㅎ하위 분할 영역

통계, 22-11

하위 분할 영역 잠금

D M L, 11-46

하위 질의, 16-12

CHECK 제약 조건 금지, 28-18

DDL 문, 26-31

DML 문

연속 분리, 27-14

IN 하위 질의 최적화, 23-17

NOT IN, 24-13

원격 갱신, 33-11

인라인 뷰, 10-16

조인으로 변환, 23-13

질의 참조

질의 처리, 16-12

하이브리드 구성

고급 복제, 34-13

할당량

0으로 설정, 29-14

SYS 사용자에게 필요 없음, 29-14

테이블스페이스 액세스 철회, 29-14

테이블스페이스, 1-43, 29-13

임시 세그먼트 무시, 29-14

함수

J ava

병렬 실행, 26-46

P L / S Q L, 18-2, 18-6

D E T E R M I N I S T I C, 21-8, 23-9

권한, 30-7

롤, 30-20

병렬 실행, 26-46

프로시저 참조

프로시저와 대조, 1-56, 18-2

색인-6 6

Page 565: Oracle8 - Tistory

S Q L, 16-2

CHECK 제약 조건, 28-18

C O U N T, 10-35

N V L, 10-8

기본 열 값, 10-8

뷰 질의 최적화, 23-23

뷰, 10-14

사용자 정의

확장 가능한 최적화, 22-16

함수 기준 인덱스, 10-24

해시 함수, 10-54

함수 기준 인덱스, 10-24

D I SA B L E D, 21-8

U N U SA B L E, 21-8

권한, 10-26, 21-8

종속성, 10-26, 21-7

해시 조인, 24-7

HASH_AREA_SIZE 매개변수, 24-8

H A S H _ M U LTIBLOCK_IO_COUNT 매개변수, 24-8

인덱스 조인, 23-36, 23-49

해시 클러스터, 1-29, 10-50

개요, 1-29

단일 테이블 해시 클러스터, 10-57

루트 블록, 10-55

스캔, 23-35, 23-39, 23-41

영역 할당, 10-55

인덱스와 대조, 10-51

저장 영역, 10-51

충돌 해결, 10-53

행, 1-23, 10-3

ROWID 변경 시, 12-16

ROW I D에 표시, 12-17, 12-18

논리적 L OW I D, 12-20

인덱스 구성 테이블, 10-39

데이터 블록에서의 형식, 4-4

블록 간 체인화, 4-10, 10-5

새 블록으로 이전, 4-10

설명, 10-3

위치 지정에 사용된 ROW I D, 23-34, 23-38

인덱스 구성 테이블에서 행 오버플로우, 10-38

인출됨, 16-12

잠금, 11-45, 27-11, 27-20, 27-23

저장 영역 형식, 10-5

정의, 1-23

조각, 10-5

주소, 10-7

크기, 10-5

클러스터화됨, 10-6

ROW I D, 10-7

트리거, 20-8

행 객체, 13-8

행 레벨 보안, 30-22

행 소스, 22-4

헤더, 10-5

행 객체, 13-8

행 데이터(데이터 블록 섹션), 4-5

행 디렉토리, 4-4

행 레벨 잠금, 27-10, 27-20

행 소스, 22-4

행 잠금, 27-11, 27-20

블록 레벨 복구, 27-21, 32-14

연속 트랜잭션, 27-8

행 조각, 10-5

식별 방법, 10-7

헤더, 10-5

행 체인, 4-10, 10-5

행 캐시, 7-10

행 트리거, 20-8

실행된 경우, 20-21

트리거 참조

색인-6 7

Page 566: Oracle8 - Tistory

행 표본 추출, 22-14

헤더

데이터 블록, 4-4

행 조각, 10-5

현재 사용자, 18-10

호출

O racle 호출 인터페이스, 8-25

원격 프로시저, 33-12

호출자 권한, 18-9

이름 분석, 18-19

지원 패키지, 30-8

프로시저 보안, 30-8

호환성, 1-3

호환성 레벨

이동 가능한 테이블스페이스, 3-14

확장 가능한 최적화, 22-16

사용자 정의 비용, 22-17

사용자 정의 선택성, 22-17

사용자 정의 통계, 22-17

확장 영역

개요, 4-11

관리, 4-12

관리된 딕셔너리, 3-7

구체화된 뷰, 4-15

데이터 블록 모음, 4-11

데이터 블록 할당, 4-13

롤백 세그먼트

현재 변경, 4-22

롤백 세그먼트 삭제, 4-25

롤백 세그먼트에 할당

세그먼트 생성 시, 4-22

세그먼트 생성 후, 4-24

병렬 D D L, 26-33

병렬 I N S E RT

저장 영역 매개변수, 25-8

정의, 4-2

증분, 4-11

지역으로 관리됨, 3-8

할당 해제

롤백 세그먼트, 4-25

수행된 경우, 4-14

할당, 4-12

할당, 수행된 상태, 4-13

합치기, 4-15

확장 영역 할당 해제, 4-14

확장 영역 합치기, 4-15

확장된 ROWID 형식, 12-17

확장성

병렬 D M L, 26-37

병렬 SQL 실행, 26-2

일괄처리 작업, 26-38

클라이언트/서버 구조, 6-4

힌트

I N D E X, 24-15

I N D E X _ F F S, 23-36

INDEX_JOIN, 23-36

M E RG E, 23-17

M E RG E _ AJ 및 H A S H _ AJ, 24-13

M E RGE_SJ 및 H A S H _ S J, 24-13

OPTIMIZER_MODE 및OPTIMIZER_ G OAL 무효화, 23-33

O R D E R E D, 24-9, 24-15

PA R A L L E L, 26-17

PA R A L L E L _ I N D E X, 26-17

P U S H _ J O I N _ P R E D, 24-12

S TA R, 24-15

U S E _ H A S H, 24-7

최적기 선택 사항 무효화, 23-50

표본 액세스 경로 무효화할 수 없음, 23-50

확장 가능한 최적화, 22-16

색인-6 8