본문 바로가기

DB

[DB] 오라클 컨트롤 파일 변경 및 에러메세지



오라클의 컨트롤 파일이 없을때의 에러메세지

오라클의 컨트롤 파일은 DB의 물리적인 정보를 담고 있는 바이너리 파일이다.
오라클을 startup 하면 오라클은 nomount 상태에서 paramete 파일을 읽어서 메모리에 인스턴스를 구동하고, 그 다음에
컨트롤 파일을 읽어서 DB의 물리적인 구조를 파악한다.

만약 파라미터에서 지정되어 있는 컨트롤 파일의 어느 한개라도 손상이 되어서 읽을수가 없는 상황이 되면은
오라클 startup 시에 error 메세지와 함께 mount 만 된 상태로 진행된다.
* 참고로 컨트롤 파일이 오라클 구동중에 손상이 되어있어도, shutdown 은 잘 진행이 된다.

컨트롤 파일이 한개라도 없을때에 나오는 에러 메세지는 다음과 같다.
ORA-00205: error in identifying controlfile, check alert log for more info

그 상태에서의 인스턴스 상태를 확인해 보자
SQL> select status from v$instance;
STATUS
-----------
STARTED

정상적으로 startup 이 되었으면 OPEN 상태이어야 하는데 nomount 의 인스턴스만 시작된 상태로 되어있다.

위와 같은 에러 메세지가 나올때는 컨트롤 파일을 복구 해서 오라클을 alter database 명령어로 올려도 된다.
또는 컨트롤파일의 설정값을 변경하여 손상된 컨트롤 파일을 찾지 않도록 하고 shutdown 후에 startup 을 하자

컨트롤 파일의 설정 변경 은 다음과 같은 방법으로 하면 된다.
1. 현재 컨트롤 파일 설정 상태 확인 (2가지 방법이 있다)
SQL> select name,value from v$parameter where name like 'control_files';
SQL> show parameter control_files

2. 컨트롤 파일 설정 변경방법
SQL> alter system set control_files = '컨트롤파일 위치(절대경로)','컨트롤파일 위치(절대경로) scope=spfile;
* spfile 파라미터를 사용할때는 위와 같이 scope 옵션을 주고, pfile 파라미터를 사용할때는 수동으로 설정 변경을 해주자.
* 컨트롤 파일은 디폴트로 3개 ($ORACLE_HOME/dbs/control01.ctl  $ORACLE_HOME/dbs/control02.ctl   $ORACLE_HOME/dbs/control03.ctl ) 가 생성되어 있다.
* 3개의 컨트롤 파일은 각자가 모두 동일한 내용을 포함하고 있으며, 해당 컨트롤 파일을 물리적으로 다른 디스크에 저장해서 보관하는것이 장애극복을 위해서 좋다.

* 컨트롤 파일은 바이너리 파일이어서 안에 내용을 확인하기 힘들지만, 암튼 안에 버전 정보가 있는듯 하다. 각 컨트롤 파일의 버전이 틀릴경우 아래와 같은 에러를 내뿜으면서 mount 가 안된다.
ORA-00214: controlfile '/data1/ora9i/oradata/DB09/control01.ctl' version 322 inconsistent with file /data2/ora9i/oradata/DB09/control02.ctl' version 316
이럴때는 컨트롤 파일을 하나를 베이스로 복사해서 이름 변경후 사용하도록 하자.
 -> 이거는 ㅡ.ㅡ;; 백업 된 컨트롤 파일을 그대로 쓰다가는 문제가 발생할수 있을거 같다는 생각도 든다.