data instance는 db파일을 관리하는 메모리 구조의 집합이다.
instance는 메모리에 존재하고 db는 디스크에 존재한다.
instance는 db없이 존재 가능하지만, 역으로는 성립되지 않는다.

SGA는 다양한 기능을 제공하는데 다음과 같다.
SGA는 운영체제에 따라 다양한 방식으로 공유된다.
오라클 db는 싱글 인스턴스 또는 Oracle Real Application Cluster(Oracle RAC) configuration으로 실행된다. 이러한 configuration은 mutually exclusive 하다.
싱글 인스턴스는 db와 인스턴스가 1대1 연관이고, RAC는 1대다 연관이다.

싱글 인스턴스이건, RAC이건 상관없이 인스턴스는 한번에 하나의 db랑만 연관될 수 있다.
인스턴스를 시작하고 mount를 하면 된다.
다중 인스턴스도 동시에 같은 컴퓨터에서 각각의 db를 접근하며 돌아갈 수 있다.
모든 인스턴스는 read/write이거나 read-only이다.
default값은 read/write이며 DML과 클라이언트 어플리케이션과 직접 연결을 지원한다.
read-only 인스턴스의 경우 쿼리문을 실행할 수 있지만 DML이 불가능하고, 클라이언트와 직접 연결이 불가능하다.
12c 버전 이전에는 read/write만 있었지만 이후에 read-only 인스턴스가 추가되면서 read/write와 read-only 각각 인스턴스에 parallel하게 SQL문을 사용할 수 있게 되었다.
system identifier(SID)는 특정 호스트에서 오라클 인스턴스의 unique한 이름이다.
유닉스나 리눅스 환경에서 SID와 Oracle home을 통해 shared memory를 위한 key를 만든다.
또한 SID를 통해 initialization 파라미터 파일의 기본경로를 설정한다.

db를 켜고 끄는 것은 매우 강력한 관리 옵션이다. 따라서 특별한 권한이 필요하다.
다음과 같은 권한들이 db가 닫히더라도 인스턴스에 접근할 수 있다.
만약, SYSDBA로 접속하게 되면 SYS가 소유한 스키마로 간다.
SYSOPER로 접속하면 public 스키마로 간다. SYSOPER는 SYSDBA의 subset이다.
alert log: db의 메시지나 오류를 시간순(chronological) 로그로 보여주는 파일. ADR(Automatic Diagnostic Repository) 안에 있다.
db를 마운트하기 위해선 컨트롤 파일이 필요하다. db를 열 때 컨트롤 파일을 읽어서 데이터 파일들과 online redo log file의 이름을 찾는다.
오라클에서는 여러개의 인스턴스들이 똑같은 db를 동시에 마운트할 수 있도록 하는데 이때 CLUSTER_DATABASE initialization parameter가 필요하다.
티베로에서도 마찬가지로 tip파일에 CLUSTER_DATABASE를 통해 클러스터를 킬 수 있다.

마운트된 db를 open을 한다는 것은 일반(normal) db 시스템을 사용하게 한다는 것이다.
normal mode가 되면 다음과 같은 기능을 수행할 수 있게 된다.
만약 어떠한 데이터 파일이나 redo log 파일이 제공되지 않을 경우 에러를 반환하는데 이때, Media recovery가 필요해진다.

정상적으로 종료됐을 경우, SGA에 있는 데이터들을 데이터 파일과 online redo log file에 기록하고 이 둘도 close한다. SGA 메모리를 해제하고 background 프로세스들도 종료한다.
비정상적으로 종료됐을 경우, SGA에 있는 데이터들을 저장하지 못하고 종료된다. 이때 recovery를 자동으로 수행한다. 이때 background 프로세스나 기존 메모리가 남아 있을 수 있는데, 이럴 경우 다시 인스턴스를 실행하는데 실패할 수 있다.
체크포인트는 복구나 db가 종료되었을 때 일관성을 유지할 수 있게 해주는 중요한 기능이다.
checkpoint position 이라는 데이터 구조가 있다.
checkpoint position은 가장 오래된 dirty buffer로 선정된다. 그 후 체크포인트 포지션은 redo stream에서 포인터처럼 사용된다.
수정된 db buffer들을 db buffer cache에서 디스크로 쓴다.
checkpoint process(CKPT)가 데이터 파일 헤더와 컨트롤 파일에 체크포인트를 작성한다.
체크포인트는 다음과 같은 여러 타입이 있다.
Instance recovery는 가장 최신 체크포인트 이후 변경들을 복구 하기 위해 online redo log에 있는 기록들을 실행하는 것이다.
Instance recovery는 이전 종료가 inconsistent한 상황에서 관리자가 db를 열려고 할 때 자동으로 발생된다.
db에서는 redo 스레드가 열려있는데, 대응되는 스레드가 존재하지 않는다면 instance recovery가 필요하다고 판단한다.
instance recovery는 체크포인트를 통해서 어떠한 변경을 데이터 파일에 적용할지 결정한다.
체크포인트 포지션은 체크포인트보다 커밋된 모든 변경들의 SCN이 더 낮다는 것을 보장한다.
instance recovery를 하는 동안, db는 체크포인트 포지션과 redo thread 사이에 있는 변경들을 적용한다.

instance recovery는 먼저 roll forward를 진행해서 online redo log에 있는 내용들을 적용시키고, 체크포인트 포지션을 기준으로 roll back을 해서 uncommit된 변경들을 없앤다.
인스턴스를 실행시키기 위해선 반드시 server parameter file이나 text initialization parameter file을 읽어야 한다.
Initialization parameters는 인스턴스의 기본 동작에 대한 configuration으로 인스턴스 실행 시에 읽는다.
capacity를 다루는 파라미터를 Variable parameter라고 부른다. 이를 잘 사용하면 db의 성능을 향상시킬 수 있다.
server parameter file은 initialization parameters의 레포지토리이다.
server parameter file은 다음과 같은 특성을 가지고 있다.
Key=value 쌍으로 이루어져 있는 text 파일이며, 변경이 이루어져도 현재 인스턴스 내에서만 적용된다.(종료되면 다시 원래대로 돌아온다.)
오라클 db는 버그나 파일 오류들에 대한 fault diagnosability infrastructure를 가지고 있다.
만약 오류가 발생하면 problem key를 기반으로 ADR이 오류를 인식한다. 그 후 incident alert를 통해 진단 및 해결을 한다.