DATA 전문가로 가는 길

[Admin][Oracle] 오라클 파라미터 파일 정리(spfile, pfile) 본문

Data Architecture/Admin

[Admin][Oracle] 오라클 파라미터 파일 정리(spfile, pfile)

EstenPark 2011. 1. 26. 04:37

 
작성자 : 박상수
작성일자 : 2011.01.26
작업환경 : VMware7 [ RHEL4, Oracle Database 10g r2 patchset 4 ]



1. 파라미터 파일의 개념과 종류

[1-1 파라미터 파일의 개념] 오라클에서 말하는 필수 파일 중에서 파라미터 파일은 오라클이 구동 할 수 있게 설계되어 있는 도면과 같습니다. 한가지 예로 데이터베이스를 기동하기 위해서는 파라미터 파일을 참조하여 SGA 및 기타 필요한 환경을 구성 할 수 있습니다.

shutdown(종료상태) -> 파라미터 파일 읽기(spfile/pfile) -> NOMOUNT 단계별로 올라오는데 여기에서 파라미터 파일을 가장 중요한 역활을 하게 됩니다. 만약 파라미터 파일이 없을 경우에는 "could not open parameter file '경로 및 파일이름' " 에러가 발생 됩니다.

본 문서에서는 파라미터 파일의 전체적인 설명 보다는 어떻게 사용하는지와 각 파일의 특성을 분석 하도록 하겠습니다.

[1-2 파라미터 파일의 종류]


정적 파라미터(initSID.ora)
  • 오라클 모든 버전에서 사용가능(8i ~)
  • 텍스트 형식으로 OS Edit를 이용하여 변경 가능
  • 관련 뷰 : V$PARAMETER
  • 동적 파마메터의 종류는 적음
동적 파라미터(spfileSID.ora)
  • 오라클 특정 버전부터 사용가능(9i ~)
  • 바이너리 형식으로 OS Edit를 이용하여 변경 불가능(vi를 이용해서 나오는 결과는 바이너리가 아닙니다.)
  • 관련 뷰 : V$SPPARAMETER
  • 동적 파마메터의 종류는 많음
pfile과 spfile의 가장 큰 차이점은 pfile은 OS에서 vi 편집기를 이용하여 파라미터의 값을 변경 할 수 있고 데이터베이스가 NOMOUNT 단계 이상이라면 다시 pfile을 쓰지 않습니다. 결과적으로 파일을 지워도 아무 이상 없습니다. 시스템 레벨에서 변경은 되지만 메모리에서 잠깐 사용하고 버리게 되는 것입니다. 아래 자세히 설명 하도록 하겠습니다.
반대로 spfile은 OS에서 vi 편집기로 절대 수정을 하면 안되며 NOMOUNT 단계 이상이라면 spfile을 다시 쓰기 때문제 제거 하거나 이동하면 안됩니다. 

참고로 시스템 레벨은 아래에서 설명하겠지만 파라미터를 설정 변경은 조건에 따라서 pfile, spfile 모두 가능 합니다.
SPFILE : ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY/SPFILE/BOTH)]
PFILE   : ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY)]


2. 파라미터 파일의 관리

[2-1 파라미터 경로] 파라미터 파일의 경로는 기본적으로 $ORALE_HOME/dbs 에 있습니다. 오라클 9i 부터는 아래 순서와 같이 search를 하게 됩니다.

[2011-01-26 02:17:46]-[oracle@estenpark:~/product/10g/dbs]
$ ls -l

1.spfiletestdb.ora
2.spfile.ora
3.inittestdb.ora
4.init.ora


[2-2 동적 파라미터 사용(SPFILE)]
준비 사항은 $ORACLE_HOME/dbs/spfiletestdb.ora  존재 해야 합니다. 위 search 순서를 확인 하셨다면 initSID.ora 파일이 있어도 상관 없습니다. spfileSID.ora 파일이 있다면 pfile(initSID.ora)의 내용은 절대 반영 되지 않습니다.

[2011-01-26 02:34:28]-[oracle@estenpark:~/product/10g/dbs]
$ ls -al spfile*

-rw-r-----  1 oracle dba 2560  1월 26 02:17 spfiletestdb.ora

[설명]
데이터베이스를 오픈하지 않고 NOMOUNT 단계에서 상태를 확인 하겠습니다.
SYS@testdb> startup nomount

[설명]
 현재 상태가 pfile인지 spfile인지 확인 하는 방법입니다. 아래와 같이 VALUE에 값이 있을 경우에는 spfile이고 만약 VALUE에 값이 없다면 pfile이 됩니다. 
SYS@testdb> show parameter pfile
NAME         TYPE      VALUE
---------------------------------------------------------------
spfile         string      /home/oracle/product/10g/dbs/spfiletestdb.ora

[설명]
 또 다른 확인 방법으로는 현재 파라미터를 몇개나 사용하고 있는지 확인 해볼 수 있습니다.
SYS@testdb> select isspecified ,count(value) from v$spparameter group by isspecified;
ISSPECIFIED  COUNT(VALUE)
------------ ------------
FALSE               0
TRUE                22


[2-3 정적 파라미터 사용(PFILE)]
준비 사항은 $ORACLE_HOME/dbs/inittestdb.ora 존재 해야 합니다. 위 search 순서를 확인 하셨다면 spfiletestdb.ora, spfile.ora 파일을 제거 하셔야 합니다.
[2011-01-26 03:09:54]-[oracle@estenpark:~/product/10g/dbs]
$ ls -al initt*
-rw-r--r--  1 oracle dba 1089  1월 25 17:47 inittestdb.ora
[설명]
데이터베이스를 오픈하지 않고 NOMOUNT 단계에서 상태를 확인 하겠습니다.
SYS@testdb> startup nomount

[설명]
 현재 상태가 pfile인지 spfile인지 확인 하는 방법입니다. 아래와 같이 VALUE에 값이 있을 경우에는 spfile이고 만약 VALUE에 값이 없다면 pfile이 됩니다. 
SYS@testdb> show parameter pfile;
NAME         TYPE     VALUE
-----------------------------------------
spfile         string
[설명] 또 다른 확인 방법으로는 현재 파라미터를 몇개나 사용하고 있는지 확인 해볼 수 있습니다.
SYS@testdb> select isdefault ,count(value) from v$parameter group by isdefault
ISDEFAULT    COUNT(VALUE)
------------------ ------------
FALSE        21
TRUE       168


[2-4 파라미터 파일 생성]
정적 파라미터는 데이터베이스 종료 상태에서도 가능 하지만 동적 파라미터의 경우는 데이터베이스가 NOMOUNT 단계 이상에서 생성해야 합니다.

[설명] 정적 파라미터의 경우 - 방법 1
show parameter dump 로 확인하여 덤프 파일이 경로를 확인 합니다. 기본적으로 덤프파일과 동일한 디렉토리에 pfile 디렉토리가 있습니다. init.ora.2322 파일을 기존 pfile($ORACLE_HOME/dbs) 위치로 복사하면 됩니다. 오라클 공인 문서에서는 $ORACLE_HOME/dbs 디렉토리의 init.ora 파일로 변경 하라고 되어 있습니다. 그말은 데이터베이스 올리지 말라는 것과 같은 이야기 입니다. 상당히 불편하기 때문에 아래와 같은 작업을 하시길 권장합니다.
[2011-01-26 04:12:08]-[oracle@estenpark:~/admin/testdb/pfile]
$ cp init.ora.010201115288 $ORACLE_HOME/dbs


[설명] 정적 파라미터의 경우 - 방법 2
NOMOUNT 단계 이상에서 생성 합니다.
SYS@testdb> create pfile from spfile;

[설명] 동적 파라미터의 경우
NOMOUNT 단계 이상에서 생성 합니다.
SYS@testdb> create spfile from pfile;




3. 시스템 레벨(ALTER SYSTEM SET) 

[3-1 파라미터 파일의 값 변경] 사용 방법은 아래와 같습니다.
ALTER SYSTEM SET 파라미터 이름=파라미터 값
[COMMENT='text']
[SCOPE=MEMORY/SPFILE/BOTH]
[SID='sid'/'*']

파라미터 설정 주석을 추가하는 COMMENT 옵션
  • 동적 파라미터 파일의 설정 값을 해당 명령어로 변경시 주석을 추가할 수 있게 하는 옵션 입니다. 파라미터 설정 값 변경시 이력 관리 및 특이 사항을 메모할 필요가 있을 경우 사용 합니다.
파라미터 설정 변경하는 SCOPE 옵션
  • 파라미터의 설정을 변경 하는데 있어서 가장 큰 역활을 하는 옵션이기도 합니다. 동적 파라미터(spfile)와 정적 파라미터(pfile) 중 어떤 방식으로 기동 되었는지에 따라서 방법의 차이가 있습니다. 기본적인 개념은 정적 파라미터는 MEMORY 옵션만 사용할 수 있고, 정적 파라미터는 옵션 모두 사용 가능 합니다.
  • MEMORY : 파라미터 설정 값 변경을 메모리에서만 적용하는 의미로 종료 후 재기동 할 경우 MEMORY 옵션으로 변경 된 파라미터 값은 바뀌지 않습니다.
  • SPFILE : 파라미터 설정 값을 변경 하되 데이터베이스를 재기동 후 변경 합니다. 실제적으로 현재 메모리 상에서는 기존의 값을 유지 하게 되고 재기동 후에는 변경 된 값을 정상적으로 사용 할 수 있습니다.
  • BOTH : 어려운 옵션입니다. 왜냐하면 MEMORY + SPFILE 두가지의 옵션을 모두 사용합니다. 그렇다면 정적 파라미터에서 해당 옵션을 절대 사용 할 수 없습니다. 이유는 위에서 설명 한 것과 같이 PFILE에 결과 값을 쓰지 않기 때문입니다. PFILE는 DBA(관리자)가 직접 수정하는 설정 파일 입니다. 다시 말해서 동적 파라미터를 위한 옵션이라고 생각 하셔도 됩니다.
파라미터 설정 변경하는 SCOPE 옵션을 이용하여 변경 가능한 파라미터와 변경 불 가능한 파라미터 파악
  • IMMEDIATE : 즉시 적용이 가능한 파라미터 MEMORY/SPFILE/BOTH 모두 사용 가능
  • DEFERRED  : 현재 접속 중인 세션은 적용 하지 않고 다음 세션 부터 적용하는 파라미터로써 MEMORY/SPFILE/BOTH 모두 사용 가능
  • FALSE : 데이터베이스를 재 기동해야 적용 가능 한 것으로 오직 SPFILE만 사용 가능(Static Parameter)
[설명] 정적 파라미터(pfile) 쿼리를 이용하여 사용 유무를 확인
SYS@testdb>  
SELECT ISSYS_MODIFIABLE ,COUNT(*)
FROM v$parameter
GROUP BY ISSYS_MODIFIABLE;

ISSYS_MODIFIABLE     COUNT(*)
------------------ ----------
DEFERRED                  7
FALSE                        107
IMMEDIATE                 145

[설명] 동적파라미터(spfile) 쿼리를 이용하여 사용 유무를 확인
SYS@testdb>  
SELECT b.ISSYS_MODIFIABLE, COUNT(*)
FROM v$spparameter a, v$parameter b
WHERE a.name = b.name
GROUP BY b.ISSYS_MODIFIABLE;

ISSYS_MODIFIABLE     COUNT(*)
------------------ ----------
DEFERRED      7
FALSE     108
IMMEDIATE    145


파라미터 설정 변경하는 SID 옵션
  • 오라클 RAC(Real Application Cluster)를 사용할 경우 변경된 파라미터 값이 적용될 노드를 선택하는 옵션입니다. 기본 값은'*'을 사용할 경우 모든 노드에 변경된 설정 값을 적용합니다. 특정 노드에만 적용해야 할 경우 해당 인스턴스 번호를 설정 해주면 됩니다.
[설명] testdb.__db_cache_size=180355072 에서 __의미는 spfile에서 pfile로 추출할때 ASM을 사용하고 있다면 현재 SGA의 COMPONENT 값을 의미 합니다.  ASM을 사용하게 되면 SGA는 동적으로 크기가 변하는데 spfile에서 pfile을 생성시 값을 의미 합니다. 별 의미는 없습니다.
select component, current_size/1024/1024 "current", min_size/1024/1024 "min", user_specified_size/1024/1024 "user",
  granule_size/1024/1024 "granule"
from v$sga_dynamic_components;

[설명] *.db_block_size=8192 이와 같은 값이 보이는데, *심볼은 rac에서 적용가능하게 또는 구분 가능하도록디자인된 속성값이라 할 수있습니다. (* = all instance)



4. 복구 시나리오 

[4-1 상황 1] 데이터베이스 종료 상태에서 DBA(관리자) 실수로 spfile, pfile 모두 삭제 했을 경우 복구 방법 
[설명] 위에서 설명한 것과 같이 $ORACLE_BASE/admin/testdb/pfile을 $ORACLE_HOME/dbs로 파일을 복사 한 후 DB를 OPEN 하면 됩니다.

[2011-01-26 04:44:58]-[oracle@estenpark:~/product/10g/dbs]
$ ls
backup  hc_testdb.dat  initdw.ora  lkTESTDB  orapwtestdb

[2011-01-26 04:44:58]-[oracle@estenpark:~/product/10g/dbs]
$ sqlplus / as sysdba

SYS@testdb> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/product/10g/dbs/inittestdb.ora'

[2011-01-26 04:46:54]-[oracle@estenpark:~/admin/testdb/pfile]
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora

[설명] 지금 부터 복구를 시작 하겠습니다. 파일을 복사합니다.
[2011-01-26 04:46:54]-[oracle@estenpark:~/admin/testdb/pfile]
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora

[2011-01-26 04:47:24]-[oracle@estenpark:~/product/10g/dbs]
$ ls

backup  hc_testdb.dat  initdw.ora  inittestdb.ora  lkTESTDB  orapwtestdb

[2011-01-26 04:48:56]-[oracle@estenpark:~]
$ sqlplus / as sysdba
SYS@testdb>
[설명] 데이터파일을 OPEN 하기 이전에 Controlfile의 경로가 맞는지 받드시 확인 합니다.
$ vi inittestdb.ora
###########################################
# File Configuration
###########################################
control_files=( '/home/oracle/oradata/testdb/control01.ctl',    
                     '/home/oracle/oradata/testdb/control03.ctl')

[설명] 아래와 같이 startup하여 데이터베이스가 정상적으로 OPEN 되어서 복구 완료 입니다.
SYS@testdb> startup
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size      1267068 bytes
Variable Size     92277380 bytes
Database Buffers   188743680 bytes
Redo Buffers      2924544 bytes
Database mounted.
Database opened.
SYS@testdb> show parameter pfile;
NAME         TYPE      VALUE
----------------------------------------------------
spfile         string


[4-2 상황 2]
 현재 파라미터 파일은 pfile 입니다. 고객사에서 pfile을 spfile로 변경 해달라고 요청이 왔습니다.  
[설명] 이 방법은 별도의 설명이 필요 없습니다. pfile을 spfile로 만들어 주고 데이터베이스를 재기동 하면 됩니다.
SYS@testdb> create spfile from pfile;
SYS@testdb> shutdown immediate;
SYS@testdb> startup
ORACLE instance started.
Total System Global Area  285212672 bytes
Fixed Size      1267068 bytes
Variable Size     92277380 bytes
Database Buffers   188743680 bytes
Redo Buffers      2924544 bytes
Database mounted.
Database opened.
SYS@testdb> show parameter pfile;
NAME         TYPE      VALUE
------------------------------------------------
spfile         string      /home/oracle/product/10g/dbs/spfiletestdb.ora




파라미터 파일은 오라클에서 필수 파일 중 하나로 명시 되어있습니다. 사용 방법은 쉽지만 관리를 잘 해야 하는 파일 중 하나 입니다.보통 백업 파일의 기준이 redo log file, control file, data file, archive log file 무조건 백업을 하게 되고 상황에 따라서 파라미터 파일도 백업 절차에 포함 될 경우도 있습니다.


반드시 알아야 할 것은 pfile, spfile의 차이점을 파악 하셔야 합니다.

Comments