ORACLE INSTANCE 가 START UP 시에 SPFILE과 PFILE을 읽어 들어 파라미터 값을 적용시킨다. SPFILE이 있으면 SPFILE을 읽게 되며, SPFILE가 존재 하지 않으면 PFILE을 읽게 된다.
0. pfile과 spfile의 기본 경로 및 네이밍
기본적으로 pfile과 spfile은 $ORACLE_HOME/dbs/ 에 위치한다. pfile은 initdXXXX.ora 로 정의되어 있고 spfile은 spfileXXXX.ora로 저정되어 있다. 여기서 XXXX는 SID값이다.
1. spfile 사용하기
SQL> show parameter spfile
결과 값에서 VALUE 값이 현재 사용되는 spfile 이다. 만약 VALUE 값이 없다면 pfile을 사용하여 startup 된것이다. spfile을 만들어 보자.
SQL> create spfile from pfile;
pfile을 기본으로 spfile을 생성했다. 여기서 주의 할 점은 pfile은 아스키 값이고 spfile은 바이너리 파일이다. 그래서 pfile은 직접 편집기로 수정해도 되지만, spfile은 명령어로 값을 변경 하던지 pfile을 변경한뒤 spfile로 만들어야 한다.
SQL> startup force
인스턴스를 재시작해야 spfile이 적용된다.
2. 파라미터 파일(pfile) 복구
파라미터 파일은 log파일로 이전 값을 기억하고 있다. 만약 pfile과 spfile을 모두 손실 하였다면 log를 기반으로 되살릴수 있다.
SQL> show parameter background_dump
위 명령어로 로그 파일의 위치를 알수 있다.
SQL> !vi + /u01/app/oracle/product/10.2.0/db_1/rdbms/log/alert_devdb.log
로그를 vi로 열어보면 중간 부분에 pfile이 저장되어 있다. 얼마나 고마운 일인가!!
※여기서 !는 SQL쉘에서 OS쉘을 사용하기 위함이다.
SQL> !vi /u01/app/oracle/product/10.2.0/db_1/dbs/initXXXX.ora
파일을 생성하여 위의 로그파일에서 얻은 값으로 되살리면 된다.
SQL> startup
SQL> create spfile from pfile;
SQL> startup force
SQL> show parameter spfile
인스턴스를 시작하고 pfile로 spfile을 생성하고 재시작한다. 그래고 spfile을 확인하면 정상으로 spfile을 확인할수 있다.
3. 임의의 pfile을 이용해서 start up
SQL> create pfile='/home/oracle/mydevdb.ora' from spfile;
SQL> startup force pfile=/home/oracle/mydevdb.ora
spfile로 pfile을 생성(임의 pfile생성)하여 그 pfile의 경로를 지정하여 start up 할수 있다.
4. 임의의 spfile을 이용해서 startup
SQL> !vi /home/oracle/param.txt
spfile=/home/oracle/spmydevdb.ora
SQL> startup force pfile=/home/oracle/param.txt
spfile은 직접 경로를 직접 지정하여 start up 할수 없다. 간접적으로 링크 파일을 생성하여 spfile로도 startup 할수 있다.