◆ 컨트롤 파일
- 바이너리 파일로써 OS편집기로 열거나 수정하면 안된다.
- 파라미터 파일 안에 컨트롤파일의 위치 정보가 기록되어 있다.
- 물리적 데이터베이스(파일)의 현재 상태를 정의한다.
- 데이터베이스의 스타트업시 마운트 단계로 올라가기 위해 필요함.
- 컨트롤 파일에는 실제 데이터는 안들어있고 정보만 들어있다. 하지만 이 정보가 날라가면 데이터파일을 못쓰게 된다.(메타데이터)
- 사람으로 치면 뇌에 해당하는 무지 중요한 파일임.(오라클에도 뇌 역할을 하는 애가 두개가 있는데, 하나는 컨트롤파일이고, 또 하나는 딕셔너리이다.)
- 다른 서버의 컨트롤파일을 바로 갖다쓸 수는 없다. 컨트롤 파일 안에는 DB이름 등의 정보가 있기 때문에 복사한 DB의 정보로 바꿔주는 작업 등이 필요하다.
◆ 컨트롤 파일 안에 있는 내용
- DB이름과 식별자
- 데이터파일과 리두로그파일의 이름과 위치
◆ 컨트롤 파일 다중화
주의해야 할 것은 다중화 시킨 컨트롤 파일 끼리는 내용이 서로 같아야 한다.
또한 컨트롤 파일 관련 작업을 할 때는 DB를 아예 셧다운 시킨 후 하던지 노마운트 작업에서 해야 한다.(절대 쓰고 있는 것은 건들지 말아야 한다.)
◇ 컨트롤 파일 다중화(pfile 이용)
현재 컨트롤 파일의 위치는 /home/oracle/oradata/testdb/control01.ctl이라고 가정한다. 이것을 각자 Disk1, Disk2, Disk3의 위치로 다중화 해보자.
현재 DB는 오픈 상태이다.
SQL> shutdown immediate;
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk2/control02.ctl
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk3/control03.ctl
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
CONTROL_FILES=('/home/oracle/disk1/control01.ctl',
'/home/oracle/disk2/control02.ctl',
'/home/oracle/disk3/control03.ctl')
SQL> startup
SQL> select name from v$controlfile;
현재 DB는 오픈 상태이다.
SQL> shutdown immediate;
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk2/control02.ctl
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk3/control03.ctl
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
CONTROL_FILES=('/home/oracle/disk1/control01.ctl',
'/home/oracle/disk2/control02.ctl',
'/home/oracle/disk3/control03.ctl')
SQL> startup
SQL> select name from v$controlfile;
◇ 컨트롤 파일 다중화(spfile 이용)
현재 컨트롤 파일의 위치는 /home/oracle/oradata/testdb/control01.ctl이라고 가정한다. 이것을 각자 Disk1, Disk2, Disk3의 위치로 다중화 해보자.
현재 DB는 오픈 상태이다.
해당 명령어로 컨트롤파일을 다중화시킨다.
SQL> alter system set control_files='/home/oracle/disk1/control01.ctl',
'/home/oracle/disk2/control02.ctl',
'/home/oracle/disk3/control03.ctl' scope=spfile;
scope를 spfile로 하였으므로 다음 재부팅시 적용된다. 주의할 것은 scope를 생략해버리면 both가 되는데 지금 DB가 오픈된 상태의 컨트롤파일의 위치는 /home/oracle/oradata/testdb/control01.ctl 하나밖에 없는데, 지금 DB에 적용시켜 버리면 다중화해서 내려써야 하는데 가보니 파일이 없어서 DB가 에러를 내고 뻗어버린다.
SQL> shutdown immediate;
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk2/control02.ctl
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk3/control03.ctl
SQL> startup
조회하면 컨트롤파일의 위치를 알 수 있다.
SQL> select name from v$controlfile;
현재 DB는 오픈 상태이다.
해당 명령어로 컨트롤파일을 다중화시킨다.
SQL> alter system set control_files='/home/oracle/disk1/control01.ctl',
'/home/oracle/disk2/control02.ctl',
'/home/oracle/disk3/control03.ctl' scope=spfile;
scope를 spfile로 하였으므로 다음 재부팅시 적용된다. 주의할 것은 scope를 생략해버리면 both가 되는데 지금 DB가 오픈된 상태의 컨트롤파일의 위치는 /home/oracle/oradata/testdb/control01.ctl 하나밖에 없는데, 지금 DB에 적용시켜 버리면 다중화해서 내려써야 하는데 가보니 파일이 없어서 DB가 에러를 내고 뻗어버린다.
SQL> shutdown immediate;
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk1/
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk2/control02.ctl
$ cp /home/oracle/oradata/testdb/control01.ctl /home/oracle/disk3/control03.ctl
SQL> startup
조회하면 컨트롤파일의 위치를 알 수 있다.
SQL> select name from v$controlfile;
'오라클 > Admin' 카테고리의 다른 글
[Admin] Redo Log File (0) | 2010.08.28 |
---|---|
[Admin] Data Dictionary (0) | 2010.08.26 |
[Admin] Startup과 Shutdown (0) | 2010.08.26 |
[Admin] Parameter File (0) | 2010.08.26 |
[Admin] Database Starting Up (0) | 2010.08.26 |