행위

"Oracle pfile spfile parameter"의 두 판 사이의 차이

DB CAFE

(정적 파라미터의 경우 - 방법 2)
 
(같은 사용자의 중간 판 11개는 보이지 않습니다)
1번째 줄: 1번째 줄:
= 오라클 파라미터 파일 spfile VS pfile =
+
== 오라클 파라미터 파일 spfile VS pfile ==
 
 
 
== 파라미터 파일의 개념 ==
 
== 파라미터 파일의 개념 ==
 +
* 데이터베이스를 기동하기 위해서는 파라미터 파일을 참조하여 SGA 및 기타 필요한 환경을 구성.
  
파라미터 파일은 오라클이 구동 할 수 있게 설계되어 있는 도면과 같음.
+
# shutdown(종료상태) ->
데이터베이스를 기동하기 위해서는 파라미터 파일을 참조하여 SGA 및 기타 필요한 환경을 구성.
+
# 파라미터 파일 읽기(spfile/pfile) ->
 +
# NOMOUNT 단계별로 기동 시 파라미터 파일을 가장 중요한 역활을 함.
  
shutdown(종료상태) -> 파라미터 파일 읽기(spfile/pfile) -> NOMOUNT 단계별로 기동 시 파라미터 파일을 가장 중요한 역활을 함.
+
* 만약 파라미터 파일이 없을 경우에는 "could not open parameter file '경로 및 파일이름' " 에러가 발생.
  
만약 파라미터 파일이 없을 경우에는 "could not open parameter file '경로 및 파일이름' " 에러가 발생.
+
== 파라미터 파일의 종류 ==
  
 +
=== 정적 파라미터(initSID.ora) ===
 +
# 오라클 모든 버전에서 사용가능(8i ~)
 +
# 텍스트 형식으로 OS Edit를 이용하여 변경 가능
 +
# 관련 뷰 : V$PARAMETER
 +
# 동적 파라미터의 종류는 적음
 +
=== 동적 파라미터(spfileSID.ora) ===
 +
# 오라클 특정 버전부터 사용가능(9i ~)
 +
# 바이너리 형식으로 OS Edit를 이용하여 변경 불가능
 +
# 관련 뷰 : V$SPPARAMETER
 +
# 동적 파라미터의 종류는 많음
  
[1-2 파라미터 파일의 종류]
+
=== pfile과 spfile 차이점 ===
 +
# pfile은 OS에서 vi 편집기를 이용하여 파라미터의 값을 변경 가능.
 +
# NOMOUNT 단계 이상이라면 다시 pfile을 사용하지 않음         
 +
# spfile은 OS에서 vi 편집기로 절대 수정을 하면 안됨
 +
# NOMOUNT 단계 이상이라면 spfile을 다시 쓰기 때문에 제거,이동 하면 안됨.
  
# 정적 파라미터(initSID.ora)
+
=== 파라미터를 설정 변경 ===
  오라클 모든 버전에서 사용가능(8i ~)
 
  텍스트 형식으로 OS Edit를 이용하여 변경 가능
 
  관련 뷰 : V$PARAMETER
 
  동적 파마메터의 종류는 적음
 
  
#동적 파라미터(spfileSID.ora)
+
* SPFILE
  오라클 특정 버전부터 사용가능(9i ~)
+
*:<source lang=sql>
  바이너리 형식으로 OS Edit를 이용하여 변경 불가능(vi를 이용해서 나오는 결과는 바이너리가 아닙니다.)
+
ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY/SPFILE/BOTH)]
  관련 뷰 : V$SPPARAMETER
+
</source>
  동적 파마메터의 종류는 많음
 
  
* pfile과 spfile의 가장 큰 차이점은
+
* PFILE 
      pfile은 1) OS에서 vi 편집기를 이용하여 파라미터의 값을 변경 가능.
+
*:<source lang=sql>
              2) NOMOUNT 단계 이상이라면 다시 pfile을 사용하지 않음         
+
ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY)]
 
 
      spfile은 1) OS에서 vi 편집기로 절대 수정을 하면 안됨
 
              2) NOMOUNT 단계 이상이라면 spfile을 다시 쓰기 때문에 제거,이동 하면 안됨.
 
 
 
# 파라미터를 설정 변경
 
<source lang=sql>
 
SPFILE : ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY/SPFILE/BOTH)]
 
PFILE  : ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY)]
 
 
</source>
 
</source>
  
 
== 파라미터 파일의 관리 ==
 
== 파라미터 파일의 관리 ==
 
+
=== PFILE 파라미터 경로 ===
[2-1 파라미터 경로] 파라미터 파일의 경로는 기본적으로 $ORALE_HOME/dbs 에 있습니다. 오라클 9i 부터는 아래 순서와 같이 search를 하게 됩니다.
+
* 파라미터 파일의 경로는 기본적으로 $ORALE_HOME/dbs 에 있습니다.  
 
+
* 오라클 9i 부터는 아래 순서와 같이 search를 하게 됩니다.
[2011-01-26 02:17:46]-[oracle@estenpark:~/product/10g/dbs]
+
*:<source lang=sql>
$ ls -l
+
$ cd $ORALE_HOME/dbs  
 +
$ cd ls -l
 
1.spfiletestdb.ora
 
1.spfiletestdb.ora
 
2.spfile.ora
 
2.spfile.ora
 
3.inittestdb.ora
 
3.inittestdb.ora
 
4.init.ora
 
4.init.ora
 +
</source>
  
 
+
=== 동적 파라미터 사용(SPFILE) ===
[2-2 동적 파라미터 사용(SPFILE)] 준비 사항은 $ORACLE_HOME/dbs/spfiletestdb.ora  존재 해야 합니다. 위 search 순서를 확인 하셨다면 initSID.ora 파일이 있어도 상관 없습니다. spfileSID.ora 파일이 있다면 pfile(initSID.ora)의 내용은 절대 반영 되지 않습니다.
+
* $ORACLE_HOME/dbs/spfiletestdb.ora   
 
+
* initSID.ora 파일(pfile)이 있어도 상관 없음. spfileSID.ora 파일이 있다면 pfile(initSID.ora)절대 반영 되지 않음.
[2011-01-26 02:34:28]-[oracle@estenpark:~/product/10g/dbs]
+
<source lang=sql>$ cd $ORALE_HOME/dbs  
 
$ ls -al spfile*
 
$ ls -al spfile*
-rw-r-----  1 oracle dba 2560  1월 26 02:17 spfiletestdb.ora
+
-rw-r-----  1 oracle dba 2560  1월 26 02:17 spfiletestdb.ora</source>
  
[설명] 데이터베이스를 오픈하지 않고 NOMOUNT 단계에서 상태를 확인 하겠습니다.  
+
* 데이터베이스를 오픈하지 않고 NOMOUNT 단계에서 상태 확인.  
 +
*:<source lang=sql>
 
SYS@testdb> startup nomount
 
SYS@testdb> startup nomount
 +
</source>
  
[설명] 현재 상태가 pfile인지 spfile인지 확인 하는 방법입니다. 아래와 같이 VALUE에 값이 있을 경우에는 spfile이고 만약 VALUE에 값이 없다면 pfile이 됩니다.
+
=== 현재 pfile , spfile 확인 하는 방법 ===
 +
* 아래와 같이 VALUE에 값이 있을 경우에는 spfile이고 만약 VALUE에 값이 없다면 pfile
 +
 
 +
<source lang=sql>
 
SYS@testdb> show parameter pfile
 
SYS@testdb> show parameter pfile
 
NAME        TYPE      VALUE
 
NAME        TYPE      VALUE
 
---------------------------------------------------------------
 
---------------------------------------------------------------
 
spfile        string      /home/oracle/product/10g/dbs/spfiletestdb.ora
 
spfile        string      /home/oracle/product/10g/dbs/spfiletestdb.ora
 +
</source>
 +
 +
=== 현재 파라미터를 몇개나 사용하고 있는지 확인 ===
 +
<source lang=sql>
 +
select isspecified ,count(value)
 +
  from v$spparameter
 +
group by isspecified;
  
[설명] 또 다른 확인 방법으로는 현재 파라미터를 몇개나 사용하고 있는지 확인 해볼 수 있습니다.
 
SYS@testdb> select isspecified ,count(value) from v$spparameter group by isspecified;
 
 
ISSPECIFIED  COUNT(VALUE)
 
ISSPECIFIED  COUNT(VALUE)
 
------------ ------------
 
------------ ------------
 
FALSE              0
 
FALSE              0
 
TRUE                22
 
TRUE                22
 +
</source>
  
  
[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
+
* 동적 파라미터의 경우는 데이터베이스가 NOMOUNT 단계 이상에서 생성해야 함.
-----------------------------------------
 
spfile        string
 
[설명] 또 다른 확인 방법으로는 현재 파라미터를 몇개나 사용하고 있는지 확인 해볼 수 있습니다.
 
SYS@testdb> select isdefault ,count(value) from v$parameter group by isdefault
 
ISDEFAULT    COUNT(VALUE)
 
------------------ ------------
 
FALSE        21
 
TRUE      168
 
  
 
+
=== 정적 파라미터의 경우 - 방법 1 ===
[2-4 파라미터 파일 생성] 정적 파라미터는 데이터베이스 종료 상태에서도 가능 하지만 동적 파라미터의 경우는 데이터베이스가 NOMOUNT 단계 이상에서 생성해야 합니다.
+
# show parameter dump 로 덤프 파일 경로 확인
 
+
# 기본적으로 덤프파일과 동일한 디렉토리에 pfile 디렉토리 존재.  
[설명] 정적 파라미터의 경우 - 방법 1
+
# init.ora.2322 파일을 기존 pfile($ORACLE_HOME/dbs) 위치로 복사.
show parameter dump 로 확인하여 덤프 파일이 경로를 확인 합니다. 기본적으로 덤프파일과 동일한 디렉토리에 pfile 디렉토리가 있습니다. init.ora.2322 파일을 기존 pfile($ORACLE_HOME/dbs) 위치로 복사하면 됩니다. 오라클 공인 문서에서는 $ORACLE_HOME/dbs 디렉토리의 init.ora 파일로 변경 하라고 되어 있습니다. 그말은 데이터베이스 올리지 말라는 것과 같은 이야기 입니다. 상당히 불편하기 때문에 아래와 같은 작업을 하시길 권장합니다.
+
# 오라클 공인 문서에서는 $ORACLE_HOME/dbs 디렉토리의 init.ora 파일로 변경 하라고 되어 있음.  
[2011-01-26 04:12:08]-[oracle@estenpark:~/admin/testdb/pfile]
+
#:<source lang=sql>
 
$ cp init.ora.010201115288 $ORACLE_HOME/dbs
 
$ cp init.ora.010201115288 $ORACLE_HOME/dbs
 +
</source>
  
[설명] 정적 파라미터의 경우 - 방법 2
+
=== 정적 파라미터의 경우 - 방법 2 ===
NOMOUNT 단계 이상에서 생성 합니다.
+
# NOMOUNT 단계 이상에서 생성.
SYS@testdb> create pfile from spfile;
+
#:<source lang=sql>create pfile from spfile;</source>
 +
#: or
 +
#:<source lang=sql>create pfile from spfile='/u01/app/oracle/oradata/dbconfig/ORCL/spfileORCL.ora';</source>
  
[설명] 동적 파라미터의 경우
+
=== 동적 파라미터의 경우 ===
NOMOUNT 단계 이상에서 생성 합니다.
+
# NOMOUNT 단계 이상에서 생성.
SYS@testdb> create spfile from pfile;
+
#:<source lang=sql>create spfile from pfile;</source>
  
 
+
== 파라미터 값 변경  ==
 
+
=== ALTER SYSTEM SET 명령 ===
3. 시스템 레벨(ALTER SYSTEM SET)
+
<source lang=sql>
 
 
[3-1 파라미터 파일의 값 변경] 사용 방법은 아래와 같습니다.
 
 
ALTER SYSTEM SET 파라미터 이름=파라미터 값
 
ALTER SYSTEM SET 파라미터 이름=파라미터 값
 
[COMMENT='text']
 
[COMMENT='text']
 
[SCOPE=MEMORY/SPFILE/BOTH]
 
[SCOPE=MEMORY/SPFILE/BOTH]
 
[SID='sid'/'*']
 
[SID='sid'/'*']
 +
</source>
 +
==== COMMENT 옵션 ====
 +
# 파라미터 설정 주석을 추가하는 옵션
 +
## 동적 파라미터 파일의 설정 값을 해당 명령어로 변경시 주석을 추가할 수 있게 하는 옵션 .
 +
## 파라미터 설정 값 변경시 이력 관리 및 특이 사항을 메모할 필요가 있을 경우 사용.
 +
==== SCOPE 옵션 ====
 +
# 파라미터 설정 변경하는 옵션 
 +
## 파라미터의 설정을 변경 하는데 있어서 가장 큰 역활을 하는 옵션
 +
## 동적 파라미터(spfile)와 정적 파라미터(pfile) 중 어떤 방식으로 기동 되었는지에 따라서 차이 발생.
 +
## 기본적인 개념은 정적 파라미터는 MEMORY 옵션만 사용할 수 있고, 정적 파라미터는 옵션 모두 사용 가능.
 +
* MEMORY : 파라미터 설정 값 변경을 메모리에서만 적용함. DB종료 후 재기동 할 경우 MEMORY 옵션으로 변경한 파라미터는 변경한 값으로 바뀌지 않음.
 +
* SPFILE : 파라미터 설정 값을 변경 하되 데이터베이스를 재기동 후 변경 됨.
 +
** 실제적으로 현재 메모리 상에서는 기존의 값을 유지 하게 되고 재기동 후에는 변경 된 값을 정상적으로 사용 할 수 있음.
 +
* BOTH : MEMORY + SPFILE 두가지의 옵션을 모두 사용.
 +
** 정적 파라미터(pfile)에서 해당 옵션은 사용 할 수 없음.동적 파라미터를 위한 옵션이라고 생각 할것.
  
파라미터 설정 주석을 추가하는 COMMENT 옵션
+
==== SID 옵션 ====
동적 파라미터 파일의 설정 값을 해당 명령어로 변경시 주석을 추가할 수 있게 하는 옵션 입니다. 파라미터 설정 값 변경시 이력 관리 및 특이 사항을 메모할 필요가 있을 경우 사용 합니다.
+
# 오라클 RAC(Real Application Cluster)를 사용할 경우 변경된 파라미터 값이 적용될 노드를 선택하는 옵션.  
파라미터 설정 변경하는 SCOPE 옵션
+
# 기본 값은'*'을 사용할 경우 모든 노드에 변경된 설정 값을 적용.  
파라미터의 설정을 변경 하는데 있어서 가장 큰 역활을 하는 옵션이기도 합니다. 동적 파라미터(spfile)와 정적 파라미터(pfile) 중 어떤 방식으로 기동 되었는지에 따라서 방법의 차이가 있습니다. 기본적인 개념은 정적 파라미터는 MEMORY 옵션만 사용할 수 있고, 정적 파라미터는 옵션 모두 사용 가능 합니다.
+
# 특정 노드에만 적용해야 경우 해당 인스턴스 번호 지정.
MEMORY : 파라미터 설정 값 변경을 메모리에서만 적용하는 의미로 종료 후 재기동 할 경우 MEMORY 옵션으로 변경 된 파라미터 값은 바뀌지 않습니다.
+
<source lang=sql>
SPFILE : 파라미터 설정 값을 변경 하되 데이터베이스를 재기동 후 변경 합니다. 실제적으로 현재 메모리 상에서는 기존의 값을 유지 하게 되고 재기동 후에는 변경 된 값을 정상적으로 사용 수 있습니다.
+
SID=*
BOTH : 어려운 옵션입니다. 왜냐하면 MEMORY + SPFILE 두가지의 옵션을 모두 사용합니다. 그렇다면 정적 파라미터에서 해당 옵션을 절대 사용 할 수 없습니다. 이유는 위에서 설명 한 것과 같이 PFILE에 결과 값을 쓰지 않기 때문입니다. PFILE는 DBA(관리자)가 직접 수정하는 설정 파일 입니다. 다시 말해서 동적 파라미터를 위한 옵션이라고 생각 하셔도 됩니다.
+
</source>
파라미터 설정 변경하는 SCOPE 옵션을 이용하여 변경 가능한 파라미터와 변경 불 가능한 파라미터 파악
+
* 파라미터 조회시 *.db_block_size=8192 이와 같은 값이 보이는데, *심볼은 rac에서 all instance를 의미함.)
IMMEDIATE : 즉시 적용이 가능한 파라미터 MEMORY/SPFILE/BOTH 모두 사용 가능
+
 
DEFERRED : 현재 접속 중인 세션은 적용 하지 않고 다음 세션 부터 적용하는 파라미터로써 MEMORY/SPFILE/BOTH 모두 사용 가능
+
== 파라미터 V$PARAMETER 조회 ==
FALSE : 데이터베이스를 재 기동해야 적용 가능 한 것으로 오직 SPFILE만 사용 가능(Static Parameter)
+
<source lang=sql>
[설명] 정적 파라미터(pfile) 쿼리를 이용하여 사용 유무를 확인
+
SELECT *
SYS@testdb>  
+
  FROM V$PARAMETER;
 +
</source>
 +
* IMMEDIATE : 즉시 적용이 가능한 파라미터 MEMORY/SPFILE/BOTH 모두 사용 가능
 +
* DEFERRED : 현재 접속 중인 세션은 적용 하지 않고 다음 세션 부터 적용하는 파라미터. MEMORY/SPFILE/BOTH 모두 사용 가능
 +
* FALSE : 데이터베이스를 재기동해야 적용 가능.오직 SPFILE만 사용 가능(Static Parameter)
 +
 
 +
=== 시스템에서 즉시/다음세션/재기동 적용 가능한 파라미터 건수 조회 ===
 +
<source lang=sql>
 
SELECT ISSYS_MODIFIABLE ,COUNT(*)
 
SELECT ISSYS_MODIFIABLE ,COUNT(*)
FROM v$parameter
+
  FROM v$parameter
GROUP BY ISSYS_MODIFIABLE;
+
GROUP BY ISSYS_MODIFIABLE;
  
 
ISSYS_MODIFIABLE    COUNT(*)
 
ISSYS_MODIFIABLE    COUNT(*)
 
------------------ ----------
 
------------------ ----------
 
DEFERRED                  7
 
DEFERRED                  7
FALSE                       107
+
FALSE                     107
 
IMMEDIATE                145
 
IMMEDIATE                145
 +
</source>
  
[설명] 동적파라미터(spfile) 쿼리를 이용하여 사용 유무를 확인
+
=== 동적파라미터(spfile) 쿼리로 적용 가능한 파라미터 건수 조회 ===
SYS@testdb>  
+
<source lang=sql>
SELECT b.ISSYS_MODIFIABLE, COUNT(*)
+
SELECT b.ISSYS_MODIFIABLE
FROM v$spparameter a, v$parameter b
+
    , COUNT(*)
 +
  FROM v$spparameter a
 +
    , v$parameter b
 
WHERE a.name = b.name
 
WHERE a.name = b.name
 
GROUP BY b.ISSYS_MODIFIABLE;
 
GROUP BY b.ISSYS_MODIFIABLE;
153번째 줄: 180번째 줄:
 
FALSE    108
 
FALSE    108
 
IMMEDIATE    145
 
IMMEDIATE    145
 +
</source>
  
  
파라미터 설정 변경하는 SID 옵션
+
== 파라미터 장애 복구 시나리오 ==
오라클 RAC(Real Application Cluster)를 사용할 경우 변경된 파라미터 값이 적용될 노드를 선택하는 옵션입니다. 기본 값은'*'을 사용할 경우 모든 노드에 변경된 설정 값을 적용합니다. 특정 노드에만 적용해야 할 경우 해당 인스턴스 번호를 설정 해주면 됩니다.
+
=== [상황 1] 데이터베이스 종료 상태에서 DBA(관리자) 실수로 spfile, pfile 모두 삭제 했을 경우 복구 방법 ===
[설명] testdb.__db_cache_size=180355072 에서 __의미는 spfile에서 pfile로 추출할때 ASM을 사용하고 있다면 현재 SGA의 COMPONENT 값을 의미 합니다.  ASM을 사용하게 되면 SGA는 동적으로 크기가 변하는데 spfile에서 pfile을 생성시 값을 의미 합니다. 별 의미는 없습니다.
+
* 백업해놓은 pfile 이 있을 경우
select component, current_size/1024/1024 "current", min_size/1024/1024 "min", user_specified_size/1024/1024 "user",
+
* $ORACLE_BASE/admin/testdb/pfile을 $ORACLE_HOME/dbs로 파일을 복사 한 후 DB를 OPEN 하면 .
  granule_size/1024/1024 "granule"
+
* 11g 이상에서는 디비기동시 기본이 spfile 이므로 pfile=pfile명 옵션을 줘서 startup 해야함.  
from v$sga_dynamic_components;
+
==== 장애 발생 확인 ====
 
+
<source lang=sql>
[설명] *.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
 
$ sqlplus / as sysdba
  
181번째 줄: 195번째 줄:
 
ORA-01078: failure in processing system parameters
 
ORA-01078: failure in processing system parameters
 
LRM-00109: could not open parameter file '/home/oracle/product/10g/dbs/inittestdb.ora'
 
LRM-00109: could not open parameter file '/home/oracle/product/10g/dbs/inittestdb.ora'
 +
</source>
 +
==== 백업한 pfile을 복구대상db에 복사 ====
 +
<source lang=sql>
 +
cd ~/admin/testdb/pfile -- 백업해놓은 pfile을 복구대상db에 복사
  
[2011-01-26 04:46:54]-[oracle@estenpark:~/admin/testdb/pfile]
+
$ cp init_backup_pfile.ora $ORACLE_HOME/dbs/inittestdb.ora
$ cp init.ora.010201115288 $ORACLE_HOME/dbs/inittestdb.ora
+
</source>
  
[설명] 지금 부터 복구를 시작 하겠습니다. 파일을 복사합니다.
 
[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]
+
* 복구대상db $ORACLE_HOME/dbs/ 디렉토리에 복사 된 pfile (inittestdb.ora)확인
 +
<source lang=sql>
 
$ ls
 
$ ls
 
backup  hc_testdb.dat  initdw.ora  inittestdb.ora  lkTESTDB  orapwtestdb
 
backup  hc_testdb.dat  initdw.ora  inittestdb.ora  lkTESTDB  orapwtestdb
 +
</source>
 +
  
[2011-01-26 04:48:56]-[oracle@estenpark:~]
+
* 데이터파일을 OPEN 하기 이전에 Controlfile의 경로가 맞는지 받드시 확인.
$ sqlplus / as sysdba
+
<source lang=sql>
SYS@testdb>
 
[설명] 데이터파일을 OPEN 하기 이전에 Controlfile의 경로가 맞는지 받드시 확인 합니다.
 
 
$ vi inittestdb.ora
 
$ vi inittestdb.ora
 
###########################################
 
###########################################
202번째 줄: 218번째 줄:
 
###########################################
 
###########################################
 
control_files=( '/home/oracle/oradata/testdb/control01.ctl',     
 
control_files=( '/home/oracle/oradata/testdb/control01.ctl',     
                    '/home/oracle/oradata/testdb/control03.ctl')
+
                '/home/oracle/oradata/testdb/control03.ctl')
 +
</source>
 +
 
 +
 
 +
==== SYSDBA로 접속하여 디비 기동 ====
 +
<source lang=sql>
 +
$ sqlplus / as sysdba
  
[설명] 아래와 같이 startup하여 데이터베이스가 정상적으로 OPEN 되어서 복구 완료 입니다.
 
 
SYS@testdb> startup
 
SYS@testdb> startup
 
ORACLE instance started.
 
ORACLE instance started.
218번째 줄: 239번째 줄:
 
----------------------------------------------------
 
----------------------------------------------------
 
spfile        string
 
spfile        string
 +
</source>
  
 
+
=== [상황 2] pfile을 spfile로 변경 해야 할때 ===
[4-2 상황 2] 현재 파라미터 파일은 pfile 입니다. 고객사에서 pfile을 spfile로 변경 해달라고 요청이 왔습니다. 
+
* pfile을 spfile로 만들어 주고 데이터베이스를 재기동 하면 .
[설명] 이 방법은 별도의 설명이 필요 없습니다. pfile을 spfile로 만들어 주고 데이터베이스를 재기동 하면 됩니다.
+
<source lang=sql>
 
SYS@testdb> create spfile from pfile;
 
SYS@testdb> create spfile from pfile;
 
SYS@testdb> shutdown immediate;
 
SYS@testdb> shutdown immediate;
237번째 줄: 259번째 줄:
 
------------------------------------------------
 
------------------------------------------------
 
spfile        string      /home/oracle/product/10g/dbs/spfiletestdb.ora
 
spfile        string      /home/oracle/product/10g/dbs/spfiletestdb.ora
 +
</source>
  
 
 
 
파라미터 파일은 오라클에서 필수 파일 중 하나로 명시 되어있습니다. 사용 방법은 쉽지만 관리를 잘 해야 하는 파일 중 하나 입니다.보통 백업 파일의 기준이 redo log file, control file, data file, archive log file 무조건 백업을 하게 되고 상황에 따라서 파라미터 파일도 백업 절차에 포함 될 경우도 있습니다.
 
 
 
반드시 알아야 할 것은 pfile, spfile의 차이점을 파악 하셔야 합니다.
 
 
 
 
출처: https://estenpark.tistory.com/294 [DATA 전문가로 가는 길]
 
 
[[Category:oracle]]
 
[[Category:oracle]]

2024년 9월 13일 (금) 00:36 기준 최신판

thumb_up 추천메뉴 바로가기


1 오라클 파라미터 파일 spfile VS pfile[편집]

2 파라미터 파일의 개념[편집]

  • 데이터베이스를 기동하기 위해서는 파라미터 파일을 참조하여 SGA 및 기타 필요한 환경을 구성.
  1. shutdown(종료상태) ->
  2. 파라미터 파일 읽기(spfile/pfile) ->
  3. NOMOUNT 단계별로 기동 시 파라미터 파일을 가장 중요한 역활을 함.
  • 만약 파라미터 파일이 없을 경우에는 "could not open parameter file '경로 및 파일이름' " 에러가 발생.

3 파라미터 파일의 종류[편집]

3.1 정적 파라미터(initSID.ora)[편집]

  1. 오라클 모든 버전에서 사용가능(8i ~)
  2. 텍스트 형식으로 OS Edit를 이용하여 변경 가능
  3. 관련 뷰 : V$PARAMETER
  4. 동적 파라미터의 종류는 적음

3.2 동적 파라미터(spfileSID.ora)[편집]

  1. 오라클 특정 버전부터 사용가능(9i ~)
  2. 바이너리 형식으로 OS Edit를 이용하여 변경 불가능
  3. 관련 뷰 : V$SPPARAMETER
  4. 동적 파라미터의 종류는 많음

3.3 pfile과 spfile 차이점[편집]

  1. pfile은 OS에서 vi 편집기를 이용하여 파라미터의 값을 변경 가능.
  2. NOMOUNT 단계 이상이라면 다시 pfile을 사용하지 않음
  3. spfile은 OS에서 vi 편집기로 절대 수정을 하면 안됨
  4. NOMOUNT 단계 이상이라면 spfile을 다시 쓰기 때문에 제거,이동 하면 안됨.

3.4 파라미터를 설정 변경[편집]

  • SPFILE
    ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY/SPFILE/BOTH)]
  • PFILE
    ALTER SYSTEM SET [파라미터이름=values] [SCOPE=(MEMORY)]

4 파라미터 파일의 관리[편집]

4.1 PFILE 파라미터 경로[편집]

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

$ cd ls -l 1.spfiletestdb.ora 2.spfile.ora 3.inittestdb.ora

4.init.ora

4.2 동적 파라미터 사용(SPFILE)[편집]

  • $ORACLE_HOME/dbs/spfiletestdb.ora
  • initSID.ora 파일(pfile)이 있어도 상관 없음. spfileSID.ora 파일이 있다면 pfile(initSID.ora)은 절대 반영 되지 않음.
$ cd $ORALE_HOME/dbs 
$ ls -al spfile*
-rw-r-----  1 oracle dba 2560  1월 26 02:17 spfiletestdb.ora
  • 데이터베이스를 오픈하지 않고 NOMOUNT 단계에서 상태 확인.
    SYS@testdb> startup nomount

4.3 현재 pfile , spfile 확인 하는 방법[편집]

  • 아래와 같이 VALUE에 값이 있을 경우에는 spfile이고 만약 VALUE에 값이 없다면 pfile
SYS@testdb> show parameter pfile
NAME         TYPE      VALUE
---------------------------------------------------------------
spfile         string      /home/oracle/product/10g/dbs/spfiletestdb.ora

4.4 현재 파라미터를 몇개나 사용하고 있는지 확인[편집]

select isspecified ,count(value) 
  from v$spparameter 
 group by isspecified;

ISSPECIFIED  COUNT(VALUE)
------------ ------------
FALSE               0
TRUE                22


5 파라미터 파일 생성[편집]

  • 정적 파라미터는 데이터베이스 종료 상태에서도 가능
  • 동적 파라미터의 경우는 데이터베이스가 NOMOUNT 단계 이상에서 생성해야 함.

5.1 정적 파라미터의 경우 - 방법 1[편집]

  1. show parameter dump 로 덤프 파일 경로 확인
  2. 기본적으로 덤프파일과 동일한 디렉토리에 pfile 디렉토리 존재.
  3. init.ora.2322 파일을 기존 pfile($ORACLE_HOME/dbs) 위치로 복사.
  4. 오라클 공인 문서에서는 $ORACLE_HOME/dbs 디렉토리의 init.ora 파일로 변경 하라고 되어 있음.
    $ cp init.ora.010201115288 $ORACLE_HOME/dbs

5.2 정적 파라미터의 경우 - 방법 2[편집]

  1. NOMOUNT 단계 이상에서 생성.
    create pfile from spfile;
    or
    create pfile from spfile='/u01/app/oracle/oradata/dbconfig/ORCL/spfileORCL.ora';

5.3 동적 파라미터의 경우[편집]

  1. NOMOUNT 단계 이상에서 생성.
    create spfile from pfile;

6 파라미터 값 변경[편집]

6.1 ALTER SYSTEM SET 명령[편집]

ALTER SYSTEM SET 파라미터 이름=파라미터 값
[COMMENT='text']
[SCOPE=MEMORY/SPFILE/BOTH]
[SID='sid'/'*']

6.1.1 COMMENT 옵션[편집]

  1. 파라미터 설정 주석을 추가하는 옵션
    1. 동적 파라미터 파일의 설정 값을 해당 명령어로 변경시 주석을 추가할 수 있게 하는 옵션 .
    2. 파라미터 설정 값 변경시 이력 관리 및 특이 사항을 메모할 필요가 있을 경우 사용.

6.1.2 SCOPE 옵션[편집]

  1. 파라미터 설정 변경하는 옵션
    1. 파라미터의 설정을 변경 하는데 있어서 가장 큰 역활을 하는 옵션
    2. 동적 파라미터(spfile)와 정적 파라미터(pfile) 중 어떤 방식으로 기동 되었는지에 따라서 차이 발생.
    3. 기본적인 개념은 정적 파라미터는 MEMORY 옵션만 사용할 수 있고, 정적 파라미터는 옵션 모두 사용 가능.
  • MEMORY : 파라미터 설정 값 변경을 메모리에서만 적용함. DB종료 후 재기동 할 경우 MEMORY 옵션으로 변경한 파라미터는 변경한 값으로 바뀌지 않음.
  • SPFILE : 파라미터 설정 값을 변경 하되 데이터베이스를 재기동 후 변경 됨.
    • 실제적으로 현재 메모리 상에서는 기존의 값을 유지 하게 되고 재기동 후에는 변경 된 값을 정상적으로 사용 할 수 있음.
  • BOTH : MEMORY + SPFILE 두가지의 옵션을 모두 사용.
    • 정적 파라미터(pfile)에서 해당 옵션은 사용 할 수 없음.동적 파라미터를 위한 옵션이라고 생각 할것.

6.1.3 SID 옵션[편집]

  1. 오라클 RAC(Real Application Cluster)를 사용할 경우 변경된 파라미터 값이 적용될 노드를 선택하는 옵션.
  2. 기본 값은'*'을 사용할 경우 모든 노드에 변경된 설정 값을 적용.
  3. 특정 노드에만 적용해야 할 경우 해당 인스턴스 번호 지정.
SID=*
  • 파라미터 조회시 *.db_block_size=8192 이와 같은 값이 보이는데, *심볼은 rac에서 all instance를 의미함.)

7 파라미터 V$PARAMETER 조회[편집]

SELECT *
  FROM V$PARAMETER;
  • IMMEDIATE 값 : 즉시 적용이 가능한 파라미터 MEMORY/SPFILE/BOTH 모두 사용 가능
  • DEFERRED 값 : 현재 접속 중인 세션은 적용 하지 않고 다음 세션 부터 적용하는 파라미터. MEMORY/SPFILE/BOTH 모두 사용 가능
  • FALSE : 데이터베이스를 재기동해야 적용 가능.오직 SPFILE만 사용 가능(Static Parameter)

7.1 시스템에서 즉시/다음세션/재기동 적용 가능한 파라미터 건수 조회[편집]

SELECT ISSYS_MODIFIABLE ,COUNT(*)
  FROM v$parameter
 GROUP BY ISSYS_MODIFIABLE;

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

7.2 동적파라미터(spfile) 쿼리로 적용 가능한 파라미터 건수 조회[편집]

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


8 파라미터 장애 복구 시나리오[편집]

8.1 [상황 1] 데이터베이스 종료 상태에서 DBA(관리자) 실수로 spfile, pfile 모두 삭제 했을 경우 복구 방법[편집]

  • 백업해놓은 pfile 이 있을 경우
  • $ORACLE_BASE/admin/testdb/pfile을 $ORACLE_HOME/dbs로 파일을 복사 한 후 DB를 OPEN 하면 됨.
  • 11g 이상에서는 디비기동시 기본이 spfile 이므로 pfile=pfile명 옵션을 줘서 startup 해야함.

8.1.1 장애 발생 확인[편집]

$ 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'

8.1.2 백업한 pfile을 복구대상db에 복사[편집]

cd ~/admin/testdb/pfile -- 백업해놓은 pfile을 복구대상db에 복사 

$ cp init_backup_pfile.ora $ORACLE_HOME/dbs/inittestdb.ora


  • 복구대상db $ORACLE_HOME/dbs/ 디렉토리에 복사 된 pfile (inittestdb.ora)확인
$ ls
backup  hc_testdb.dat  initdw.ora  inittestdb.ora  lkTESTDB  orapwtestdb


  • 데이터파일을 OPEN 하기 이전에 Controlfile의 경로가 맞는지 받드시 확인.
$ vi inittestdb.ora
###########################################
# File Configuration
###########################################
control_files=( '/home/oracle/oradata/testdb/control01.ctl',    
                '/home/oracle/oradata/testdb/control03.ctl')


8.1.3 SYSDBA로 접속하여 디비 기동[편집]

$ sqlplus / as sysdba

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

8.2 [상황 2] 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