강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

online backup(archive log mode)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

online backup(archive log mode)

 

작성자: 강명규
OS: Linux 2.4.10
Oracle: Oracle 8.1.7 EE

complete recovery를 보장하는 online backup(hot backup)을 하는 방법을 설명한다.
이 백업은 DB의 downtime을 허용하지 못하는 환경에서 사용된다.
처음의 백업엔 offline backup과 병용하여 사용하기를 권하고 있다.

1.
svrmgrl에서 'archive log list' 하여 'Oldest online log sequence' 의 값을 파악

SVRMGR> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/admin/dev2/arch

Next log sequence to archive   1046
Current log sequence           1046
SVRMGR>



2.
백업할 tablespace목록, 각 tablespace에 할당된 datafile을 파악하기 위해 다음 질의를 실행

SVRMGR> select t.name, d.name from v$tablespace t, v$datafile d where t.ts# = d.ts#;
NAME                           NAME
------------------------------ --------------------------------------------------------------------------------
SYSTEM                         /u01/app/oracle/oradata/dev2/system01.dbf
TOOLS                          /u01/app/oracle/oradata/dev2/tools01.dbf
RBS                            /u01/app/oracle/oradata/dev2/rbs01.dbf
TEMP                           /u01/app/oracle/oradata/dev2/temp01.dbf
USERS                          /u01/app/oracle/oradata/dev2/users01.dbf
INDX                           /u01/app/oracle/oradata/dev2/indx01.dbf
TS_TEST                        /u01/app/oracle/oradata/dev2/ts_test01.dbf
TS_TEST                        /u01/app/oracle/oradata/dev2/ts_test02.dbf



3.
각각의 테이블스페이스를 백업모드로 변경하면서, tablespace별로 속한 데이터파일을 백업(복사)한다.
svrmgrl에서 'alter tablespace 테이블스페이스명 begin backup' 실행
이는 데이터파일 헤더를 동결(checkpoint기록을 중지)하여 테이블스페이스를 백업 준비상태로 둔다.
해당 테이블스페이스 백업이 완료되었다면, 'alter tablespace 테이블스페이스명 end backup' 실행하여
테이블스페이스가 사용될 수 있도록 변경한다.

SVRMGR> alter tablespace ts_test begin backup;
Statement processed.
SVRMGR> !cp /u01/app/oracle/oradata/dev2/ts_test01.dbf /backup/oracle/
SVRMGR> !cp /u01/app/oracle/oradata/dev2/ts_test02.dbf /backup/oracle/
SVRMGR> alter tablespace ts_test end backup;

나머지 테이블스페이스들도 위의 과정대로 실행한다.

SVRMGR> @tablespace_backup

[tablespace_backup.sql]
alter tablespace SYSTEM begin backup;
!cp /u01/app/oracle/oradata/dev2/system01.dbf /backup/oracle/
alter tablespace SYSTEM end backup;

alter tablespace TOOLS begin backup;
!cp /u01/app/oracle/oradata/dev2/tools01.dbf /backup/oracle/
alter tablespace TOOLS end backup;

alter tablespace RBS begin backup;
!cp /u01/app/oracle/oradata/dev2/rbs01.dbf /backup/oracle/
alter tablespace RBS end backup;

alter tablespace TEMP begin backup;
!cp /u01/app/oracle/oradata/dev2/temp01.dbf /backup/oracle/
alter tablespace TEMP end backup;

alter tablespace USERS begin backup;
!cp /u01/app/oracle/oradata/dev2/users01.dbf /backup/oracle/
alter tablespace USERS end backup;

alter tablespace INDX begin backup;
!cp /u01/app/oracle/oradata/dev2/indx01.dbf /backup/oracle/
alter tablespace INDX end backup;


* 테이블스페이스의 backup모드를 보려면 v$backup을 조회하면 된다.
status가 active로 되어 있으면 해당 테이블스페이스가 begin backup모드상태임을 의미한다.
SVRMGR> select t.name, d.name, d.file# 
     2> from  v$tablespace t, v$datafile d 
     3> where 
     4> t.ts# = d.ts#
     5> and
     6> t.name = 'TS_TEST';
NAME                           NAME                                          FILE#     
------------------------------ --------------------------------------------- ----------
TS_TEST                        /u01/app/oracle/oradata/dev2/ts_test01.dbf            29
TS_TEST                        /u01/app/oracle/oradata/dev2/ts_test02.dbf            30
2 rows selected.
SVRMGR> select * from v$backup where file# in (29,30);
FILE#      STATUS             CHANGE#    TIME     
---------- ------------------ ---------- ---------
        29 NOT ACTIVE             230427 19-DEC-01
        30 NOT ACTIVE             230427 19-DEC-01
2 rows selected.
SVRMGR> alter tablespace ts_test begin backup;
Statement processed.
SVRMGR> select * from v$backup where file# in (29,30);
FILE#      STATUS             CHANGE#    TIME     
---------- ------------------ ---------- ---------
        29                  230498 19-DEC-01
        30                  230498 19-DEC-01
2 rows selected.
SVRMGR> alter tablespace ts_test end backup;
Statement processed.
SVRMGR> select * from v$backup where file# in (29,30);
FILE#      STATUS             CHANGE#    TIME     
---------- ------------------ ---------- ---------
        29 NOT ACTIVE             230498 19-DEC-01
        30 NOT ACTIVE             230498 19-DEC-01
2 rows selected.




4.
svrmgrl에서 archive log list를 수행하여 'Current log sequence' 값을 파악

SVRMGR> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/admin/dev2/arch
Oldest online log sequence     1044
Next log sequence to archive   1046



5.
오라클이 현재 redo로그에 대한 archive를 생성하도록 하고,
위에서 구한 Oldest online log sequence인 1044에서 바로 위에서 구한 Current log sequence까지의
아카이브로그를 백업한다.

컨트롤파일 헤더를 갱신하기 위해 log switch를 실시한다.
SVRMGR> alter system switch logfile;
Statement processed.

SVRMGR> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/admin/dev2/arch
Oldest online log sequence     1045
Next log sequence to archive   1047
Current log sequence           1047

[oracle@dev2 arch]$ pwd
/u01/app/oracle/admin/dev2/arch
[oracle@dev2 arch]$ ls
arch_1_1000.arc  arch_1_1007.arc  arch_1_1014.arc  arch_1_1021.arc  arch_1_1028.arc  arch_1_1035.arc  arch_1_1042.arc
arch_1_1001.arc  arch_1_1008.arc  arch_1_1015.arc  arch_1_1022.arc  arch_1_1029.arc  arch_1_1036.arc  arch_1_1043.arc
arch_1_1002.arc  arch_1_1009.arc  arch_1_1016.arc  arch_1_1023.arc  arch_1_1030.arc  arch_1_1037.arc  arch_1_1044.arc
arch_1_1003.arc  arch_1_1010.arc  arch_1_1017.arc  arch_1_1024.arc  arch_1_1031.arc  arch_1_1038.arc  arch_1_1045.arc
arch_1_1004.arc  arch_1_1011.arc  arch_1_1018.arc  arch_1_1025.arc  arch_1_1032.arc  arch_1_1039.arc  arch_1_1046.arc
arch_1_1005.arc  arch_1_1012.arc  arch_1_1019.arc  arch_1_1026.arc  arch_1_1033.arc  arch_1_1040.arc
arch_1_1006.arc  arch_1_1013.arc  arch_1_1020.arc  arch_1_1027.arc  arch_1_1034.arc  arch_1_1041.arc

[oracle@dev2 arch]$ cp arch_1_1044.arc /backup/oracle
[oracle@dev2 arch]$ cp arch_1_1045.arc /backup/oracle 
[oracle@dev2 arch]$ cp arch_1_1046.arc /backup/oracle 


백업받은 아카이브로그 이외의 로그는 삭제한다.
SCN이 순서대로 부여되므로 1044이전의 SCN을 가지는 로그들을 삭제해준다.
모든 archive log를 삭제해도 상관없다.

SVRMGR> select sequence#, archived, status from v$log;
SEQUENCE#  ARC STATUS          
---------- --- ----------------
      1045 YES INACTIVE        
      1046 YES INACTIVE        
      1047 NO  CURRENT         
3 rows selected.

[oracle@dev2 arch]$ rm arch_1_10[0,1,2,3]* 
[oracle@dev2 arch]$ ls -l
total 2791
-rw-r-----    1 oracle   oinstall   512512 Dec 18 17:10 arch_1_1040.arc
-rw-r-----    1 oracle   oinstall   512512 Dec 18 17:10 arch_1_1041.arc
-rw-r-----    1 oracle   oinstall   512512 Dec 18 17:10 arch_1_1042.arc
-rw-r-----    1 oracle   oinstall   512512 Dec 18 17:10 arch_1_1043.arc
-rw-r-----    1 oracle   oinstall   512512 Dec 18 20:33 arch_1_1044.arc
-rw-r-----    1 oracle   oinstall   230912 Dec 19 12:26 arch_1_1045.arc
-rw-r-----    1 oracle   oinstall    44032 Dec 19 13:55 arch_1_1046.arc
[oracle@dev2 arch]$ rm arch_1_1040.arc arch_1_1041.arc arch_1_1042.arc arch_1_1043.arc 
[oracle@dev2 arch]$ ls -l
total 775
-rw-r-----    1 oracle   oinstall   512512 Dec 18 20:33 arch_1_1044.arc
-rw-r-----    1 oracle   oinstall   230912 Dec 19 12:26 arch_1_1045.arc
-rw-r-----    1 oracle   oinstall    44032 Dec 19 13:55 arch_1_1046.arc


6. 컨트롤 파일을 백업

SVRMGR> select * from v$controlfile;                         
STATUS  NAME                                                                            
------- --------------------------------------------------------------------------------
        /u01/app/oracle/oradata/dev2/control01.ctl                                      
        /u02/app/oracle/oradata/dev2/control02.ctl                                      
2 rows selected.
SVRMGR> alter database backup controlfile to '/backup/oracle/control_20011219.ctl';
Statement processed.

% 컨트롤파일을 스크립트로 형식으로 백업하려면 위 문장대신 아래와 같이 한다.
init.ora의 background_dump_dest에 지정한 위치에 저장된다.

alter database backup conrolfile to trace

백업디렉토리인 /bakup/oracle에는 다음과 같이 백업된 파일들이 있다.
이 디렉토리에 있는 파일들을 테이프등으로 이동시켜 보관한다.


  

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,040 명
  • 현재 강좌수 :  35,850 개
  • 현재 접속자 :  122 명