[오라클] 인스턴스 개요, 인스턴스의 식별
- 인스턴스: 데이터베이스 인스턴스는 데이터베이스 파일을 관리하는 메모리 구조 집합입니다.
물리적 수준에서 CDB는 CREATE DATABASE 문에 의해 생성된 디스크의 파일 집합입니다. CDB는 하나 이상의 사용자 생성 PDB를 포함합니다. PDB는 CDB에 속하는 전체 데이터 파일 세트 내에 자체 데이터 파일 세트를 포함합니다. 데이터베이스 인스턴스는 CDB 및 해당 PDB와 관련된 데이터를 관리하고 해당 사용자에게 서비스를 제공합니다.
실행 중인 모든 CDB는 하나 이상의 Oracle 데이터베이스 인스턴스와 연결됩니다. 인스턴스는 메모리에 존재하고 데이터베이스(가장 좁은 의미에서)는 디스크에 있는 파일 집합이기 때문에 인스턴스는 데이터베이스 없이 존재할 수 있고 데이터베이스는 인스턴스 없이 존재할 수 있습니다.
인스턴스가 시작되면 Oracle Database는 SGA(시스템 전역 영역)라는 메모리 영역을 할당하고 하나 이상의 백그라운드 프로세스를 시작합니다.
데이터베이스 인스턴스에는 백그라운드 프로세스가 포함됩니다. 그리고 서버 프로세스와 이러한 프로세스에 할당된 프로세스 메모리도 인스턴스에 존재합니다. 인스턴스는 서버 프로세스가 종료될 때 계속 작동합니다.
단일 인스턴스 구성에서는 데이터베이스와 데이터베이스 인스턴스 간에 일대일 관계가 존재합니다. Oracle RAC에서는 데이터베이스와 데이터베이스 인스턴스 간에 일대다 관계가 존재합니다.
데이터베이스 인스턴스는 STARTUP 명령으로 생성될 때 시작되고 종료될 때 끝납니다.
이 기간 동안 데이터베이스 인스턴스는 하나의 데이터베이스에만 연결할 수 있습니다. 또한 인스턴스는 데이터베이스를 한 번만 탑재하고 한 번만 닫고 한 번만 열 수 있습니다. 데이터베이스가 닫히거나 종료된 후 이 데이터베이스를 탑재하고 열려면 다른 인스턴스를 시작해야 합니다.
다음 표는 이전에 닫은 데이터베이스를 다시 열려고 시도하는 데이터베이스 인스턴스를 보여줍니다.
STARTUP 명령은 데이터베이스를 마운트하고 오픈하는 인스턴스를 생성합니다:
SQL> STARTUP
ORACLE instance started.
Total System Global Area 1207955552 bytes
Fixed Size 9134176 bytes
Variable Size 805306368 bytes
Database Buffers 385875968 bytes
Redo Buffers 7639040 bytes
Database mounted.
Database opened.
현재 인스턴스가 시작된 시간을 표시하는 쿼리:
SQL> SELECT
2 TO_CHAR(STARTUP_TIME,'MON-DD-RR HH24:MI:SS')
3 AS "Inst Start Time" FROM V$INSTANCE;
Inst Start Time
---------------------------
JAN-05-22 08:38:16
인스턴스가 데이터베이스를 닫고 shut down되어, 인스턴스의 생명이 종료됨:
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
다시 인스턴스를 생성:
SQL> STARTUP
ORACLE instance started.
Total System Global Area 1207955552 bytes
Fixed Size 9134176 bytes
Variable Size 805306368 bytes
Database Buffers 385875968 bytes
Redo Buffers 7639040 bytes
Database mounted.
Database opened.
다시 인스턴스가 시작된 시간을 출력하면 방금 종료한 인스턴스와는 다른 인스턴스임을 확인할 수 있습니다:
SELECT
TO_CHAR(STARTUP_TIME,'MON-DD-RR HH24:MI:SS')
3 AS "Inst Start Time" FROM V$INSTANCE;
Inst Start Time
---------------------------
JAN-05-22 14:04:39
단일 호스트에서 다중 인스턴스가 상주할 수 있기 때문에, 액세스 하려는 인스턴스를 구분하고 지정할 수단이 필요합니다.
- Oracle Base Directory: Oracle Base 디렉토리는 Oracle 제품에 대한 바이너리를 저장합니다. 다음 예는 운영 체제 사용자 계정 oracle의 Oracle Base 디렉토리를 보여줍니다.
[oracle@enp0s3 jvm]$ echo $ORACLE_BASE
/u01/app/oracle
여기서 /u01/은 mount point이고, /u01/app/는 애플리케이션 소프트웨어의 subtree입니다.
- Oracle Home Directory: Oracle database의 소프트웨어 위치입니다. Oracle Database 소프트웨어를 새로 설치할 때마다 새 Oracle 홈 디렉토리를 지정해야 합니다. 기본적으로 Oracle 홈 디렉토리는 Oracle base(ORACLE_BASE) 디렉토리 트리 내의 종속 항목입니다. 버전이 다르고 사용자 계정이 다른 여러 데이터베이스가 동시에 공존할 수 있습니다. 예를 들어,
/u01/app/oracle/product/12.1.0/dbhome_1
/u01/app/oracle/product/12.1.0/dbhome_2
/u01/app/oracle/product/18.0.0/dbhome_1
오라클 베이스 뒤의 경로 명에는 제품 릴리즈 번호와 오라클 홈 상대 디렉토리를 나타냅니다.
- Oracle System Identifier (SID): SID(시스템 식별자)는 특정 호스트의 Oracle 데이터베이스 인스턴스에 대한 고유한 이름입니다.
UNIX 및 Linux에서 Oracle Database는 SID 및 Oracle 홈 값을 사용하여 공유 메모리에 대한 키를 생성합니다. 또한 Oracle Database는 기본적으로 SID를 사용하여 데이터베이스 control 파일과 같은 관련 파일을 찾는 초기화 파라미터 파일을 찾습니다.
Oracle Database는 서비스 이름을 ORACLE_HOME 및 ORACLE_SID로 변환합니다.
Oracle Home에는 인스턴스별 파일이 포함되어 있습니다. 이름에 SID가 포함된 파일은 Oracle 기본 구성 디렉토리(ORACLE_BASE_CONFIG)의 dbs 하위 디렉토리에 있습니다.