online backup(archive log mode)
2010.05.12 08:31
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
online backup(archive log mode)
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
Oldest online log sequence 1044
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 ACTIVE 230498 19-DEC-01
30 ACTIVE 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
Current log sequence 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에는 다음과 같이 백업된 파일들이 있다.
이 디렉토리에 있는 파일들을 테이프등으로 이동시켜 보관한다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
online backup(archive log mode)
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
Oldest online log sequence 1044
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 ACTIVE 230498 19-DEC-01
30 ACTIVE 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
Current log sequence 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에는 다음과 같이 백업된 파일들이 있다.
이 디렉토리에 있는 파일들을 테이프등으로 이동시켜 보관한다.