DB 102

데이터베이스 장애 복구 방법

로그기반 기법 - 로그파일을 이용한 복구 - redo, undo사용 - 느림 검사점(check point) - 로그파일과 검사점을 이용한 복구 - 로그기반보다 상대적으로 복구속도가 빠름 - undo 사용 그림자 페이징 기법 - 그림자 페이지 테이블을 이용한 복구 - undo간단, redo불필요 - 로그 기반 or 검사점 기반과 함께 사용 - 그림자 페이지 테이블 복사, 기록하는데 따른 오버헤드 발생 - 복사 및 백업본에서 복구하므로 복구 속도가 빠름

DB/[이론] 2022.03.10

데이터 복구

데이터복구란? 데이터베이스 운영 도중 예기치 못한 장애가 발생할 경우 데이터베이스 장애 발생 이전으로 일관성과 무결성을 복원하는것 데이터베이스 장애 유형 1. 트랜젝션 장애 - 논리적 오류 : 내부적은 오류로 트랜젝션 완료 불가 - 시스템 오류 : Deadlock 등의 오류 조건으로 활성 트랜잭션을 강제로 종료 2. 시스템 장애 - 전원, 하드웨어, 소프트웨어 등의 고장 - 시스템 장애로 인해 저장 내용이 영향 받지 않도록 무결성 체크 3. 디스크 장애 - 디스크 스토리지의 일부 또는 전체가 붕괴 - 가장 최근의 덤프와 로그를 이용하여 덤프 이후에 완결된 트랜젝션을 재실행 4. 사용자 장애 - 사용자들의 데이터베이스에 대한 이해 부족으로 발생 - DBA가 데이터베이스를 관리하다 발생하는 실수 데이터베..

DB/[이론] 2022.03.10

교착상태

교착상태(Deadlock) 정의 - 다중 트랜잭션 데이터베이스 시스템에서 다수 트랜젝션이 특정 자원의 할당을 무한정 기다리고 있는 상태 - 교착 상태에 있는 트랜젝션은 실행을 끝낼 수 없으며 시스템 자원이 묶여있어서 다른 작업을 시작하는것도 불가능. - 예시 : T1은 T2가 X를 언락하기를 기다리고, T2는 T1이 Y를 언락 하기를 기다리고 있는 상황 교착상태 발생 원인 - 상호 배제 : 프로세스들이 자원을 배타적으로 점유하여 다른 프로세스가 그 자원을 사용하지 못함 - 점유와 대기 : 프로세스가 어떤 자원을 할당받아 점유하고 있으면서 다른 자원을 요구 - 비선점 : 프로세스에 할당된 자원은 사용이 끝날 때 까지 강제로 빼앗을 수 없으며 점유하고 있는 프로세스 자신만 해제가능 - 환형대기 : 프로세스..

DB/[이론] 2022.03.10

동시성 제어

동시성 제어란 - 다중 사용자 환경을 지원하는 데이터베이스 시스템에 여러 트랜젝션들이 성공적으로 동시에 실행될 수 있도록 하는것 - 트랜젝션의 직렬화를 수행(트랜젝션이 동시에 수행되더라도 그 결과가 순차적으로 수행되도록 만듦) - 무결성보장, 공유도 최대, 응답시간 최소, 시스템 활동의 최대 보장 동시성 제어 하지 않을 경우 문제점 - 갱신 손실 : 이전 트렌젝션이 종료하기 전에 다른 트랜젝션이 갱신 값을 덮어 쓰는 경우 - 오손 데이터 읽기 : 트랜젝션의 중간 수행결과를 다른 트랜잭션이 참조 - 모순성 : DB가 일관성이 없는 상태로 남음 - 연쇄복귀 : 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소불가능 - 반복할 수 없는 읽기 : ..

DB/[이론] 2022.03.10

정규화 수행과정 #도부이결다조

정규화 수행과정 -1차 정규화 : 원자값 아닌 도메인 분해(도) -2차 정규화 : 부분 함수 종속 제거(부) -3차정규화 : 이행함수종속 제거(이) -보이스-코드 정규화 : 결정자가 후보키가 아닌 것 제거(결) -4차정규화 : 다치종속 제거(다) -5차정규화 : 조인종속 제거(조) 1차 정규화 - 하나의 컬럼에 원자값을 갖도록 조정 - 예시 2차 정규화 - 부분함수 종속 제거 - 기본키의 일부가 다른 컬럼과 종속 - 예시 3차 정규화 - 이행함수 종속 - 예시 - 물론 학번->학부->등록금을 거치지 않고도, 등록금은 학부에 종속된다(학번에을 알면 해당 학생의 등록금을 무조건 알 수 있기 때문이다.) 하지만 의미적으로 등록금은 학부에 종속적으로 결정되는 것이 맞다. 따라서 이를 분리해 주어야 하는 것이다...

DB/[이론] 2022.03.05

이상현상

샘플 테이블 삽입이상 - 어떤 정보를 삽입하고자 할 때 원하지 않는 정보까지 함께 삽입해야하는 현상 - 샘플테이블에서 (학과명=경영정보, 학과사무실=경영관)이라는 정보를 넣을 때 기본키인 학번이 NULL이 되면 안되므로 경영정보 소속인학생의 학번과 함께 학과명과 학과사무실 정보를 삽입해야함 삭제이상 - 어떤 정보를 삭제하고자 할 때 필요한 정보까지 함께 삭제되는 현상 - 학번=3333인 학생을 삭제할 때 해당 학생이 물리학과에 소속된 유일한 학생이면 물리학과의 사무실이 자연관 이라는 정보도 함께 삭제됨 수정이상(갱신이상) - 어떤 정보를 수정하고자 할 때 동일한 내용의 여러 건의 데이터에서 반복 수정해야 되는 현상 - 컴퓨터공학과의 사무실이 변경되면 컴퓨터공학과 학생 수만큼 사무실 column을 수정해야함

DB/[이론] 2022.03.05

반정규화 기법

계산된 컬럼 추가 - 총 판매액, 평균잔고, 계좌 평가 등을 미리 계산하고, 결과를 특정 칼럼에 추가 테이블 수직 분할 - 하나의 테이블을 두 개 이상의 테이블로 분할하여 새로운 테이블을 만드는 것. 테이블 수평 분할 - 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법 테이블 병합 - 1:1관계의 테이블을 하나의 테이블로 병합하여 성능 향상 - 1:N관계의 테이블을 병합하여 성능을 향상시킨다. - 슈퍼 타입과 서브 타입 관계가 발생하면, 테이블을 통합하여 성능을 향상시킨다 * 슈퍼타입, 서브타입 1. 고객 엔티티(슈퍼타입)는 개인고객(서브타입)과 법인 고객(서브타입)으로 분류 2. 베타적관계는 서브엔티티중 하나만(고객은 개인고객이거나 법인고객 둘중 하나만 될 수 있음), 포괄적 관계는 서브엔..

DB/SQL 2022.02.18

옵티마이저 조인

nested loop 조인 - 하나의 테이블에서 데이터를 먼저 찾고 그 다음 테이블을 조인 - 먼저 조회하는 테이블을 외부 테이블, 그 다음 조회하는 테이블을 내부 테이블이라고 한다. - 외부테이블의 크기가 작은것을 먼저 찾는것이 중요 - random access가 많이 발생하므로 이를 줄여야 성능 향상. Sort merge 조인 - 두 개의 테이블을 sort_area라는 메모리 공간에 모두 로딩하고 sort수행 - 두개의 테이블이 sort가 완료되면 두개의 테이블을 merge - sort가 발생하기 때문에 데이터양이 많아지면 성능이 떨어진다 hash 조인 - 두 개의 테이블 중에서 작은 테이블을 hash 메모리로 로딩하고, 두개의 테이블의 조인키를 사용하여 해시 테이블을 생성 - 해시함수를 사용해서 ..

DB/SQL 2022.02.18

옵티마이저

옵티마이저란? - SQL의 문법적 오류를 확인한다 - SQL의 실행 계획을 수립하고, SQL을 실행하는 데이터베이스 관리 시스템의 소프트웨어 - 가장 빠른 데이터 접근 경로를 작성하고 채택한다. (동일한 결과가 나오는 SQL도 어떻게 실행하느냐에 따라 성능이 달라진다) ex) A 테이블과 B 테이블의 and연산을 할 때 크기가 작은 테이블을 먼저 읽어올 때 속도가 빨라진다. 옵티마이저 특징 - 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용을 산정한다 - 최저비용을 가지고 있는 계획을 선택해서 SQL을 실행한다. 옵티마이저 실행 계획 - 개발자가 sql실행시 파싱(parsing)을 실행하여 sql의 문법 검사 및 구문분석 수행 - 옵티마이저가 규칙기반 or 비..

DB/SQL 2022.02.18

테이블 파티션의 종류

Range Partition - 값의 범위를 기준으로 여러 개의 파티션으로 데이터를 나누어 저장하는것 - ex) 봉급을 기준으로 200~4000이하인 파티션과, 5000~7000천 이상인 파티션 생성 List Partition - 특정 값을 기준으로 분할하는 방법 - 부서번호가 10번인 파티션과, 20번인 파티션으로 분류 Hash Partition - 데이터베이스 관리시스템이 내부적으로 해시함수를 사용하여 데이터를 분할 - 데이터베이스 관리 시스템이 알아서 분할하고 관리하는것

DB/SQL 2022.02.17

group by 관련함수

ROLLUP - 계층별로 group by를 수행 - rollup 뒤에 컬럼이 두개이상오면, 순서에 따라 결과가 달라짐 - 예시 SELECT DEPTNO,JOB,sum(sal) FROM table GROUP BY ROLLUP(DEPTNO,JOB) - 결과 GROUPING SET - 조합별 group by 쌍을 확인한다. - 예시 SELECT JOB,DEPTNO,count(*) FROM table GROUP BY GROUPING SETS(JOB,DEPTNO) - 결과 CUBE - 조합별, 소계 등 모든 경우의 group by 쌍을 확인한다. - 코드예시 SELECT DEPARTMENT_ID,JOB_ID,SUM(SALARY) FROM table GROUP BY GROUPING CUBE(DEPARTMENT_I..

DB/SQL 2022.02.15

SQL 기본 내장함수

TO_CHAR - char형으로 변경 - 날짜, 숫자 모두 char형으로 변환 가능 SYSDATE - 오늘의 날짜를 출력 - 예시 SELECT SYSDATE FROM TABLE - 결과 EXTRACT - 년, 월, 일 등을 추출하는 함수 - 예시 SELECT EXTRACT(YEAR from sysdate), EXTRACT(MONTH from sysdate), EXTRACT(DAY from sysdate) from TABLE - 결과 TRUNC - 버림하는 함수 - 예시 SELECT TRUNC(숫자,옵션) from TABLE --"숫자"를 "옵션"자리 까지 절사 - 결과 DECODE - 조건문을 만드는 함수 - DECODE(조건1, 조건1 성립시 출력값, 조건2, 조건2 성립시 출력값 ... , '..

DB/SQL 2022.02.15

뷰(View)

뷰의 정의 - 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 생성한 가상 테이블 뷰의 특징 - 참조한 테이블이 변경되면 뷰도 변경된다 - 뷰의 검색은 테이블과 동일하게 할 수 있지만, 뷰에 대한 입력 수정 삭제는 제약이 있다. - 특정 컬럼만 조회 되므로 보안성이 향상된다. - 한번 생성된 뷰는 변경할 수 없다. - ALTER이용하여 변경이 불가하다 사용 예시 CREATE VIEW T_EMP AS SELECT * FROM EMP;

DB/[이론] 2022.02.15