일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- values()
- 제네릭
- LIST
- JPA
- calendar
- 벌크연산
- jQuery값전달
- fullcalendar
- Generic
- fetchjoin
- jQuery값전송
- 엔티티직접사용
- JPQL
- 페치조인
- 페이징
- 제너릭
- javaservlet
- Hibernate
- JQuery
- 대량쿼리
- springflow
- jscalendar
- namedQuery
- paging
- javascriptcalendar
- joinfetch
- 스프링데이터흐름
- 자바서블릿
- jQueryUI
- 프로젝트생성
- Today
- Total
가자공부하러!
데이터베이스(7) - 기타 실무 응용(시스템 카탈로그, 인덱스, 트랜잭션, 회복) 본문
1. 기타 실무 응용 - 시스템 카탈로그
1. 시스템 카탈로그(System Catalog)의 개념
> DBA 도구의 일종으로, DB에 저장되어 있는 모든 데이터 개체들에 대한 정의나 명세에 대한 정보가 수혹되어 있는 시스템 테이블이다.
> 데이터 사전(Data Dictionary)이라고도 한다.
> DDL(Data Definition Language)의 결과로 구성되는 기본 릴레이션, 인덱스, 뷰 등의 DB구조 및 통계 정보가 저장됨
> SC에 저장된 내용들을 메타데이터(Metadata)라고 한다.
> 사용자와 DBA시스템이 접근할 수 있다.
2. 시스템 카탈로그의 내용
> 릴레이션 관련 정보
- 릴레이션의 이름
- 릴레이션이 저장된 파일 이름과 파일 구조
- 릴레이션의 속성들에 대한 속성 이름과 타입(또는 도메인)
- 릴레이션에 대해 정의된 각 인덱스의 이름
- 릴레이션에 대해 정의된 무결성 제약 조건
> 인덱스 관련 정보
- 인덱스의 이름
- 인덱스의 구조
- 인덱스 키에 대한 정보
> 뷰 관련 정보
- 뷰의 이름
- 뷰의 정의
- 뷰의 소유자
> 통계 관련 정보
- 릴레이션 카디널리티(Cardinality) : 각 릴레이션에 저장된 레코드의 수
- 인덱스 카디널리티 : 각 인덱스에 저장된 레코드의 수
- 인덱스의 높이 : 각 트리 인덱스에 대한 레벨
- 인덱스의 범위 : 각 인덱스에 대한 최소 키 값과 최대 키 값
> 사용자 관련 정보
- 사용자의 계정(Account) 정보
- 사용자의 권한 정보
3. 시스템 카탈로그의 특징
> 시스템 카탈로그 자체도 시스템 테이블로 구성되어 있기 때문에 SQL문을 이용하여 내용을 검색할 수 있다.
> DBMS에 의해 생성되고 유지된다.
> 시스템 카탈로그의 갱신
- 사용자가 SQL문을 통해 테이블, 뷰 등을 변경하면 DBMS는 자동으로 SC를 갱신한다.
- 사용자가 직접 SQL문으로 SC를 갱신할 수 없다.
> 분산 시스템에서의 시스템 카탈로그
- 보통의 릴레이션, 인덱스 등의 정보를 포함 + 위치 투명성, 중복 투명성을 위해 필요한 제어 정보 포함
- 위치 투명성 : 접근하려는 DB의 물리적 위치를 알지 못해도 DB의 논리적 명칭만으로 접근할 수 있는 특징
- 중복 투명성 : 동일 데이터가 여러 곳에 중복되어 있더라고 사용자는 마치 하나만 존재하는 것 처럼 사용
ㄴ 시스템은 자동으로 여러 데이터에 대한 작업을 수행
4. 시스템 카탈로그의 구성 요소
> SYSOBJECTS
- 사용자 릴레이션, 뷰, 제약 조건, 규칙, 저장 프로시저 등 DB에서 만들어진 각 개체에 관한 정보를 한 행으로 관리
- 개체명, 소유자, 개체종류, 생성일 등으로 구성
> SYSCOLUMNS
- 시스템 내 모든 테이블에 대헤 각 테이블이 가지고 있는 모든 열에 대한 정보를 한 행으로 관리
- 속성명, 테이블명, 소유자, 속성타입, 자릿수 등으로 구성
> SYSINDEXES
- 시스템 내 모든 인덱스에 대한 정보를 한 행으로 관리
- 인덱스명, 테이블명, 속성수, 튜플수 등으로 구성
> SYSVIEWS
- 시스템 내 모든 뷰에 대한 정보를 한 행으로 관리
- 뷰명, 소유자, 뷰명령문 등으로 구성 별로 안중요한 내용인 듯 한데 이렇게 귀찮게 굴거면 다써놓지 등은 뭐람
> SYSUSERS
- 해당 DB를 사용할 수 있는 사용자와 그룹에 관한 정보를 한 행으로 관리
- 사용자ID, 사용자명, 그룹명, 생성일 등으로 구성
> SYSPROTECTS
- DB계정에 적용된 사용자 권한에 관한 정보를 한 행으로 관리
- SYSPROTECTS는 개체명, 사용자ID, 권한, 보호타입 등으로 구성
> SELECT문을 활용한 시스템 카탈로그 조회 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | --SYSOBJECTS SELECT 개체명, 소유자, 개체종류, 생성일 FROM SYSOBJECTS; --SYSCOLUMNS SELECT 속성명, 테이블명, 소유자, 속성타입, 자릿수 FROM SYSCOLUMNS; --SYSINDEXES SELECT 인덱스명, 테이블명, 속성수, 튜플수 FROM SYSINDEXES; --SYSVIEWS SELECT 뷰명, 소유자, 뷰명령문 FROM SYSVIEWS; --SYSUSERS SELECT 사용자ID, 사용자명, 그룹명, 생성일 FROM SYSUSERS; --SYSPROTECTS SELECT 개체명, 사용자ID, 권하느, 보호타입 FROM SYSPROTECTS; | cs |
2. 기타 실무 응용 - 인덱스
1. 인덱스(Index)의 개념
> <키 값, 포인터> 쌍으로 구성된 데이터 구조
- 목적 : 데이터 레코드(튜플)에 빠르게 접근하기 위함
- 키 값 : 데이터 테이블의 키
- 포인터 : 키 값이 저장된 레코드의 물리적인 주소
> 인덱스가 없으면 (FULL)TABLE SCAN이 발생하여 비효율 초래
> 구분 : 기본키를 위한 인덱스라면? 기본 인덱스, 아니면? 보조 인덱스
- 대부분 관계형DBMS는 모든 기본키에 대해 자동적으로 기본 인덱스 생성
> 클러스터드 인덱스(Clustered Index)
- 레코드의 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성되는 인덱스
> 대표적인 인덱스
- m-원 검색 트리, B-트리, B*-트리, B+-트리
2. m-원 검색 트리(m-Way Search Tree)
> 한 노드가 1개의 키 값과 2개의 서브 노드를 갖는 이진 검색 트리를 일반화한 트리
> 한 노드가 최대 m-1개의 키 값과 최대 m개의 서브 노드를 갖는다.
> 이진 검색 트리에 비해 분기율이 향상됨
- 트리 깊이가 낮아져 특정 노드에 대한 검색 시간 감소
* 분기율 : 한 노드에서 서브 트리로 가는 포인터의 개수
> 단점 : 키의 삽입 및 삭제 시 트리의 균형을 유지하기 위해 복잡한 연산이 수반되어야 함
> 특징 :
- 구조 : (m), (P1, K1, A1), (P2, K2, A2) ... (Pm-1, Km-1, Am-1) (Pm)
ㄴ m : 서브 노드 수
ㄴ Pi : i번 째 서브 노드에 대한 포인터
ㄴ Ki : i번 째 키 값
ㄴ Ai : i번 째 레코드 주소
ㄴ 1<= i <= m
- 각 노드 안에 있는 키 값들은 오름차순으로 차례대로 저장
- 포인터가 가리키는 서브 노드들은 모드 m-원 검색 트리이다.
3. B-트리
> 인덱스를 구성하는 방법으로 많이 사용되는 균형된 m-원 검색 트리이다.
> 키 값과 레코드를 가리키는 포인터들이 트리 노드에 오름차순으로 저장된다.
> 키의 삽입과 삭제 시 노드의 분열과 합병이 발생할 수 있다.
> 차수가 m인 B-트리 특
- 모든 노드는 최대 m개의 서브 노드를 가진다.
- 루트 노드와 단말 노드를 제외한 모든 노드는 최소 m/2개, 최대 m개의 서브 노드를 가진다.
- 단말 노드가 아닌 노드에 있는 키 값의 수는 그 노드의 서브 노드 수 보다 하나 적다.
- 모든 단말 노드는 같은 레벨에 있다.(==루트로 부터의 거리가 같다.)
- 한 노드 안에 있는 키 값들은 오름차순을 유지한다.
4. B*-트리
> B-트리의 변형
- 빈번한 노드의 분할을 줄이기 위해 제시됨
> B*-트리 특
- 각 노드가 가능한 한 최소 2/3가 채워지도록 설정
- 루트 노드를 제외한 모든 노드는 최소 (2m-2)/3개, 최대 m개의 서브 노드를 가짐
- 루트 노드는 그 자체가 단말 노드가 아닌 경우 적어도 2개의 서브 노드를가짐
- 단말 노드가 아닌 노드에 있는 키 값의 수는 그 노드의 서브 노드 수보다 하나 적다.
- 모든 단말 노드는 같은 레벨에 있다.
- 한 노드 안에 있는 키 값들은 오름차순을 유지한다.
아...교수냄새...왜이딴내용을..
5. B+-트리
> B+-트리는 B-트리의 변형
- 인덱스 세트와 순차 세트로 구분됨
ㄴ 인덱스 세트(Index Set) : 단말 노드가 아닌 노드로 구성
ㄴ 키 값을 찾아갈 수 있는 경로로만 제공됨
ㄴ 순차 세트(Sequence Set) : 단말 노드로만 구성
ㄴ 해당 데이터 레코드의 주소를 참조
> 단말 노드만을 이용한 순차 처리 가능
- 인덱스 세트에 있는 모든 키 값은 단말 노드에 다시 나타나기 때문
> B+-트리에서의 직접 접근에는 인덱스 세트가 사용되고 순차 접근에는 순차 세트가 사용된다.
> 차수가 m인 B+-트리 특
- 루트 노드와 단말 노드를 제외한 모든 노드는 최소 m/2개 최대 m개의 서브 노드를 가진다.
- 루트 노드는 0 또는 2에서 m개 사이의 서브 노드를 가진다.
- 단말 노드가 아닌 노드에 있는 키 값의 수는 그 노드의 서브 노드 수보다 하나 적다.
- 모든 단말 노드는 같은 레벨에 있다.
- 한 노드 안에 있는 키 값들은 오름차순을 유지한다.
- 순차 세트 내의 단말 노드들은 모두 링크로 연결되어 있다.
3. 기타 실무 응용 - 트랜잭션
1. 트랜잭션(Transaction)의 정의
> 트랜잭션은 DB에서 하나의 논리적 기능을 수행하기 위한 일련의 연산 집합이다.
- 작업의 단위이다.
> 트랜잭션은 DBMS에서 회복 및 병행 수행 시 처리되는 작업의 논리적 단위이다.
> COMMIT 연산 : 하나의 트랜잭션이 정상적으로 종료된 경우 수행되는 연산
- 수행된 내용을 DB에 반영하는 연산
- 트랜잭션의 완료 후 변경된 DB는 시스템에 오류가 발생하더라도 취소되지 않는다.
> ROLLBACK 연산 : 하나의 트랜잭션이 비정상적으로 종료된 경우 수행되는 연산
- 트랜잭션이 수행한 모든 작업을 취소하고 이전 상태로 되돌리는 연산
- 할당 받았던 자원과 잠금을 모두 반환하고 재시작 또는 폐기
2. 트랜잭션의 특성
> 데이터의 무결성을 보장하기 위한 DBMS에서 트랜잭션이 갖추어야 할 특성
> 당연한 내용을 글로 옮긴 부분 교수ㅅㄲㄷ
> 원자성(Atomicity)
- 트랜잭션의 연산은 DB에 모두 반영되거나 전혀 반영되지 않아야 한다.(일부 불가)
ㄴ 트랜잭션에 포함된 명령어 중 어느 하나라도 오류가 발생하면 트랙잭션 전체를 취소해야 한다.
> 일관성(Consistency)
- 트랜잭션 수행이 성공적으로 완료되면 언제나 일관성 있는 DB상태로 변환한다.
- 시스템 고유 요소는 트랜잭션 수행 전과 수행 후의 상태가 같아야한다.
- 동시에 실행되는 트랜잭션이 없는 고립 상태에서의 트랜잭션 수행은 DB일관성을 유지해야 한다.
> 독립성(Isolation)
- 한 트랜잭션이 데이터를 갱신하는 동안에는 해당 데이터를 다른 트랜잭션이 접근하지 못하도록 제한한다.
- 여러 트랜잭션이 동시에 수행되어도 그 결과는 순차적으로 실행된 결과와 같아야 한다.
- 여러 트랜잭션들이 동시에 실행되더라도 DBMS는 독립적인 순차실행을 보장해야 한다.
> 영속성(Durability)
- 트랜잭션의 실행 성공 완료 후에는 시스템에 오류가 발생해도 트랜잭션에 의해 변경된 내용은 계속 보존
- 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 한다.
3. 트랜잭션의 상태
> 활동(Active) :트랜잭션이 실행중인 상태
> 실패(Failed) : 트랜잭션 실행 중 오류가 발생하여 중단된 상태
> 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태
> 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 수행하였지만 COMMIT 연산을 실행하기 전 상태
> 완료(Committed) : 트랜잭션이 성공적으로 완료되어 COMMIT 연산을 수행한 후의 상태
4. 기타 실무 응용 - 회복(Recovery)
1. 회복의 개념
> 트랜잭션들을 실행하는 도중 장애(Failure)가 발생하여 DB가 손상된 경우 손상되기 이전 상태로 복구하는 작업
2. 장애의 유형
> 실행 장애(Action Failure)
- 사용자의 실수, 무결성 규정 위반 등 질의 실행 실패
> 트랜잭션 장애(Transaction Failure) :
- 트랜잭션 내부의 비정상적인 상황으로 인해 트랜잭션 실행 중지
> 시스템 장애(System Failure) :
- DB손상은 없지만 H/W 오동작, 정전, S/W 오류 교착상태 등에 의해 실행중이던 모든 트랜잭션들이 더 이상 실행을 계속할 수 없는 현상
> 미디어 장애(Media Failure) :
- 저장 장치인 디스크 블록의 손상이나 디스크 헤드 충돌 등에 의해 DB 일부 또는 전부가 물리적으로 손상
3. 회복 관리기(Recovery Manager)
> 로그(Log), 메모리 덤프(Memory Dump) 등을 이용하여 회복 기능을 수행하는 DBMS의 핵심 구성 요소
> 역할 : 트랜잭션 실행이 성공적으로 완료되지 못하면 로그를 이용하여 트랜잭션이 DB에 생성했던 모든 변화를 취소(Undo)시켜서, 트랜잭션 실행 이전의 원래 상태로 되돌린다.
> 트랜잭션 실행을 성공적으로 완료했으나 디스크에는 반영되지 않는 경우?
- 회복 시 로그를 이용하여 재작업(Redo) 수행
4. 회복 기법
> 연기 갱신(Deferred Update) 기법
- 트랜잭션이 성공적으로 종료될 때 까지 DB에 대한 실질적인 갱신을 연기하는 기법
- 트랜잭션이 실행되는 동안 변경된 내용은 로그에 보관
- 트랜잭션의 부분 완료 시점에 저장된 로그를 활용하여 변경 내용을 실제 DB에 반영
- 회복 작업을 수행할 경우 Redo 작업만 수행
> 즉각 갱신(Immediate Update) 기법
- 트랜잭션이 데이터를 변경하면 부분 완료와 관계없이 즉시 실제 DB에 반영
- 변경된 모든 내용은 로그에 보관(장애 발생으로 인해 회복작업을 수행할 경우 대비)
- 회복 작업 Redo, Undo 모두 수행
> 그림자 페이지(Shadow Paging) 기법
- 갱신 이전의 DB를 일정 크기의 페이지 단위로 구성하여 별도의 복사본으로 보관하고 작업을 진행하는 기법
- ROLLBACK이 필요할 때 그림자페이지를 덮어씌워 회복
- 로그, Redo, Undo 모두 필요없다
> 검사점(Check Point) 기법
- 시스템 장애 발생 시 Redo, Undo 수행을 위한 로그조사를 피하기 위한 기법
- 트랜잭션 실행 중에 주기적으로 변경내용이나 시스템 상황 등의 정보와 검사점을 함께 로그에 보관
- 가장 최근의 검사점으로 부터 회복 작업을 수행하여 회복 시간 단축 가능
> 미디어 회복(Media Recovery) 기법
- DB내용을 주기적으로 안전한 저장장치에 덤프
- 디스크 장애 발생 시 가장 최근의 덤프 내용을 디스크에 적재하고 해당 덤프 이후 완료된 트랜잭션 Redo
*** 트랜잭션 장애에는 무엇이 있는지?
*** 회복 기법에는 어떤 것들이 있는지?
5. 기타 실무 응용 - 병행 제어(Concurrency Control)
6. 기타 실무 응용 - 보안(Security)
7. 기타 실무 응용 - 튜닝(Tuning)
8. 기타 실무 응용 - 객체 지향 데이터베이스
9. 기타 실무 응용 - 고급 데이터베이스
맨 위로
'공부 > 정보처리기사(실기)' 카테고리의 다른 글
업무 프로세스(1) - (정보 전략 계획 수립 등) (0) | 2019.06.04 |
---|---|
데이터베이스(8) - 기타 실무 응용(병행 제어, 보안, 튜닝, ODB, 고급DB) (0) | 2019.06.03 |
데이터베이스(6) - 정규화(이상, 함수적 종속, 정규화) (0) | 2019.05.31 |
데이터베이스(5) - SQL(VIEW, 내장SQL, 스토어드프로시저) (0) | 2019.05.30 |
데이터베이스(4) - SQL(JOIN, DML, DCL) (0) | 2019.05.29 |