본문 바로가기

DB/Oracle

(52)
[Oracle] Chapter 10. 백업/복구의 구조와 동작 10.1 백업/복구를 왜 배워야하는가? 데이터는 매우 중요한 자산이며 시스템에 따라서는 '돈과도 바꿀 수 없을 정도로 중요하다'라고 이야기하기도 한다. 여러분도 '열심히 작업하던 파일(데이터)을 실수로 저장하기 전에 종료해버렸다'와 같은 난감한 상황을 겪어 보지 않았는가? 개인적인 파일(데이터)이라면 다시 생성하면 되겠지만, 여러 사람이 사용하는 시스템에서는 그런 식으로 데이터를 복원할 수 없다. 예를 들어, 은행의 계좌 정보가 사라졌다면 어떻게 될까? 계좌 데이터를 다시 생성하는 방식은 애초에 불가능하며, 이내 대혼란이 발생할 것이다. 견고한 시스템을 구축하기 위해 디스크를 다중화하는 등의 노력을 기울인다 하더라도, 시스템이나 관련된 장비가 만능일 수는 없다. 오랜 시간 동안 가동하여 장비들이 노후화되..
[Oracle] Chapter 9. REDO와 UNDO의 동작 9.1 REDO와 UNDO를 왜 배워야 하는가? 트랜잭션이 가지고 있어야 하는 특성에 'ACID'라는 것이 있다. 이 특성을 구현하기 위해서 REDO와 UNDO는 빠질 수 없으므로 이들을 배울 필요가 있다. REDO와 UNDO에 대한 설명에 들어가기 앞서 ACID 특성이 대체 무엇인지 먼저 살펴보자. 9.1.1 A(Atomicity): 원자성 트랜잭션에 포함된 데이터의 변경은 '전부 OK'이거나 '모두 NG'라는 'all or nothing'을 말한다. DBMS는 수행 중인 트랜잭션에서 데이터를 일부만 변경하고 나머지는 수행하지 않은 채 커밋할 수 없다. 예를 들어, 어떤 트랜잭션에서 A 계좌에서 출금하고 B 계좌에 입금했을 떄 '출금은 기록됐지만 입금은 기록되지 않았다'는 상황이 발생하면 곤란하다. 원..
[Oracle] 파티션 테이블(Partition Table)이란 무엇인가? 파티션 테이블이란? 데이터베이스 테이블의 데이터들이 너무 많아서 어떤 데이터를 조회하려고 할 때 시간이 너무 많이 소요된다면 어떻게 해야 할까요? 이것을 개선할 수 있는 많은 방법이 있겠지만 파티션 테이블로 만드는 방법도 좋은 방법이 될 수 있습니다. 파티션 테이블은 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 파티션으로 나뉘어 데이터들이 각각의 세그먼트에 저장되는 테이블이라고 생각하시면 됩니다. 파티션 테이블에는 Pruning이라는 기능이 있어서 특정 데이터를 조회를 할 때 그 데이터가 속해있는 세그먼트만 빠르게 조회할 수 있는 기능이 있습니다. 이 뿐만이 아니라 파티션 테이블은 논리적으로는 하나의 테이블이기 때문에 조회 쿼리문을 특별하게 지정해 줄 필요는 없지만 데이터들이 물리적으로 다른 ..
[Oracle] Chapter 8. 오라클의 대기와 LOCK 8.1 대기와 오라클의 Lock을 왜 배워야 하는가? 시스템을 운영하다 보면 많은 시스템에서 데이터베이스 안에 대기가 발생해 성능이 제대로 나오지 않거나 처리가 지연되기도 하다. 대기의 구조를 제대로 이해하지 않으면 튜닝도 못 하고, 지연을 해소할 수도 없다. 나아가 'Lock 대기', 'Deadlock(교착 상태)'과 같은 장애를 만날 수도 있다. 이런 경우도 대기나 Lock의 구조를 제대로 이해하고 있지 않으면 대처도 어렵고 애플리케이션 담당자에게 설명하기도 어렵다. 8.2 데이터베이스에 Lock이 필요한 이유 고객이 창고에 맡긴 물건(ID:1)의 내용에 숫자 1을 더하고 싶다고 요청했다. 이 경우 대부분 다음과 같은 로직을 떠올린다. 물건의 내용을 변경하는 순서는? 1. 우선 물건(숫자)을 알고 싶..
[Oracle] Chapter 7. 오라클의 데이터 구조 7.1 오라클의 데이터 구조를 왜 배워야 하는가? 오라클은 전달받은 데이터를 그대로 저장하는 것이 아니라, 몆 개의 상자로 나누어서 저장하도록 고안됐다. 그래서 상자와 관련된 이야기(데이터의 구조)는 평상시 업무에서도 빈번하게 화두에 오르기 때문에 몰라서는 안 된다. 또한, 애플리케이션 개발 팀에서도 테이블이나 인덱스의 생성과 생성 요청을 해야 하므로 어느 정도의 지식은 필요하다. 그리고 성능과 관련된 부분에서도 데이터 구조와 관련된 지식은 필요하다. 다음의 키워드는 이번 장에서 설명할 데이터의 구조에 관한 용어이다. 들어본 적이 없을 수도 있지만, 실제로 데이터베이스를 관리할 때는 빈번하게 등장하는 키워드이므로 이번 장에서 제대로 이해하고 넘어가자. - 테이블스페이스(tablespace) - 세그먼트(..
[Oracle] Chapter 6. 커넥션과 서버 프로세스의 생성 6.1 애플리케이션에서의 접속을 왜 배워야 하는가? 그 이유는 애플리케이션에서 접속하는 것을 최적화하는 것만으로도 데이터베이스의 성능을 더욱 끌어올릴 수 있고, 애플리케이션에서 피해야만 하는 코딩 방식을 이해하는 데도 도움이 되기 때문이다. 오라클은 애플리케이션 서버를 사용한 시스템이나 클라이언트/서버 형태(클라이언트/서버(CS, Client/Server): 시스템 사용자가 사용하는 클라이언트 장비(주로 PC)에서 작동하는 클라이언트 프로그램을 '클라이언트;라고 부르며, 클라이언트에게 서비스를 제공하는 서버 장비에서 작동하는 서버 프로그램을 '서버'라고 부른다. 이 둘이 합쳐져서 클라이언트/서버를 구성한다.)의 시스템에서도 많이 사용되고 있다. 죽 오라클과 '오라클을 사용하는 애플리케이션'이 같은 서버 ..
[Oracle] Chapter 5. 오라클의 기동과 정지 5.1 기동과 정지를 왜 배워야 하는가? OS와 마찬가지로 기동과 정지를 배우는 것은 오라클의 내부 구조를 이해하는 데 큰 도움이 된다. 기동할 떄 어떤 파일을 어떻게 사용하는지, 의존 관계가 어떻게 되어 있는지를 안다면 내부 동작을 더 쉽게 이해할 수 있다. 더욱이 각종 파일이 손상된 장애에 대응해야 할 떄도 내부 동작에 관한 지식을 알고 있다면 도움이 된다. 또한, 이번 장에서 설명하는 내용 일부는 윈도우(Windows)에서 동작하는 오라클에는 해당하지 않을 수도 있다. 단, 내부 구조는 대부분 같으며, 유닉스 쪽이 프로세스들을 살펴보기에 좀 더 쉬우므로 유닉스상의 오라클을 이해하는 것이 윈도우상의 오라클을 이해하는 지름길이다. 5.2 오라클의 기동/정지 개요 오라클의 기동은 '창고 회사의 업무 시작..
[Oracle] Chapter 4. SQL문 분석과 공유 풀 4.1 SQL문의 분석과 공유 풀은 왜 배워야 하는가? 아무리 힘이 센 사람이라고 해도 작업을 효율적으로 하지 않으면, 힘이 약한 사람보다 작업량이 적을 수도 있다. RDBMS 역시 마찬가지이다. 아무리 디스크를 늘리고 클럭이 빠른 CPU를 추가하더라도 처리 방법 자체가 나쁘다면, 보잘겂없는 장비에서 동작하지만 처리 방법이 더 효율적인 RDBMS에게 질 수 밖에 없다. 또한, SQL을 처리하는 방법을 생성하는 데는 CPU를 오래 사용하므로, 처리 방법을 생성하는 횟수를 줄이면 데이터베이스 전체의 성능을 높일 수도 있다. 이번 장에서는 '분석(parse, 파스)'이라 부르는 처리 방법의 생성과 생성한 처리 방법을 캐시하는 장소인 '공유 풀(shared pool)'에 관해서 설명한다. 4.2 SQL문과 일반..