본문 바로가기

IT관련

파라메타 오류로 DB가 안올라오는 경우 (Oracle Startup Error, PRCR-1079, CRS-5017, ORA-00821, CRS-2674, CRS-2632)

오라클 데이터베이스에 spfile 파라메타 파일이 나오면서 DBA 작업이 번거로워 지는 경우가 종종 있습니다.

DBA 가 DB Parameter 잘못 조정했다가 DB 기동이 안되어 많이 헤매는 경험을 하게 됩니다.

 

원래 Oracle DB 파라메타 파일은 init<SID>.ora 형태를 띄고 있는 Text 파일입니다.

Text 형태의 파일이기 때문에 잘못된 게 있으면 그냥 vi 로 열어서 수정한 후, 다시 startup 하면 되었습니다.

하지만, spfile<SID>.ora 형태로 바뀌면서 더이상 vi 로 편집할 수 없게 되었습니다.

spfile 은 Binary 파일이기 때문에 vi로 편집하면 깨집니다.

 

 

 

위와 같이 DB 파라메타의 문제로 DB Startup 이 안되는 경우에는 spfile 을 먼저 pfile 로 바꿔줘야 합니다.

init<SID>.ora 형태의 Text 파일을 pfile 이라고 합니다.

pfile 로 바꿔서 vi 로 편집한 후, 이 pfile 로 바로 기동하거나, 다시 spfile 로 변경해준 후 기동하면 됩니다.

 

 

이런 과정없이 DB가 기동되지도 않았는데, 그냥 alter system 명령으로 DB 파라메타를 변경하려고 하면

아래와 같이 ORA-01034 에러가 발생합니다.

 

 

싱글(Single) DB라면 create pfile from spfile; 커맨드만으로 spfile 에서 pfile 을 간단하게 만들 수 있습니다.

하지만, ASM을 사용하는 RAC 에서 spfile 이 ASM 스토리지 안에 있는 경우는

아래와 같이 ORA-01565, ORA-27037 에러가 발생합니다.

 

 

아래에서 볼 수 있듯이 $ORACLE_HOME/dbs 디렉토리에 이미 pfile (initSID.ora) 이 존재하고 있습니다.

하지만, 이 파일을 열어서 보면 pfile 이 아니고, 실제로는 ASM 안에 들어있는 spfile 입니다.

따라서 vi 로 직접 편집할 수가 없습니다.

 

 

이걸 create pfile from spfile 명령으로 아래와 같이 파일들의 위치를 지정해줘야 에러없이 pfile 을 추출할 수 있습니다.

 

 

이제, /tmp 디렉토리에 pfile 이 우리가 지정한 이름(initRAC.ora) 으로 만들어져 있습니다.

이것을 vi 로 편집하면 됩니다.

 

 

위에서 sga_target 값이 너무 작아서 에러가 났었습니다. (ORA-00821)

제가 작은 sga_target 값에도 불구하고, sessions, processes 값을 너무 크게 늘렸었거든요.

이제 sga_target 값을 좀많이 늘려주던가, 아니면, sessions, processes 값을 원래대로 줄여준 다음에,

다시 create spfile from pfile 명령으로 다시 spfile 을 ASM 스토리지내에 만들어서 넣어주면 됩니다.

 

 

이제 DB파라메타 들이 정상으로 수정되었기 때문에 DB를 기동해주면 잘 올라옵니다.