제1장 오라클 구조에 대한 이해 발표일 2002 .07. 02 발표자 유미
데이터 베이스 데이터 베이스 = 데이터의 집합 오라클은 관계형 모델을 대상으로 데이터 관리 Structure 데이터베이스의 데이터를 저장하거나 Access하는 Table, View, Index 등과 같이 정의가 명확한 개체 Operations 데이터베이스의 데이터와 구조를 조작할 수 있도록 명확하게 정의된 Actions. 미리 정의된 무결성의 규칙을 따름. Integrity Rules 데이터와 데이터베이스의 구조에 대해 수행할 작업을 결정하는 규칙 데이터베이스의 데이터와 구조를 보호
데이터 베이스 객체 지향 구조(Object-Oriented,OO)를 지원한다. 오라클 DB는 데이터를 파일에 저장한다. 그러므로 데이터의 다른 형식을 개별적으로 저장(이런 것을 테이블 스페이스라고한다.)
테이블 스페이스 데이터 베이스의 논리적인 분할 영역 연관된 논리적 조를 그룹화하여 관리를 용이성과 성능 향상 ex) 범용의 USERS와 롤 백 세그먼트 , 애플리케이션 테이블 스페이스는 하나의 데이터 베이스에만 속한다. 각 테이블 스페이스는 하나 이상의 데이터 파일을 속한다.
파일 데이터 파일은 단 하나의 테이블 스페이스에만 소속될 수 있다. 일단 테이블 스페이스에 추가되면, 삭제 불가능하고 다른 테이블 스페이스와 연관 될 수 없다. 데이터베이스객체들을 여러 개의 테이블 스페이스 안에 저장하여 객체들을 개별적인 디스크에 저장->물리적으로 분리시킬 수 있다. 분리 작업을 통해서 I/O요청들을 다루는 방식을 설계하고 조정하는 것을 가능 하게 한다.
인스턴스 데이터베이스안에 있는 데이터를 액세스 하기 위해 사용자들은 공유되는 일련의 백그라운드 프로세스를 사용한다. SGA(System Global Area) 데이터블록 버퍼 캐쉬 공유 SQL 위의 메모리 영역들은 데이터 파일들에 대해 실행되는 I/O 작업량을 줄임으로써 성능을 향상시킨다. 데이터 베이스 인스턴스는 일단 데이터 베이스 파일들을 액세스 하는 메모리 구조들과 백그라운드 프로세스들의 집합[그림1.3] 인스턴트의 크기와 구성 ->init.ora 데이트베이스 생성후에 변경되지 않는 변수값 설정 ->config.ora
오라클 데이터 베이스 구조 데이터 베이스 내부에 있는 구조(테이블들과 같은…) 메모리 영역 내부에 있는 구조(공유 메모리 영역과 프로세스들) 데이터 베이스 외부에 있는 구조
내부 데이터베이스 구조 들에 대해서 알아보도록 합시다.~~~
테이블, 칼럼, 자료형 테이블 컬럼 SYS와 SYSTEM 사용자 소유 테이블 =데이터 딕셔너리 테이블 테이블은 오라클 DB 안에서 데이터에 대한 사용되는 저장 매커니즘이다. 테이블은 고정된 칼럼들을 포함한다. 공통적으로 가지고 있는 칼럼을 통해서 다른 테이블과 연관 DB로 하여금 관계 무결성을 유지하도록 한다. 객체 지향 모델 일 경우는 객체 ID를 통해서 내부참조가능 컬럼 테이블의 컬럼들은 테이블에 의해 기록되는 엔티티의 속성을 가진다. 컬럼은 자료형과 길이로 구성 된다. 길이는 정도(precision)와 스케일(scale) Ex) NUMBER(9,2) SYS와 SYSTEM 사용자 소유 테이블 =데이터 딕셔너리 테이블 DB가 자기를 관리하는데 사용하는 시스템 카탈로그를 제공
제약 조건 EMPLOYEE Create table EMPLOYEEb (EmpNo NUMBER(10) PRIMARY KEY, Name VARCHAR2(40) NOT NULL, DeptNo NUMBER(2) DEFALUT 10, Salary NUMER(7,2) CHECK (salary<1000000), Brith_Date DATE, Sco_Sec_Num CHAR(9) UNIQUE, Foreign key (DeptNO) references DEPT (DeptNo)) Tablespace USERS;
추상 자료형 Oracle 8에서는 사용자가 자료형을 정의 할 수 있다. Create type NAME_TY as object (First_Name VARCHAR2 (25), Middle_Initial CHAR(1), Last_Name VARCHAR2(30). Suffix VARCHAR2(5)); / Name_TY자료형은 EMPLOYEE.Name 컬럼의 자료형으로 쓰일 수 있다.
추상 자료형 컨스트럭트 메소드 객체 테이블 중첩된 테이블과 가변 배열 추상 자료형을 생성 할 때, 오라클은 자동적으로 컨스트럭트 메소드를 생성한다. 그 자료형을 사용하는 컬럼 안으로의 insert 작업들을 지원하게 된다.(5장 참고) 객체 테이블 행들이 모두 객체인 테이블을 말한다.(행들이 ID값을 가진다.) Create table를 통해서 테이블을 만든 다음 NAME_TY 자료형을 가지고 다른 테이블의 NAME 객체 테이블 안에 있는 행 객체들을 참조하여 생성 할 수 있다. 중첩된 테이블과 가변 배열 중첩된 테이블- 어떤 테이블안에 하나의 행에 대한 여러 개의 값을 포함하는 테이블 (한 사람이 어려개의 주소를 가지는 경우) 가변 배열 – 행들의 개수가 제한된다.
분학 영역과 하위 분할 영역 하나의 테이블을 여러 개로 분할하여 관리 작업을 단순화 분할된 테이블을 하나의 테이블처럼 개별적인 객체들로 관리 할 수있다. 옵티마이저는 질의시에 엑세스 되는 테이블의 범위를 특정 분할된 영역에서 search하기 때문에 성능 향상 인덱스도 분할하여 사용 할 수 있다.(12장 참고)
사용자 사용자 계정은 DB안에서 논리적인 구조이다. SYS 사용자는 데이터 딕셔너리 테이블을 소유하고 테이블들은 DB안에 있는 나머지 구조들에 대한 정보를 저장한다. SYSTEM사용자는 그런 데이터 딕셔너리 테이블들을 엑세스하여 DB안에 있는 나머지 사용자들이 사용하게 한다. 객체 생성시 사용자 계정아래에 생성 된다. 테이블 계정을 운영체제 계정과 묶어서 운영체제로부터의 접근을 가능하게 한다.
스키마 사용자 계정안에 소유되는 객체들의 집합 로그인을 통해서 접근 할 수 있다.
인덱스 각 테이블안에 각 행에 RowID라는 테이블이 붙여진다. 인덱스 항목은 키값과 RowID로 구성 테이블데이터에 대해 보다 빠른 접근 경로(물리적)를 제공 인덱스 항목은 키값과 RowID로 구성 B*tree메너니즘을 통해서 최단 경로 보장 RowID는 그 연관된 행의 물리적 위치를 오라클에게 제공함으로써 데이터를 검색하는데 요구되는 I/O를 경감시킨다. 인덱스는 성능를 향상시키고 컬럼의 고유성을 보장한다. Unique나 PRIMARY KEY 제약조건은 자동적으로 인덱스를 만든다. Create index 명령은 수동적인 작업이다. 비트맵 인덱스는 명확하지 않은 데이터를 구별 할 때 사용한다. 한계조건을 사용하여 검색 속도를 높인다.(정적인 데이터)
인덱스 데이터를 저장하기 전에 순서를 거꾸로 하여 생성 할 수 있다. 순서를 바꾸면 인덱스 안에서 값이 고르게 분산되도록 한다. 데이터 값이 순서대로 저장되지 않기 때문에 등가 비교작업에만 유리하다. 프라이머리 키에 의해 정렬 될 경우에는 RowID가 필요 없다.
클러스트 테이블 데이터를 저장하는 선택적 방법 공통열을 고유하고 종종 함께 사용하는 하나 이상의 테이블을 물리적으로 함께 저장 서로 연관된 행이 물리적으로 함께 저장하므로 접근 시간 향상 테이블의 서로 관련된 열을 클러스트 키 라고한다. 어려 개의 테이블에 대해 한번만 저장(조인을 통해서)공통된 행의 동일한 I/O작업으로 검색 이점을 가진다. 항상 같이 작업 하는 경우에는 하나의 테이블로 합치는 것이 더 유리하다.
해쉬 크러스트 행의 클러스트 키에 대한 해쉬 함수들을 사용하여 그 행이 저장 되어야 할 물리적인 위치를 결정한다. 등가 비교 질의 작업에서 가장 큰 성능 향상 인덱스 클러스트와 유사한 방법
뷰(VEIW) 하나 이상의 테이블에 있는 데이터를 사용자가 원하는 대로 표현하는 일종의 마스크 뷰가 데이터를 실제로 포함하거나 저장하는 거이 아니라 뷰가 기반을 두고 있는 기본 테이블에서 데이터를 가져옴 뷰가 수행된 모든 작업은 실제로 뷰의 기본 테이블에 영향을 줌 데이터의 복잡성 미리 결정된 테이블의 행과 열에 대한 접근을 제한하여 추가 테이블 보안을 제공 편리하게 명령어를 단순화 시킴 다른 관점에서 데이터를 제공
객체 뷰 객체뷰들은 추상 자료형들에 대한 경로에서 다리 역할을 한다. 객체뷰들은 관계형 데이터에게 객체 관계적인 측면을 제공한다. 기본 테이블은 변경되지 않지만 개발자의 관점에서 볼때 객체관계적인 접근을 제공한다.
시퀸스 데이터베이스 테이블의 숫자열에 일련의 고유한 숫자 리스트를 제공한다. 질의에 의해서 호출되어 값이 리턴 되는 과정에서 시퀀스는 질의에 명시된 증분값만큼 증가한다. 시퀀스는 순환하며 미리 명시된 최대값에 도달할때까지 계속 증가한다. 커밋하다가 실패했다면 시퀀스값은 테이블에 삽입되지 않는다.
프로시저 데이터 디셔너리 안에 저장된PL/SQL문장으로 애플리케이션에 의해 호출된다. 빈번하게 사용되는 애플리케이션 로직을 데이터베이스 안에 저장 그 문장들을 하나의 단위로 실행 시킨다. 프로시져는 어떤 값을 호출하는 프로그램에 리턴 시키지 않는다. 데이터 보안성을 강화 할 수 있다. 사용자가 테이블 안에 직접 접급하도록 하지 않고 테이블들을 액세스하는 프로스져를 사용하게 한다.
함수 데이터베이스안에 저장되어 있는 코드의 집합 프로시저와는 달리 호출 프로그램에게 값을 리턴 시킨다.
패키지 패키지를 통해서 프로시저와 함수를 논리적으로 묶을 수있다. 패키지에 대한 본문은 데이터 딕셔너리에 저장된다. 패키지안의 요소들은 공용과 전용으로 나눠지고 권한이 분리된다.
트리거 데이터베이스 이벤트가 발생할 때 실행되는 프로시저 문장 트리거 행 트리거 관계 무결성을 증대 추가적인 보안장치를 강화 사용 가능한 감사 옵션을 향상 문장 트리거 각각의 트리거 문장에 대해 한번 씩 발생한다. 행 트리거 문자들에 의해 영향을 받는 테이블안에 있는 각 행에 대해 한번씩 발생된다.
트리거 문장 트리거 행 트리거 트러거 행동 안에 있는 코드가 트랜잭션의 영향을 받는 데이터에 의존하지 않을 때 유용 INSERT 문장 트리거를 생성하면 특정기간동안 insert작업을 못하게 된다. 행 트리거 트랜잭션의 영향을 받는 데이터에 의존 할때 유용하다.
동의어 분산 데이터 환경에서 데이터베이스 객체 식별을 위해서는 호스트 컴퓨터 이름, 서버 이름, 객체 소유자, 객체 이름을 명시해야한다.이런 과정을 숨기기 위해서 동의어 공용과 전용으로 분리해서 권한을 줄 수 있다. HR.EMPLOYEE EMPLOYEE 로컬 데이터 베이스 뿐 아니라 원격의 데이터 베이스도 가리킬수있다. 추상 자료형은 동의어를 만들 수없다.
특권과 롤 특권 롤 다른 계정 소유의 객체를 액세스하기 위해서 필요한 권한 Read, select, execute등등.. PUBLIC은 모든 사용자에게 특권을 허락 롤 롤 생성을 통해서 특권 관리를 단순화 할 수 있다. 사용자들을 애플리케이션에 추가하는 작업 동적으로 인에이블/디스에이블 될 수있다.
데이타베이스 링크 한 데이타베이스에서 다른데이터베이스로의 “경로”를 나타내는 개체의 의미 MY_LINK라는 공용 링크 전용과 공용으로 권한을 분리할 수있다. 접속할 계정이름, 그 계정의 패스워드, 원격 데이터베이스와 연관되는 서비스 이름등을 명시 MY_LINK라는 공용 링크 Create public database link MY_LINK Connect to HE identified by PUFFINSTUFF Using ‘DB1’: 링크 사용 Select * from EMPLOYEE@MY_LINK:
세그먼트, 확장 영역 확장 영역(Extends) 세그먼트 연속된 몇 개의 Data Block 으로 한번에 할당 되며 특정 유형의 정보저장에 사용 세그먼트 논리적인 데이터베이스 객체들에 대한 반대개념 데이터를 저장한다. 물리적인 실체이기 때문에 데이터베이스안에 있는 테이블 스페이스가 할당 되어야 한다.
롤백 세그먼트 데이터 베이스 안에 있는 여러 사용자들 간의 읽기 일관성을 유지하고 트랜스잭션들을 롤백 할 수 있도록 오라클은 커밋되지 않은 트랜잭션들의 이미지를 이전 상태로 돌려놓는 매커니즘을 가지고 있다.롤벡 세그먼트를 이용한다.
스냅샷 원격 데이터에 대한 로컬 복사본들을 만들어 사용자들에게 제공 원격 데이터베이스로부터 데이터를 select하기 위해 데이터 베이스 링크를 사용하는 질의를 기반으로 한다. 읽기전용, 업데이트 가능하게 구현 할 수 있다. 스냅샷에 의해 사용되는 로컬 테이블을 인덱싱 할 수 있다. 스냅샷 스케쥴, 스냅샷 로그를 통해서 자동 관리 될 수 있다. (3부 참고)
Materialized view 스냅샷은 원격 데이터 베이스로 부터 온 데이터를 저장하는반면 materialized view는 보통 현재 데이터베이스안에서 복제된 데이터를 저장한다. 대규모 테이블에 대한 질의시에 옵티마이저에 의해서 디스크로부터 참조할것인지 materialized view를 참조할 것인지를 결정한다.(12장 참고)
내부 메모리 구조 에 대해서 알아봅시다.
System Global Area(SGA) 사용자간의 정보 교환을 원활하게 하는 것 이다. SGA구조 데이터 블록 버퍼 캐쉬 딕셔너리 캐쉬 리두 로그 버퍼 공유 SQL풀
데이터 블록 버퍼 캐쉬 가장 최근에 사용된 데이타베이스 테이블 블록을 저장한다. 크기가 고정되어 있으므로 LRU(least reently userd)알고리즘을 통해서 저장된다 캐쉬에 빈공간이 필요하면 디스크에 저장하고 새로운 데이터 블록들을 저장한다. SGA가 충분한 공간을 가지고 있지 않으면 다른 객체들과 공간을 차지 하기 위해서 경쟁한다.hit 비율이 떨어지면 I/O작업수반 (6장 참고)
딕셔너리 캐쉬 객체들에 대한 정보를 저장한다. 사용자 계정 데이터, 데이터 파일 이름, 세그먼트 이름 , 확장 영역 위치, 테이블 설명, 특권 등이 포함 SGA안에 저장 LRU 알고리즘에 의해서 관리된다. 딕셔너리 캐쉬가 너무 작으면 데이터를 얻기 위해서 반복적으로 테이블에 질의를 해야 하기 때문에 시간이 많이 걸린다.
리두 로그 버퍼 리두 입력 항목, 즉 데디터 베이스에 발생한 변경 사항에 대한 로그를 저장 리두 로그 버퍼에 저장된 리두 입력 항목은 온라인 리두 로그 파일에 쓰여져서 데이터베이스 복구를 수행함
공유 SQL풀 데이터 딕셔너리 캐쉬와 라이브러리 캐쉬를 저장 데이터 블록 버퍼와 딕셔너리 캐쉬는 데이터베이스 안에 사용자들 간에 구조와 데이터 베이스에 관한 정보를 공유하는것을 가능 하게 한다. 공유 SQL영역은 데이터 베이스로 보낸 모든 고유한 SQL명령문을 처리한다.
대형 풀 옵션 메모리 영역이다. 자바풀 다중 버퍼 풀 멀티 쓰레드 서버 옵션이을 사용하거나 빈번하게 백업/복구 작업들을 실행하는 경우, 대형풀을 사용하여 효율적으로 관리할 수 있다. 대규모 SQL명령어들이 공유 SQL 풀 안에 있는 항목을 덮었는것을 막을 수있다. 자바풀 자바 명령에 대한 요구 사항을 파싱 하는 서비스 다중 버퍼 풀 다중 버퍼를 생성 함으로써 데이터 집합과 애플리케이션 집합을 분리해 낼 수있다. 동일한 자원에 대한 경합을 줄일 수있다.
Program Global Area(PGA) 메모리안에 있는 영역 사용자 프로세스에 의해 사용 멀티쓰레드 서버(MTS)를 통해서 여러 개의 사용자 프로세스들이 동일한 서버 프로세슬ㄹ 사용하도록 할 수 있다.
백그라운드 프로세스 DB의 물리적 구조와 메모리 구조 간의 관계성은 백그라운드 프로세스들에 의해 유지/강화된다. 백그라운드 프로세스들은 추적파일을 생성시켜서 문제해결시 사용한다. 문제들이 발생할 시에는 경고 로그안에 기록된다.
백그라운드 프로세스 SMON PMON 인스턴스가 시작할때 인스턴스 복수를 수행 시스템 모니터는 더 이상 사용되지 않는 임시 세그먼트를 지우며 시스템 고장과 인스턴스 복구동 안 수행 하지 못하는 트랜잭션을 복구 테이블스페이스나 파일이 온라인 상태일때 복구 PMON 사용자 프로세스에 장애가 생겼을때 프로세스 복구를 수행 락을 해제 시키고 그 락을 다른 사용자가 사용할 수 있도록 한다
백그라운드 프로세스 DBWR LGWR 데이터베이스 버퍼캐시에서 수정된 블록을 데이터 파일로 기록 최근에 사용된 데이터가 먼저 기록된다. 여러 개의 DEWR를 사용해서 실행 속도를 줄일 수있다 LGWR 리두 로그 입력 항목을 디스크에 기록 리두로그 버퍼 항목들은 항상 데이터베이스의 최신상태를 포함 두개 이상의 리두 로그 를 순차적으로 쓰고, 빈공간 확보를 위해서 디스크에 저장한다. 여러 개의 LGWR I/O 슬래이브를 만들어서 성능을 향상
백그라운드 프로세스 CKPT ARCH TECO 특정기간에 DBWR이가 데이터 파일에 대한 마지막 수정 시점을 기록해서 인스턴스 복구작업에 드는 시간을 줄일 수 있다. ARCH 온라인 로그 파일이 다 찼을때 아카이브 저장 역역으로 온라인 리두 로그 파일을 복사 TECO 분산된 데이터베이스에 있는 실패를 해결한다. 의심가는 분산 트랜잭션들과 연관된 DB로의 접근을 시도해서 그런 트랜잭션들을 해결한다.
백그라운드 프로세스 SNPn, LCKn, Dnnn, Snnn, Pnnn 등이있다.
외부구조 리두 로그 제어 파일 추적 파일과 경고 로그 데이터 베이스가 다운될 경우 데이터 베이스의 트랜잭션들을 적절한 순서대로 복구하는데 사용 2개 이상의 로그 파일을 가지고 있어야 한다. 제어 파일 데이터 베이스의 물리적인 구조는 제어파일에 의해 관리된다. 여러 개의 복사본들이 온라인 저장된다. 디스크 실패로 인한 잠재적인 손해를 최소화 한다. 추적 파일과 경고 로그 백그라운드 프로세스는 추적파일에 중요한 이벤트에 대한 정보를 포함한다. 경로 로그는 기동되는 동안에 명령들과 명령결과들을 기록한다 테이블스페이스 생성, 복구작업...
데이타베이스 구현 백업/복구기능 오라라인 백업 온라인 백업 Export : 데이터 베이스 질의에 대한 출력을 바이너리 파일안에 저장하는것 Import : 바이너리 덤프로부터 정보를 선택적으로 읽어 들이는 유틸리티 오라라인 백업 데이터 베이스를 닫은 상태에서 백업을 실행시킨다 온라인 백업 데이터베이스가 열려있는 상태에서 물리적인 데이터베이스 백업을 만든다.
보안 기능 계정보안 시스템 수준의 보안 객체보안 사용자들의 패스워드를 통해서 계정을 보호할 수있다. 시스템 수준의 특권들의 전체 집합을 롤을 생성한다. 객체보안 객체들을 생성한 사용자들에 의해서 객체 자체에 접근 권한을 준다.
논리적인 모델링 규약 1:1 관계성 1:n 관계성 n:n관계성 동일한 프라이머리 키를 공유하는 두 개의 테이블을 갖는것 하나의 테이블 안에 있는 하나의 레코드는 또 다른 테이블 안에 있는 많은 레코드들과 연관 되는 경우 n:n관계성 테이블의 많은 행들이 또 다른 테이블의 많은 행들과 연관되어 관계를 가질때