참고글 및 문제해결/문제해결

Hidden parameter를 SPFILE에서 적용하기

에몽이ㅋ 2012. 3. 1. 23:39
pfile을 사용중이라면, 해당 파일에 그냥 추가하고 다시 startup을 시키면 되지만,
spfile은 어떻게 할까요?


alter system set을 쓰면 되지!!


---> 맞습니다. 한번 써보죠(결론은 포스팅의 맨 마지막에서 확인)

1. 일단 현재상황 확인
현재상황
SQL> l
  1  select a.ksppinm name, b.ksppstvl value,b.ksppstdf deflt,
  2  decode (a.ksppity, 1, 'boolean',
  3                  2, 'string',
  4                  3, 'number',
  5                  4, 'file',
  6                  a.ksppity) type,
  7  a.ksppdesc description
  8  from sys.x$ksppi a, sys.x$ksppcv b
  9  where a.indx = b.indx and a.ksppinm like '\_%' escape '\'
 10  and a.ksppinm like '%resetlogs%'
 11  order by name
 12*
SQL> /

NAME                 VALUE      DEFLT      TYPE       DESCRIPTION
-------------------- ---------- ---------- ---------- --------------------------------------------------
_allow_resetlogs_cor FALSE      TRUE       boolean    allow resetlogs even if it will cause corruption
ruption

_no_recovery_through FALSE      TRUE       boolean    no recovery through this resetlogs operation
_resetlogs

_allow_resetlogs_corruption 의 value가 FALSE인 것을 확인합시다.


2. ALTER SYSTEM SET으로 파라미터 변경시도
SQL> alter system set _allow_resetlogs_corruption=TRUE scope=spfile;
alter system set _allow_resetlogs_corruption=TRUE scope=spfile
                 *
ERROR at line 1:
ORA-00911: invalid character

안됩니다 왜 안될까요? 
'_' 문자가 invalid character이기 때문입니다.


3. 다시 시도 : 해당 파라미터를 " " 으로 감싸고 변경해봅시다
SQL> alter system set "_allow_resetlogs_corruption"=TRUE scope=spfile;

System altered.

잘되네요!!
ALERT LOG에도 바뀌었다고 뜹니다.
Thu Mar 01 23:17:45 KST 2012
ALTER SYSTEM SET _allow_resetlogs_corruption=TRUE SCOPE=SPFILE;



4. 그럼 변경을 확인하기 위해 shutdown 후 startup 해서 확인해보도록 하겠습니다.
SQL> l
  1  select a.ksppinm name, b.ksppstvl value,b.ksppstdf deflt,
  2  decode (a.ksppity, 1, 'boolean',
  3                  2, 'string',
  4                  3, 'number',
  5                  4, 'file',
  6                  a.ksppity) type,
  7  a.ksppdesc description
  8  from sys.x$ksppi a, sys.x$ksppcv b
  9  where a.indx = b.indx and a.ksppinm like '\_%' escape '\'
 10  and a.ksppinm like '%resetlogs%'
 11* order by name
SQL> /

NAME                 VALUE      DEFLT      TYPE       DESCRIPTION
-------------------- ---------- ---------- ---------- --------------------------------------------------
_allow_resetlogs_cor TRUE       FALSE      boolean    allow resetlogs even if it will cause corruption
ruption

_no_recovery_through FALSE      TRUE       boolean    no recovery through this resetlogs operation
_resetlogs

_allow_resetlogs_corruption의 VALUE 가 TRUE로 되었습니다.!

5. 오픈 이후 히든파라미터는 위험하므로 항상 원래값으로 변경시켜 줍시다.
alter system set "_allow_resetlogs_corruption"=FALSE sope=spfile;



결론 : 
spfile 을 이용할때 hidden parameter을 이용하기 위해서
평소처럼 ALTER SYSTEM SET을 이용하면 되는데, '_' 가 인식이 안되므로
"_allow_resetlogs_corruption"=TRUE  처럼 파라미터에 " "을 감싸줘야합니다.