11g 에서향상된 ASMCMD-CP 기능 (Oracle 11g R1 11.1.0.7) Author: Hyun-Ho, Jung Job: Oracle DBA Site: http://www.commit.co.kr Email: admin@commit.co.kr cleanto@naver.com Creation Date: 2011-05-31
Document Server Information Items Description Test Date 2011 / 05 / 31 CPU Intel(R) Xeon(R) CPU X5620 @ 2.40GHz X 8 Main Memory 1GB O/S version OEL 5.5 Host Name test.com ORACLE_SID orcl Oracle version 11.1.0.7.6 Document 1 of 12
11g ASMCMD 11g ASMCMD 가확장되었다. 그결과, 정확한템플릿과별칭디렉토리구조를갖는기존의 ASM 디스크그룹을재생성 할수있다. 현재, ASM 디스크그룹이유실되면 RMAN 을이용하여유실된파일을복원할수있지만, ASM 디스크그룹과모든필요한사용자디렉토리또는템플릿을직접생성하여야한다. 11g 에서새로제공되는기능으로로컬인스턴스와원격인스턴스의 ASM 디스크그룹간파일을복사할수있거나, OS 의영역에서 ASM 인스턴스영역으로의복사 ( 반대방향으로도 ) 가구현되어 ASM 을사용시 rman 으로백업을해야하는 10g 의방식과다르게 Begin/End 백업이가능하며, ASM 인스턴스간에, OS 영역과 ASM 인스턴스영역간의복사로인하여 ASM 사용방법이더욱더강력해졌다고할수있다. OEL5.5 기반에 11gR1(11.1.0.7) ASM 이설치가된상태에서 Test 를진행한다. 문서는 11gR1 으로작성되었으나 11gR2 에서도동일하게구현됨을확인하고문서를작성되었다. 참고 ) Linux(32,64 비트모두 ) 의 11gR1 의세부버전인 11.1.0.7.6 ~ 11.1.0.7 버전에서는 asm alias BUG 이슈가있으므로 One-off Patch: 8465740 를적용하거나.6.7 PSU 적용을피해야한다. 11.1.0.7.6 => 2011 년 1 월 PSU 적용버전 11.1.0.7.7 => 2011 년 4 월 PSU 적용버전다른플렛폼에서는발생되지않는다. 11g ASMCMD 2 of 12
ASMCMD 1. Copy : Instance => OS 먼저 ASM 인스턴스와 OS 간의파일복사가이루어지는지를확인한다. ORACLE_SID 환경변수를 +ASM 으로지정후 asmcmd 를실행한다. Single 환경임으로 +ASM 이며, RAC 의경우 +ASMn 이되며 n 은노드번호이다. 1 번노드 => +ASM1 2 번노드 => +ASM2 [oracle@test.com:/oracle]$ export ORACLE_SID=+ASM [oracle@test.com:/oracle]$ asmcmd ASMCMD> 아래와같이 data/orcl/datafile 디렉토리안에 orcl 인스턴스의데이터파일이존재하는것을확인할수있다 ASMCMD> cd data/orcl/datafile ASMCMD> ls SYSAUX.261.752212761 SYSTEM.260.752212741 UNDOTBS1.262.752212779 USERS.264.752212813 cp 명령으로 USERS.264.752212813 을복사한다. ASMCMD> cp USERS.264.752212813 /oracle/users copying +data/orcl/datafile/users.264.752212813 -> /oracle/users asmcmd 를종료한후 /oracle 위치를 ls 로조회해보면아래와같이 USERS 파일이복사됨을확인할수있다. [oracle@test.com:/oracle]$ ls /oracle USERS admin cfgtoollogs diag media orainventory product asmcmd cp 를이용시 OS 영역의파일은절대경로로기술되어야한다. 현재위치가 /oracle 이며 /oracle 위치에 USERS 라는파일이존재시에도 아래와같이파일이위치한모든경로를기술해주어야한다. asmcmd cp /oracle/users +data ASMCMD 3 of 12
2. Copy : OS => Instance 이번에는 OS 에있는 USERS 파일을 +DATA/ 위치로복사하겠다. asmcmd 의명령어를실행하는방법은 2 가지이다 asmcmd 를접속하여실행하거나 asmcmd du 와같이 asmcmd 뒤에내부명령어를실행하면된다. 주의해야할점은 os 의경로를모두기술해주어야한다. ASMCMD> cp /oracle/users +data copying /oracle/users -> +data/users ASMCMD> ls ORCL/ USERS 파일을삭제한다. ASMCMD> rm rf USERS asmcmd 로접근하지않고내부명령은아래와같이실행한다. [oracle@test.com:/oracle]$ asmcmd cp /oracle/users +data copying /oracle/users -> +data/users [oracle@test.com:/oracle]$ asmcmd ASMCMD> ls +data ORCL/ USERS 3. HOT BACKUP 인스턴스와 OS 간의파일복사가가능하기때문에기존의 Begin/End Backup 형태의 HOT BACKUP 을시도한다. 백업을실행하기전에 asmcmd 에대한추가적인작업을선행한다. vi 및에디터를이용하여 $ORACLE_HOME/bin 위치에있는 asmcmd 파일을열어본다. ASMCMD 4 of 12
위의화면과같이바이너리가아닌 shell 파일이다. 지금까지 asmcmd 를실행전선행하였던작업은 export ORACLE_SID=+ASM 이라고환경변수를변경해주었는데 asmcmd shell 파일에직접기재해주면 asmcmd 실행시별도의환경변수지정을하지않아도된다. 아래와같이상단에환경변수를지정해준다. 환경변수를 asmcmd 내에기재하였다면아래와같이 sid 변경작업없이바로 asmcmd 를실행할수있게된다. 아래는현재테이블스페이스의현황이다. 백업전선행되어야할작업이있다 위에서보이듯이현재 tablespace 에해당하는데이터파일은파일명. 파일번호로존재한다. OS 영역에서파일명. 파일번호형태로되어있는파일을그대로파일명. 파일번호로 ASM 인스턴스영역내로복사할수없다 아래예시를참조하면 $ asmcmd cp +data/orcl/datafile users.264.752244043 /oracle users. 264.752244043 파일을 /oracle 위치로이름그대로복사하였다. ASMCMD 5 of 12
[oracle@test.com:/oracle]$ ls -l total 10280 drwxr-x--- 4 oracle dba 4096 May 27 03:52 admin drwxr-xr-x 5 oracle dba 4096 May 27 03:17 cfgtoollogs drwxrwxr-x 11 oracle dba 4096 May 27 02:34 diag drwxr-xr-x 7 oracle dba 4096 May 30 20:57 media drwxrwx--- 5 oracle dba 4096 May 30 21:05 orainventory drwxr-xr-x 3 oracle dba 4096 May 27 02:25 product -rw-r----- 1 oracle dba 5251072 May 31 00:31 users.264.752244043 위와같이파일명. 파일번호로존재하는파일을다시 ASM 영역내로복사를하게되면아래와같은에러메세지를받게된다. $ asmcmd cp /oracle/users.264.752244043 +data copying /oracle/users.264.752244043 -> +data/users.264.752244043 ASMCMD-08016: copy source->'/oracle/users.264.752244043' and target- >'+data/users.264.752244043' failed ORA-19505: failed to identify file "+data/users.264.752244043" ORA-17502: ksfdcre:4 Failed to create file +data/users.264.752244043 ORA-15046: ASM file name '+data/users.264.752244043' is not in single-file creation form ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 258 ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute) OS 영역에있는 USERS 파일을 ASM 내로넣고 ls l 로조회해보면아래와같이 users 파일은심볼릭링크인것을알수있으며그에매핑된원본파일은 datafile 디렉토리에 users. 파일번호형태로존재하는것을알수있다. 파일명. 파일번호가붙은파일을복사하려고하면에러가발생되게되는것이다. 그럼위에서 +data/users 파일을지우고다시 OS 영역에서 ASM 으로복사를해보면아래와같이원본파일에붙은파일번호가또다르게생성된다. users => +DATA/ASM/DATAFILE/users.272.752546357 그렇기때문에 Backup & Restore 의편의성을위해고정적인이름이필요하며이전에사용하는파일이름형태로변경을해주는작업을선행할것이다. db shutdown 전 controlfile 위치를변경한다. alter system set control_files='+data/orcl/controlfile/control01.ctl' scope=spfile; db 를정상종료한다. asm 인스턴스영역내에있는파일을모두복사한다 OS 영역으로복사한다. ASMCMD 6 of 12
asmcmd cp +data/orcl/datafile/system.260.752212741 /backup/system01.dbf 나머지데이터파일도 filesystem 사용시파일명과유사하게복사한다. data/orcl/onlinelog 위치로이동한다 ASMCMD> ls group_1.257.752212723 group_2.258.752212729 group_3.259.752212733 위와같이 redo 가존재하는데 redo log file 도 cp 를실행한다. ASMCMD> cp group_1.257.752212723 /backup/redo01a.log ASMCMD> cp group_2.258.752212729 /backup/redo02a.log ASMCMD> cp group_3.259.752212733 /backup/redo03b.log data/orcl/tempfile 위치로이동한다 ASMCMD> ls TEMP.263.752212799 temp 파일도 cp 로복사를한다. ASMCMD> cp TEMP.263.752212799 /backup/temp01.dbf +data/orcl/controlfile 로이동하여 control 파일을복사한다. ASMCMD> cp Current.256.752212721 /backup/control01.ctl spfile 을 pfile 로백업받는다. create pfile='/oracle/init.ora' from spfile='+data/orcl/spfileorcl.ora'; 추후 rename file 을해야하니기존파일명을꼭별도로기록한다. ASM 에서 OS 영역으로복사완료후 parameterfile 디렉토리를제외하고기존파일의디렉토리를삭제한다. ASMCMD> cd data/orcl ASMCMD> rm rf datafile onlinelog controlfile tempfile 디렉토리를생성 ASMCMD> mkdir datafile onlinelog controlfile tempfile 다시 ASM 내로복사를한다 datafile => data/orcl/datafile redo => data/orcl/onlinelog controlfile => data/orcl/controlfile tempfile => data/orcl/tempfile ASMCMD 7 of 12
EX) asmcmd cp /backup/control01.ctl +data/orcl/controlfile instance 를 mount 상태로기동 SQL> startup mount 모든 file 을 rename 한다. EX) alter database rename file '+data/orcl/onlinelog/group_1.257.752212723' to '+data/orcl/onlinelog/redo01a.log'; 모든 datafile, redo log file, temp file 을 rename 하였다면 instance 를 open 한다. SQL> select tablespace_name, file_name from dba_data_files; TABLESPACE_NAME FILE_NAME ------------------------------ ---------------------------------------- SYSTEM +DATA/orcl/datafile/system01.dbf SYSAUX +DATA/orcl/datafile/sysaux01.dbf UNDOTBS1 +DATA/orcl/datafile/undotbs01.dbf USERS +DATA/orcl/datafile/users01.dbf SQL> select tablespace_name, file_name from dba_temp_files; TABLESPACE_NAME FILE_NAME ------------------------------ ---------------------------------------- TEMP +DATA/orcl/tempfile/temp01.dbf SQL> select member from v$logfile; MEMBER -------------------------------------------------- +DATA/orcl/onlinelog/redo01a.log +DATA/orcl/onlinelog/redo02a.log +DATA/orcl/onlinelog/redo03a.log SQL> select status from v$instance; ASMCMD 8 of 12
STATUS ------------ OPEN 모든파일의이름을기존 filesystem 유형과유사하게변경이되었다. 이제 hotbackup 을진행하면되며백업방법은기존과유사하다. 기존에는!cp 로했던것에서!asmcmd 가하나더붙는것외에차이는없다. 위와같은방법으로 sysaux, undotbs1, users 를진행한다. 4. Restore & Recover asm 은 ORACLE 의 resource 이기때문에사용중인 datafile 에대한체크를하고있다그러므로 OS 와달리사용중인파일을 rm 으로지우려고할때아래와같은에러메세지와함께삭제가거부당한다. ASMCMD> ls sysaux01.dbf system01.dbf undotbs01.dbf users01.dbf ASMCMD> rm -rf users01.dbf ORA-15032: not all alterations performed ORA-15028: ASM file '+data/orcl/datafile/users01.dbf' not dropped; currently being accessed (DBD ERROR: OCIStmtExecute) 그렇기때문에 users 테이블스페이스를 offline 시키고 asmcmd 내에서 users01.dbf 데이터파일을 rm 으로삭제하고 online 을시킨다. ASMCMD 9 of 12
SQL> alter tablespace users online; alter tablespace users online * ERROR at line 1: ORA-01157: cannot identify/lock data file 4 - see DBWR trace file ORA-01110: data file 4: '+DATA/orcl/datafile/users01.dbf' 당연히에러가발생된다. 파일을 restore 한다. $ asmcmd cp /backup/users01.dbf +data/orcl/datafile datafile 을 recover 를한다. SQL> recover datafile '+DATA/orcl/datafile/users01.dbf'; Media recovery complete. SQL> alter tablespace users online; Tablespace altered. 아래와같이 users 테이블스페이가정상적으로 online 이된것을 확인할수있다. SQL> select TABLESPACE_NAME, STATUS from dba_tablespaces; TABLESPACE_NAME STATUS ------------------------------ --------- SYSTEM ONLINE SYSAUX ONLINE UNDOTBS1 ONLINE TEMP ONLINE USERS ONLINE ASMCMD 10 of 12
5. Conclusion 이전버전 (10g) 에서는불가능하였던 ASM 인스턴스와 OS 간의파일이동이가능해짐에따라위의상황이외더욱활용가치는높을듯하며, 위의예시와같이기존의 asm backup = RMAN 이라는공식을이제는아니라는부분을확인하였다. database 생성시파일명. 파일번호로생성된부분때문에초기에파일이름을 rename 하는번거로움은있지만 rename 이후에는기존의 filesystem 과같은형태로사용할수있어서사용의편리성과익숙한 begin/end 백업을사용할수있는장점을가지고있다. asmcmd 의향상된기능중 CP 부분을설명하며, hotbackup 을예제로들었으나 활용용도는다양할듯하다. ASMCMD 11 of 12