Oracle 11g 에서 향상된 ASMCMD CP기능 - 오라클 asmcmd cp

Share

Last Updated on 5월 11, 2024 by Jade(정현호)

 

ASM 조작 유틸리티

ASMCMDASM (Automatic Storage Management) 디스크 그룹 내에서 파일과 디렉토리를 쉽게 보고 조작하는 데 사용할 수 있는 명령 줄 유틸리티입니다.

디스크 그룹의 내용을 나열하고, 검색을 수행하고, 디렉토리와 별칭을 생성 및 제거하고, 공간 활용도를 표시할 수 있습니다.

이런 asmcmd에 11g 에서는 새로 제공되는 기능으로 로컬 인스턴스와 원격 인스턴스의 ASM 디스크 그룹 간 파일을 복사할 수 있거나 OS 의 영역에서 ASM 인스턴스 영역으로의 복사(반대 방향으로도) 가 구현되었습니다

asmcmd cp 를 사용하여 ASM 을 사용시 rman 으로 백업을 해야 하는 10g 의 방식과 다르게 Begin/End 백업이 가능하며, ASM 인스턴스간에 , OS 영역과 ASM 인스턴스 영역 간의 복사로 인하여 ASM 사용 방법이 더욱더 강력해졌다고 할 수 있습니다.

문서 내용 업데이트 - 2020/11/08
      

Copy : Instance => OS 

먼저 ASM 인스턴스와 OS 간의 파일 복사가 이루어지는 지를 확인해보도록 하겠습니다.

ORACLE_SID 환경변수를 +ASM 으로 지정 후 asmcmd 를 실행하게 됩니다.
Single 환경임으로 +ASM 이며, RAC 의 경우 +ASMn 이 되며 n 은 노드 번호가 되게 됩니다.

1 번노드 => +ASM1
2 번노드 => +ASM2

[oracle]$ export ORACLE_SID=+ASM
[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

/oracle 위치를 ls 로 조회해보면 아래와 같이 USERS 파일이 복사됨을 확인할 수 있습니다. 

[oracle]$ ls /oracle

USERS    admin    cfgtoollogs   diag media oraInventory product

/oracle/USERS 파일을 복사할 때 아래와 같이 파일의 모든 경로를 기술해주어야 합니다.

[oracle]$ asmcmd cp   /oracle/USERS   +data
            

Copy : OS => Instance

이번에는 OS 에 있는 USERS 파일을 +DATA/ 위치로 복사해보겠습니다.

asmcmd 의 명령어를 실행하는 방법은 2 가지입니다.

asmcmd 를 접속하여 수행하거나 asmcmd du 와 같이 asmcmd 뒤에 내부 명령어를 실행하면 됩니다.

주의해야 할 점은 OS의 경로를 모두 기술해주어야 합니다.
ASMCMD> cp /oracle/USERS +data
copying /oracle/USERS -> +data/USERS

ASMCMD> cd DATA

ASMCMD> ls
ORCL/
USERS


파일삭제는 다음과 같이 실행합니다. 
ASMCMD> rm –rf USERS


asmcmd 로 접근하지 않고 아래와 같이 실행할 수도 있습니다.
[oracle]$ asmcmd rm +DATA/USERS
          

HOT BACKUP 

인스턴스와 OS 간의 파일복사가 가능하기 때문에 기존의 Begin/End Backup 형태의 HOT BACKUP 을 시도해보겠습니다.

백업 전 확인해볼 사항이 있습니다.


위에서 보이듯이 현재 tablespace 에 해당하는 데이터파일은 파일명.파일번호 로 존재하고 있습니다.

OS 영역에서 ASM 영역으로 파일명.파일번호 형태로 되어있는 파일은 ASM 영역내로 복사할 수 없습니다


아래 예시)
먼저 users. 264.752244043 파일을 /oracle 위치로 이름 그대로 복사를 시도합니다.


$ asmcmd cp  +data/orcl/datafile users.264.752244043    /oracle 

[oracle]$ ls -l
-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)


상위 버전에서는 명령어 수행하는 화면 대신 ASM alert.log 에 에러가 기록됩니다.
2020-11-08T03:39:28.405534+09:00
Errors in file /oracle/base/diag/asm/+asm/+ASM1/trace/+ASM1_ora_4361.trc:
ORA-15046: ASM file name '+DATA/USE.268.10554' is not in single-file creation form


위에서 USERS 파일을 ASM에 COPY 한 파일을 ls –l 로 조회해보면 아래와 같이 파일은 심볼릭 링크 인 것을 알 수 있으며 그와 매핑 된 원본 파일은 datafile 디렉토리에 users.파일번호 형태로 존재하는 것 알 수 있습니다

ASMCMD> ls -l
ASM/
ORCL/
USERS => +DATA/ASM/DATAFILE/USERS.258.1055906917

그래서 파일명.파일번호 가 붙은 파일을 복사하려고 하면 에러가 발생되게 됩니다.

그럼 위에서 +data/USERS 파일을 지우고 다시 OS 영역에서 ASM 으로 복사를 해보면 아래와 같이 원본파일에 붙은 파일번호가 또 다르게 생성됩니다.
users => +DATA/ASM/DATAFILE/users.272.752546357


그렇기 때문에 Backup & Restore 의 편의성을 위해 고정적인 이름이 필요하며 이전에 사용하는 파일이름 형태로 변경을 해주는 작업을 선행을 해야 합니다.

[참고] 해당 작업은 테스트성이나 기능의 동작 여부 확인에 목적을 두고 진행한 테스트입니다.


1) control_files 파라미터 변경
db shutdown 전 controlfile 위치를 변경합니다.
alter system set control_files='+DATA/orcl/controlfile/control01.ctl' scope=spfile;


2) db 를 정상 종료합니다.
SQL> shutdown immediate;


3) OS 영역으로 복사
asm 인스턴스 영역내에 있는 파일을 모두 OS 영역으로 복사합니다. 
asmcmd cp +data/orcl/datafile/SYSTEM.260.752212741 /backup/system01.dbf

나머지 데이터 파일도 filesystem 사용시 파일명과 유사하게 복사합니다.


4) Redo 복사
ASM의 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


5) temp, control, spfile 백업
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 을 해야 하니 모든 기존 파일명을 꼭 별도로 기록해야 합니다.


6) 디렉토리 재생성
ASM 에서 OS 영역으로 복사 완료 후 parameterfile 디렉토리를 제외하고 기존 파일의 디렉토리를 삭제합니다.

ASMCMD> cd data/orcl
ASMCMD> rm –rf datafile onlinelog controlfile tempfile

디렉토리를 생성
ASMCMD> mkdir datafile onlinelog controlfile tempfile


7) ASM 으로 파일 복사
이제 다시 ASM 내로 복사를 합니다.

datafile => data/orcl/datafile
redo => data/orcl/onlinelog 
controlfile => data/orcl/controlfile 
tempfile => data/orcl/tempfile

예시) 
$ asmcmd cp /backup/control01.ctl +data/orcl/controlfile


8) 마운트 및 rename
모든 파일을 다시 ASM에 복사하였다면 instance 를 mount 상태로 기동합니다.
SQL> startup mount

그다음 모든 file 을 rename 을 진행합니다.
SQL> alter database rename file '+data/orcl/onlinelog/group_1.257.752212723' to
'+data/orcl/onlinelog/redo01a.log';


9) DB Open
모든 데이터파일,redo log file, temp file 을 rename 하였다면 instance 를 open 합니다.
SQL> alter database open;


10) 조회

정상적으로 open 된 이후 datafile 등을 조회해 보겠습니다. 
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


모든 파일의 이름을 기존 filesystem 유형과 유사하게 변경이 되어 ASM 으로 이동되었습니다. 
이제 hotbackup 을 진행할 것이며, 기존 방법과 매우 유사하게 진행될 것입니다.

기존 에는 cp 로 하였던 명령어에서 asmcmd 가 더 붙는다의 정도 차이 밖에 없다고 생각하시면 됩니다.

위와 같은 방법으로 sysaux, undotbs1 , users 등 나머지 파일도 백업을 진행합니다.
          

Restore & Recovery 

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 순으로 진행하도록 하겠습니다.

삭제를 진행하고 아래와 같이 online 을 하게 되면 당연히 에러는 발생되게 됩니다.
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.

테이블스페이스를 online 합니다.
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    <-----
            

Conclusion

위의 backup&recovery는 asmcmd cp를 활용해보기 위한 하나의 예시였으며 정상적으로 기능이 동작하는 것을 확인하는데 목적이 이었습니다.

이전버전(10g) 에서는 불가능 하였던 ASM 인스턴스와 OS 간의 파일 이동이 가능해짐에 따라 위의 테스트 와 같은 경우 외에 사용하기에 따라 더 다양하게 활용할 수 있을 것도 같습니다.
         

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x