SMALL

백업에는 크게 3가지 종류가 있습니다.


전체 백업(Full Backup)

전체 백업은 데이터 변경 유무랑 상관없이 전체 데이터의 복사본을 만드는 백업 방식입니다.

다른 백업 방식보다 복구가 간편하고, 복구 시간이 적게 소요됩니다.

차등 백업(Differential Backup)

차등 백업은 마지막 전체 백업 후에 변경된 모든 데이터를 백업하는 방식입니다. 
증분 백업보다 복구 시간이 적게 소요되지만 파일 변경될 때마다 파일 크기가 증가하는 단점이 있습니다.

증분 백업(Incremental Backup)

증분 백업은 일정 시간마다 변경된 데이터만 백업하는 방식입니다. 다른 백업보다 복구시간이 오래걸리는 단점이 있지만 파일 양이 적어 빠른 백업이 가능한 장점이 있습니다.

LIST

'전공 > 데이터베이스' 카테고리의 다른 글

스키마(Schema)  (0) 2020.09.15
트리거(Trigger)  (0) 2020.09.15
GRANT 구문  (0) 2020.09.08
이상현상(Anomaly)  (0) 2020.07.13
ETL  (0) 2020.01.30
SMALL

계정에 테이블 접근 권한을 부여할 때 GRANT 구문을 사용한다. 

 

A계정에게 B 테이블의 select 권한을 주기

grant select on B to A

 

A계정에게 B 테이블의 select, insert, delete 권한 주기

grant select, insert, delete on B to A

 

A계정에게 C데이터베이스 모든 오브젝트 조회 권한을 주기

 

grant select on C.* to A

 

LIST

'전공 > 데이터베이스' 카테고리의 다른 글

트리거(Trigger)  (0) 2020.09.15
전체 백업, 차등 백업, 증분 백업  (3) 2020.09.13
이상현상(Anomaly)  (0) 2020.07.13
ETL  (0) 2020.01.30
DROP TABLE과 TRUNCATE TABLE  (0) 2018.07.17
SMALL

이상현상

데이터베이스의 설계가 잘못되었을 시에, 데이터의 중복이 발생하여 문제가 생기는 것을 이상현상이라고 한다.


이상현상에는 3개로 구분되어진다.

  • 삽입 이상 : 데이터 삽입 시 불필요한 데이터도 같이 삽입해야하는 문제
  • 갱신 이상 : 데이터 갱신 시 일관성 유지가 안되는 현상
  • 삭제 이상 : 데이터 삭제 시 필요한 데이터까지 연쇄 삭제 되는 현상

학번(PK)

과목(PK)

이름

생년월일

주소

20120001

자료구조

박무일

930201

대구

20140001

자바

김제리

950501

대전


삽입 이상

 학번

과목

이름

생년월일

주소

20120001

자료구조

박무일

930201

대구

20140001

자바

김제리

950501

대전

20150001

null

이현도

960601

인천


이현도라는 신규 데이터를 삽입하려는데 수강한 과목이 없는 상태라 null을 넣었으나, 과목은 pk이기에 not null이다.

그래서 이현도를 저장하기 위해선 임의의 값(불필요한 값)을 입력해야 넣을 수 있음. 이게 삽입 이상

갱신 이상

 학번

과목

이름

생년월일

주소

20120001

자료구조

박무일

930201

대구

20140001

자바

김제리

950501

대전

20120001

파이썬

박무일

930201

서울


파이썬을 수강한 박무일의 주소를 서울로 변경을 하였는데,

자료구조를 수강한 박무일의 주소 값과 다르게 된다.

위와 같이 일관성이 맞지 않는 것을 갱신 이상


삭제 이상

 학번

과목

이름

생년월일

주소

20120001

자료구조

박무일

930201

대구

20140001

자바

김제리

950501

대전

20120001

파이썬

박무일

930201

대구


자바를 수강한 김제리의 데이터를 삭제할 시에는 김제리의 생년월일 주소도 삭제되어 찾을수 없게된다. 이게 삭제 이상


위와 같은 이상 현상을 없애기 위해 정규화를 하게 된다.

LIST

'전공 > 데이터베이스' 카테고리의 다른 글

전체 백업, 차등 백업, 증분 백업  (3) 2020.09.13
GRANT 구문  (0) 2020.09.08
ETL  (0) 2020.01.30
DROP TABLE과 TRUNCATE TABLE  (0) 2018.07.17
CTAS(Create Table As Select)  (0) 2018.07.17
SMALL

ETL?

 

ETL 은 추출(Extract), 변환(Transform), 적재(Load)의 3가지 과정을 의미한다.

 

실시간으로 서비스 되는 OLTP 환경에서는 데이터를 분석 및 정합성 검증이 어렵다.

 

그래서 주기적으로 데이터를 추출하여, 변환하고, 데이터 분석을 할 DB(ODS)에 적재를 한다.

 

위와 같은 방식을 ETL 수행이라고 한다.

 

LIST

'전공 > 데이터베이스' 카테고리의 다른 글

GRANT 구문  (0) 2020.09.08
이상현상(Anomaly)  (0) 2020.07.13
DROP TABLE과 TRUNCATE TABLE  (0) 2018.07.17
CTAS(Create Table As Select)  (0) 2018.07.17
SQL 명령어  (0) 2018.07.16
SMALL

DROP TABLE?


DROP TABLE는 테이블을 잘못 만들었거나, 테이블이 더이 상 필요 없을 때 해당 테이블을 삭제 할 때 사용하는 명령어 이다.


DROP TABLE test.user;


실행 후


DESC test.user;


실행하면


위와 같은 테이블을 존재하지 않는다고 에러가 나게 된다.


TRUNCATE TABLE?


TRUNCATE TABLE는 테이블 자체가 삭제되는 것이 아니고 해당 테이블에 있는 모든 행들이 제거가 되는 명령어 이다.


TRUNCATE TABLE test.user;


실행 후


DESC test.user;


실행하면


위와 같이 테이블이 존재 하는 것을 확인 할 수 있다.


TRUNCATE는 테이블을 일괄 삭제하는 명령어로 DML로 분류 할수 있지만 내부 처리 방식이나 Auto Commit 특성 등으로 인해 DDL로 분류한다.

시스템 활용 측면에서 전제 행을 삭제하는 경우에는 TRUNCATE 명령어를 사용 하는 것이 더 좋다.

하지만 TRUNCATE는 정상적인 복구가 불가능하므로 주의를 해야 한다.


LIST

'전공 > 데이터베이스' 카테고리의 다른 글

이상현상(Anomaly)  (0) 2020.07.13
ETL  (0) 2020.01.30
CTAS(Create Table As Select)  (0) 2018.07.17
SQL 명령어  (0) 2018.07.16
UNDO와 REDO  (0) 2018.06.14
SMALL

CTAS(Create Table As Select)?


CTAS는 select문을 사용하여 테이블을 생성 하는 방법이다.

아래의 구문과 그림을 보자.


먼저 기본 테이블을 생성한다.


CREATE TABLE test.user (

no int(10),

name varchar(10),

address varchar(30)

);


실행 후


DESC test.user;


실행 하면


위와 같이 나오게 된다.


그리고 CTAS 방식으로 테이블을 생성 해본다.


CREATE TABLE test.user_tmp AS (

SELECT * FROM test.user);


실행 후


DESC test.user_tmp;


실행하면


위와 같이 나오게 된다.


몇번 써본 기억이 있기 때문에 알아두면 유용 할 것 같다.





LIST

'전공 > 데이터베이스' 카테고리의 다른 글

ETL  (0) 2020.01.30
DROP TABLE과 TRUNCATE TABLE  (0) 2018.07.17
SQL 명령어  (0) 2018.07.16
UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
SMALL

SQL 명령어?


SQL 명령어 종류에는 크게 4가지로 나누어 진다.


DML(Data Manipulation Language)


데이터를 조작하는 명령어를 의미한다. CRUD와 매칭이 된다.


SELECT : 데이터를 조회

INSERT : 데이터를 삽입

UPDATE : 데이터를 수정

DELETE : 데이터를 삭제


DDL(Data Definition Language)


테이블과 같은 데이터 구조를 정의하는데 사용하는 명령어를 의미한다.


CREATE : 테이블을 생성

ALTER : 테이블을 수정

DROP : 테이블을 삭제

RENAME : 테이블 이름을 수정


DCL(Data Control Language)


데이터베이스에 접근하고 객체들을 사용하도록 권한을 주는 명령어를 의미한다.


GRANT : 권한 부여

REVOKE : 권한 회수


TCL(Transaction Control Language)


DML에 의해 조작된 결ㄹ과를 트랜잭션 별로 제어하는 명령어를 의미한다.


COMMIT : DML 수행 작업 저장

ROLLBACK : DML 수행 작업 되돌리기






LIST

'전공 > 데이터베이스' 카테고리의 다른 글

DROP TABLE과 TRUNCATE TABLE  (0) 2018.07.17
CTAS(Create Table As Select)  (0) 2018.07.17
UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
DB정규화  (0) 2018.05.17
SMALL

작년 공기업 PT면접에서 나왔던 UNDO와 REDO에 대해 정리를 해보겠습니다.


EX)


UPDATE table

SET cnt = cnt+1

WHERE id = 1;


UNDO


UNDO는 원상태로 돌리다라는 의미를 가진다.

UNDO는 작업 롤백, 읽기 일관성, 복구의 역할을 가지며, 사용자가 했던 작업을 반대로 하는 것이다.


위의 예시에 UNDO 작업을 하면

UPDATE table

SET cnt = cnt-1

WHERE id = 1;


위와 같은 작업을 하게 된다.


REDO


REDO는 작업을 다시하다라는 의미를 가진다.

REDO는 복구의 역할을 하며, 오라클 서버에서 모든 작업에 대해 모두 REDO에 기록을 한다.


위의 예시에 REDO 작업을 하면

UPDATE table

SET cnt = cnt+1

WHERE id = 1;


위와 같은 작업을 하게 된다.


결론


간단하게 말하자면 REDO는 세션을 복구되는 과정에 사용되며 UNDO는 세션이 비정상 종료가 되기전에 커밋이 되지 않을 때 사용된다.

LIST

'전공 > 데이터베이스' 카테고리의 다른 글

CTAS(Create Table As Select)  (0) 2018.07.17
SQL 명령어  (0) 2018.07.16
UNION과 UNION ALL  (0) 2018.06.11
DB정규화  (0) 2018.05.17
트랜잭션  (0) 2018.05.04
SMALL

공기업 면접에서 나왔던 질문이다. 대답을 잘 하지 못해서 정리를 하고자 한다.


TABLE A

data

1

2


TABLE B

data

2

3


UNION


UNION DISTINCT를 줄여서 UNION으로 사용한다.

두 테이블의 결합을 나타내며, 중복을 제거하기 위해 SORT를 사용한다.

자료가 많거나 INDEX가 되어 있지 않은 컬럼을 대상으로 하면 쿼리시간이 길어질 수 있다.


다음 예시를 보자.

SELECT data

FROM A

UNION

SELECT data

FROM B;


위의 쿼리를 실행하면

data

1

2

3


위와 같이 중복된 값이 제거 되서 정렬이 된다.


UNION ALL


UNION ALL은 중복을 제거하지 않고 그대로 합집합 연산을 하여 결과를 보여준다.


다음 예시를 보자.

SELECT data

FROM A

UNION ALL

SELECT data

FROM B;


위의 쿼리를 실행하면

data

1

2

2

3


위와 같이 중복된 값도 합쳐서 나오게 된다.


결론


왠만해선 유니온을 사용하는 것을 추천하지 않는다. 왜냐하면 유니온을 사용한다는 것 자체가 두 개의 테이블을 원래 합쳐야 되는 것이기 때문이다.

그리고 중복에 대해 문제가 크게 나지 않는다면 UNION 보다는 UNION ALL을 사용하는 것이 낫다.(성능 때문에)






LIST

'전공 > 데이터베이스' 카테고리의 다른 글

SQL 명령어  (0) 2018.07.16
UNDO와 REDO  (0) 2018.06.14
DB정규화  (0) 2018.05.17
트랜잭션  (0) 2018.05.04
조인  (0) 2018.05.02
SMALL

정규화?


데이터 베이스 정규화는 불필요한 데이터를 없애고, CRUD 시 발생할 수 있는 이상현상을 방지하게 데이터베이스 설계를 재구성하는 것이다.



1차 정규화


1차 정규화는 각 row마다 column의 값이 1개씩만 있어야 한다. 즉, column이 원자값을 가져야 한다.


이름

나이

과목

철수

16

수학,영어

영희

17

수학

남수

15

국어

기철

18

영어


위의 테이블을 보면 철수의 과목에 2개의 값이 들어 있다.

그래서 1차 정규화에 만족하지 못한다.


이름

나이

과목

철수

16

수학

철수

16

영어

영희

17

수학

남수

15

국어

기철

18

영어


위와 같이 바꾸면 1차 정규화를 만족한다.


2차 정규화


2차 정규화는 모든 column이 완전 함수적 종속을 만족하는 것이다. 즉, 부분적 종속을 제거 하는 것이다.


이름

프로젝트명

부서 

직위

수당

철수

보안관리

개발

팀장

100

철수

IOT만들기

개발

부팀장

70

영희

웹기사분류

분석

팀장

100

남수

형태소분석

연구

사원

50


위의 테이블을 보면 이름, 프로젝트명이 기본키인데 부서 컬럼은 이름에 의해서만 함수적 종속성을 가진다.


이름

프로젝트명

직위

수당 

철수

보안관리 

팀장 

100

철수

IOT만들기

부팀장

70

영희

웹기사분류 

팀장

100

남수

형태소분석

사원

50


이름

부서

철수

개발

영희

분석

남수

연구


위와 같이 두 개의 테이블로 나누면 부분적 종속을 제거하고 2차 정규화를 만족한다.


3차 정규화


3차 정규화는 이행적 함수적 종속성을 제거하는 것이다.


이름

프로젝트명

직위

수당

철수

보안관리

팀장

100

철수

IOT만들기

부팀장

70

영희

웹기사분류

팀장

100

남수

형태소분석

사원

50


위 테이블을 보면 수당은 기본키가 아닌 직위에 의존적이다. 


이름

프로젝트명

직위

철수

보안관리

팀장

철수

IOT만들기

부팀장

영희

웹기사분류

팀장

남수

형태소분석

사원


직위

수당

팀장

100

부팀장

70

사원

50


위와 같이 두 개의 테이블로 나누면 3차 정규화를 만족한다.


BCNF 정규화


비결정자에 의한 함수종속을 제거해야 하는 것이다.


4차 정규화


테이블 내에서 N:M 관계를 가지는 속성들을 분리 하는 것이다.





LIST

'전공 > 데이터베이스' 카테고리의 다른 글

UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
트랜잭션  (0) 2018.05.04
조인  (0) 2018.05.02
SQL 인젝션  (0) 2017.11.24

+ Recent posts