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 14707 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 14707
Database Structure
작성자
정재익(advance)
작성일
2003-06-19 12:28
조회수
12,375

테이블 스페이스/데이터 파일

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

 

(1)테이블 스페이스 생성

System TableSpace : 데이터베이스의 첫번째 TableSpace로 데이터베이스 생성시 자동으로 생성

◆ 새로운 TableSpace를 생성하는 경우 : 관련된 데이터베이스에 더 많은 디스크영역을 할당하고자 할 때 저장된 다른 데이터와는

별도로 특정 유형의 데이터를 새로운 논리적 저장구조에 저장할 때

◆ 데이터베이스 전체 크기를 늘리는 방법 : 새로운 테이블 스페이스를 생성하는 대신 기존 테이블 스페이스에 데이터파일을 추가

(2)테이블 스페이스 저장영역 설정 변경

데이터베이스 작업을 보다 융통성 있게 해 줄 목적으로 사용한다.

명령 : ALTER TABLESPACE 변경

(3)빈 영역의 병합

Tablespace Segment 영역은 Extent(Block의 모임)에 의해 관리 Tablespace Segment 영역에 새로운 Extent를 할당

하는 경우 가장 크기가 유사한 영역을 사용하므로,큰 빈 영역은 작은 영역으로 나누어지고, 작은 빈 영역은 큰 영역으로 병합되어짐

SMON(시스템 모니터) 프로세스가 Tablespace의 작은 빈 Extent를 병합

(4)테이블 스페이스 정보보기

Tablespace 병합가능한 Extent영역에 대한 정보는 DBA_FREE_SPACE_COALESCED 뷰를사용

(5)테이블 스페이스 저장영역 매개변수 지정

Tablespace 생성시 Tablespace저장 영역, 여러가지 매개변수를 지정 가능 지정하지 않으면 기본 저장 영역 매개변수를 사용

(6)사용자에게 테이블 스페이스 할당량 지정

사용자에게 Tablespace에 대한 저장공간할당을 가능 CREATE USER, ALTER USER

명령에서 QUOTA 절 (예)CREATE USER hanjp IDENTIFIED BY hanjp DEFAULT TABLESPACE user_data QUOTA 10M ON temp QUOTA 5M ON user_data;

(7)테이브 스페이스 삭제

테이블 스페이스가 더 이상 필요 없을 때 테이블 스페이스와 내용을 삭제한다. 테이블 스페이스를 오라클에서 삭제한 후 OS명령어

(Del, rm)로 삭제된 테이블 스페이스의 데이터파일을 삭제해야 함

[옵션] : INCLUDE CONTENTS : Tablespace내에 데이타가 존재하는 경우

CASCADE CONSTRAINTS : Primary Key, Forein Key 등의 Constraint 조건을 연속으로 삭제하는 경우

(8)데이터파일의 수와 크기 설정

한 데이터베이스의 시스템 테이블 스페이스에는 적어도 한 개의 데이터파일이 있어야 한다.

첫 번째 데이터파일은 데이터 딕셔너리와 롤백세그먼트를 포함하기 위해 최소한 2M이상이어야 한다.

(9)적절한 데이터파일의 위치

테이블 스페이스의 위치는 테이블 스페이스를 구성하는 데이터파일의 물리적위치에 의해 결정된다.

만약 예를 들어 여러 개의 디스크 드라이브를 사용하여 데이터베이스를 저장한다면, 한 디스크 드라이브의 테이블 스페이스에는

테이블 데이터를 그리고, 다른 디스크 드라이브의 테이블 스페이스에는 인덱스 데이터를 저장하는 것이 유리할 것이다.

이러한 방법으로 사용자가 테이블 정보를 질의하면, 두 디스크 드라이브는 동시에 동작하여,동시에 인덱스 데이터와 테이블을 검색할 수 있다.

데이터파일은 데이터베이스의 리두 로그 파일이 저장되는 동일한 디스크 드라이브에 저장되어서는 안 된다

(만약 디스크에 문제가 발생할 경우 그 파일은 데이터복구 절차에서 사용할 수 없기 때문이다.)

(10) 데이터파일 내에 데이터블록의 검증

데이터블록을 검증하기 위해서 체크섬을 사용하는데

DB_BLOCK_CHECKSUM의 초기값은 FALSE 이고 체크섬을 사용할 경우 오버헤드가 발생하는 문제가 있다.

 

 

Data Blocks and Segment and Extends

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

 

 

오라클은 데이터베이스에 있는 모든 데이터에 대해 영역을 할당한다.

논리적인 데이터베이스의 할당단위 : 데이터블록, 세그먼트, 익스텐드

 

(1)데이터블록

오라클이 데이터를 저장하는 가장 작은 단위이다.

SIZE는 초기 파라미터인 DB_BLOCK_SIZE에 의해 데이터베이스 생성시에 결정됨

오라클의 데이터블록의 사이즈는 보통 2K에서 4K이다.

영역 관리 Parameter인 PCTFREE와 PCTUSED를 사용하여 Data Block에 행을 INSERT 혹은 UPDATE에

필요한 Free space의 사용을 제어할 수있다.

PCTFREE

블록에 백분율을 설정하여 블록에 포함된 행의 UPDATE에 필요한 영역을 예약

블록이 PCTFREE에 도달하기 전까지 새로운 행을 INSERT

PCTUSED

PCTFREE에 의해 지정된 대로 Block이 차면 PCTUSED 값보다 작아져야 새로운 행 삽입 가능

PCTUSED값보다 작아지기 전까지는FREE SPACE UPDATE만을 위해서만 사용

Oracle에서 PCTFREE와 PCTUSED의 방법

삽입 가능 영역 = 전체 블록 크기 - ( 블록 오버헤드 + PCTFREE )

Data와 Index Segment에 대해 하나 이상의 Free List를 유지 관리

Free List는 PCTFREE보다는 큰 Free space를 가지는 Data Block의 목록

 

◆ Insert 명령문 처리과정

1.Free List를 조사 첫번째 빈 영역을 찾는다.

2.해당 Block이 Insert 명령을 수용 유무 검사. -> 명령문 처리

3.수용하지 못하면 Block 사용량이 PCTUSED보다 많은지 검사

4.이상이면 Free List에서 제거

◆ DELETE,UPDATE 명령문 처리과정

1.DELETE, UPDATE 실행 후 블록 사용량이 PCTUSED보다 적은지 검사

2.적다면 해당 Block은 Free List의 시작이 되어 다음에 첫번째로 사용한다.

 

(2)EXTENT

 

특정유형의 정보를 저장하기 위해 할당된 몇 개의 연속적인 데이터블록

세그먼트는 하나 이상의 EXTENT로 구성되어 있다.

◆ 세그먼트에 EXTENS할당 시기

1.각 세그먼트는 데이터를 보유하기 위해 하나 이상의 EXTENT를 가지고 생성

2.처음의 Extent가 차면 새로운 데이터를 INSERT하기 위해 Oracle은 자동적으로 새로운 Extent를 할당

3.새로운 Extent는 이전의 Extent의 크기와 같거나 더 크다.

4.Database의 각 Segment는 유지 관리를 위해 해당 Segment의 특성을 설명하는 Segment Header Block과

해당 Segment에 있는 Extent의 Directory를 가진다.

 

◆ 세그먼트에 EXTENT할당 방법

Oracle은 Tablespace의 Free Space에서 필요한 Extent 크기 이상이며 첫 번째로 사용할 수 있는 Data Block을 찾는다.

1.Extent 크기와 일치하는 연속적인 Data Block을 검색한 다음 내부 단편화를 줄이도록 하나의 블록을 추가한다.

2.정확히 일치하는 Data Block을 찾지 못하면 Oracle은 필요한 양과 같거나 큰 연속적인 Data Block을 검색한다.

3.큰 연속적인 데이터 블록 집합을 찾지 못할 경우 해당 테이블 스페이스에 있는 모든 인접한 빈 데이터 블록을 병합하여 보다

큰 연속적인 데이터 블록 집합을 형성하게 한다(SMON). 다시 1.1, 1.2를 반복, 반복 후에도 없으면 오류를 돌려준다.

필요한 Free Space를 찾으면 추가 Extent의 크기만큼 Free Space를 할당

새로운 Extent가 할당된 사실과 할당 영역이 더 이상 Free Space가 아님을 표시하기 위해 Segment Header와 Data Dictionary를 갱신

 

(3)세그먼트

 

테이블 스페이스의 특정 논리적 저장영역 구조에 대한 모든 데이터를 포함하는 EXTENT집합

 

◆ 세그먼트의 종류는

1.데이터 세그먼트 : 클러스터화 되지않은 테이블은 자신의 모든 데이터를 저장하기 위해 단일 데이터 세그먼트를 가진다.

2.인덱스 세그먼트 : 자신의 모든 데이터를 저장하기 위해 단일 인덱스 세그먼트를 가짐

3.롤백 세그먼트 : 각 데이터베이스에는 하나 이상의 롤백 세그먼트가 존재한다.

롤백 세그먼트는 어떤 트랜잭션이 롤백되어야 할 때 트랜잭션의 작동을 기록하는 데이터베이스의 한 부분이다.

롤백 세그먼트는 복구하는데 사용한다.

4.Temporary 세그먼트 : SQL명령문 처리 중간단계에서 필요한 임시 작업영역을 위한 세그먼트.

오라클은 사용자 세션동안 필요한 만큼의 Temporary 세그먼트를 할당하며 명령문이 완료되면 Temporary를 삭제한다.

 

스키마와 오브젝트

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

 

(1)테이블 스페이스 생성

System TableSpace : 데이터베이스의 첫번째 TableSpace로 데이터베이스 생성시 자동으로 생성

◆ 새로운 TableSpace를 생성하는 경우 : 관련된 데이터베이스에 더 많은 디스크영역을 할당하고자 할 때 저장된 다른 데이터와는

별도로 특정 유형의 데이터를 새로운 논리적 저장구조에 저장할 때

◆ 데이터베이스 전체 크기를 늘리는 방법 : 새로운 테이블 스페이스를 생성하는 대신 기존 테이블 스페이스에 데이터파일을 추가

(2)테이블 스페이스 저장영역 설정 변경

데이터베이스 작업을 보다 융통성 있게 해 줄 목적으로 사용한다.

명령 : ALTER TABLESPACE 변경

(3)빈 영역의 병합

Tablespace Segment 영역은 Extent(Block의 모임)에 의해 관리 Tablespace Segment 영역에 새로운 Extent를 할당

하는 경우 가장 크기가 유사한 영역을 사용하므로,큰 빈 영역은 작은 영역으로 나누어지고, 작은 빈 영역은 큰 영역으로 병합되어짐

SMON(시스템 모니터) 프로세스가 Tablespace의 작은 빈 Extent를 병합

(4)테이블 스페이스 정보보기

Tablespace 병합가능한 Extent영역에 대한 정보는 DBA_FREE_SPACE_COALESCED 뷰를사용

(5)테이블 스페이스 저장영역 매개변수 지정

Tablespace 생성시 Tablespace저장 영역, 여러가지 매개변수를 지정 가능 지정하지 않으면 기본 저장 영역 매개변수를 사용

(6)사용자에게 테이블 스페이스 할당량 지정

사용자에게 Tablespace에 대한 저장공간할당을 가능 CREATE USER, ALTER USER

명령에서 QUOTA 절 (예)CREATE USER hanjp IDENTIFIED BY hanjp DEFAULT TABLESPACE user_data QUOTA 10M ON temp QUOTA 5M ON user_data;

(7)테이브 스페이스 삭제

테이블 스페이스가 더 이상 필요 없을 때 테이블 스페이스와 내용을 삭제한다. 테이블 스페이스를 오라클에서 삭제한 후 OS명령어

(Del, rm)로 삭제된 테이블 스페이스의 데이터파일을 삭제해야 함

[옵션] : INCLUDE CONTENTS : Tablespace내에 데이타가 존재하는 경우

CASCADE CONSTRAINTS : Primary Key, Forein Key 등의 Constraint 조건을 연속으로 삭제하는 경우

(8)데이터파일의 수와 크기 설정

한 데이터베이스의 시스템 테이블 스페이스에는 적어도 한 개의 데이터파일이 있어야 한다.

첫 번째 데이터파일은 데이터 딕셔너리와 롤백세그먼트를 포함하기 위해 최소한 2M이상이어야 한다.

(9)적절한 데이터파일의 위치

테이블 스페이스의 위치는 테이블 스페이스를 구성하는 데이터파일의 물리적위치에 의해 결정된다.

만약 예를 들어 여러 개의 디스크 드라이브를 사용하여 데이터베이스를 저장한다면, 한 디스크 드라이브의 테이블 스페이스에는

테이블 데이터를 그리고, 다른 디스크 드라이브의 테이블 스페이스에는 인덱스 데이터를 저장하는 것이 유리할 것이다.

이러한 방법으로 사용자가 테이블 정보를 질의하면, 두 디스크 드라이브는 동시에 동작하여,동시에 인덱스 데이터와 테이블을 검색할 수 있다.

데이터파일은 데이터베이스의 리두 로그 파일이 저장되는 동일한 디스크 드라이브에 저장되어서는 안 된다

(만약 디스크에 문제가 발생할 경우 그 파일은 데이터복구 절차에서 사용할 수 없기 때문이다.)

(10) 데이터파일 내에 데이터블록의 검증

데이터블록을 검증하기 위해서 체크섬을 사용하는데

DB_BLOCK_CHECKSUM의 초기값은 FALSE 이고 체크섬을 사용할 경우 오버헤드가 발생하는 문제가 있다.

 

데이터 무결성

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

 

Data Integrity

데이터 무결성이란 데이터베이스 관리자나 응용 프로그램 개발자가 결정한 대로 미리 정의된 일련의 규칙에 데이터를 적용시키는 것을 말한다.

무결성 제약조건

무결성 제약 조건은 테이블의 열에 대한 규칙을 정의하는 선언적 방법

◆ 열의 Null과 관련된 규칙을 위한 NOT NULL무결성 제약 조건

◆ 고유 열 값과 관련된 규칙을 위한 UNIQUE 키 무결성 제약 조건

◆ 기본 식별 값과 관련된 규칙을 위한 PRIMARY KEY 무결성 제약 조건

◆ 참조 무결성과 관련된 규칙을 위한 FOREIGN KEY 무결성 제약 조건

-RESTRICT(참조된 데이터 갱신 또는 삭제를 제한하는 참조 무결성 규칙) 갱신과 삭제

-CASCADE(참조된 데이터가 갱신 되거나 삭제되면 모든 연관된 데이터를 따라 갱신이나 삭제) 삭제

◆복합 무결성 규칙을 위한 CHECK 무결성 제약조건

무결성 제약조건의 이점

◆무결성 제약 조건이외의 제약조건 방법

◆선언 용이성

◆중앙 집중된 규칙

◆응용 프로그램 개발 생산성의 최대화

◆즉각적인 사용자 피드백

◆뛰어난 성능

◆데이터 로드와 무결성 위반 확인에 대한 융통성

그리고 제약조건이 있는 경우에는 허용되는 작업을 알려면 오라클이 실제로 제약조건 시기를 알아야 한다.

데이터베이스 트리거

◆오라클은 데이타베이스 트리거를 사용한 비 선언적 방식으로도 무결성 규칙을 강제로 시행할 수 있음

◆ CASCADE, SET NULL, SET DEFAULT 갱신이나 삭제와 같은 참조 무결성을 사용해서 참조 무결성 규칙이 강제로 시행될 수 없는 경우

◆ 자식 테이블과 부모 테이블이 분산 테이타베이스의 서로 다른 노드에 있는 경우

◆ 무결성 제약 조건을 사용하여 정의할수 없는 복잡한 업무 규칙 강제로 시행하는 경우

 

데이터 딕셔너리

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

 

Data Dictionary

◆ 오라클 데이터베이스의 가장 중요한 부분 중 하나

◆ 연관된 데이터베이스 정보를 제공하는 읽기 전용인 테이블의 집합

 

 

Data Dictionary가 제공하는 정보는

1.오라클 사용자 이름

2.각 사용자에게 부여된 권한과 Roles

3. Schema Object 이름

4. Integrity 제약조건에 대한 정보

5.열에 대한 기본값

6. Database object들에 할당된 영역의 양과 현재 사용 중인 영역의 양

7.다양한 object에 access나 object를 update한 사용자와 같은 정보

8.오라클에 예치된 모든 object와 사용자에 대한 Label

9.기타 일반적인 데이터베이스 정보

◆ Data Dictionary는 테이블과 뷰로 구성

◆ SQL을 이용하여 액세스

◆ 읽기 전용이므로 사용자는 테이블과 뷰에 SELECT 명령문 질의만을 수행

 

Data Dictionary의 구성

Base Table과 사용자가 액세스 할 수 있는 View로 구성되어있다.

Base Table은 연관된 데이터베이스 정보를 저장하는 일련의 기본 테이블이며 이는 정규화 되어 있고

데이터가 암호형태로 저장되어 있으며 Oracle만이 쓰고 읽을 수 있고 사용자가 직접 액세스 할 수 없다.

사용자가 액세스 할 수 있는 뷰는

 

사용자를 위해 Dictionary의 Base Table에 있는 정보를 요약하고 편리하게 보여주는 View 로서.

Base Table의 정보를 사용자 이름이나 테이블 이름 같은 유용한 정보로 변환, JOIN과 WHERE 절을 사용하여 단순화한다.

Oracle은 대부분의 사용자에게 Base Table보다는 View에 대한 액세스를 허용한다

 

트랜젝션

========

 

Transaction

트랜잭션은 하나이상의 SQL명령문을 포함하는 작업의 가장 작은 논리적 단위이다.

트랜잭션에 있는 모든 SQL명령문은 항상 COMMIT나 ROLLBACK되어야 한다.

 

트랜잭션의 구동

◆ Oracle의 Transaction은 첫 번째 실행 가능한 SQL 명령문을 만나면 시작한다.

◆ 실행 가능한 SQL 명령문은 DML과 DDL 명령문을 포함하여 인스턴스에 대한 호출을 생성하는 SQL 명령문을 말한다.

◆ Transaction이 시작되면 오라클은 사용할 수 있는 Rollback Segment에 Transaction을 할당하여 새로운 Transaction을 위한 Rollback 입력 항목을 기록한다.

 

트랜잭션이 COMMIT 되기 전

◆ 오라클은 SGA의 Rollback Segment Buffer에 Rollback Record를 생성. Rollback 정보에는 Transaction의 SQL 명령문에 의해 변경된 이전 데이터 값이 들어 있음.

◆ 오라클은 SGA의 Redo Log Buffer에 Redo Log 입력 항목을 생성. 변경 내용은 Transaction이 Commit되기 전에 디스크에 기록

◆ SGA의 데이터베이스 버퍼에도 변경 작업이 일어남. 이러한 변경 내용은 Transaction이 실제로 Commit되기 전에 디스크에 기록

 

 

트랜잭션이 COMMIT 된 후

◆ 관련된 Rollback Segment에 대한 내부 Transaction Table은 Transaction이 Commit되었다는 사실을 기록하고 Transaction에 대응되는 고유한 시스템 변경 번호가 할당되며 테이블에 기록

◆ LGWR은 SGA의 Redo Log Buffer에 있는 Redo Log 입력 항목을 온라인 Redo Log File에 기록.

또한 LGWR은 Transaction의 SCN을 온라인 Redo Log File에 기록한다.

◆ 오라클은 행과 테이블에 적용되는 Lock을 해제합니다.

◆ 오라클은 Transaction을 "complete"로 표시

 

 

전체 트랜잭션을 롤백

◆ 오라클은 해당 Rollback Segment를 사용하여 Transaction에 있는 모든 SQL명령문에 의해 변경된 내용을 모두 최소

◆ 오라클은 데이터에 대한 Transaction의 모든 잠금을 해제

◆ Transaction을 종료

 

 

SavePoint로 롤백

◆오라클은 Savepoint 이후에 실행된 명령문만을 Rollback

◆지정된 Savepoint는 보존되지만 지정된 Savepoint 이후에 설정된 모든 Savepoint는 손실

◆Oracle은 Savepoint 이후에 획득한 모든 Table과 Row에 대한 Lock을 해제하지만 Savepoint 이전에 획득한 모든 Table Lock은 유지

◆Transaction은 활성화된 상태로 유지되며 계속 실행될 수 있다.

 

 

SavePoints

◆ 중간 표시자로 Transaction의 문맥 내에 선언

◆ Savepoint를 사용한 긴 Transaction을 작은 부분 구분.

◆ 긴 Transaction 내의 어떤 점에 작업을 임의로 표시.

◆ 사용자는 Transaction에서의 현 시점 이전과 Transaction 내에서 선언된 Savepoint 이후에 수행된 작업을 Rollback 할 수 있다.

◆ 복잡하고 긴 일련의 갱신 작업에서 Savepoint를 사용하면 오류가 발생했을 때 모든 명령문을 재실행 할 필요가 없다

[Top]
No.
제목
작성자
작성일
조회
16462[참고] 오라클 9I에서 XDB때문에 8080,2100 포트가 자동으로 뜨네요
문태준
2003-11-25
11528
15754[자료] RedHat 7.3 에서 Oracle 8i 설치하기 - 개정판
문태준
2003-09-30
10208
14708Database Storage
정재익
2003-06-19
14731
14707Database Structure
정재익
2003-06-19
12375
14706Database Architecture
정재익
2003-06-19
12258
14705데이터베이스 StartUp
정재익
2003-06-19
9230
13367[강좌] Oracle 9i Realse2 RAC for linux 구성
문태준
2003-01-29
12594
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다