Home     FreeBSD     Linux     MS-Window     PHP     Data Base     Utility     Phone     Etc  

   
  Category : Data-Base         .RDBMS 개요 -1수정   삭제   
.RDBMS 개요

DBMS 란 ?

데이타베이스는 여러 부서가 공통적으로 활용할 수 있도록 데이타를 통합하여 저장하는 것으로써 데이타베이스를 사용하는 사용자는 여러명이며 사용 목적 또한 각 사용자에 따라 다양해 진다

데이타를 통합함에 따라 동일한 데이타는 한번만 저장하여 공유하므로 데이타의 중복성은 근본적으로 해결될 수 있다

DBMS는 데이타베이스에 대한 사용자의 모든 요구를 수행할 수 있는 기능을 갖기 위해 여러가지 구조를 갖추고 다양한 기능을 제공하며 이들 구조와 구조 사이의 연결 및 이를 이용하는 데이타베이스 언어로 구성된 일종의 소프트웨어 시스템이다.

사용자의 요구를 수용할 수 있는 기능이란 데이타베이스를 생성, 정의, 유지하는 기능과 사용자가 원하는 모든 정보를 조작할 수 있는 기능 및 항상 최적상태를 유지하기 위하여 취할 수 있는 여러가지 제어 기능을 말합니다. DBMS를 사용하면 아래와 같은 장점들이 있다

l 데이타의 중복의 최소화
데이타를 통합하여 이용할 수 있게 구성함으로써 이러한 중복을 사전에 배제할 수 있다

l 데이타의 공통 사용
같은 내용의 데이타를 한번만 저장하고도 여러가지 형태로 표현해 줄 수 있는 DBMS의 정교하고도 다양한 기능 때문에 데이타의 공유가 가능하다

l 데이타의 일관성 유지
데이타의 중복저장을 피함으로써 동일한 내용을 서로 다른 장소에 저장함에 따라 나타날 수 있는 데이타간의 불일치나 모순성을 해결할 수 있다.

l 데이타의 무결성 유지
DBMS는 입력이나 갱신작업을 수행할 때 마다 사용된 데이타가 무결성 보장 규칙에 위배되지 않는 정확한 값인가를 검사하여 유효한 데이타만 허용하게 되므로 무결성을 유지할 수 있다.
l 데이타의 보안을 보완
l 표준화가 가능
중앙에서 데이타를 통제함으로써 정보, 문서형식등을 총괄하여 표준화를 기할 수 있다

요구사항을 쉽게 파악 데이타를 수집 분석하여 요구사항을 파악하기가 쉬우므로 조직전체에 가장 유익한 구조로 조작될 수 있도록 하여 최대의 효과를 얻을 수 있다

DBMS는 데이타등을 통합 저장하여 데이타베이스를 구축하고 DBMS를 통하여 사용자와 데이타간을 중앙 집중으로 통제함으로써 파일 시스템에서 야기되는 여러 문제들을 해결하고 위와 같은 장점들을 얻을 수 있다.

이러한 이유들로 인하여 현실 세계에서 요구하는 정보의 정확성, 신속성의 요구를 충족시킴으로써 자연적으로 데이타베이스는 전산 시스템의 필수적인 요소로 자리잡고 계속 발전하게 되었습니다.데이타베이스를 중앙 집중식으로 관리함으로써 간단 하면서 쉽게 데이타의 보안을 유지 할 수 있다

DBMS의 발전 과정
DBMS의 발전역사는 일반적으로 10년 단위로 그 상용화의 성과를 살펴볼 수 있다. 데이타 관리의 초기 단계인 파일 시스템으로 구조로 부터 사용자의 업무가 복잡, 다양해져서 DBMS의 필요성을 느낌에 따라 1960년대에 최초로 계층형(Heirachical) DBMS가 개발되어 상용화에 성공하게 되었다.

1970년대에 들어오면서 기존의 계층형 DBMS에서 약간의 데이타 접근방식을 보완한 망형(Network) DBMS가 개발되어 사용되어져 왔다

이러한 DBMS들은 1980년대에 들어오면서 새로운 계기를 맞게 되었는데 기존의 DBMS와는 그 구조와 발상이 전혀 새롭고 미래의 DBMS로 각광을 받을 수 있는 관계형(Relational) DBMS가 출시하게 되었다

관계형 DBMS의 이론은 1970년대 이전 부터 나오기 사작하였지만 그 이론이 제품화되어 최초로 상용 DBMS로 판매되게 된것은 1979년 ORACLE 사에 의해서이다

처음 관계형 DBMS가 출시 되었을 때에는 생산성은 매우 뛰어 났으나 하드웨어의 자원을 너무 많이 차지하고 수행속도가 매우 느린 단점이 있었습니다. 그러나 지속적인 하드웨어의 발전및 DBMS 공급사의 과감한 연구/개발 투자로 인해 관계형 DBMS는 1980년대 중반에 들어오면서 거의 모든 업무에 뛰어난 생산성 향상과 함께 만족할만한 수행속도를 가져올 수 있게 되자 새로운 전산기술 개발에 대한 사용자들의 기대와 욕구를 충족하게 되었다.

1990년대에는 멀티미디어에 대한 요구에 부응하기 위해 객체지향형 DBMS가 발표되어 일부 회사에서 제품을 발표하고 있으나 실용화 단계까지는 시간이 필요하다고 판단됩니다. 그러면 현재까지 발표된 각 DBMS의 구조 및 특징들을 살펴보겠다

관계형(Relational) DBMS
1970년대 초반에 IBM 연구소의 'System R'이라는 프로젝트가 진행되었으며, 여기서 언어의 어떤 기능을 배우는 것이 어려운지를 파악하기 위한 연구가 수행 되었고, SQL 언어에서 그런것들이 제거 되었으며 또한 자료의 정의, 자료 처리와 자료 접근 관리의 완전한 기능을 가지는 언어로 확장되었다

데이타언어의 개정된 명세가 1976년 11월에 IBM의 "Journal of Research and Development"지에 논문으로 발표 되었고 1976년에 나온 이 논문이 ORACLE의 탄생의 초석이 되었습니다. 1977년에 ORACLE사의 설립자는 SQL 언어를 사용하여 관계형 DBMS를 구성 하기로 하였으며, 그 결과 ORACLE은 1979년에 최초의 상용화된 관계형 DBMS를 시판 하게 되었다

1982년에 IBM은 DOS/VSE와 VM에서 운영되는 SQL/DS를 내 놓았으며, 1984년에 IBM은 대형을 위해 MVS 운영체제하에서 수행되는 DB2를 발표하였습니다. 또한, SQL은 오늘날 ANSI 위원회에 의해 관계형 DBMS의 표준언어로 받아 들여졌다

이와같은 탄생역사를 가진 관계형 DBMS는 1979년초 최초의 상용화된 ORACLE DBMS를 시작으로 하여 현재까지 PC를 비롯한 IBM의 대형급 까지 매우 다양한 기종에서 운용되고 있으며 현재는 그야말로 관계형 DBMS의 전성기를 이루고 있다. 대표적인 상품으로는 ORACLE사의 ORACLE7을 비롯하여 Sybase, Informix, IBM DB2, IBM SQL/DS, ASK사의 Ingres, VMS/Rdb등이 있다

구조 및 특징
관계형 DBMS는 기존의 계층형 또는 망형의 DBMS가 레코드들을 연결하는 방식과는 달리 이차원의 테이블 즉, 컬럼과 로우로써 이루어진 개념이다.
컬럼은 정보의 종류를 표시하고 로우는 각 항목에 표시된 값들의 집합체이다.
관계형 모델은 데이타의 구조적인 표현이 단지 컬럼과 로우로써 이루어졌고, 그럼으로써 데이타의 접근이 매우 편리하다
또한 데이타의 실제 저장 장소의 구조가 바뀌더라도 응용프로그램을 변경시킬 필요가 없는 물리적 구조로 부터의 독립성을 제공함에 따라 프로그램의 수정이 어려워서 데이타의 구조변경을 쉽게 하지 못하던 어려움이 없어졌다
따라서 관계형 DBMS (RDBMS)는 데이타의 저장및 갱신을 쉽게 할 수 있으며 데이타베이스의 재구축시 기존의 어느 DBMS보다도 쉽게 유지보수가 가능하다

단점
사용상의 편리함이나 뛰어난 점이나 유지 보수가 쉬운 반면 수행속도가 느리다고 하는 것이 RDBMS의 제일 큰 단점이다
그러나 이러한 단점은 RDBMS 공급업체의 꾸준한 연구개발과 지속적인 성능개선 노력에 힘입어 현재는 계층형 DBMS가 낼수 있는 1000 TPS 이상의 성능을 발휘하고 있다

관계형 DBMS의 구조






NAME STREET CITY NUMBER
Lowery Maple Queens 900
Shiver North Bronix 556
Shiver North Bronix 647
Hodges Sidehill Brooklyn 801
Hodges Sidehill Brooklyn 647

NUMBER BALANCE
900 55
556 100000
647 105366
801 10533


관계형 DBMS의 구현방법
관계형 데이타베이스는 모델링을 하는데 있어서 Relational 조건의 정도를 어디까지 충족하느냐에 따라 다음의 세가지 타입으로 나눌 수 있다

PSEUDO RELATIONAL DBMS

l 데이타의 테이블 형태 표현기능 부족
l 계층, 망형 또는 Inverted Listed Pointer로 데이타 관계를 표현
l 미리 선언된 관계에 대해서만 데이타 항목의 표현이 가능함
l 제한된 관계형 동작만 제공
l 부분적인 관계형 프로세싱 기능 (Ad Hoc Query 등)
l 종류 : DATACOM/DB (Inverted List System)
ADABAS (Inverted List)
MODEL204 (Inverted List)
IDMS/R (Network + Relational System)

2. QUASI RELATIONAL DBMS
l 외부적으로는 테이블 형태로 데이타 표현이 가능
l 계층, 망형 또는 Inverted Listed Pointer로 데이타 관계를 표현
l 미리 선언된 관계에 대해서만 데이타 항목의 표현이 가능함
l 대부분의 관계형 동작을 제공
l 약간의 관계형 프로세싱 기능 (Ad Hoc Query, JOIN 등)
l 종류 : Microcomputer database system
SUPRA

3. PURE RELATIONAL DBMS
l 데이타의 완전한 테이블 형태 표현
l 데이타 항목에 의해서만 관계의 표현이 가능함
l 모든 관계형 동작 제공
l 완전한 관계형 프로세싱 기능
l Ad Hoc Query
l 무제한의 JOIN
l 자동적인 navigation
l SET 단위 프로세싱































ORACLE7 설계 개념

관계형 이론과 ORACLE7 설계시에 적용된 아래와 같은 중요한 개념을 설명한다
l Codd의 법칙
l 실체-관계 모델
l 논리적 Table 구조 (Table, Column, Row 용어의 의미를 포함)
l 물리적, 논리적 독립성
l 참조 무결성

Codd 박사의 12 가지 법칙
Codd 박사는 Computer World 잡지 (Volume XIX, No41, "당신의 DBMS는 정말로 관계형인가 ?")에 관계형 데이타베이스를 위한 12개의 기본법칙을 정의하여 발표 했다

법칙 1 : 정보법칙

관계형 데이타베이스에 있는 모든정보는 논리적 수준에서 명시적으로 그리고 어느정도 테이블에 있는값은 정확하게 나타나야 한다

이 법칙은 관계형 데이타베이스에있는 모든 정보는 테이블에 포함되어야 한다는것을 말합니다. 이 테이블은 모든 응용데이타와 모든 시스템데이타를 포함한다

ORACLE은 사용자정의 테이블의 데이타가 데이타를 입력하는 동안 TABLE에 정의된 시스템 정보를 유지하고, ORACLE KERNEL에 의하여 지속적으로 유지되는 기능에 의해 구현된다
모든 데이타는 모든 사용자에게 논리적으로 접근이 허용됩니다. 그러나 보안목적을 위하여 어떤 테이블에 대한 접근은 사용자 요구에 따라 제한될 수도 있다


법칙 2 : 보증법칙

관계형 DB에서 각각 그리고 모든 원자값은 테이블명의 조합이나 PRIMARY KEY, 컬럼 이름등을 재정렬 하여도 항상 논리적 접근이 보장되어야 한다

테이블은 관게형데이타베이스에 데이타를 유지하는 데이타구조입니다. 테이블은 레코드와 컬럼으로 구성되어 있으며 관계를 나타내기 위하여 만들어진 물리적 포인터는 아니다

데이타 그자체는 데이타 사이의 관계를 나타내기 위하여 사용됩니다. 따라서 그 데이타는 이해하기가 보다 더 쉬우며 테이블과 테이블간의 작업은 관계이론이 집합론, 관계형 대수, 관계형 미적분에서 기초로 하기 때문에 잘 정의되어져 있다

ANSI는 1986년 10월에 관계형 DB관리시스템을 위한 표준 언어로써 SQL을 적용하였으며 연방정부, FIPS 와 마찬가지로 국제표준기구(ISO)에 의해서도 적용 되어 있다

오라클은 데이타에 접근방법을 명시하는것을 요구하지 않는 SQL 표준의 SUPER-SET을 제공한다모든 SQL문장은 명시된 데이타에 가장 빠른 접근을 결정하는 RDBMS의 한부분인 질의 최적화를 사용한다
질의 최적화는 무슨 인덱스가 존재하고, 이 인덱스를 어디에서 가장 적절하게 사용하는가를 알고 있다 사용자는 테이블에 접근할때 테이블이 인덱스 되었는지의 여부나, 인덱스 된 테이블의 유형이 무엇인지을 알 필요가 없다


법칙 3 : NULL값의 체계적 처리

NULL값은 비어 있는것을 나타내며, 공백 문자와 구분되고, 0 이나 어떤 다른 숫자로 부터도 구분된다
NULL은 누락된 정보를 나타내기 위하여 완전하게 관계형 DBMS에서 지원되어야 한다

법칙 4 : 관게형모델에 기초한 동적 온라인 카타로그

데이타베이스 사전의 내용은 보통 데이타 처럼 논리적 데이타로 표현되므로 권한있는 사용자가 일반적인 데이타 처럼 관계형언어를 이용하여 사용할 수 있어야 한다

오라클의 데이타 사전은 테이블 형태에 적절한 시스템 정보를 보유하고 있으므로 권한있는 사용자가 SQL문의 사용을 통하여 접근할 수 있다
아래 예문은 SQL을 이용하여 TABLESPACE의 남아있는 BYTES 수량을 질문하기 위하여 조회한다

SELECT SUM(BYTES) FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME=PERSONNEL;


법칙 5 : 사용하기 쉬운 데이타 부언어 (Sub-Language) 법칙

관계형 시스템은 여러 언어와 여러 터미날모드의 사용을 지원할 수 있어야 한다
그러나 관계형 시스템에서 사용하는 언어는 각 문장을 몇개의 잘 정의된 문자열로서 표현할 수 있어야 하고 아래의 모든 내용을 지원하는 포괄적인 것이어야 한다

1. 데이타 정의
2. 데이타 조작
3. 뷰 정의
4. 무결성 제약
5. 권한 관리
6. 트랜잭션 영역 정의


법칙 6 : 뷰 수정 법칙

모든 뷰는 이론적으로 수정할 수 있고 또한 시스템에 의해 수정될 수 있어야 한다

뷰는 하나 또는 그이상의 테이블의 논리적 창입니다. 뷰는 데이타를 저장하지 않고 오히려 다른 테이블로 부터 데이타를 보여준다. 오라클의 뷰는 테이블이 사용되는 어디에서 든지 SQL문을 이용하여 사용된다.


법칙 7 : HIGH-LEVEL 입력, 수정, 삭제

단순 연산으로써 기본관계 또는 유도된 관계를 다루는 기능은 데이타의 검색 뿐만 아니라 입력, 수정, 삭제에서도 적용된다.

SQL은 비절차형 언어 입니다. 그것은 한번에 단지 하나의 데이타 보다 레코드 단위로 처리하기 때문이고 그리고 데이타의 자동적 조정을 제공한다.
모든 SQL문은 입력시 세트로써 받아들여 지고 출력시에도 세트를 리턴 된다
SQL은 아래의 업무를 포함하는 여러 업무를 위한 명령어를 제공한다.

l 데이타 조회
l 테이블에 레코드를 입력, 수정, 삭제
l 데이타베이스 객체를 생성, 변경, 삭제
l 데이타베이스객체에 대한 접근통제
l 데이타베이스 지속성 보증

법칙 8 : 물리적 데이타 독립
응용프로그램이나 터미날에서의 작업이 저장된 데이타 표시 또는 규정된 접근 방법에 의해서만 이루어 진다면 항상 데이타베이스 데이타는 논리적으로 손상되지 않은 상태로 남아 있어야 한다.

이것을 이루기 위하여 DBMS는 기본테이블의 물리적 양상이 응용프로그램의 논리적 양상과 명확하게 분리되어야 한다.

데이타 파일은 응용프로그램에 의해 직접적으로 접근할 수 없다는 것을 알아야 한다.
오라클 유틸리티를 사용하는 응용프로그램은 데이타베이스 커널을 통해서만 접근이 가능한다.


법칙 9 : 논리적 데이타 독립

기본 테이블들의 데이타 변화를 허용하는 작업을 의도적으로 하였다면 응용프로그램이나 터미날에서의 작업은 논리적으로 손상되지 않은 상태로 남아 있어야 한다.

이러한 독립성의 예는 한 테이블이 레코드 또는 컬럼에 의해 두개의 데이블로 분할되었다가 조인에 의해 아무런 손실없이 다시 결합될 수 있어야 한다.

이를 제공하기 위하여 DBMS는 이론적으로 수정할 수 있는 모든 뷰에 대하여 입력, 수정, 삭제를 할 수 있어야 하는데 ORACLE7 은 모든 형태의 SELECT 문과 몇몇 UPDATE, DELETE, INSERT 문에서 이러한 독립성을 완전히 제공한다.


법칙 10 : 데이타 무결성

RDBMS의 무결성 제약조건은 SQL문으로 정의될 수 있어야 하고 응용프로그램이 아닌 데이타사전에 저장 되어야 한다.

두 가지의 무결성 법칙 (엔티티 무결성과 참조 무결성)외에 사업정책이나 정부규정을 반영하는 무결성 제약조건을 추가로 명시할 수 있어야 한다. 이러한 제약조건은 고수준의 SQL문에 의하여 정의되고 응용프로그램이 아닌 데이타 사전에 저장 되어야 한다.

ORACLE은 아래의 제약조건에 명시된 ANSI 표준 규격을 준수한다.

l 한 컬럼 또는 컬럼의 그룹의 값은 NULL이 아니어야 한다
l 한 컬럼 또는 컬럼의 그룹의 값은 그 테이블내에서 유일 해야 한다.
l PRIMARY KEY 로서 한 컬럼 또는 컬럼의 그룹을 식별하여야 한다.
l 다른 테이블에 있는 컬럼 또는 컬럼의 그룹의 값을 요구한다. (외래 키)
l 컬럼 또는 컬럼의 그룹의 값으로 CHECK 사항을 준수하는 값을 요구한다.


법칙 11 : 분산 독립

관계형 DBMS는 분산 독립성을 갖고 있습니다. DBMS 는 데이타가 처음 분산되고 그리고 재분산 되었을 때 응용프로그램과 터미날 활동이 논리적으로 손상되지 않게 하는 데이타 부언어 (Sub-Language)를 가지고 있어야 한다

오라클의 SQL 구현은 데이타 분산을 지원하는 여러 문장을 포함한다
데이타베이스 연결들은 SQL*Net 를 사용하여 지역 데이타베이스로 부터 원격 데이타베이스 사용자로의 연결 (Link)을 생성하기 위하여 사용한다

EXE) SQL*Net TCP/IP 를 사용하여 지역 데이타베이스와 원격 데이타베이스 사이의 연결 (Link)을 생성하는 문장이다.

CREATE DATABASE LINK REMOTE_SYSTEM
CONNECT TO SCOTT IDENTIFIED BY TIGER
USING 'T:remote_sys:ORA7';

원격 시스템에 있는 테이블은 "테이블이름@REMOTE_SYSTEM" 으로 참조될 수 있습니다. 이러한 테이블을 위한 동의어 (Synonym)는 사용자가 데이타베이스 연결 이름을 명시하지 않도록 해준다.

예를 들면, 만약 "EMP@REMOTE_SYSTEM" 을 위해 동의어 "EMP" 를 만들었다면 사용자는 동의어 "EMP" 를 사용하여 데이블을 참조할 수 있다.

그러므로 데이타베이스 관리자는 테이블을 지역 혹은 원격의 다른 데이타베이스로 옮겨도 단지 해당 동의어만 바꾸어 주면 된다.

또한 테이블을 쪼개어 여러 데이타베이스에 두고 흩어진 부분들을 결합시키는 뷰와 그 뷰를 참조하는 동의어를 만들어 마치 한 데이타베이스에 테이블의 모든 부분들이 있는것 처럼 사용할 수 있다.

ORACLE7은 투명한 분산 READ 와 분산 UPDATE 를 완벽하게 지원한다.


법칙 12 : 비-전복 (Non-Subversion) 법칙
만약 관계형 시스템이 한번에 한 레코드만 처리하는 하위 언어를 가지고 있다면, 하위수준은 한번에 여러 레코드 처리하는 고수준의 관계형 언어 에서 표현되는 무결성 법칙과 제한을 무시하거나 뒤바꾸기 위해 사용되지 않아야 한다.

ORACLE7의 주요 설계 개념

OPEN, CLOSED 데이타베이스

오라클 데이타베이스는 OPEN 되거나 CLOSED 될 수 있다.

정적인 상황에서 데이타베이스는 사용을 위해서 열려다. 그러나, 데이타베이스는 때때로 데이타베이스의 데이타에 대해 일반적 사용이 허락되지 않도록 하는 특정한 관리 기능을 위해 닫히게 된다.

논리적, 물리적 구조
오라클 데이타베이스는 논리적 구조와 물리적 구조를 가지고 있다.

데이타베이스 구조를 논리적 구조와 물리적 구조로 분리함으로써 데이타의 물리적
저장은 논리적 저장 구조에의 접근에 영항을 주지 않고 관리될 수 있다.

논리적 구조
l 하나 이상의 테이블스페이스.
l 데이타베이스의 스키마 객체
(테이블, 뷰, 인덱스, 클러스터, 시퀀스, 저장 프로시져)

테이블스페이스, 세그먼트, 엑스텐트를 포함하는 논리적 저장구조는
데이타베이스의 물리적 공간이 어떻게 사용되었는지를 말해 준다

다음은 테이블스페이스, 스키마 객체, 데이타 블록, 엑스텐트, 세그먼트를 포함
한 논리적 구조를 말한다

Table space
데이타베이스는 테이블스페이스라고 불리는 논리적 저장 단위로 나누어진다

테이블스페이스는 관련된 논리적 구조를 그룹핑 하기 위해 사용된다.
예를 들면 테이블스페인스는 모든 애플리케이션 객체들을 한 지역에 모아서
애플리케이션 데이타를 백업하는 것이 보다 효율적으로 수행되도록 해 준다.


데이타베이스, 테이블스페이스, 데이타 파일
l 각각의 데이타베이스는 논리적으로 하나 이상의 테이블스페이스로 나누어진다
l 테이블스페이스가 자신에 포함된 모든 논리적구조에 대한 데이타를 물리적으로 저장할 수 있도록 하나 이상의 데이타 파일이 명시적으로 생성 된다
l 한 테이블스페이스내 모든 데이타 파일의 크기를 합한 것이 그 테이블스페이스의 저장 된다
l 데이타베이스내 테이블스페이스의 용량을 모두 합한 것이 데이타베이스의 총 저장 된다





온라인, 오프라인

테이블스페이스는 접근할 수 있는 온라인 또는 접근할 수 없는 오프라인 상태로 유지될 수 있다

보통 테이블스페이스가 온라인 상태에 있으면 사용자는 테이블스페이스내에 있는 정보에 접근할 수 있다. 그러나 때때로 데이타베이스내의 일부분에 대한 정상적인 접근을 막기 위해 테이블스페이스를 오프라인 상태로 만들기도 한다


스키마, 스키마 객체

스키마는 연관된 객체들의 모임입니다. 스키마 객체는 직접적으로 데이타베이스를 참조하는 논리적인 구조이다

스키마 객체는 테이블, 뷰, 시퀀스, 저장 프로시져, 동의어, 인덱스, 클러스터, 데이타베이스 연결과 같은 구조들를 포함한다


물리적 구조
오라클 데이타베이스의 물리적 구조는 데이타베이스를 구성하는 O/S 파일에 의해 결정된다

각 오라클 데이타베이스는 하나 이상의 데이타 파일, 둘 이상의 리두 로그 파일, 하나 이상의 제어 파일의 세가지 형태의 파일로 구성된다

데이타베이스 파일들은 데이타베이스 정보 저장을 위한 실질적인 장소를 제공한다

테이블
테이블은 오라클 데이타베이스의 기본적인 데이타 저장 단위.

데이타베이스 테이블은 사용자가 접근 가능한 모든 데이타를 보유하며
레코드와 컬럼으로 구성된다. 관계형 데이타베이스가 아닌 예전의 데
이타 베이스 용어에서는 파일과 테이블이, 필드와 컬럼이, 그리고 레코
드와 행이 동일시 되었다.

테이블은 시스템내에서 독립적으로 사용되길 원하는 엔티티를 표현할
수 있다. 예를 들면, 회사에서의 고용자나 제품에 대한 주문은 테이블
로 표현 가능하다.

4. 테이블은 두 엔티티간의 관계를 표현할 수 있습니다. 즉 테이블은 고용자와 그들의 작업 숙련도 혹은 제품과 주문과의 관계를 표현하는데 사용될 수 있다. 테이블내에 있는 외래 키 (ForeIgn Key)는 두 엔티티 사이의 관계를 표현하는데 사용된다.

5. 비록 "테이블" 이라는 말이 더 많이 사용되지만 테이블의 형식어는 "릴레이션" 이다.

컬럼 과 행

1. 테이블 정보는 행과 컬럼에 저장되며 모든 테이블은 테이블 이름과 컬럼 집합에 의해 정의됩니다. 각 컬럼은 이름과 자료 형태 및 폭을 갖는다.

2. 테이블이 생성되면 컬럼이 그 테이블에 첨가될 수 있다. 그리고 테이블내 정보는 질의, 수정, 삭제될 수 있다.

3. 테이블의 데이타에 결정된 업무 규칙들을 강제로 부과하기 위해, 무결성 제한 및 트리거가 각 테이블에 정의될 수 있다.


컬럼
테이블의 각 컬럼은 엔티티의 한 속성을 표현한다.
행 ( Row, 레코드)
테이블의 데이타는 행에 저장된다.

뷰 (View)

뷰는 하나 이상의 테이블에 있는 데이타들를 사용자가 원하는 대로 짜맞춘 표현이며, 내장된 질의 (Stored Query)로 간주될 수 있다.

2. 실제로 뷰는 어떤 데이타도 포함하거나 저장하지는 않는다.

3. 뷰는 자신이 의존하는 "기본 테이블 (Base Table)" 이라 불리는 테이블들로 부터 자기의 데이타를 뽑아낸다. 베이스 테이블은 실제 테이블이거나 다른 뷰일 수 있다.

4. 테이블과 같이 뷰에 대한 질의, 수정, 삽입, 삭제가 가능하며 제한들도 부과할 수 있다.

5. 뷰에 가해지는 모든 작업은 실질적으로 그 뷰의 기본 테이블에 반영된다.

다음은 뷰를 사용하는 경우이다.

l 테이블의 미리 결정된 열이나 컬럼 집합에 접근을 제한하여 부가적인 테이블 보안을 제공하고자 할 때. 예를 들면 봉급과 같은 민감한 자료는 뷰 정의에 포함하지 않고 뷰를 생성할 수 있다.
l 데이타의 복잡성을 숨기고자 할 때. 예를 들면, 단일 뷰가 여러 테이블의 컬럼이나 행을 연결시킨 "JOIN" 을 생성하는데 사용될 수 있다. 그러나 뷰는 자료를 여러 테이블에서 가져왔다는 것을 숨긴다.
l 사용자 명령을 단순화시키고자 할 때. 예를 들면, 뷰는 사용자가 상호 연관된 부질의어 (Correlated Sub-query)를 모르고도 여러 테이블에서 데이타를 선택할 수 있게 한다.
l 기본 테이블의 데이타를 다른 측면에서 보고자 할 때. 예를 들면, 뷰는 자신이 기반으로 하는 테이블에 영향을 미치지 않고 컬럼의 이름을 변경할 수 있는 수단을 제공한다.
l 복잡한 질의를 저장하고자 할 때. 예를 들면, 어떤 질의는 테이블 정보에 대해 복잡한 계산들을 수행하는데 이것을 뷰로 저장하면 뷰가 질의될 때만 계산이 수행한다.



일련번호 (SEQUENCES)
일련번호는 테이블의 숫자 컬럼에 대해 유일한 연속번호를 생성할 때 사용된다.

일련번호는 단일 혹은 여러 테이블의 열에 유일한 숫자 값을 자동으로 생성
시킴으로써 다중 사용자 시스템에서 데이타 항목을 단순화 시킨다.

3. 예를 들면, 고용자 테이블에 두 사용자가 동시에 고용자 열를 삽입하려 하는 상황에서, 유일한 고용자 번호를 생성하기 위해 일련번호를 사용하면 어떤 사용자도 다른 사용자가 다음 고용자 번호를 삽입하기 위해 기다리지 않게 된다. 일련번호는 각 사용자에게 정확한 값을 생성해 준다.

4. 일련번호는 테이블들에 독립적으로 적용됩니다. 그래서 똑 같은 일련번호가 하나 혹은 여러 테이블에 적용될 수 있다. 생성 후에 일련번호는 다양한 사용자에 의해 접근 가능하며, 필요에 따라 실질적인 일련번호를 생성한다.

인덱스, 클러스터, 해쉬 클러스터

인데스, 클러스터, 해쉬 클러스터는 테이블과 연관된 선택적 구조입니다. 이것들은 데이타 검색의 성능을 증가시키기 위해 생성됩니다.


인덱스

1. 인덱스는 데이타 검색의 성능을 증가시키기 위해 생성된다.

2. 오라클 인덱스는 데이타의 보다 빠른 접근 경로를 제공한다. 요구들을 처리할 때 오라클 RDBMS는 요구된 행을 가장 효과적으로 찾기 위해 몇개 혹은 모든 가용한 인덱스를 사용한다. 인덱스는 애플리케이션이 어떤 범위의 행들를 검색하기 위해 테이블에 질의할 때 유용한다.

3. 인덱스는 하나 이상의 컬럼에 대해 생성됩니다.

4. 일단 생성된면 인덱스는 오라클 RDBMS에 의해 자동으로 유지되며 사용한다. 테이블의 변화는 사용자에게는 투명하게 모든 연관된 인덱스에 자동으로 적용된다.

5. 인덱스는 논리적으로, 혹은 물리적으로 데이타로 부터 독립된다.

6. 인덱스는 언제든지 기본 테이블이나 다른 인덱스에 아무 영향없이 제거되거나 생성될 수 있다. 인덱스가 삭제되어도 모든 애플리케이션은 기능을 계속 유지안다. 그러나 이전에 인덱스가 있었던 경우보다 데이타에 대한 검색이 진다.

7. 인덱스는 테이블 행의 일부분을 리턴하는 연산에 대해서 보다 빠른 데이타 접근을 제공합니다.

8. 오라클은 한 테이블에 생성할 수 있는 인덱스를 제한하지 않는다.

9. 그러나 사용자는 어떤 컬럼이 인덱스 되어야 하는지를 결정하기 위해 다음 규칙을 사용해야 한다.

[Rule of thumb] : 질의 결과가 테이블 전체의 10 혹은 15 퍼센트 이하인 SQL
문은 인덱스이 사용될 때 더 빠르게 수행된다.

유일한 인덱스를 생성하기 위해서는 테이블에 중복된 레코드가 없어야
한다.

클러스터
클러스터는 테이블 데이타를 저장하는 선택적인 방법이다. 클러스터는 공통 컬럼을 공유하고 종종 함께 사용되기 때문에 물리적으로 함께 저장되는 하나 이상의 테이블들의 그룹이다.

2. 서로 관계된 열들이 함께 저장되기 때문에 디스크 접근 시간이 개선되고 저장 장소가 절약된다.

3. 한 클러스터 내에 있는 연관된 컬럼을 "클러스터 키" 라고 부른다. 클러스 키에는 클러스터된 레코드들이 최소의 I/O 를 사용하여 검색될 수 있도록 인덱스가 부여된다.

4. 여러 테이블의 클러스터 키가 한번만 저장되기 때문에 클러스터는 일련의 테이블들을 개별적으로 저장할 때 보다 효과적으로 저장할 수 있다.

5. 클러스터는 데이타 분산에 의존하는 검색이나 클러스터된 데이타에 컬럼해지는 어떤 SQL 연산의 성능도 향상시킬 수 있다 특히 JOIN 에 사용된 클러스터된 테이블은 조인되는 테이블에 공통되는 레코드들이 동일한 I/O 로 인출되기 때문에 매우 유익하다.

6. 인덱스와 마찬가지로 클러스터의 사용이 애플리케이션 설계에 영향을 주지 않는다. 테이블이 클러스터되었는 지는 사용자나 애플리케이션에 투명하다. 클러스터 된 테이블의 데이타는 클러스터 되지 않은 테이블과 동일하게 접근할 수 있다.




해쉬 클러스터

1. 해쉬 클러스터는 정상의 인덱스를 갖는 클러스터와 유사하게 테이블 데이타를 연관지어 묶는다.

2. 그러나, 레코드는 클러스터 키에 해쉬 함수를 적용한 결과에 기반을 둔 해쉬 클러스터에 저장된다. 동일한 해쉬 키값을 갖는 레코드들은 디스크에 함께 저장된다

3. 테이블이 주로 동등 비교를 사용하여 질의될 때, 인텍스 클러스터나 인덱스된 테이블 보다는 해쉬 클러스터를 선택하는 것이 좋다. 위와 같은 질의에서는 특정한 클러스터 키값이 해쉬된다.

그러므로 해쉬 함수에서 리턴된 값이 바로 선택하고자 하는 레코드들이 저장된 디스크 영역을 가리키게 된다.




























데이타 블럭, 엑스텐트, 세그먼트
오라클 RDBMS는 데이타 블럭, 엑스텐트,세그먼트를 포함하는 논리적 저장구조를 통해 디스크 공간 사용에 대해 구조적인 조작을 가능하게 한다.

데이타 블럭
데이타 블럭은 가장 미세한 수준의 결정구조로써, 오라클 데이타베이스의 데이타는 데이타 블럭에 저장된다. 데이타 블럭은 물리적인 디스크 공간의 특정 바이트열 이며, 하나의 데이타 블럭 크기는 데이타베이스가 생성될 때 각각의 데이타베이스에 대해 지정되는데 보통 2048 바이트로 정의된다.

데이타 블럭의 내부 구조는 아래와 같다



익스텐트 (Extent)
논리적인 데이타베이스 공간을 엑스텐트 라고 한다. 엑스텐트는 연속된 데이타 블럭의 일정한 갯수이고, 할당의 단위이며, 특정 형태의 정보저장을 위해 사용된다.



세그먼트
엑스텐트 상위의 논리적인 데이타베이스 저장 수준을 세그먼트라고 하며, 하나의 세그먼트는 특정 논리적 구조에 할당된 엑스텐트들로 구성되며, 다음과 같은 여러 형태의 세그먼트들이 있다.

1. 데이타 세그먼트
각각의 클러스터 되지 않은 테이블은 하나의 데이타 세그먼트를 갖습니다. 모든 테이블의 데이타는 자기 데이타 세그먼트의 엑스텐트 내에 저장된다. 각 클러스터는 하나의 데이타 세그먼트를 갖는다. 클러스터 내의 모든 테이블 데이타는 클러스터의 데이타 세그먼트내에 저장된다.

2. 인덱스 세그먼트
각 인덱스는 자신의 모든 데이타를 저장하고 있는 하나의 인덱스 세그먼트를 갖는다.

3. 롤백(Rollback) 세그먼트
데이타베이스 관리자는 "취소" 정보를 일시적으로 저장하는 데이타베이스를 위해 하나 이상의 롤백 세그먼트를 생성 시키는데, 여기의 정보는 아래 작업을 위해 사용된다.
l 일관성 있는 읽기를 위한 데이타베이스 정보 생성 (Before Image 저장)
l 데이타베이스 복구

4. 임시 세그먼트(TEMP)
임시 세그먼트는 SQL 문장의 완전한 수행을 위해 임시 작업 공간이 필요할 때 오라클 RDBMS에 의해 생성된다. 관련된 SQL 처리가 끝나면 임시 세그먼트 엑스텐트는 다음 사용을 위해 반환된다.


물리적 구조
여기서는 데이타 파일, 리두로그 파일 (Redo Log File), 콘트롤 파일를 포함한 오라클 데이타베이스의 물리적인 구조이다

데이타 파일
1. 모든 오라클 데이타베이스는 O/S File 로 작성된 하나 이상의 데이타 파일을 갖는다.
한 데이타베이스의 데이타 파일들은 데이타베이스의 모든 데이타를 포함한다
2. 테이블과 인덱스 같은 논리적인 데이타 구조는 데이타베이스에 할당된 물리적인
데이타 파일 안에 저장된다.



3. 다음은 데이타 파일의 특징이 있다.
l 하나의 데이타 파일은 하나의 데이타베이스에만 연관된다.
l 일단 생성되면, 데이타 파일은 크기를 변경할 수 없다.
l 하나 이상의 데이타 파일이 테이블스페이스 (Tablespace) 라고 하는 논리적 단위의 데이타베이스 저장 장소를 형성된다.


리두로그 파일
모든 오라클 데이타베이스는 하나 이상의 리두로그 파일 세트을 갖는다. 리두로그의 가장 중요한 기능은 모든 데이타베이스 변경 정보를 기록하는 일이다. 모든 데이타베이스의 변경 사항은 리두로그에 저장된다

만약 수정된 내용을 데이타 파일에 반영하는데 실패하더라도, 변경사항은
리두로그에서 얻을 수 있기 때문에, 작업내용은 결코 유실되지 않는다.
3. 리두로그 파일은 데이타베이스를 장애로 부터 보호하기 위해 필수적이다.

리두로그가 포함된 장애로 부터 보호하기 위해, 오라클 RDBMS는 복수개의
리두로그 사용을 미러링 방식으로 허용한다. 즉 두개 이상의 리두로그 복사본을
서로 다른 디스크에 둘 수 있다.

콘트롤 파일

모든 오라클 데이타베이스는 콘트롤 파일을 갖는다.
데이타베이스의 콘트롤 파일에는 물리적인 데이타베이스의 구조가 기록되며
아래와 같은 형태의 정보를 갖는다.

l 데이타베이스 이름
l 데이타베이스의 데이타 파일과 리두로그 파일의 이름과 위치
l 데이타베이스 생성 시간 (Time Stamp)


메모리 구조
오라클 RDBMS의 메카니즘은 메모리 구조와 프로세스에 의해 수행된다. 모든 메모리 구조는 데이타베이스 시스템을 구성하는 컴퓨터의 실제 메모리 (Real Memory) 안에 구현 된다 (가상 메모리(Virtual Memory), 랜덤 엑세스 메모리라고 하기도 함).



























INSTANCE
Database에 있는 Data에 접근하기 위해서 Oracle은 모든 사용자가 공유 할 수 있는
background process를 사용한다 이에 덧붙여 database로부터 가장 최근에 실행된
QUERY에 대한 Data를 저장하는 기억 영역이 있다
background process와 storage area을 합쳐서 instance하고 한다
Memory area는 Data file에서 수행되는 I/O를 줄임으로써 Database의 성능을 향상
시킨다
두개 이상의 Instance가 단일의 Database에 접근하는 것이 가능하다 ( Oracle Parallel
server)
instance의 크기와 구성을 결정하는 parameter는 initSID.ora 라고 하는 file에 저장된다








SGA (System Global Area)
SGA (System Global Area)는 오라클 RDBMS에 의해 할당된 메모리 버퍼들의 집합이다. 하나의 SGA 와 오라클 background 프로세스들이 오라클 데이타베이스 인스턴스를 구성한다.

SGA 는 한 인스턴스가 시작될 때 할당되고, 종료될 때 반납된다. 그러므로
시작된 각 인스턴스는 자신의 SGA 를 갖는다.

현재 데이타베이스에 연결된 사용자들은 SGA 를 공유한다.

최적의 성능을 위해 전체 SGA 는 메모리에 가능한 많은 데이타를 저장하여 디스크 입출력이 최소화 되도록 충분히 커야 한다. SGA 내에 보관된 정보는 데이타베이스 버퍼, 리두로그 버퍼, 공유 SQL 풀을 포함하는 메모리 구조의 여러 유형에 따라 분류된다.


데이타베이스 버퍼
SGA 의 데이타베이스 버퍼는 가장 최근에 사용된 데이타 블럭을 저장한다.
이 버퍼는 아직까지 디스크에 완전히 쓰여지지 않는 수정된 데이타를 보유할 수도 있다. LRU 알고리즘에 의하여 가장 오래전에 사용된 것은 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이타를 저장하므로써, 디스크 입출력이 줄어 들고, 따라서 데이타베이스 시스템의 성능은 증가 된다.

인스턴스와 SGA 가 생성될때, 인스턴스가 시작시에 명시된 고정된 수의 데이타베이스 버퍼들이 만들어 진다. 이 버퍼들은 인스턴스가 남아 있는 한 계속 존재한다.


리두로그 버퍼
SGA 의 리두로그 버퍼는 데이타베이스에 가해진 변화를 기록하는 변경 항목들를 저장한다. 리두로그 버퍼에 저장된 리두 항목들은 데이타베이스 복구에 사용되는 온라인 리두로그 파일에 저장된다.

데이타베이스 버퍼 처럼 리두로그 버퍼도 처음 인스턴스 시작시에 생성되어 인스턴스가 남아 있는 동안은 그 수량의 변화는 없다.


공유 SQL 풀
공유 SQL 풀은 공유 SQL 영역과 같은 공유 메모리 구조를 포함하는 SGA 에
있는 한 구역이다
공유 SQL 구역은 하나의 데이타베이스에 행해지는 모든 SQL 문을 처리하기 ]
위하여 사용된다
공유 SQL 구역에는 문장을 실행하기 위해 그 문장과 관련된 실행 계획과 구문
분석 정보가 들어 있다.
하나의 공유 SQL 영역은 다수의 애플리케이션에 의해 사용되므로 보다 많은
공유메모리를 다른 용도로 사용될 수 있게 된다.

PGA (Program Global Area)

PGA 는 서버 프로세스를 위한 데이타와 콘트롤 정보를 포함하는 일종의 메모리
버퍼이다

PGA는 서버 프로세스가 시작했을 때 오라클 RDBMS에 의해 생성되며, PGA 에
있는 정보는 멀티쓰레드 서버와 단독 서버 구성 등 오라클 구성에 따라 결정된다


ORACLE 프로세스
오라클 데이타베이스 시스템은 사용자 및 RDBMS 라는 두 형태의 프로세스가 있다.

사용자 프로세스
사용자 프로세스 (Client Process)는 Pro*C 와 같은 애플리케이션 프로그램
또는 SQL*DBA 와 같은 ORACLE 툴의 S/W 코드를 실행하기 위하여 생성되고
유지 한다.
2. 사용자 프로세스는 프로그램 인터페이스를 통하여 서버 프로세스와 통신한다.

서버 프로세스
RDBMS는 연결된 사용자 프로세스들의 요구를 처리하기 위해 서버 프로세스를 생성한다.

2. 서버 프로세스는 사용자 프로세스로 부터 통신을 통해 요구를 받고, RDBMS
와 상호작업함으로써 이를 처리한다.

SGA 의 데이타베이스 버퍼에 존재하지 않는 데이타 조회를 원한다면, 연결된
서버 프로세스는 데이타 파일로 부터 SGA 로 해당 데이타 블럭을 읽어 들인다.

오라클은 서버 프로세스당 사용자 프로세스의 수를 다양하게 구성할 수 있도록
멀티-쓰레드 기능을 제공하고 한다.

멀티-쓰레드 서버 (Multi-Thread Server) 구성 에서는 한 서버가 여러개의 사용자
프로세스 요구를 처리한다. 서버의 수는 최소화되고 사용가능한 시스템자원의
효용은 극대화 한다.





BACK GROUND PROCESS
오라클 RDBMS는 각 데이타베이스 인스턴스에 대해 일단의 후방 프로세스 생성
.
이 background process는 각각의 사용자 프로세스 마다 오라클 프로그램이 수행해 주어야 되는 기능들을 확실하게 책임 수행함으로써 성능을 향상시킨다.

background process 비동기식으로 데이타베이스 읽기/쓰기를 수행하며, 다른
프로세스들을 감시한다. 이런 방법은 증가된 병렬성을 제공하여 데이타베이스
성능과 신뢰성을 향상시킨다.

background process 와 SGA 가 오라클 인스턴스를 구성한다
오라클 인스턴스는 다음과 같은 background process 을 포함한다.
l DBWR, LGWR, SMON, PMON, ARCH, Dnnn, Snnn
l CKPT, RECO, LCKn 등은 옵션 사용시 추가됨


Database Writer (DBWR)
DBWR 는 데이타베이스 버퍼 캐쉬로 부터 데이타 파일로 수정된 블럭를 쓴다

오라클의 로깅 방법 때문에 트랜잭션이 완료되었을 때 블럭들을 디스크에 쓸
필요가 없도록 DBWR 의 수행 방법은 최적화되어 있다.

보통 데이타베이스 버퍼의 빈공간이 거의 없는 상태에서 SGA 로 데이타를
읽어들일 필요가 있을 때 디스크 쓰기가 행해집니다. 최근에 사용되지 않은
데이타 블럭부터 디스크에 쓰여지는 LRU 알고리즘을 사용합니다.


Log Writer (LGWR)
LGWR 은 리두로그 항목들을 디스크에 쓴다

리두로그 데이타는 SGA 의 리두로그 버퍼에 생겨나며, 트랜잭션이 완료되었을
때 LGWR이 온라인 리두로그 파일에 쓴다.

Checkpoint (CKPT)
일정 간격으로 SGA 의 모든 수정된 데이타베이스 버퍼는 DBWR 에 의해 데이타 파일에 쓰여지는데 이것을 검사점 (Checkpoint)이라 한다

검사점 프로세스는 검사점 실시 시점에서 DBWR 에 신호를 보내고 데이타베이스의 모든 데이타 파일과 제어 파일을 수정하여 최근의 검사점을 기록한다.

CKPT는 선택적이며, 선택하지 않을 경우 LGWR 이 대신하여 수행한다.

System Monitor(SMON)
SMON 은 인스턴스 시작시와 다중 인스턴스 시스템에서 장애가 발생한 인스턴스 복구시에 실행된다
또 SMON 은 더 이상 사용되지 않는 세그먼트를 정리하고 파일 읽기 및 오프라인 에러에 의해 생기는 인스턴스의 복구시에 완료되지 못하고 사장된 트랜잭션 들을 복구한다.


Process Monitor (PMON)
PMON 은 사용자 프로세스가 실패 했을때 프로세스 복구를 수행한다.
PMON 은 실패한 사용자 프로세스가 점유하고 있던 자원을 반납하고 캐쉬를 정리한다.

Archiver (ARCH)
ARCH 는 온라인 리두로그 파일이 꽉 찼을때 리두로그 파일이 스윗치 되면서 사용한 리두로그 파일을 아카이브 저장소로 복사한다.
아카이브 저장소는 일반적으로 다른 디스크 저장공간 이거나 테이프 장치 이다
ARCH 는 데이타베이스의 리두로그가 ARCHIVELOG 모드일때 만 수행 한다.


Recover (RECO)
RECO 는 분산 데이타베시스에서 네트워크 또는 시스템 장애로 미결정 (Pending)된 분산 트랜잭션을 해결하기 위해 사용한다.
로컬 RECO 는 정해진 시간마다 리모트 데이타베이스에 연결을 시도해 보고, 자동으로 로컬내의 미결정된 트랜잭션을 커밋하거나 롤백시킨다.


Dispatcher (Dnnn)
Dnnn 은 멀티-쓰레드 서버 구성하에서 만 수행된다
하나의 Dnnn 은 사용되는 각각의 통신 프로토콜에 대하여 생성된다.
(D000, D001, ...,Dnnn).
Dnnn 은 연결된 사용자 프로세스로 부터 사용 가능한 공유 서버를 배정하는 경로 설정(Routing) 요구를 처리하고 서버의 처리결과를 해당 사용자 프로세스에게 되돌려 준다.

Lock (LCKn)
최대 10 개의 록 프로세스가 오라클 병렬 서버가 사용될 때 인스턴스 사의의 록킹을 위해 사용된다.


데이타 타입

ORACLE에 의해 조작되는 각 문자나 변수는 하나의 데이타 타입을 가진다.
예를 들면 덧셈은 NUMBER 데이타 타입의 값에 대해서는 수행될 수 있지만 RAW 데이타 타입의 값에 대해서는 수행될 수 없다

데이타 타입은 데이타 항목이 가질 수 있는 값의 범위를 제한 할 수도 있다
예를 들어 DATE 데이타 타입은 윤년을 제외하고는 February-29 라는 값을 얻을 수 없으며 숫자 2 나 문자 'SHOE' 등을 가질 수도 없다.

데이타 타입은 CREATE TABLE, ALTER TABLE, CREATE CLUSTER 문장에서 기술된다
테이블의 각 컬럼에는 항상 데이타 타입이 지정되며 컬럼의 값은 항상 그 데이타 타입에서 정의된 값을 취합한다.

데이타타입의 혼합 (테이타 타입 변환)
일반적으로 식에 여러 데이타 타입은 혼합하여 사용할 수 없다. 그러나 ORACLE은 의미에 맞도록 데이타 타입을 자동으로 변환시켜 준다 예로써 '10'은 문자 데이타 타입임에도 불구하고 그것이 계산식에 사용되었다면 숫자 데이타 타입으로 자동 변환시켜 준다.


CHARACTER 데이타 타입

문자데이타 타입은 단어와 자유로운 형식의 텍스트를 조작하기 위해 사용된다
이러한 데이타 타입은 다른 데이타 타입 보다 덜 제한적이기 때문에 특징도 적다.
오라클은 싱글바이트와 멀티바이트 문자집합 모두를 지원한다.
문자자료를 위해 사용되는 데이타 타입으로는 CHAR 와 VARCHAR2 가 있다


CHAR

고정길이 문자열 저장
테이블 생성시 컬럼의 길이를 지정해 줄 수 있으며 그 컬럼의 모든 값들은 지정한 길이를 가지고 저장된다. 삽입시 값이 그 컬럼의 길이 보다 적으면 공백이 채워져 저장되고, 크면 오라클은 에러를 발생시킨다.
DEFAULT 길이 : 1 byte
최대길이 : 255byte


VARCHAR2

가변길이 문자열 저장
실제 입력된 데이타만 저장하므로 기억장소 절약하며 일반적으로 대부분의 문자열 저장에 사용되며 가장 많이 사용된다.
DEFAULT 길이 : 1 byte
최대길이 : 2000 byte


NUMBER 데이타 타입

정수, 실수와 같은 숫자형 자료를 저장
정확도 : 38 자리
범위 : 1.0 * 10E-130 ~ 999 * 10E125
형식 : 컬럼이름 NUMBER (정확도[,스케일)]

스케일과 정확도의 사용
NUMBER 필드를 기술한 때에는 최대 자리수와 소수점의 위치를 기술하는 것이 좋다
이것은 입력자료에 대한 별도의 무결성 체크를 제공한다. 값이 최대 정확도를 초과하면 에러가 발생하고, 값이 최대 스케일을 초과하면 반올림된다.

음의 스케일
스케일이 음수라면 그것은 반올림할 자리를 의미한다.
예로써 (10,-2)는 100 자리로 반올림하여 저장한다.

정확도 보다 큰 스케일
잘 사용되지 않지만 가능하다.
이경우 정확도는 소수점 뒤에 나오는 최대 자리수가 된다.
예를 들어 (4,5)인 경우 소수점 뒤에 적어도 하나의 0 이 나와야 한다.

지수형 표기 : 123456 1.23456E+5 , 0.0987 9.87E-2

부동 소수점 (Floating Point Numbers)
오라클은 소수점이 어느곳에도 있을 수 있는 부동소수점 숫자의 기술을 허용한다.
오라클은 ANSI FLOAT 데이타 타입을 가지고 부동소수점의 개념을 지원한다
126 자리의 2 진수로 저장되는데 이는 37 자리의 10 진수와 동일한 정확도 이다.
FLOAT에서 소수점이 유동적이기 때문에 스케일은 의미가 없다.


NUMBER의 다른 형태
다른 데이타베이스 시스템과의 호환을 위하여 오라클은 숫자형 데이타 타입의 다양한 형식인 DECIMAL, INTEGER, REAL, DOUBLE PRECISION을 지원한다
수치자료의 모든 형식은 오라클 수치 형식으로 동일하게 저장된다

INTEGER
전체적인 합계를 기술하는데 사용되며 예로써 데이타베이스의 크기를 나타낼 수 있다. 최대 38자리를 저장할 수 있다.
형식 : [+|-] digit[digit...] [K/M]
유의사항 : K는 1024, M은 1048547로 곱해진다K와 M은 INTEGER 수식에서 어디에서든 사용할 수 있다

NUMBER
숫자 상수의 표기에 사용되며 최대 38 자리의 정확도로 저장된다
형식 : digit[digit...].digit[digit...] [exponent][multiplier]
키워드와 파라메타 : exponent ~ (e|E)[+|-]digit[digit]
multiplier ~ K 또는 M
유의사항 : 정수나 실수를 표현할 수 있다 exponent는 multiplier와 함께 쓰일 수 없다. multipler는 정수 표현에만 사용할 수 있다.


DATE 데이타 타입

날짜와 시간에 대한 정보를 저장
저장되는 정보는 세기.년.월.일.시.분.초 이며 7 byte를 차지한다
시간 자료는 24시간 형식으로 저장된다
DATE 필드에 대한 디폴트 날짜 : 그날의 A.M. 12:00:00
SYSDATE 함수는 현상태의 날짜와 시간을 구해준다
표준 오라클 DATE 형식은 DD-Mon-YY 이나 한글화로 인해 YY/MM/DD 등으로 표준 형식을 변경할 수 있다
TO_DATE 함수로 표시 형식을 바꿀 수 있으며 DATE 항목에 시간을 입력하려면 TO_DATE 함수를 이용해야 한다
예) TO DATE('13-NOV-85 10:56 A.M.', 'DD-Mon-YY HH:MI A.M.')
SQL의 TRUNC 함수로 시간 표시 부분을 무시하고 날짜들을 비교하게 할 수 있다

DATE 계산
DATE 데이타 타입의 자료는 곱셈이나 나눗셈 연산은 할 수 없지만 덧셈과 나눗셈은 가능하다. 예를 들면 SYSDATTE+1은 내일이며 SYSDATE-7은 한주전이다 또한 EMP 테이블의 HIREDATE에서 SYSDATE를 빼면 입사후 지금까지의 날수를 얻을 수 있다.
오라클은 DATE 데이타 타입의 연산을 위해 다양한 함수를 제공한다.
예) ADD MONTHS : DATE 데이터 타입자료의 월 부분을 더하거나 뺄 수 있다.
MONTH BETWEEN : 두개의 날짜 사이의 달수를 계산한다.

문자열
함수의 결과값은 분수가 발생될 수 있으며 1.5 일은 36시간을 의미하는 것이다.

율리우스 력(Julian Dates)
오라클은 BC. 4712년 1월 1일을 기준으로 계산하는 율리우스력을 지원한다.
예) SELECT TO_CHAR(TO_DATE('-1-JAN-89'),'J') From dual;


LONG 데이타 타입

가변적인 길이의 문자열을 2 GigaBytes 까지 저장한다.
긴 텍스트 문지열을 저장하기 위해 사용된다. LONG 컬럼은 뷰 정의에 대한 텍스트를 저장하기 위해 데이타 사전안에서 사용되고 있다.
SELECT 리스트, UPDATE 문장의 SET 절, INSERT 문장의 VALUE 절 등에서 LONG 컬럼을 사용할 수 있다.
한 테이블에서 하나의 LONG 컬럼만이 허용된다. LONG 컬럼은 사용상 부가적으로 약간의 제한이 있다.


RAW 와 LOGN RAW 데이타 타입

2 진 자료나 2 진 스트링에 대해 사용되며 문자열, 부동 소수점 자료, 그래픽 이미지, 디지타이즈 음향 등을 저장한다.
가변적인 길이의 2 진 데이타를 RAW는 2000 byte 까지, LONG RAW는 2 GigaByte 까지 저장한다.
이 데이타타입을 표시할 때는 16 진 문자로써 표시한다.


ROWID

ROWID는 데이타베이스의 모든행과 연관된 의사 컬럼으로 그 행의 주소이다. 그 주소는 예약어인 ROWID로 질의하여 16진수 형태로 나타낼 수 있다. ROWID는 3 부분을 리턴하며 이 정보를 이용하여 각 행의 저장 위치 결정에 필요한 모든 것을 알 수 있으며 그 각각은 아래와 같다.

1 번째 부분 : 데이타베이스 파일 안의 블럭 위치
2 번째 부분 : 블럭안의 행 위치 (첫행은 0)
3 번째 부분 : 데이타베이스를 구성하는 파일 번호 (최초 파일은 1)

l INDEX 등에서 ROWID 값을 저장하기 위해서는 6 byes가 필요하다.


NULL Value

한 행의 특정컬럼의 값이 없으면 그 값은 NULL이라고 한다
테이블 생성시 NOT NULL로 정의되지 않으면 어떤 데이타 타입의 컬럼도 NULL 값을 가질 수 있다. NULL 값은

1) 실제 값을 알 수 없거나 의미가 없을때 적당하다
Zero(0)와 같지 않다.
3) 수식에 포함되어 있으면 결과가 무조건 NULL로 된다.
(예) NULL 10 = NULL

NVL 함수를 사용하여 NULL 값에 대한 처리를 할 수 있다.
(예) NVL(COMM,0) : COMM의 값이 NULL이면 0 을 리턴 한다.

대부분의 그룹 함수는 NULL 값을 무시하여 에러를 발생시키지 않다.
(예) 1000,NULL,NULL,NULL,2000의 5개 값들에 대하여 평균을 구하는 함수(AVG)를 적용시키면 1500 을 되돌린다. ( (1000+2000)/2 = 1500 )

NULL값에 대해서는 2개의 비교연산 즉, IS NUL 과 IS NOT NULL 만이 가능하다.

어떤 다른 연산에 NULL값을 함께 사용한다면 그 결과는 예측할 수 없다.



데이타 타입의 변환

자동적으로 혹은 명시적으로 데이타 타입의 변환이 발생한다.
상수 (Constant)와 다른필드의 데이타 타입간의 변환이 자동적으로 이루어 지나 데이타 타입의 변환은 명시적으로 지정하는 것이 좋은데 그 이유는 다음과 같다.

1) SQL문의 이해가 쉬워진다.
2) 자동적 데이타 타입 변환은 성능에 악 영향을 미칠수 있다.
3) 향후 오라클 제품의 변경시 자동 변환 알고리즘이 바뀔 수도 있다.



코멘트  

이름 :      비밀번호 :
         자동등록방지
내용 :  
파일 :




금연

  글번호
이름
1 2 3
날짜
  216Data-Base mysql 테이블에 몇가지 필드값 처리 조회수가 1000회 이상이네요. ^0^2015-01-14
  206Data-Base mysql 4.x 5.x 설치후 설정 조회수가 1000회 이상이네요. ^0^2014-12-30
  69Data-Base mysqld_error code 조회수가 1000회 이상이네요. ^0^2017-03-22 10:45
Danielexent
  65Data-Base .RDBMS 개요 -2 조회수가 1000회 이상이네요. ^0^2002-01-12
  Data-Base .RDBMS 개요 -1 조회수가 1000회 이상이네요. ^0^2002-01-12
  62Data-Base CHAPTER 24 조회수가 1000회 이상이네요. ^0^2002-01-12
  61Data-Base CHAPTER 23 조회수가 1000회 이상이네요. ^0^2002-01-12
  60Data-Base CHAPTER 22 조회수가 1000회 이상이네요. ^0^2002-01-12
  59Data-Base CHAPTER 21 조회수가 1000회 이상이네요. ^0^2002-01-12
  58Data-Base CHAPTER 20 조회수가 1000회 이상이네요. ^0^2002-01-12
  57Data-Base CHAPTER 19 조회수가 1000회 이상이네요. ^0^2002-01-12
  56Data-Base CHAPTER 18 조회수가 1000회 이상이네요. ^0^2002-01-12
  55Data-Base CHAPTER 17 조회수가 1000회 이상이네요. ^0^2002-01-12
  54Data-Base CHAPTER 16 조회수가 1000회 이상이네요. ^0^2002-01-12
  53Data-Base CHAPTER 15 조회수가 1000회 이상이네요. ^0^2002-01-12
 
1 2 3
글쓰기    목록   다음   로그인
Since 1998-2020 Chris. BSD LICENSE