이전 포스트: [Oracle] Oracle Background Process
다음 포스트: [Oracle] Control File 관리하기
Parameter File
Startup 명령을 치면 Oracle Server Process는 가장 먼저 Parameter File을 찾아 읽습니다.
Parameter File에는 pfile
, spfile
이 있습니다.
pfile
: 정적 파라미터 파일. 관리자가 수동으로 파일 내용을 변경.spfile
: 동적 파라미터 파일. 서버 프로세스가 자동으로 변경 가능.No Mount
No Mount 단계에서 Server Process는 Parameter File을 읽고 Instance
를 생성합니다. 메모리를 할당 받게 되고, Alert Log
파일을 열어서 로깅을 시작합니다.
Alert Log
: 인스턴스가 시작/운영/종료될 때까지 중요한 내용들을 모두 저장하고 있습니다. 예를 들어 서버에서어떤 장애가 발생
했거나문제의 징후
가 보일 경우 Alert Log의 내용을 살펴보면 답을 찾을 수 있습니다.
10g
에서Alert Log
의 경로는
$ORACLE_BASE/admin/<SID>/bdump/alert_<SID>.log
입니다.
11g
이상에서Alert Log
의 경로는
$ORACLE_BASE/diag/rdbms/<SID>/<SID>/trace/alert_<SID>.log
입니다.
Control File
Control File의 위치 정보는 Parameter File
에 적혀 있습니다.
Database 전체의 상태 정보
가 들어 있습니다.
Mount
Database의 이상 유무를 확인합니다. 만약 Instance Crash로 판단될 경우 smon이 Instance Recovery
를 수행합니다. 복구하려는 내용이 Online Redo Log File
에 존재할 경우 Instance Recovery
를 수행하지만, Archived Redo Log File
에 존재할 경우 복구를 수행할 수 없습니다. 이때는 Media Recovery
상태가 되고 관리자가 직접 복구를 수행해야 합니다.
이 단계에서는 단순히 Control File에 적혀 있는 여러 파일의 경로들에 해당 파일이 있는지만 확인합니다.
(데이터의 정합성은 Open 단계에서 따집니다)
어떤 값을 Oracle에게 전해주기 위해 사용하는 변수 같은 역할을 하는 것이 파라미터입니다. 파라미터에는 묵시적 파라미터
와 명시적 파라미터
가 있습니다. 묵시적 파라미터
는 값을 지정하지 않아도 자동으로 기본값을 가지는 파라미터입니다. 명시적 파라미터
는 값을 지정해주어야 값을 가지는 파라미터입니다.
파라미터 파일은 설계도와 같은 역할을 합니다. startup
명령을 수행하게 되면 Oracle Server는 파라미터 파일을 토대로 SGA를 생성하게 됩니다.
항목/파일 | pfile | spfile |
---|---|---|
파일이 존재하는 기본경로 | $ORACLE_HOME/dbs | $ORACLE_HOME/dbs |
파일 이름 | init<SID>.ora | spfile<SID>.ora |
내용 변경 | 관리자(사람) | 서버 프로세스 |
파일 형태 | Text (OS 편집기로 편집 가능) | Binary (편집 불가능) |
파라미터 파일은 꼭 정해진 경로($ORACLE_HOEM/dbs
)에 존재해야만 startup
될 때 Oracle Server가 내용을 찾아서 읽을 수 있습니다.
(startup
할 때 다른 경로나 이름의 파라미터 파일을 직접 지정할 수도 있습니다)
SID
는 Site IDentifier
의 약자입니다. Instance 이름
으로 쓰입니다.
예를 들어 SID = TEST
일 경우 pfile
의 이름은 initTEST.ora
로 되고 spfile
일 경우 SpfileTEST.ora
가 됩니다.
pfile
은 text
형식이기 때문에 파일의 내용을 편집기로 편집할 수 있습니다.
하지만 spfile
은 바이너리 파일이기 때문에 관리자가 변경하는 것이 불가능하고, SQL 명령을 수행
하면 Server Process가 그 내용을 받아서 대신 수정합니다.
(즉, pfile
, spfile
모두 수정이 가능하나 spfile
은 직접 수정이 불가능합니다. 바이너리 파일은 직접 수정하면 절대 안됩니다.)
spfile
이 등장한 이유는 아래와 같습니다.
9i
버전부터 Oracle이 자체적으로 튜닝할 수 있는 기능이 생기면서 Server Process가 파라미터 파일의 내용을 수정해야 할 필요성이 느껴지게 되었습니다. 기존의 pfile
은 사람만이 변경 가능했기에 Server Process가 수정할 수 있는 spfile
이 생겨나게 된 것입니다.
반드시 알아둬야 할 것은 pfile
과 spfile
이 모두 존재하면 spfile
의 내용이 적용된다는 것입니다.
spfile 변경법
SQL> alter system set <파라미터 이름>=<파라미터 값> scope=<scope 값>
scope 옵션을 명시하지 않으면 기본값으로 Both
가 적용됩니다.
scope 옵션 | 인스턴스 적용 | spfile 내용 변경 |
---|---|---|
Memory | O | X |
Spfile | X | O |
Both(default) | O | O |
백그라운드 프로세스들이 발생시키는 로그
와 Alert Log
의 경로.
Client에 캐시 되어 있는 RESULT CACHE
에 대해서 얼마 동안 유효한 지에 대한 시간 설정값.
Milliseconds 단위.
Client에 캐시 되어 있는 RESULT CACHE
의 크기.
RAC 환경에서만 사용가능한 파라미터.
RAC 기능을 사용할 경우 TRUE
, 사용하지 않을 경우 FALSE
현재 인스턴스와 호환 가능한 이전 버전.
Control File
의 경로.
최대 8개까지 지정 가능.
Shared Pool 내 Library Cache의 경합을 줄이기 위해서 사용합니다.
Soft Parse
를 위해 동일한 SQL 문장으로 판별하는 기준
을 설정합니다.
EXACT
: 문장과 Bind 변수값이 모두 동일해야 같은 문장으로 취급.SIMILAR
: 문장은 동일하면서 Bind 변수값은 달라도 됨.FORCE
: 문장은 동일하면서 Bind 변수가 아닌 상수값이 달라도 됨.Block의 크기.
일반적으로 4096(4k
)나 8192(8k
)를 사용하며 DATABASE
를 생성하는 시점에 지정합니다.
~ 9i
까지는 4k
, 10g ~
부터는 8k
가 기본값입니다.
v$db_cache_advice
뷰에서 서로 다른 캐시 사이즈에 대한 통계정보를 모을 것일지 아닐 것일지를 결정.
Off
: 이 기능을 사용하지 않으며 메모리도 할당하지 않음.Ready
: 기능을 사용하진 않지만 메모리는 할당.On
: 기능을 사용. 메모리가 할당되지 않을 경우 에러가 발생. Off
에서 On
으로 바로 변경 시에도 에러가 발생.DB Buffer Cache의 Default Buffer Cache
크기.
블록 사이즈는 db_block_size
를 따릅니다.
OMF 환경에서 Data File
의 경로.
- UMF(User Managed File): 사용자가 수동으로 파일 관리
- OMF(Oracle Managed File): 오라클이 자동으로 파일 관리. DB 파일들(Data File, Redo Log File, Control File)이 저장될 경로를 지정해 주고 각 파일을 생성하라는 명령만 주면 Oracle이 자동으로 결정해서 관리합니다.
OMF 환경에서 Control File
과 Redo Log File
의 경로.
여러 경로에 다중화
를 하기를 권장하며 파라미터 이름 끝에 n
은 최대 5
까지 지정할 수 있으며, 최대 5
곳까지 다중화 할 수 있다는 의미입니다.
물리적으로 서로 다른 네트워크에 떨어져 있는 오라클 인스턴스들을 하나의 논리적 그룹으로 묶어 주는 역할.
도메인
: 물리적으로 떨어져 있는 경우라도 논리적으로 하나의 단위로 묶는 것을 의미
DB Buffer Cache에서 LRU 알고리즘
의 적용을 받지 않는 Keep Buffer Cache
의 크기.
Keep Buffer Cache
: Object(Table, Index)를 Keep Buffer Cache
에 등록하면 해당 Object가 계속
Database 이름.
Single
환경: Instance 이름
과 Database 이름
이 같을 수 있습니다.
RAC
환경: Instance 이름
과 Database 이름
이 다릅니다.
DW성, 이력 통계 데이터와 같은 대용량 데이터
에 액세스해야 할 때는 Block Size가 클수록 유리합니다. 기존 Default Buffer Cache의 경우 DB_BLOCK_SIZE
파라미터를 따라 가기 때문에 대용량 데이터
를 위한 Block Size
를 따로 지정할 필요가 있습니다. 이때 이용하는 파라미터가 바로 DB_nK_CACHE_SIZE
이고 이 파라미터를 통해 Non Default Buffer Pools
가 만들어집니다.
Flash Recovery Area(RMAN 백업 파일, Flashback Log 파일, Archived Redo Log 파일)의 경로.
Flash Recovery Area 경로의 크기.
유일한 DB 이름.
기본값
DB_NAME
+ASM
DBWR
의 개수.
1
또는 CPU 개수 / 8
중에서 큰 값의 개수가 사용.
RAC 환경에서 사용하는 파라미터로 모든 인스턴스는 고유한 인스턴스 번호를 가져야만 합니다.
1
부터 최대값까지 지정 가능하고 최대값은 OS 별로 다릅니다.
Archived Redo Log File
의 저장 경로. 총 10
개까지 지정 가능.
이 파라미터를 지정하지 않을 경우 DB_RECOVERY_FILE_DEST
의 값에 따라 지정됩니다.
LOG_ARCHIVE_DEST_n
에 지정된 디렉토리의 사용 여부
Enable
: 기본 값. 해당 경로를 사용.Defer
: 정의된 경로와 값들은 유지. 다음 Enable
전까지 사용되지 않음.Alternate
: 다른 경로로 지정된 값들이 모두 실패할 경우 이 경로가 Enable.데이터베이스 내에서 기본적으로 사용될 언어를 지정.
NLS_DATE_LANGUAGE
와 NLS_SORT
파라미터의 기본값에도 영향을 줍니다.
NLS_LANGUAGE
에서 사용하는 언어와 날짜를 사용하는 지역을 선택.
기본 날짜 형식
, 기본 소수점 문자
, 그룹 구분 기호
, 기본 ISO
, 지역 통화 기호
가 설정됨.
1개의 세션에서 사용하는 CURSOR
의 최대 Open 개수.
전체 Server Process가 사용 가능한 총 PGA 크기.
0 초과
: WORKAREA_SIZE_POLICY
값이 자동으로 AUTO
로 설정.0
: WORKAREA_SIZE_POLICY
값이 MANUAL
로 설정되어 각 PGA의 개별 구성요소 값을 관리자가 직접 수동 설정.OS
상에서 카운트되는 Oracle Process(User Process, Background Process 등)의 최대 개수.
이 값이 너무 작게 설정된다면 Client에서 Server로 접속할 수 없습니다.
SESSIONS
와 TRANSACTIONS
파라미터의 기본값에 영향을 줍니다.
휴지통 기능의 사용 여부.
off
일 경우 테이블을 Drop
했을 때 휴지통으로 가지 않고 즉시 삭제.
로컬 서버가 아닌 원격지 서버에서 작동 중인 리스너의 이름.
로컬 서버의 tnsnames.ora
파일에 등록.
외부에서 접속할 때 암호 파일의 사용 여부.
SHARED
: 하나 이상의 데이터베이스가 암호 파일을 공유해서 사용.EXCLUSIVE
: 한 개의 암호 파일은 한 개의 데이터베이스 만이 사용 가능.NONE
: 암호 파일을 무시하며 오직 OS 인증 방식 사용.파라미터 값이 SHARED
나 EXCLUSIVE
로 설정되어 있더라도 암호 파일이 없다면 동작하지 않습니다.
Server Result Cache
에서 결과값이 저장되는 개별적인 Result
가 사용할 수 있는 최대 크기.
RESULT_CACHE_MAX_SIZE
의 5%
를 권장합니다.
Server Result Cache
의 전체 크기를 지정.
shared_pool_size
의 1%
, sga_target
의 0.5%
, memory_target
의 0.25%
를 권장합니다.
Server Result Cache
를 어떤 Mode
로 운영할 것인가.
MANUAL
: /* result_cache */
힌트를 사용한 쿼리에 대해서 Server Result Cache에 저장.FORCE
: 모든 쿼리에 대해서 Server Result Cache
에 등록하고 /* no_result_cache */
힌트를 사용한 쿼리는 등록하지 않습니다.AUTO
: 내부적으로 많이 사용되는 쿼리라고 Oracle이 판단할 경우 Server Result Cache
에 등록합니다.Oracle Server에서 생성 가능한 최대 세션 수(최대 동시 접속자 수).
(전체 동시 접속 인원 수 + 백그라운드 프로세스 수) X 10%
를 권장합니다.
ENQUEUE_RESOURCES
와 TRANSACTIONS
파라미터에 영향을 줍니다.
하나의 세션이 캐싱할 수 있는 CURSOR의 수.
Session Cached Cursor
는 한 세션 내에서 3번
이상 수행된 CURSOR를 캐싱하는 기능입니다. 3번 이상 실행된 SQL
과 실행 계획
을 Library Cache에서 아예 PGA로 가져와서 저장해놓고, 다음 실행부터는 SGA로 가지 않고 PGA에서 바로 찾아서 수행할 수 있도록 합니다.
하나의 세션이 열 수 있는 최대 BFILE
개수.
자동 공유 메모리 튜닝 기능(Automatic Shared Memory Management: ASMM)을 사용할 경우 SGA의 전체 크기를 지정.
아래의 값들에 대해 자동으로 크기를 튜닝해줍니다.
DB_CACHE_SIZE
SHARED_POOL_SIZE
LARGE_POOL_SIZE
JAVA_POOL_SIZE
STREAMS_POOL_SIZE
자동으로 튜닝되는 파라미터 값들은 0
으로 설정되어 있습니다. 특정값을 주게 되면 그 값을 최소값으로 인식합니다.
인스턴스에서 사용할 Undo Tablespace
의 이름.
Undo Data를 관리하는 방법.
AUTO
: AUM(Automatic Undo Management)
기능을 사용하는 것으로 Undo Data를 오라클 서버가 자동으로 관리하도록 하는 방법.MANUAL
: Undo Data를 관리자가 수동으로 관리하는 방법.오라클에서는 DBA가 원하는 단계까지만 지정해서 Instance를 시작할 수 있습니다.
나머지 단계를 진행하려면 alter database
명령어를 사용합니다. 나머지 단계를 시작할 때는 no mount - mount - open
단계를 순서대로 거쳐야 합니다.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 1660940992 bytes
Fixed Size 8897216 bytes
Variable Size 956301312 bytes
Database Buffers 687865856 bytes
Redo Buffers 7876608 bytes
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1660940992 bytes
Fixed Size 8897216 bytes
Variable Size 956301312 bytes
Database Buffers 687865856 bytes
Redo Buffers 7876608 bytes
Database mounted.
SQL> alter database open;
Database altered.
SQL> select status from v$instance;
STATUS
------------
OPEN
읽기 전용인 상태로 open할 경우 select
이외의 작업은 수행할 수 없습니다.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1660940992 bytes
Fixed Size 8897216 bytes
Variable Size 956301312 bytes
Database Buffers 687865856 bytes
Redo Buffers 7876608 bytes
Database mounted.
SQL> alter database open read only;
Database altered.
허가 받은 사용자만 접속할 수 있도록 하는 기능입니다.
SQL> startup restrict;
ORACLE instance started.
Total System Global Area 1660940992 bytes
Fixed Size 8897216 bytes
Variable Size 956301312 bytes
Database Buffers 687865856 bytes
Redo Buffers 7876608 bytes
Database mounted.
Database opened.
현재 open 되어 있는 Instance를 Restricted Mode로 변경할 수 있습니다.
SQL> alter system enable restricted session;
System altered.
SQL> alter system disable restricted session;
System altered.
Instance를 종료하기 위해서는 shutdown
명령어를 사용하며 4
가지 옵션이 있습니다.
$ sqlplus / as sysdba
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
접속해 있는 사용자들이 있을 경우 모두 스스로 접속을 종료할 때 까지 기다렸다가 종료하는 옵션입니다.
SQL> shutdown normal;
또는
SQL> shutdown;
접속해 있는 사용자들이 있더라도 기다려주지 않고 강제로 접속을 중단시킨 후 Instance를 종료하는 옵션입니다.
SQL> shutdown transactional
즉시 접속을 강제 종료 시킵니다.
이후 접속이 종료되는 시점까지 commit이 완료된 데이터를 DB Buffer Cache에서 찾아 Data File로 저장
해주고, commit되지 않은 데이터들은 모두 Rollback
시킨 후 정상적으로 Instance를 종료
하는 옵션입니다.
SQL> shutdown immediate;
즉시 접속을 강제 종료 시킵니다.
IMMEDIATE
와 다른 점은 사용자가 수행한 작업을 저장하지도 않고 Rollback
해주지도 않습니다. 즉, 비정상 종료되며 Instance Crash
가 됩니다. 이렇게 되면 다시 Instance를 시작할 때 Instance Recovery
가 필요합니다.
운영 중인 서버에 치명적인 위험을 줄 수 있는 옵션이므로 아주 주의해야 하는 옵션입니다.