[Oracle] Parameter File

Oracle Database Startup  과정은 다음과 같다.

Oracle은 Shutdown 상태에서 NOMOUNT상태가 될때 Parameter 정보를 읽어서 NOMOUNT 상태가 된다.
이때 Parameter 정보는 Parameter File에서 읽어오는데 이때 두가지 방식이 있다.
바로 PFILESPFILE 인데, pfile 은 과거부터 사용해오던 방식이고 spfile 은 Oracle 9i 부터 새롭게 적용된 방식이다.

pfile 과 spfile 에 대해서 알아보도록 한다.

특징

PFILE

1. Text 형식의 파일로 사용자가 직접 Editor로 수정이 가능하다.
2. 변경사항은 재시작해야 적용됨. (Shutdown 상태에서 NOMOUNT상태가 될 때 읽어서 적용된다.)
3. 파일의 기본위치는 $ORACLE_HOME/dbs/initSID.ora 이다.


예) PFILE 내용
testdb.__db_cache_size=192937984
testdb.__java_pool_size=4194304
testdb.__large_pool_size=4194304
testdb.__shared_pool_size=79691776
testdb.__streams_pool_size=0
*.audit_file_dest='/home/oracle/admin/testdb/adump'
*.background_dump_dest='/home/oracle/admin/testdb/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/home/oracle/oradata/testdb/control01.ctl','/home/oracle/oradata/testdb/control02.ctl','/home/oracle/oradata/testdb/control03.ctl'
*.core_dump_dest='/home/oracle/admin/testdb/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='testdb'
*.db_recovery_file_dest='/home/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/home/oracle/admin/testdb/udump'

SPFILE
1. binary 형식의 파일으로 사용자가 직접 Editor으로 수정이 불가능하다.
2. Oracle 9i이후부터는 기본으로 spfile을 사용한다.
3. PFILE과 SPFILE 이 둘다 존재하면 SPFILE을 사용한다.

SPFILE SCOPE
memory : 현재에만 적용되고 재시작시 설정내용이 사라진다.
spfile : 영구적으로 설정된다. 재시작시 적용된다. (pfile 방식을 사용중이라면 이 scope는 사용 할 수 없다.)
both : 바로 설정값이 적용되고 재시작되도 설정내용이 유효하다.

만약 spfile을 사용중이라면 기본값(Default)은 both 으로 적용이 되고 pfile방식을 사용중이라면 memory로 값이 적용된다. spfile은 Oracle Server 가 수정하지만 pfile 은 사용자가 직접 수정하는 파일이기 때문이다.

장단점

   장점 단점 
SPFILE  파일을 Editor 하지 않고 바로(dynamic) 수정과 적용이 가능하다는 점이다. 적용은 Scope옵션을 이용하여 적용되는 시점을 컨트롤 할 수 있다.  값을 설정하기 위해서는 모든 파라미터명을 기억해야 한다. 그리고 Scope 설정시 주의해야 하는 점도 있다. 어떤 파라미터는 즉시 적용이 가능하지만 어떤 파라미터는 즉시 적용이 불가능한 파라미터도 있기 때문이다.  
PFILE 파일을 열어보면 모든 파라미터의 이름과 설정 값이 확인과 수정이 가능하다는 점이다. 파라미터를 모두 기억하기 힘들다는 것을 생각하면 이해할 것이다. 또 하나의 장점으로는 적용의 일관성에 있다. 모든 파라미터는 재시작해야 값이 적용되기 때문에 적용되는 시점에 대해 크게 고민하지 않아도 된다. PFILE 방식은 현재까지 가장 많이 사용하는 방식이다.   값의 수정은 아무때나 할 수 있지만 변경 값의 적용은 반드시 SHUTDOWN 상태에서 NOMOUNT 상태가 될때 적용된다. 즉 변경의 적용을 위해서는 재시작을 해야한다.  


명령어 익히기

현재 사용중인 방식 확인
show parameter spfile

현재 사용중인 방식은 위와 같이 명령을 실행하면 현재 사용중인 spfile 에 대한 정보가 표시되는데 VALUE 컬럼 값이 있으면 SPFILE 방식이고 값이 없으면 PFILE 방식으로 구동중이다.
 

SPFILE => PFILE
9i 이후부터는 spfile방식으로 구동된다 이를 pfile 방식으로 변경하고 싶으면 아래와 같은 순서로 진행된다.

1. pfile 생성

create pfile from spfile;
2. shutdown immediate
3. spfile 삭제
4. startup

spfile 이 없으면 자동으로 pfile 을 찾아서 구동된다.


PFILE => SPFILE
1. spfile 생성
create spfile from pfile;

2. shutdown immediate
3. startup
pfile은 삭제하지 않아도 된다. spfile이 존재하면 자동으로 spfile을 사용한다.


Startup 시 pfile로 시작하기
특정 pfile 로 서버를 시작하고자 할때에 startup 시 경로와 파일명을 넣어주면 된다 spfile은 안된다.

startup pfile=/path/initSID.ora


주의 사항
1. Parameter File이 잘못되면 서버는 NOMOUNT 상태로 넘어 갈 수 없다. 백업시에는 parameter file 도 함께 백업을 하는게 좋다. 
2. 항상 현재 어떤 방식으로 구동중인지 확인 후 작업한다.  


현재 spfile방식을 사용중이라면 아래와 같은 방식으로 작업을 진행해도 된다.
1. create pfile from spfile
2. pfile 수정
3. startup pfile=path
4. create spfile from pfile


ASMM 과 SPFILE
 ASMM 을 사용하면 SGA 의 구성 영역들의 메모리 관리를 자동으로 수행한다. 만약 PFILE 을 사용중일때는 DB를 내렸다가 올리면 ASMM이 조정한 메모리 값이 초기화되어 다시 최적화를 수행해야 한다.
 하지만 SPFILE의 경우 바이너리파일이므로 ASMM이 수행한 최적화 설정값이 파일에 적용된다. 즉 DB를 내렸다가 올려도 최적화한 메모리 값이 바로 적용되어 올라간다.