DataBase 11

DBMS 개요

Database 정의 사용자가 데이터베이스와 상호작용하면서 데이터를 다루는 프로그램 구성 데이터파일 + 컨트롤 파일 + 리두로그파일 구조화된 데이터 집합 특징 영구저장소 큰 데이터를 영구적으로 저장 프로그래밍 인터페이스 사용자들이 데이터를 쉽게 다룰 수 있도록 SQL 제공 트랜잭션 지원 ACID 특성 3계층 구조 프레젠테이션 계층 비즈니스 계층 데이터 계층 SQL 정의 RDBMS 프로그래밍 언어 명령어 DDL(Data Definition Language) 데이터 담는 보관용기에 관한 명령어 DML(Data Manipulation Language) 데이터 조작과 관련한 명령어 데이터 타입 문자열 CHAR, VARCHAR, NCHAR, NVARCHAR 비트 array BIT BIT VARYING 숫자 INT..

DataBase/Tibero 2023.10.14

10장 백업/복구의 아키텍처와 동작

백업/복구를 배워야하는 이유 데이터는 중요한 자산이기 때문이다. 백업의 종류와 특징 백업에는 콜드백업과 핫백업이 있다. 콜드백업은 인스턴스를 중지시킨 상태에서의 백업을 의미한다. 콜드백업은 체크포인트된 상태에서 백업을 진행한다. 핫백업은 인스턴스가 가동중인 상태에서의 백업을 의미한다. 온라인 백업의 순서와 명령어 ALTER DATABASE BEGIN BACKUP; 백업 실행 ALTER DATABASE END BACKUP; 백업 시작 시점과 백업이 끝난 시점 사이에 변경이 일어날 경우, 백업 시작 시점의 백업에서 추가로 변경된 리두로그를 기록하여 문제가 없도록 한다. EXPORT를 사용한 논리 백업 실제 데이터를 빼오는 형태의 백업으로 리두로그를 이용해 복구할 수 없다. 데이터를 구조화된 포맷으로 백업을 ..

9장 리두와 언두의 동작

트랜잭션의 특성 트랜잭션을 구현하기 위해 ACID가 필요합니다. ACID를 구현하기 위해 리두와 언두가 필요합니다. ACID에 대해 먼저 알아봅시다. ACID Atomicity: 원자성 트랜잭션(분할 할 수 없는 데이터 변경의 최소 단위)에 포함되는 데이터 변경은 all or nothing을 갖는 특성을 의미합니다. Consistency: 일관성 트랜잭션이 변경사항을 적용할 때 미리 예측된 방식으로 작동하는 것을 의미합니다. Isolation : 격리성 트랜잭션을 다중으로 실행시키더라도 한개 한개 실행한 것과 결과값이 동일해야한다는 의미입니다. 즉 트랜잭션은 서로 독립되어 있습니다. DBMS에서 격리 수준을 설정할 수 있습니다. Durability: 지속성 커밋한 트랜잭션은 장애가 발생하더라도 커밋(변경..

8장 오라클의 대기와 락

DB에 락이 필요한 이유 데이터를 보호함으로써 다중처리를 실현하기 위함입니다. 락이 풀리는 시점 데이터를 커밋하거나 롤백할 때 락이 풀립니다. 대기와 대기 이벤트 대기란 기다리는 상태를 의미합니다. 대기 이벤트는 기다리는 일을 의미합니다. 대기의 종류 대기의 종류에는 idle wait과 not idle wait이 있습니다. idle wait은 이유 없이 대기하고 있는 것입니다. not idle wait은 이유가 있는 대기입니다. not idle wait 안의 기다림의 대상의 유형에 따라 2종류로 나눕니다. 기다림의 대상이 정상인 것과 비정상인 것. 기다림의 시간은 not idle wait 대기시간 + SQL 처리시간으로 구성됩니다. 락 대기 락 대기란 락이 걸려있는 대상에 대해 락을 걸기 위해 락이 풀릴..

7장 오라클의 데이터 구조

데이터 구조가 필요한 이유 대량의 가변 데이터를 빠르게 CRUD 하기 위함이다. 물리 구조 O/S에서 보이는 구조 논리 구조 O/S에서 보이지 않는 구조 데이터 구조의 종류 행 책에 비유할 수 있다. ROWID는 행주소이다. ROWID는 (파일번호 + 블록번호 + 행번호)로 구성된다. 블록 책을 담는 정리함에 비유할 수 있다. PCTFREE는 메모리 여유공간을 의미하는 환경변수이다. 값이 작으면 여유공간이 없다는 의미이다. PCTUSED는 메모리가 얼만큼 사용됐는지를 의미하는 환경변수이다. 값이 작으면 여유공간이 있다는 의미이다. 익스텐트 책을 담는 정리함을 보관하는 선반에 비유할 수 있다. 연속된 블록의 집합이다. 익스텐트의 첫위치와 블록의 개수로 데이터를 관리한다. ASSM 이용시 PCTUSED를 신..

6장 커넥션과 서버 프로세시의 생성

어플리케이션에서 커넥션을 배워야 하는 이유 클라이언트와 오라클 데이터베이스가 하나의 서버 위에 있는 구성은 드물다. 보통은 클라이언트 프로그램과 오라클 데이터베이스 프로그램은 네트워크로 연결되어 있다. 이러한 이유로 인해 두 프로세스 간 연결을 맺어야 하는데 이 때 시간이 소요되어 해당 과정에 대해 숙지함으로써 성능을 향상시켜보자. 오라클 커넥션과 소켓 네트워크 안에는 여러 소켓이 있다. 소켓은 "주소 + 포트번호"로 이루어져 있다. 주소와 포트번호를 통해 소켓을 서로 구분한다. 커넥션 동작에서 주요하게 살펴보아야 하는 것은 "연락을 기다리는 프로세스 존재"와 송신측에서의 "주소 및 포트를 지정"해야 한다는 것이다. 오라클에서 수신을 기다리고 있는 프로세스를 리스너라고 한다. 해당 프로세스는 서버 프로세..

5장 오라클의 기동과 정지

오라클 DBMS 기동과 정지를 배워야 하는 이유 기동 시 어떤 파일을 사용하는지 파일 간 의존관계가 어떻게 되는지 앎으로써 장애에 어떻게 대응하는지 위 내용을 토대로 유닉스용 오라클의 기동과 정지의 내부 동작에 대해 알아보자 오라클 창고회사의 업무 시작과 종료 상태 비유 상태 수행작업 SHUT DOWN 퇴근 정지 상태 NO MOUNT 출근 bg ps와 SGA 확보 bg 가동 및 SGA 확보 MOUNT 관리대장 읽음 데이터 파일 접근 가능 상태 컨트롤 파일 읽음 OPEN 업무 중 SQL 처리할 수 있는 상태 데이터 파일 또는 redo log 체크 인스턴스, 데이터베이스, 그리고 주요 파일의 구성 오라클에서는 관리하기 위한 단위로 인스턴스를 사용합니다. 인스턴스는 백그라운드 프로세스 + 공유 메모리입니다. ..

4장 SQL문 분석과 공유 풀

SQL 문의 분석과 공유 풀을 배우는 이유? [SQL문 분석 / 플랜 생성]에 CPU의 처리시간이 오래 걸려 생성하는 횟수를 줄이기 위해 SQL문의 분석을 배웁니다. 처리 방법의 생성 결과를 공유풀에 캐시하기 때문에 공유 풀(shared pool)을 배웁니다. SQL 문과 일반적인 프로그래밍 언어의 차이 프로그래밍 언어는 처리 방법을 기술합니다. SQL은 처리 방법을 기술하지 않아 작업을 수행하기 위해 옵티마이저(파서)가 SQL문을 분석하여 플랜을 생성합니다. 서버 프로세스와 분석 오라클은 파서가 플랜을 생성할 때 알고리즘을 기반으로 생성합니다. 알고리즘에는 규칙 기반과 비용기반이 있습니다(오라클 10g부터 규칙 기반이 제외되었습니다). 서버 프로세스는 SQL문의 처리를 최우선으로 합니다. Oracle에..

3장 캐시와 공유 메모리

캐쉬의 역할 캐쉬의 역할은 서버 프로세스에게 데이터를 전달하는 역할을 한다. 본래는 서버 프로세스가 디스크까지 가서 데이터를 가지고 와야 되지만 캐시가 있음으로써 클라이언트에게 빠르게 데이터를 전달해 줄 수 있다. 캐쉬 내 데이터의 저장 단위 블록 캐쉬에 데이터를 저장할 때 블록이라는 최소 저장 단위(I/O)를 기준으로 저장된다. 비유하자면 여러 작은 상자를 담기 위한 큰 상자이다. 여기서 작은 상자는 데이터 큰 상자는 블록을 의미한다. 해당 단위는 데이터베이스가 생성될 때 초기화 파라미터로 설정해주어야 하며 데이터베이스를 다시 생성하지 않는 이상 변경할 수 없다. 블록의 저장단위는 2KB, 4KB, 8KB, 16KB 32KB 중에 선택할 수 있다. 값을 지정하지 않을 경우 운영체제 시스템 블록의 배수 ..

2장 오라클의 여러 프로세스

데이터베이스가 여타 다른 어플리케이션 프로그램과 다른점 어플리케이션은 같은 어플리케이션이 여러개가 실행되어도 프로그램 간 데이터를 공유하지 않습니다. 이와는 다르게 데이터베이스는 여러 프로세스가 하나의 데이터베이스를 사용할 수 있습니다. 이로 인해 여러프로세스가 데이터베이스의 데이터에 I/O 작업을 수행할 수 있습니다. 여러 사용자와 프로그램이 데이터베이스를 공유하고 있는 형국입니다. 프로세스와 스레드의 차이 실행 중인 프로그램을 프로세스라고 합니다. 스레드는 프로세스내 실행 단위입니다. 둘다 병렬로 처리하기 위한 구조이지만 차이점은 부하의 크기와 메모리 공유 여부입니다. 프로세스는 부하가 크고 프로세스끼리 메모리를 공유하지 않습니다. 스레드는 부하가 적고 스레드끼리 데이터를 공유합니다. 여기서 부하가 ..