출처: 오라클 구조 pdf 파일
- 인스턴스와 데이터베이스
- 데이터베이스의 구성 요소
- 인스턴스의 구성 요소
- 데이터 딕셔너리
오라클에서의 용어에 차이가 있다.
우리가 살고 있는 실제 세계에서 인스턴스와 데이터베이스를 유추해 볼 수 있다.
데이터베이스를 ‘섬’으로 간주하면, 인스턴스는 섬에 놓여진 ‘다리’로 생각할 수 있다.
이 다리를 통해 차가 왕래한다. 만일 다리가 폐쇄되면,
섬이 존재하기는 하지만 어떠한 차도 다리를 건널 수 없다.
✔️오라클 용어로 말해, 인스턴스가 기동되어 있으면 데이터가 데이터베이스에 입력되기도 하고 이로부터 출력되기도 한다.
이때 데이터베이스의 물리적 상태는 변하고 있다.
만일 인스턴스가 종료되어 있으면, 데이터베이스가 물리적으로 여전히 존재하기는 하지만
사용자는 데이터베이스를 액세스할 수 없다.
이때 데이터베이스는 정적이다. 인스턴스가 다시 서비스되면, 데이터는 데이터베이스에 입출력될 수 있다.
데이터파일(Datafile)
이라 불리는 물리적 구조로 구성된다.
- 제어 파일(control files)
- 데이터 파일(datafile)
- 리두 로그 파일(redo log files)
항목 | 설명 |
---|---|
데이터베이스 이름 | |
데이터베이스 생성 시기 | |
데이터파일의 현재 상태 | 복구가 필요한지 여부, 읽기 전용 상태 여부 등 |
이전 데이터베이스 종료 상태 | 데이터베이스가 제대로 닫혔는지 여부 |
아카이브 리두 로그 적용 기간 | 각 아카이브 리두 로그에 의해 적용되는 기간 |
데이터베이스 백업 종류 | 데이터베이스에 수행된 백업의 종류 |
MAXLOGFILES
: 데이터베이스에 대한 리두 로그 파일 그룹의 최대 수
MAXLOGMEMBERS
: 각 리두로그 파일 그룹에 대한 멤버의 최대 수
MAXLOGHISTORY
: 컨트롤 파일이 포함할 수 있는 리두 로그 히스토리 파일의 최대 수.
- 이 히스토리 파일은 아카이브 리두로그에 유지 되어 있는 트랜잭션의 범위를 식별함으로써 리두로그를 사용하는 자동 복구 작업을 간단히 하기 위해 사용
MAXDATAFILES
: 컨트롤 파일이 관리할 수 있는 데이터파일의 최대 수.
- MAXDATAFILES 매개변수에 지정된 수보다 많은 데이터 파일을 추가하면, 컨트롤 파일이 자동으로 확장 된다.
- 설명: 컨트롤 파일이 관리할 수 있는 데이터 파일의 최대 수를 설정한다. 데이터베이스가 생성될 때, 컨트롤 파일 내에서 관리할 수 있는 데이터 파일의 수를 정의하는 중요한 매개변수
- 오라클 7 버전에서는 이 매개변수 값이 초과될 경우 제어 파일을 재생성해야 했으나, 오라클 8 버전 이후에서는 자동으로 컨트롤 파일이 확장된다.
- 주요 기능: 데이터 파일을 추가할 때 컨트롤 파일의 용량 제한을 설정하며, 데이터베이스 크기가 확장될 수 있는 범위를 결정한다.
MAXINSTANCES
: 컨트롤 파일이 관리할 수 있는 인스턴스의 크기와 수
CONTROL_FILES = (/u00/oradata/prod/prodctl1.ctl, /u01/oradata/prod/prodctl2.ctl, /u02/oradata/prod/prodctl3.ctl)
- 오라클은 모든 컨트롤 파일 복사본이 본 파일과 일치하도록 유지하므로, 변경도 동시에 일어난다.
데이터파일 헤더(Datafile Header)
: 각 데이터파일의 첫 번째 블록 물리적 관점: 데이터 파일은 운영체제 블록으로 저장된다.
논리적 관점: 데이터블록, 익스텐트, 세그먼트 (3개의 중간 레벨)
✔️익스텐트(extent)
: 오라클 데이터 파일 내 연속적인 데이터 블록의 집합
✔️세그먼트(segment)
: 하나 이상의 익스텐트로 구성되는 테이블이나 인덱스와 같이, 오라클 데이터베이스 내에서 공간을 차지하는 객체
트랜잭션과 오라클 내부 작업의 결과로써, 데이터베이스에 변경된 사항에 대한 기록을 저장한다.
일반적인 작업 시, 오라클은 변경된 블록을 메모리에 캐시(혹은 저장)
한다.
인스턴스 장애가 발생했을 경우, 변경된 블록 중 일부는 데이터 파일에 쓰여지지 않았을 수도 있다.
✔️ 리두 로그에 변경사항을 기록함으로써, 장애 발생 시 유실된 변경 사항을 복구해낼 수 있다.
오라클 7버전에서는 인덱스 생성, SELECT 문을 이용한 테이블 생성, 데이터 적재 등과 같은 일부 작업에 대해 리두 정보 생성의 비활성화를 지원했다.
각 오라클 인스턴스는 데이터베이스의 변경 사항을 기록하기 위해 리두 스레드
를 사용한다.
리두 스레드
는 하나 이상의 리두 로그 멤버로 구성된 리두 로그 그룹들
로 구성된다.
논리적으로는 리두로그 그룹을 단일 리두 로그 파일로 생각할 수 있다.
여러 개의 멤버가 하나의 리두로그 그룹에 존재할 때, 오라클은 여러 개의 리두 로그 파일 복사본을 유지한다.
- 🚨 오라클 데이터베이스 상태와 안전에 매우 중요하다.
유실된 리두 로그 파일은 재생성할 수 있는 방법이 없다. 따라서 반드시 여러 개의 리두 로그 파일 복사본을 유지해야 한다.
오라클은 항상 모든 리두로그 파일 복사본이 갱신될 때까지 기다린다.
오라클이 하나의 리두 로그 파일을 채웠으면, 자동으로 다음 그 로그 파일을 사용하기 시작한다.
모든 이용 가능한 리두로그 파일을 순환했으면, 첫번째 리두로그 파일로 돌아가 이를 재사용한다.
리두 로그 시퀀스 번호를 사용하여 상이한 리두 로그를 추적하는데, 이 시퀀스 번호는 리두 로그 파일 내에 기록된다.
redolog1.log, redolog2.log, redolog3.log 가 있다고 가정하자.
- 오라클이 이 파일들을 처음으로 사용하는 경우, 각 리두로그 파일에 대한 리두 로그 시퀀스 번호는 각각 1,2,3이다.
- 오라클이 첫번째 리두로그 파일인 redolog1.log로 돌아가면 오라클은 이를 재사용하되, 리두 로그 시퀀스 번호 4를 로그 파일에 부여한다.
- 오라클이 redolog2.log로 이동하면, 오라클은 이 파일에 리두로그 시퀀스 번호 5를 부여한다.
- 오라클은 자동으로 리두 로그 파일을 재사용하기 때문에, 리두 로그 파일이름이 반드시 리두 로그 파일 시퀀스 내의 리두로그 파일의 위치를 나타내는 것은 아니다.
- 온라인 리두로그(Online Redo Logs)
- 아카이브 리두 로그(Archived Redo logs)
온라인 리두로그
: 오라클이 데이터베이스에 변경사항을 기록하기 위해 순환하여 사용하는 운영체제 파일들아카이브 리두로그
: 온라인 리두로그의 재사용에 따른 리두 데이터의 유실을 막기 위해 생성되어 채워진 온라인 리두 로그의 복사본들
오라클 데이터베이스는 아카이빙 리두 로그와 관련하여 다음 두 가지 모드를 운영할 수 있다.
NOARCHIVELOG
ARCHIVELOG
- 아카이브 리두로그와, 온라인 리두로그는 함께 모든 변경사항에 대한 완벽한 정보를 데이터베이스에 제공한다.
이 두 파일을 함께 사용하면, 장애 발생 시점까지 커밋된 모든 트랜잭션 복구가 가능하다.
로그 시퀀스 번호는 오라클이 데이터베이스 복구를 위해 온라인 리두로그와 아카이브 리두 로그를 사용하는 동안, 가이드 역할을 한다.
ALTER DATABASE ARCHIVELOG
LOG_ARCHIVE_START = TRUE
LOG_ARCHIVE_DEST = C:\ORANT\DATABASE\ARCHIVE -- 아카이브 리두 로그 파일 작성할 디렉토리 LOG_ARCHIVE_FORMAT="ORCL%S.ARC" --- 오라클이 아카이브 리두 로그 파일 이름에 대해 사용할 형식을 지정
Placeholder | Description |
---|---|
%s | 왼쪽이 0으로 채워지지 않은 시퀀스 번호로 대체된다. |
%T | 0으로 채워진 리두스레드 번호로 대체된다. |
%t | 0으로 채워지지 않은 리두스레드 번호로 대체된다. |
%S | 왼쪽이 0으로 채워진 시퀀스 번호로 대체된다. |
ex) 아카이브 리두 로그 파일 이름이 스레드 번호와 시퀀스 번호를 포함하고,
0으로 채워지기를 원하는 경우LOG_ARCHIVE_FORMAT="ORA%T%S.ARC"
초기화 파일은 오라클 인스턴스가 기동될 때마다 읽혀지므로, 매개변수들을 변경하더라도 인스턴스가 종료되어 재기동될 때까지는 효력이 없다.
자동 아카이빙을 활성화한다고 데이터베이스가 ARCHIVELOG 모드 상태로 되는 것은 아니다.
LOG_ARCHIVE_START 매개변수는 기본적으로 FALSE로 설정되어 있다.
✔️ 우선 초기화 매개변수를 변경한 다음,
ALTER DATABASE ARCHIVELOG
명령어를 사용하자.
아카이브 로그 대상 위치에, 리두 로그를 저장할 충분한 공간이 있는지 확인해야 한다.
LOG_ARCHIVE_DUPLEX_DEST
: 리두 로그가 중복적으로 저장될 추가 위치를 지정한다.LOG_ARCHIVE_MIN_SUCCEED_DEST
: 리두 로그가 반드시 하나 또는 모든 위치에 성공적으로 작성되어야 하는지 여부를 표시한다.