ORACLE 11g SWITCH v1.0
|
1.0 |
|
|
|
|
|
|
|
1. SWITCH
l Ref.A 에서 발췌했다.
Purpose
다음과 같은 목적으로 SWITCH 를 사용한다.
- Database, tablespace, datafile 의 filenames 을 update 하기 위해 최신의 image copies 로 갱신한다.
- SET NEWNAME 으로 수행 된 datafile 나 tempfiles 로 filenames 을 갱신한다.
Prerequisites
RMAN은 target 에 반드시 연결되어 있어야 한다. Tablespaces, datafiles 혹은 tempfiles 에 대해, 대상 파일은 반드시 offline 이어야 한다. Database 에 대해 switching 하는 경우에는 반드시 mount 상태여야 한다.
Usage Notes
SWITCH 명령은 recovery catalog 로부터 RMAN datafile copy 에 대한 repository record 를 삭제하고 control file 의 records 상태를 deleted 로 갱신한다.
Semantics
switch
Database, tablespace, datafile 에 대해 마지막 image copies 로 switch 한다. 이 명령어의 실행으로, backup 으로부터 restore 하는 과정을 생략할 수 있다. SWITCH … TO COPY 명령은 RMAN prompt 에서만 수행한다.
- DATABASE : Image copies 의 filenames 을 사용하기 위해 datafiles 과 control files 을 rename 한다. RMAN 은 각 database file 의 최신의 image copy 로 전환한다.
- DATAFILE : 지정된 datafile 을 최신의 image copies 로 변경한다. switch 후, 지정 된 datafile 을 더 이상 current 상태로 고려하지 않는다.
- TABLESPACE : 지정된 tablespace 안의 모든 datafile 을 변경한다.
- TO COPY : 지정된 active database files 을 image copies 로 변경한다.
switchfile
SET NEWNAME 명령으로 지정된 곳으로 datafile 그리고 tempfiles 의 이름을 갱신한다. 이는 RUN block 안에서만 사용 가능하다.
- DATAFILE ALL : SET NEWNAME FOR DATAFILE 에 해당하는 모든 datafiles 에 대해 새로운 이름으로 스위치 한다.
- DATAFILE detafileSpec : Renaming 할 datafile 을 지정하며, controlfile 은 지정된 파일을 current 한 것으로 간주하지 않는다. 만약 TO 옵션을 생략하면, RMAN 은 앞서 셋팅 된 SET NEWNAME 에 설정된 이름을 사용한다. (run block 에서)
- TO DATAFILECOPY {‘filename’|TAG tag_name} : Switch 를 위해 copy 입력을 지정하며, rename 하기 원하는 datafile copy 이다.
- TEMPFILE ALL : SET NEWNAME FOR TEMPFILE 에 지정된 모든 tempfiles 이 새로운 이름으로 스위치 된다.
- TEMPFILE tempfileSpec : Renaming 을 원하는 tempfile 을 지정한다. TO 옵션을 지정하지 않으면, RMAN 은 RUN block 에 지정 된 SET NEWNAME 에 지정된 filename 을 사용한다. Target database 는 open 상태가 아닌 mount 상태여야 한다.
- TO ‘filename’ : 지정된 이름으로 tempfile 을 rename 한다. 타겟 데이터베이스는 open 이 아닌 mount 상태여야 한다.
2. Examples
Backup 으로부터 restoring 을 피하기 위한 스위치
RMAN> sql 'alter tablespace ogg offline'; RMAN> list copy of tablespace ogg; RMAN> switch tablespace ogg to copy; |
위 두번째 명령의 결과로 ogg 의 image copy 의 경로가 다음과 같음을 확인했다.
Name: /backup1/ogg1/ogg1_data_D-OGG1_I-3966260165_TS-OGG_FNO-5_3hnq9gdc.bak
세번째 명령을 수행한 이후 list copy of tablespace ogg 의 결과는 다음과 같다.
Name: /u01/app/oracle/oradata/ogg1/ogg1.dbf
추가로 DB 에 접속해 ogg tablespace 의 file_name 은 다음과 같다.
/backup1/ogg1/ogg1_data_D-OGG1_I-3966260165_TS-OGG_FNO-5_3hnq9gdc.bak
위 내용을 정리하면 switch … to copy 명령을 통해 image copy 본이 새로운 데이터 파일로 명명되고 원본은 image copy 로 간주되었다. 말그대로 데이터파일과 COPY 가 서로의 입장을 SWITCH 하였다.
이 과정에서 RESTORE 과정은 없었다.
원복은 다음과 같이 run block 을 이용했다.
( 실행전에 switch 된 새로운 datafile 을 recover 하고 online 으로 변경하는 과정을 밟았다. )
RMAN> run { 2> sql 'alter tablespace ogg offline'; 3> set newname for datafile '/backup1/ogg1/ogg1_data_D-OGG1_I-3966260165_TS-OGG_FNO-5_3hnq9gdc.bak' 4> to '/u01/app/oracle/oradata/ogg1/ogg1.dbf'; 5> switch datafile all; 6> recover tablespace ogg; 7> sql 'alter tablespace ogg online';} |
위 수행에 대한 결과로 종전과 동일한 상황이 만들어졌다.
새로운 위치에 Restore 후 datafile filenames 을 스위치
RUN { SQL "ALTER TABLESPACE ogg OFFLINE IMMEDIATE"; SET NEWNAME FOR DATAFILE '/u01/app/oracle/oradata/ogg1/ogg1.dbf' TO '/u01/app/oracle/oradata/ogg1/ogg2.dbf'; RESTORE TABLESPACE users; SWITCH DATAFILE ALL; RECOVER TABLESPACE users; SQL "ALTER TABLESPACE users ONLINE"; } |
위 run block 을 수행하면 tablespace ogg 에 대한 copy 가 하나 더 늘어난다.
list copy of tablespace ogg; 의 결과는 다음과 같다.
Name: /u01/app/oracle/oradata/ogg1/ogg1.dbf
Name: /backup1/ogg1/ogg1_data_D-OGG1_I-3966260165_TS-OGG_FNO-5_3hnq9gdc.bak
Key 나 Ckp SCN 을 보았을 때 상단의 경로가 최근에 생겼음을 알 수 있었다. 그리고 이 경로는 NEWNAME A TO B 의 A 에 해당하는 경로이다.
report schema; 의 경로를 보면 NEWNAME A TO B 의 B 위치에 새로이 데이터 파일이 생겼음을 알 수 있다.
5 10 OGG NO /u01/app/oracle/oradata/ogg1/ogg2.dbf
앞서 본 run block 에서 사용한 set newname 의 A to B 를 보았을 때 A 는 실재하는 경로를 사용하며 B 에는 실재할수도 없을수도 있는 경로를 사용했다. 실재하는 파일을 지정한 경우 RESTORE 없이 바로 SWITCH 를 사용했지만 실재하지 않는 파일을 지정한 경우에는 RESTORE 과정을 밟았다.
3. References
A. SWITCH | http://docs.oracle.com/cd/B28359_01/backup.111/b28273/rcmsynta049.htm