---
title: "오라클 DBMS 정리 01"
date: "2018-11-05"
tags: ["오라클DBMS"]
status: archived
verified: false
---

2018년 응용 소프트웨어 과정에서 Oracle DBMS와 SQL을 처음부터 학습하며 작성한 기록입니다. 데이터베이스의 기본 개념과 테이블·쿼리 구조를 직접 따라가며 정리했습니다. 이후의 백엔드 학습으로 이어지는 기초를 쌓던 시기의 기록으로 참고해주세요.

## 오라클 DBMS 정리 01 - ORACLE DBMS

---


### DBMS(Database Management System)
* **Data : 수, 문자, 이미지로된 자료(연구, 조사의 기본 재료)**
  - 데이터를 체계적으로 정리한걸 **Database**라 함
* 기존 종이, 판서 등의 데이터를 컴퓨터에서 사용할 수 있게 저장, 사용할 수 있는게 **DBMS**
* **과거의 데이터를 사용하여 미래를 예측하기 위해서 DB를 사용**
* DB의 특징
  - 공용 데이터
  - 실시간 데이터
  - 내용에 의한 참조
  - 통합 데이터
* 여러 종류의 프로그램(DBMS)이 존재
  - Oracle, DBII, MS-SQL, MySQL, SyBase...
* 데이터들을 테이블(Table)에 저장
  - **관계형 데이터베이스 관리 시스템(RDBMS, Relational Database Management System)**
  - Table
    + Column Name, Field Name
    + Column, Field(열)
    + Record, Row(행)


---

### 테이블을 조작하는 명령어 : SQL문(Structured Query Language)

* **ANSI Query**
  - ANSI(미국 국가표준협회)에서 지정한 SQL문
  - 제조사 쿼리의 바탕, 다른 DBMS를 써도 공통으로 적용되는 SQL
* **제조사 Query**
  - 제조사가 편의성을 고려해서 만든 SQL문
* 모든 DBMS의 쿼리는 다름
* **SQL문의 종류는 DDL(정의어), DML(조작어), DCL(제어어) 세 종류**
  - **DDL (Data Definition Language)**
    + CREATE, ALTER, DROP
  - **DML (Data Manapulation Language)**
    + INSERT, UPDATE, DELETE, SELECT
  - **DCL (Data Control Language)**
    + GRANT, REVOKE, COMMIT, ROLLBACK

---

### Oracle
* 대용량 데이터를 다룰 때 사용하는 DBMS (RDBMS)
* Larry Ellison(래리 엘리슨), Oracle CEO
* 개인 사용시 무료, 기업 사용시 비쌈..
  - Oracle XE는 완전 무료나 작은 용량 처리만 가능
* 컴퓨터 하나에 하나만 동작가능(SID(Security Identifier))
* **DB Server와 DB Client로 분할 설치**
  - DB Server : 정보를 저장하고 제공
  - DB Client : 서버에 접속, 정보 사용
* **뭐든지 다 대문자로 저장, 사용자 입력값은 소문자 가능**
* **Oracle DBMS는 Server Process, Server Instance, File 영역, Client Process로 구성**
  - **File 영역**
    + 저장되는 영역, 영속적
  - **Server Instance**
    + 메모리 영역, 일시적
  - **Server Process**
    + 서버 인스턴스를 사용하기 위한 소켓 프로그램
  - **Client Process**
    + Server Process에 접속하여 데이터를 주고 받음
* 오라클 동작과정
  - Client Process가 Server Instance Shared Pool에서 인증 수행
  - 인증되면 Server Instance Session에 메모리 확보, SQL shell 제공
  - 세션 할당 후 쿼리 시 실행 정보는 Server Instance Redo log에 저장
  - Server Process에서 쿼리 검증, Server Instance Shared Pool에서 실행계획 세움
  - File영역 DBF에서 필요한 정보 조회, 세션에 결과 전달
  - 사용자에게 결과 보여줌
  - 이처럼 같은 쿼리를 재사용시 세션(메모리)에서 가져오기 때문에 수행속도가 빨라진다.

---


### CREATE
* DDL(Data Definition Language), 데이터 정의어
* 생성할 때 사용(Table, Index, 계정생성, Sequence, View, Function, ... )
* Transaction 대상 쿼리가 아님(COMMIT, ROLLBACK 안됨) 
  - INSERT, UPDATE, DELETE가 Transaction 대상 쿼리
* Table 생성
  - Database를 저장하는 곳이 Table
  - Table은 Column과 Row(Record, Tuple)로 구성
  - 테이블명 무조건 영어로, 하나의 단어로 의미전달 안되면 '_'로 이을 것
    + 예 : TEST_TEMP
    + 한글가능하나 절대 쓰지말기, 테이블명 뒤에 숫자는 붙일 수 있지만 첫 글자로 숫자로 사용 안됨!
  - 테이블은 객체, 이름은 유일해야 함
  - 데이터형(Data Type)
    + 값을 구분하여 값을 저장하기 위한 예약된 메모리 공간
    + 문자열형 한글 한글자의 크기를 알 순 없음(몰라요, 뭘 썼는지 알아야 알 수 있음)
    + EUC-KR, MS949, KSC560일 땐 2byte
    + UTF-8일 땐 3byte (요즘 대세, "가나다" - 9byte)


![01-01](/md/legacy-assets/oracle/01-01.webp)



```sql
-- column level constraint과 table level constraint 존재(위치에 따라)
CREATE TABLE 테이블명(
  컬럼명 데이터형(크기) CONSTRAINT 제약사항명 제약사항,  
  ...
  CONSTRAINT 제약사항명 제약사항(적용컬럼),
  ...
);
```

```sql
-- 테이블 명 조회
SELECT tname FROM tab;

-- 한줄 주석
/*
   여러줄 주석
*/

-- DESC(description)는 테이블에 어떤 컬럼이 있는지 조회하는 명령어
DESC emp; 

DROP TABLE 연습했던테이블1, 연습했던테이블2...;

-- 휴지통비우기
PURGE RECYCLEBIN; 
```
