5. 기타 데이터베이스 실무 응용
내장 SQL (Embedded-SQL)
커서 (Cursor)
- 내장 SQL 에 의해 얻은 값은 하나의 행 단위로 처리된다. 여러 개의 행을 그룹으로 처리하기 위해 사용한다.
한마디로.. 한번 일 하고(행 단위니까) 어느 행에 위치해있는지 커서 역할을 하는것 으로 이해하면 된다.
DECLARE(선언) - OPEN(맨첨으로) - FETCH(하나씩이동) - CLOSE(끝내라)
스토어드 프로시저(Stored Procedure)
- 자주 수행해야 할 SQL 처리 과정을 미리 하나의 작은 프로그램으로 작성하여 DB에 저장해 뒀다가 필요한 경우 호출.
매크로 라고 보면 됨.
트랜잭션(Transcation)
- 데이터베이스 내에서 한꺼번에 모두 수행되어야 할 연산들의 집합. 모두 처리 완료되거나 아니면 모두 취소되야하거나.
은행 입금 과정을 생각하면 된다. 내 계좌에서 돈을 빼서 다른 사람의 계좌로 입금 하는데. 내 계좌에서 빼고 입금하는 과정에서 오류가 났다.
내 돈은 없어지고 상대방도 입금 안되고.. ??? 이런 일이 일어나지 않게 롤백 시켜서 최초단계로 다시 돌아가야 한다.. 그래서 끝까지 완료 되거나. 안되거나.
이런 모든 절차를 그룹지어 트랜잭션 이라고 한다.
트랜잭션의 성질
- 독립성(원자성, 격리성) : 트랜잭션이 실행되는 동안에는 다른 트랜잭션들이 방해할 수 없다!
- 일관성 : 문 들어가기 전과 후가 같아야됨. 전에 내용이 잘못되있는게 없다면. 트랜잭션 완료 후에도 내용에 잘못된게 없겠지?
- 지속성(영속성) : 트랜잭션이 성공하면 그 결과는 지속적으로 저장된다
- 원자성 : 다 되던지. 아니면 모두 안되게 하던지
독 일 지 원
* COMMIT : 성공적으로 종료된 후 수정된 내용을 지속적으로 유지하기 위한 연산. 한마디로 적용해라! 명령
* ROLLBACK : 비정상으로 수행되었거나 오류가 발생했을 때 이전 상태로 돌리기 위한 연산. 한마디로 돌아가라! 명령
트랜잭션 스케쥴(Transcation Schedule)
- 동시에 여러 개의 트랜잭션들이 병행으로 실행되는 경우.. 어떤게 먼저 실행되야되..? 이런 순서를 정하는 것.
1. 직렬 스케쥴
- 하나 다 끝내놓고 다른 트랜잭션 뒤에 붙여서 하고.
2. 병렬 스케쥴
- 왔다 갔다. 이거 조금 하고있다 저거 조금 하다 다시 돌아와서 이거하다.. 갔다.. 왔다 ..
직렬 가능 스케쥴
- 직렬 스케쥴 기법을 이용한 결과와 비 직렬 스케쥴 기법을 이용한 결과가 동일하게 나오는 경우.
근데 이 내용의 이름이 왜 직렬 가능 스케쥴이지,.?;; 가능..? 단어는 왜 단거야!
회복
- 손상된 데이터베이스를 회복시키자~~.. 이전의 정상적인 상태로 복구시키는 작업!
로그(Log)를 이용하여 차근차근 돌아가면서 회복시키자~~
1. 즉시 갱신 기법
- 트랜잭션이 실행 상태에서 변경되는 내용을 즉시즉시 DB에 적용해서 장애 발생하면 바로 회복!!
2. 지연 갱신 기법
- 부분완료 될 때 까지 DB에 적용하지 않고 지연시킨 후 부분완료가 되면 로그 내용대로 회복
3. 검사 시점 기법
- 트랜잭션이 실행되는 중간에 검사시점(Check Point)을 지정해서. 검사시점 까지 수행하고 DB에 적용!
4. 그림자 페이징(Shadow Paging) 기법
- 로그를 안쓴다! DB와 같은 크기로 나눠서 각 페이지마다 복사해서 그림자페이지를 보관하는 기법.
음. 분신이 하나 더 있다는 거네. 회복할때는 그림자페이지에 있는거 갖다쓰고.
* 트랜잭션 장애 : 하나의 트랜잭션이 수행되는 과정에서 발생하는 오류
* 시스템 장애 : 트랜잭션 장애들로 인해 시스템 상의 문제가 발생하는 오류
* 미디어 장애 : 하드웨어적으로 하드디스크 등이 손상되는 오류
병행 제어(Concurrency Control)
- 동시에 여러 개의 트랜잭션이 실행되는 경우를 병행 실행 이라고 한다.
병행 실행 시 트랜잭션들끼리 문제가 발생되지 않도록 제어하는 것을 병행 제어 라고 한다.
로킹(Locking)
- 트랜잭션 병행 실행 시 하나의 트랜잭션이 사용할 때 다른 트랜잭션이 접근하지 못하게 하는 기법!
내 트랜잭션 작업할때는 다른애들이 접근 못하게 잠궈놓고 일하다가 다 끝나면 잠금 풀기~
LOCK -> 트랜잭션 실행 -> 트랜잭션 완료 -> UNLOCK |
* 교착상태(Deadlock) : 한 트랜잭션의 수행시간이 LOCK 상태가 지속되면 다른애들이 일을 못해서 무한정 기다리는 상태
* 공유 락(Sharedlock) : 사용중인 데이터에 대해 읽기만 OK. 쓰기는 NO
* 베타 락(Exclusivelock) : 사용 중인 데이터에 읽기 NO 쓰기도 NO
로킹 단위는 테이블, 속성, 튜플 단위로 모두 설정할 수 있다.
단위가 클수록 병행성 수준이 낮아지고(한 로킹 단위가 크니까.. 조그만거 건드리고 싶어도 접근이 불가능함)
단위가 작으면 병행성 수준이 높아진다(단위가 작다보니까 락 안걸어놓은 부분도 있고. 다른트랜잭션이 접근하기에 용이함)
2단계 로킹 기법(Two-Phase Looking Protocol)
- 로킹의 대표적인 기법! 일단 LOCK 을 해야될 데이터들을 모두 LOCK 걸어버리는 단계. 그리고 LOCK 을 해제하는 단계의 2단계로 구성된다.
확장단계 : 트랜잭션 수행에 필요한 데이터들에 대해 LOCK 을 설정하는 단계
축소단계 : LOCK 이 필요 없어진애들을 LOCK해제하는 단계
타임 스탬프(Time Stamp)
- 병행제어의 또 다른 방법. 병행제어의 기법을 다시 보자면 로킹과 타임스탬프 가 지금까지 나왔다.
- 각 트랜잭션이 데이터에 접근할 시간을 미리 지정하고 그 시간의 순서에 따라 순서대로 접근하여 수행하는 방법. 뭐 예약제 라고 보면 되겠네.
병행제어를 하지 않았을 때의 문제점
갱신 분실 | 두 개 이상의 트랜잭션이 수행되는 과정에서 연산 결과의 일부가 없어지는 현상. 분실했다니까 뭔가 없어지는 현상이네 |
모순성 | 두 개 이상의 트랜잭션이 수행되어 얻어진 결과가 일관성 없이 서로 다른 현상. |
연쇄 복귀 | 두 개 이상의 트랜잭션이 수행되던 중 하나의 트랜잭션이 취소됨으로 인해 연달아 다른 트랜잭션도 취소되는 현상. |
비완료 의존성 | 하나의 트랜잭션 수행이 실패한 후 회복되기 전에!! 다른 트랜잭션이 실패한 갱신 결과 가지고 참조하는 현상. |
인덱스(Index)
- 수 많은 데이터 중에서 원하는 자료를 빠르고 효율적으로 검색하기 위한 방법. 사전의 맨 뒤에 찾아보기 라고 생각하면 된다.
- 인덱스 파일은 키 값(인덱스를 만들 때 사용된 속성의 값), 주소(실제로 저장된 위치) 로 구성된다.
1. B- 트리 (Balance-Tree)
- 맨 위 루트부터 검색하면서 루트값과 비교해서 작은값은 좌측 큰 값은 우측으로 훑어 내려가면서 탐색하는 방법
- 기본적으로 제일 많이 사용하는 구조
P1 | data1 | P2 | data2 | P3 | ... |
P1 : data1 보다 작은 값을 갖는 하위 노드의 주소
P2 : data1 과 data2 의 중간 값을 갖는 하위 노드의 주소
P3 : data2 보다 큰 값을 갖는 하위 노드 주소
2. B+- 트리
인덱스 세트는 단말 노드를 찾기 위한 인덱스를 제공하고. 순차 세트는 단말 노드로만 구성되어 있다.
별 중요하지는 않은듯 B+- 트리는.
클러스터드 인덱스(Clustered Index)
- 인덱스의 또 다른 유형 중 하나. 일단.. 속성 하나 잡고 그 기준으로 정렬 하고 테이블을 재구성해서 인덱스를 만든다.
- 정리가 된 테이블이 있다. 일정한 행의 갯수로 페이지를 나눈다. 몇 개의 테이블이 나올것이다. 그게 하나하나의 page 라고 보고. 이제 대표 인덱스 page 를 만드는데.
- 각 data page 의 첫 번째 키값(대표값)과 page 번호로 인덱스를 만든다
넌 클러스터드 인덱스(Non Clustered Index)
- 클러스터드 인덱스는 정렬 한번 쫙 하고 테이블을 재구성 하지 않고. 데이터 주소를 이용하여 인덱스를 만든다.
- 일단 일정한 크기로 나눈다. 몇개의 page 가 나온다. 이제 인덱스 page 를 만들어본다.
- 인덱스 페이지 내용은 키 값과 데이터의 위치를 나타내는 Row id ( page 번호, 행 위치) 로 구성한다.
- 또 최정으로 대표 인덱스도 만들고. 한마디로 클러스터드 보다 하나 더 있다.
* 클러스터드 인덱스 : 일정한 범위를 가지고 찾는 경우 좋고.. 단! 삽입/수정 의 경우 변경된 내용을 인덱스에 반영하고 재정렬 또 해야하고.. 넌 클보다 불편하다
* 넌 클러스터드 인덱스 : 한개의 특정 값을 찾거나, 많은 양의 데이터 중에서 작은 범위를 찾을 때 유용하다.
객체 지향 데이터베이스 (OODB; Object-Oriented Database)
- DB에 저장할 때 단순한 자료가 아닌 멀티미디어 정보를 저장, 관리하고 이용할 수 있는 데이터베이스
객체 지향 데이터베이스 관리 시스템 (OODBMS; Object-Oriented Database Management System)
- OODB 를 관리, 운영하는 시스템 이겠지 DBMS 처럼.
객체-관계 데이터베이스 (ORDB; Object-Relation Database)
- 객체 지향 데이터베이스에 관계 데이터베이스를 더한! O R 데이터베이스
객체-관계 데이터베이스 시스템 (ORDBMS; Object-Relation Database Management System)
- O-R DB 를 관라해주는 시스템.
객체와 객체 지향 기법의 특징
- 객체 : 현실 세계에 존재하는 개체를 추상화 한 것
- 속성 : 객체의 특성
- 메시지 : 객체에 어떤 처리를 하도록 지시하는 명령. (MFC 생각하면..)
- 메소드 : 연산. (함수떠올리면)
- 클래스 : 알고 있는 클래스
- 캡슐화 : 정보들을 묶어서 정보은폐 하려고
- 상속 : 상위 클래스의 특징을 하위클래스에서 재사용해서 쓰려고
- 다형성 : 동일한 객체더라도 경우에 따라 다른 의미의 연산으로 사용될 수 있다.
복합 객체
- 한 객체가 가지고 있는 속성 가지고 다른 객체를 이용하기 위한 것으로. 관계 데이터베이스의 외래키와 같은 개념
보안
- 데이터의 위험이나 손실, 정보의 유츨 등을 차단하기 위해 통제된 접근을 통해 정보를 안정적으로 관리하는 것..
그냥 보안 느낌에 맞는 말 고르면 될듯.
기밀성 | 기밀하게.. 허락되지 않은 사람들이 내용을 알 수 없도록 한다! |
무결성 | 허락되지 않은 사람들이 함부로 정보를 수정 할 수 없도록 한다! |
가용성 | 허락된 사람들이 정보 쓸때 방해받지 않도록 한다! |
* 허락되지 않은 접근, 수정, 훼손, 노출 등을 고려해야 한다.
정보 보안의 방법으로는..
물리적인 방법 | 무식하게.. 자물쇠나 사람의 감시 등의 방법 |
비 물리적인 방법 | 암호화 기법을 통해 보안해보자! |
암호화 기법을 통한 보안
- 보호해야 할 메시지나 정보를 .. 문자나 수치로 알아볼 수 없게 변환하여 보호하는 방법
대칭키 시스템 | 암호화 / 복호화 할 때 사용하는 키가 동일한 암호 시스템 대표적인 시스템 : DES |
비 대칭키 시스템 | 암호화 / 복호화 할 때 사용하는 키가 다르다. 공개 키 시스템 이라고도 한다(PKI) 암호화 할 때 사용되는 키를 공개키 라고 하고 (공개) 복호화 할 때 사용되는 키를 비밀키 라고 한다. (비공개) 대표적인 시스템 : RSA |
개체(Entity)의 종류
1. 독립 개체
- 다른 개체에 종속되지 않고. 그 개체 내에서 모든 검색과 변경 등이 가능한 개체. 한마디로 자기 테이블 안에서 노는..
2. 종속 개체
- 혼자는 힘들어.. 다른 개체를 참조해야될것같아!!
속성(Attribute)의 종류
1. 단순 속성
- 속성의 값을 더이상 작은 단위로 나눌 수 없는 속성. 학생수 속성은.. 더 나눌라고 생각해봐도..
2. 복합 속성
- 속성의 값을 더 작은 단위로 나눌 수 있는 속성. 예를들어 이름 속성은. 성 과 이름으로 나눌 수 있다!
3. 결합 속성
- 두 개 이상의 속성값을 합쳐 하나의 속성으로 만들어 진 속성. 출생년도+출생월일 두 개의 속성을 합쳐서 생년월일 속성을 만들었다!
4. 설계 속성
- 실제 연산에는 사용되지 않지만.. 편의상 만들어 놓은 속성. 순번 속성이 있다. 얘는 딱히 더하거나 빼거나.. 연산에 사용하지는 않는데 이게 없다면 일일히 행을 세야한다.
관계(Relation)의 종류
1. 중복 관계
- 다른 테이블 참조하러 갈 때 우리 테이블의 여러 속성 가지고 모두 참조 조건이 되는 관계. 1번 속성갖고 떠나도 가능하고. 2번 속성 갖고 떠나도 가능하고.. 중복 관계이다.
2. 재귀 관계
- 일반적으로 참조는 다른 테이블로 떠나지만.. 재귀 관계는 하나의 테이블 내에서 자기 자신의 테이블 내용을 참조하는 경우.
분산 데이터베이스(Distributed Database)
- 여러 컴퓨터에 데이터를 분산시켜저장하고 관리!
수평 분산 | 다량의 정보를 여러개의 동등한 기능을 가진 서버에 저장시켜 운영 하나의 서버에 문제가 발생해도 DB 운영에는 지장을 주지는 않는다. |
수직 분산 | 전체를 운영하는 주 서버와 처리를 담당하는 부 서버들로 운영 관리 하기엔 좋은데. 문제가 발생했다 하면 전체 운영에 지장이 간다. |
장점 : 신속한 서비스 제공. 확장성, 신뢰성, 가용성, 효율성, 융통성 좋다~
단점 : 당연히 구축하기가 어렵고 비용이 들겠지. 또 그만큼 오류가 생길 확률도 많아지고
튜닝(Tuning)
- 뭘 튜닝한다는걸까. DB를 튜닝? 데이터베이스 시스템을 최적화 시켜서 재조정하는 것을 말한다.
- 데이터 검색 시 저장 공간을 조정하여 신속한 검색이 되게 하고. SQL 명령어 작성 시 쉽게 이해할 수 있도록 표준화된 형태로 작성한다.
- 트랜잭션의 무결성을 유지하며 LOCKING 기법을 사용한다. 트랜잭션의 무결성?
CRUD 매트릭스
- Create, Read, Update, Delete.
- 개체간의 상관관계를 분석...!! 2차원 구조의 행렬 구조로 표현함으로써 한눈에 분석할 수 있는 도표
트리거(Trigger)
- 참조 관계에 있는 두 테이블에서 하나의 테이블에 삽입이나 수정 삭제 이런거로 내용이 바뀌었을 때!
자동으로 연관된 테이블도 변경이 이루어 질 수 있도록 하는 것
행 이주(Row Migration)
- 데이터 입력하거나 수정 시.. 기존에 있던 가변길이 내용 때문에 (줄어들었을때) 저장할 공간이 없을 때 블럭을 옮겨 저장하는 현상.
- VARCHAR(20) 인 속성이 있는데 VARCHAR(11) 크기만 썼다. 가변길이 이기 때문에 줄어들었는데. UPDATE 로 18 크기만큼 수정했다.
- 줄어든 11 공간에.. 18을 다시 넣을라고 하니..!! 다른 블록에 옮겨 저장할 수 밖에!
- VARCHAR (가변길이) 일 경우에 발생한다.
행 연결(Row Chaining)
- 비어 있는 블록에 데이터를 삽입할 때 그 비어있는 공간이 .. 협소해서 일부만 저장하고 다른 블록에 저장해서 두개를 연결하는 방법
데이터 웨어하우스(Data Warehouse)
- 사용자에 의사 결정에 도움을 주기 위하여(결정장애인가봄). 일정 기간 내에 저장된 대량의 데이터를 공통의 형식으로 변환하여 관리하는 데이터베이스.
데이터 마트(Data Mart)
- 데이터 웨어하우스의 축소판. 데이터의 한 부분에서 사용자가 관심있는 부분의 데이터들을 담은 조그마한 규모의 데이터 웨어하우스.
쇼핑몰 사이트에서 판매되는 많은 제품들 중 내가 관심있는 조그마한 제품을 장바구니에 담아 두는 것.
데이터 마이닝(Data Mining)
- 이것도.. 데이터 웨어하우스와 같은 다량의 데이터 는 같은데! 실제로 존재하지 않는 정보를 얻어내기 위해!! <-- 목적
각 데이터의 관계를 체계적으로 분석, 인공지능 기법 등을 통해 통계적 규칙이나 패턴을 찾아내는 것!.
OLAP(Online Analytical Processing)
- 사용자가 직접!! DB 검색과 분석을 해서 문제점이나 해결책을 찾도록 해주는 분석형 애플리케이션
- 대규모 데이터를 이용하기 때문에... 연산에 장시간이 걸리고. 온라인 검색을 지원하는 데이터 웨어하우스 지원 도구이다.
- 한마디로.. 데이터 웨어하우스 (엄청난 데이터들..) 를 온라인으로 사용자가 질의 검색 해서 문제점이나 해결점을 찾는다!
MOLAP | Multi.. OLAP . 다차원 데이터베이스를 기초. |
ROLAP | Relation.. OLAP. 관계형 데이터베이스를 기초. |
HOLAP | Hybrid.. OLAP. 다차원과 관계형을 함께 사용. |
* 스타 스키마(Star Schema)
- OLAP 와 같은 다차원 분석을 지원하기 위한 데이터 모델링 기법.
OLTP(Online Transaction Processing)
- OLAP 는 Analytical (분석적인) 이지만. 이건 전송이다.
중앙 컴퓨터와 통신회선으로 연결된 사용자들이 요청한 트랜잭션의 처리는 그래! 우리 중앙컴퓨터에 바로 왔으니까 내 선에서 얼른 처리해줄께! 하고
즉시 처리된 결과를 사용자 단말 측으로 되돌려 보내주는 처리 형태.
댓글
이 글 공유하기
다른 글
-
6. 업무 프로세스
6. 업무 프로세스
2016.04.16 -
4. 정규화
4. 정규화
2016.04.15 -
3. 관계 데이터베이스 언어(SQL)
3. 관계 데이터베이스 언어(SQL)
2016.04.15 -
2. 데이터 모델링
2. 데이터 모델링
2016.04.13