database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 14706 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 14706
Database Architecture
작성자
정재익(advance)
작성일
2003-06-19 12:24
조회수
12,271

데이터베이스와 인스턴스

=========================

 

오라클 데이터베이스의 구조는 크게 세 개의 범주로 나눌 수 있다.

 

(1)데이터베이스에 내부적으로 존재하는 것

(2)메모리 영역 내부에 존재하는 것 ( 공유메모리 영역과 프로세스)

(3)데이터베이스 외부에 존재하는 것

위와 같이 세 개의 범주로 나누어지는데 우선 그 범주를 각각 살펴보면 다음과 같다

 

 

먼저 데이터베이스 구조를 이해하기에 앞서 두 가지의 기본적인 개념을 이해하여야 한다.

한가지는 데이터의 집합을 다루고 있는 데이터베이스 부분과 다른 한가지는 인스턴스 부분이다.

인스턴스란? 데이터에 접근하기 위해 모든 사용자가 공유할 수 있는

백그라운드 프로세스와 데이터베이스로부터 가장 최근에 실행된 질의에 대한 데이터를

저장하는 기억영역을 합쳐 인스턴스라 한다.

 

(1) 오라클을 실행하는 컴퓨터 유형 또는 사용하는 메모리나 프로세스 옵션에 관계없이

실행되는 모든 오라클 데이터베이스는 오라클 인스턴스와 관련된다.

 

(2) 데이터베이스가 데이터베이스 서버에서 시작 될 때마다

오라클은 시스템 글로벌영역(SGA)라는 메모리 영역을 할당하여

하나 이상의 오라클 프로세스를 시작한다.

 

(3) 인스턴스의 메모리나 프로세스는 데이터베이스의 데이터를

효율적으로 관리하고 연관된 데이터베이스의

단일 사용자나 다중사용자에게 제공된다.

 

(4) 오라클은 인스턴스를 시작한 다음 인스턴스에 데이터베이스를

동일한 컴퓨터에서 액세스하며 실행할 수 있다.

 

 

시스템 메모리의 구조

======================

 

우선 메모리에 저장되는 정보를 보면 다음과 같다.

실행되는 프로그램 코드.

현재 사용하지 않더라도 접속되어 있는 세션정보.

프로그램 실행동안 필요한 데이터

Oracle프로세스에 공유하거나 교환하는 정보(lock 정보)

보조메모리에 영구적으로 저장된 정보 (데이터 블록)

 

(1)시스템 글로벌 영역(SGA)

시스템 글로벌 영역(SGA)은 하나의 오라클 데이터베이스 인스턴스에 대한

데이터와 제어 정보를 가지는 공유 메모리 구조 그룹이다

. 또한 다중 사용자가 동일한 인스턴스에 동시에 접속된 경우

인스턴스의 SGA에 있는 데이터는 사용자간에 공유된다.

그리고 오라클은 사용자가 인스턴스를 시작하면 자동으로

SGA에 대한 메모리를 할당하고 사용자가 인스턴스를 종료하면

메모리를 회수한다.

그럼 여기서 SGA의 구성을 보면

1. 데이터베이스 버퍼 캐시

2. 리두 로그 버퍼

3.공유 풀

4.요구 및 응답 대기 열(다중 스레드 서버를 사용할 경우)

5.데이터 딕셔너리 캐시

6.기타 정보 로 구성되어 있다.

 

그럼 시스템 글로벌영역(SGA)의 각각의 구성요소를 보면

ㄱ) 데이터베이스 버퍼캐시 SGA의 한 부분으로서 데이터 파일로부터

읽어 들인 데이터블록의 복사본을 가지고 있다.

데이터 블록버퍼 캐쉬의 크기는 INIT.ORA 파일에 있는

DB_BLOCK_BUFFERS에 의해 결정된다.

또한 오라클은 LRU 알고리즘을 통해 사용 가능한 공간을 적절히 관리한다.

 

 

= 알고리즘 =

블록을 캐시로 읽어 들이기 위해 빈 버퍼를 찾는데

먼저 LRU목록 끝에서부터 검색을 시작한다.

프로세스는 빈 버퍼를 찾거나 버퍼 한계의 임계점에 도달할 때까지

검색을 하는데 사용자 프로세스가 빈 버퍼를 찾으면

블록을 버퍼로 읽어 들이고 이를 LRU목록의 MRU 끝으로 이동시킨다

만약 빈 버퍼를 찾지 못하고

버퍼의 임계점에 도달했다면 LRU목록 검색을 중지하고

디스크에 기록하도록 DBWR프로세스에 신호를 보낸다

프로세스에 대한 자세한 설명은 다음 단락에서 상세히 설명하겠습니다.

 

ㄴ) 리두 로그 버퍼

데이터베이스의 모든 트랜잭션을 관리하는 SGA에 있는 원형 버퍼로서

데이터베이스 복구에 유용하게 사용된다.

먼저 데이터베이스에서 트래잭션이 발생할 때

그것을 리두 로그 버퍼에 저장하고 나중에 주기적인 방식으로

외부에 위치해 있는 리두 로그파일에 저장한다.

리두 로그 버퍼의 크기(BYTE단위)는 매개변수 LOG_BUFFE에 의해서 결정되며

기본설정은 데이터 블록의 4배이다.

 

ㄷ) 공유 풀

공유 풀은 라이브러리 캐시, 딕셔너리 캐시, 제어구조

등 세가지 중요한 영역을 포함하는 SGA의 영역이다

먼저 라이브러리 캐시는 공용 SQL풀, 전용SQL풀, PL/SQL프로시저와

패키지, 제어구조를 포함하며

공용 SQL풀은 두 사용자가 동일한 SQL명령문을 실행중인

경우를 인식하여 동일한 공유 부분을 재사용하며

전용 SQL풀은 각 사용자의 명령문에 대해 개별 복사본을 가지고 있어야 한다.

공유 SQL영역은 SQL명령문에 대한 구문분석 트리와

실행계획을 가지는 메모리 영역이며 동일한 SQL명령을 공유한다.

전용 SQL영역은 바인드 정보나 실행시간 버퍼같은 데이타를 가지는

메모리 영역이며 지속영역과 실행시간영역을 가진다

 

ㄹ) 데이터 딕셔너리 캐시

공용 SQL 풀의 한 부분으로서 데이터베이스 객체에 대한 정보

즉, 사용자 계정 데이터, 데이터 파일명, 세그먼트명, 익스텐드 위치,

테이블 디스크립션, 권한 등을 저장한다.

예를 들어 테이블을 질의 할 경우 먼저 데이터 딕셔너리 테이블이 읽혀지고

그 데이터를 SGA 에 있는 딕셔너리 캐시에 저장한다.

LRU 알고리즘에 의해 관리되며 자주 액세스 되기 때문에

모든 사용자 프로세스가 공유한다

 

백그라운드 프로세스

======================

 

백그라운드 프로세스

 

(1) 데이터베이스 기록자 (DBWR)

DBWR은 데이터블록 버퍼 캐쉬와 딕셔너리 캐쉬의 내용을 관리하는 프로세스로서 버퍼의 내용을 데이터 파일에 기록한다.

또한 사용자 프로세스가 빈 버퍼를 찾을 수 있도록 버퍼캐쉬를 관리한다.

 

(2) 로그기록자 (LGWR)

리두 로그버퍼의 내용을 온라인 리두 로그파일에 기록하는 백그라운드 프로세스이다.

 

(3) 체크 포인트 (CKPT)

체크포인트는 마지막 체크포인트 이후에 변경된 모든 블록을 데이터파일에 쓰도록 유도하는데 인스턴스 복구에 필요한 시간을 단축시키는데 도움이 된다.

체크 포인트는 온라인 리두 로그파일이 채워지면 자동적으로 발생한다.

 

(4) 시스템 감시기 (SMON)

SMON은 시스템을 감시하는 기능으로서 필요한 경우 인스턴스 복구 기능을 수행하며 사용 가능한 빈 영역을 더 큰 블록으로 만들기 위해 인접한 빈 영역을 하나로 통합한다.

또한 장애가 발생한 CPU나 인스턴스에 대해 인스턴스를 복구한다. 또한 SMON은 자신이 필요한 지를 확인하기 위해 계속 규칙적으로 작동한다.

 

(5) 프로세스 감시기 (PMON)

PMON은 이전에 실패한 사용자 프로세스를 정리하는 기능을 갖는데

즉, LOCK을 걸고 있는 프로세스가 소멸될 때 그 자원에 걸린 LOCK을 풀어주고 다른 사용자가 그 자원을 사용 할 수 있도록 해준다. 또한 PMON은 SMON처럼 자신이 필요한 지를 확인하기 위해 규칙적으로 작동하며 다른 프로세스가 PMON이 필요하면 호출하기도 한다.

 

(6) 복구자 (RECO)

RECO는 분산 데이터베이스에서 발생한 오류를 해결하기 위해서 사용되어지는데 미 확정 분산 트랜잭션과 연관된 다른 데이터베이스에 자동 접속함으로써 미 확정 트랜잭션을 자동으로 해결한다.

 

(7) 아카이브 (ARCH)

아카이브 기능은 LGWR 프로세스가 온라인 리두 로그파일에 저장할 때 온라인 리두 로그파일이 가득차면 이를 지정된 저장영역 장치에 복사한다.

보통은 디스크 디바이스에 기록한다.

 

(8) 잠금 (LCKN)

병렬서버에서 최대 10개까지 잠금 프로세스(LCK0,...,LCK9)가 인스턴스간 잠금(lock)을 제공

 

(9) 스냅샷 갱신 (SNPN)

분산 옵션에서 최대 10개까지의 스냅샷 갱신 프로세스(SNP0,....,SNP9)가 자동으로 테이블 스냅샷을 화면에 다시 표시한다.

이 프로세스는 주기적으로 작동하며 자동으로 화면에 표시되도록 스케줄링된 스냅샷을 화면에 다시 표시한다.

 

(10) 디스패처 프로세스 (Dnnn)

Dnnn은 SQL*NET 멀티스레드 서버구조의 한 부분으로 제한된 서버의 수를 공유한다.

 

 

데이터베이스 내부구조

=======================

 

 

먼저 데이터베이스의 내부에 존재하는 요소를 보면 다음과 같다.

1.테이블, 칼럼, 데이터유형, 제약조건

2.사용자와 스키마

3.인덱스, 클러스터, 해시 클러스터

4.뷰, 시퀀스

5.저장 프로서져, 함수, 패키지, 트리거

6.동의어, 권한, 역할

7.데이터베이스 링크, 세그먼트, 익스텐트, 롤백 세그먼트

 

테이블은 오라클 데이터베이스 내부에 데이터를 저장하기 위한 메커니즘으로서 일련의 고정된 칼럼의 집합이다.

그리고 테이블 속의 칼럼은 그 테이블에 의해 추적이 가능한 실체의 특성을 나타낸다.

칼럼의 특성 부분에서 보면 다양한 데이터의 유형을 제공하며 제약조건에 명시된 조건을 반드시 충족시켜야 한다.

그리고 사용자는 데이터베이스의 객체를 소유하며, 사용자 계정에 의해 소유된 객체의 집합을 일컬어 사용자의 스키마 라고 한다.

인덱스는 테이블에서 로우를 신속하게 찾기 위해서 사용한다.

인덱스에는 클러스터 인덱스와 테이블 인덱스가 있는데 이는 모두 B*트리 메커니즘을 사용해 저장되며 이는 키 값에 가장 짧은 접근 경로를 보장한다.

클러스터는 디스크로부터 데이터를 읽어오는 시간을 줄이기 위해서 조인이나 자주 사용되는 테이블의 데이터를 디스크의 같은 위치에 저장시키는 방법이며

해시 클러스터는 클러스터의 다른 유형으로 로우의 클러스터에 해싱 함수를 사용하여 로우가 어느 곳에 저장되어 있는지 물리적인 위치를 결정하는 방법이다.

그리고 뷰는 칼럼을 포함하고 있는 테이블처럼 보이며 테이블이 질의 되었던 방식과 동일하게 배열되며 뷰의 정의는 데이터 딕셔너리에 저장된다.

시퀀스는 유니크한 일련번호를 줌으로써 프로그램의 수고를 덜어주며 이 또한 데이터 딕셔너리에 저장된다.

저장 프로시져는 데이터 딕셔너리에 저장된 PL/SQL명령문의 블록으로 에플리케이션에 의해 실행된다.

이 프러시져를 이용해 데이터베이스 내에 빈번하게 사용되는 에플리케이션 로직을 사용 할 수 있다.

함수는 프로시져와 마찬가지로 데이터베이스 내에 저장된 코드의 블록으로 프로시져와 다른점은 값을 리턴해서 보낼 수 있다.

패키지는 이러한 프로시져와 함수를 논리적인 그룹으로 묶어주는데 사용된다.

트리거는 데이터베이스에 있는 특정한 테이블에 이벤트가 생길 경우 실행되는 프로시져로서 각 트리거링 명령문에 대해 한번만 실행되는 명령문트리거와 명령문에 의해 영향을 받는 테이블 안의 각각의 로우에 대해서 한번만 실행되는 로우 트리거가 있다.

동의어란 데이터베이스 환경에서 데이터베이스 객체를 알기 위해 몇 개의 파라미터를 알아야 하는데 이때 이러한 과정을 사용자로부터 숨기기 위해서 적절한 객체를 지적하는 동의어를 만들어 낼 수 있다.

권한이란 다른 계정이 소유하고 있는 테이블, 뷰 등에 접근하기 위해서 그 객체에 접근할 수 있는 자격을 말하는데 이러한 권한은 에플리케이션에 대해 필요한 경우 개별적인 사용자에게 부여되어지는데 이러한 과정을 단순화 시키는 것이 ROLE이다.

데이터베이스 링크는 오라클 데이터베이스에서 다른 데이터베이스에 저장된 데이터를 참조할 경우 객체에 접근하는 경로를 명시해야 하는데 이때 데이터베이스 링크를 만들어 사용한다.

세그먼트는 데이터가 저장되어 있는 논리적인 데이터베이스 객체에 대한 물리적인 대상을 말한다. 또한 세그먼트는 익스텐드로 구성되어 있다.

롤백 세그먼트는 데이터베이스의 다양한 사용자들 사이에서 읽기 일관성을 유지하고 트랜잭션을 롤백 할 수 있도록 하기 위해서 오라클은 커밋되지 않은 트래잭션에 대해서 이전 이미지 데이터를 재구성하기 위한 기능을 가지고 있는데 이것이 롤백 세그먼트이다.

 

 

데이터베이스의 외부구조

=========================

 

(1)리두로그

 

오라클은 데이터베이스 상에서 모든 트랜잭션의 로그를 관리한다.

이들 로그는 데이터베이스가 파손된 경우 적절한 순서로 데이터베이스의 트랜잭션을 복구하는데 사용된다.

데이터베이스에서 트랜잭션이 발생할 때 그것은 리두 로그버퍼에 기록되어진다.

반면에 그 트랜잭션에 의해 영향 받는 데이터 블록은 직접적으로 디스크에 즉시 기록되지는 않는데

이것은 데이터베이스가 디스크에 여러 블록단위로 기록하도록 하여 이 기능의 수행을 최적화 하기 위함이다.

 

(2)제어파일

 

데이터베이스의 전체적인 물리적인 물리적 구조는 제어파일에 의해 관리된다.

이것은 데이터베이스 내의 모든 파일에 관한 정보를 기록한다.

이 파일은 내부적 일관성을 유지하고 복구 작업시에 지침이 된다.

이들 파일은 디스크 오류가 일어났을 경우 피해를 최소화 하기 위해 별도의 디스크에 저장된다.

[Top]
No.
제목
작성자
작성일
조회
15754[자료] RedHat 7.3 에서 Oracle 8i 설치하기 - 개정판
문태준
2003-09-30
10225
14708Database Storage
정재익
2003-06-19
14742
14707Database Structure
정재익
2003-06-19
12388
14706Database Architecture
정재익
2003-06-19
12271
14705데이터베이스 StartUp
정재익
2003-06-19
9240
13367[강좌] Oracle 9i Realse2 RAC for linux 구성
문태준
2003-01-29
12608
12483Oracle connection pool
정재익
2002-11-05
15499
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.066초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다