오라클/백업/복구

Backup (cold, hot)

김포춘 2014. 10. 30. 12:00
반응형

1 . 닫힌 백업 ( cold backup , close backup )

- Database가 close 된 상태에서 수행 하는 백업 ( 백업 시점이 동일해야함, 다르면 scn이 달라서 백업이 안됨 )

- data file, online redo log file , control file 백업 가능

- open 상태에서 백업 불가

- archive mode, no arcive mode 상관없음


백업 실습

순서 : 1. 백업받을 파일의 경로 확인후 db 셧다운 -> 2. 원하는 경로에 파일 복사 -> 3. db오픈 

SQL> shutdown immediate 


SQL> !

[oracle@testdb ~] $ cp -av /app/oracle/oradata/testdb/*.dbf /data/backup/close 

[oracle@testdb ~] $ cp -av /app/oracle/oradata/testdb/*.ctl /data/backup/close 

[oracle@testdb ~] $ cp -av /app/oracle/oradata/testdb/*.log /data/backup/close 

[oracle@testdb ~] $ cp -av $ORACLE_HOME/dbs /data/backup/close


[oracle@testdb ~] $ ls /data/backup/close

ctrl01.ctl  ctrl03.ctl  example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf     users01.dbf

ctrl02.ctl  dbs         redo01.log     redo03.log  system01.dbf  undotbs01.dbf



2. 열린 백업 ( hot backup, begin backup , open backup )

- database 가 open 된 상태에서 수행하는 백업

- archive log mode 에서만 수행가능

- 많은 양의 redo log 가 발생

- data file , control file 만 백업 가능

백업 실습

순서 : 1. 백업 해야할 tablespace 를 백업모드로 변경 -> 2. os 명령어로 해당 tablespace의 datafile 을 백업장소로 복사 -> 3. 파일 복사 완료후 백업모드 종료


SQL> archive log list            <-- archive log mode 인지 확인     아닐경우 archive log mode 로 변경


SQL> !vi /app/oracle/open_backup.sql


alter tablespace users begin backup;                   <-- 백업모드로 변경

! cp -av /app/oracle/oradata/testdb/users01.dbf /data/backup/open/                 <-- 파일 백업장소로 복사

alter tablespace users end backup;                      <-- 백업모드 종료


alter tablespace sysaux begin backup;

!cp -av /app/oracle/oradata/testdb/sysaux01.dbf  /data/backup/open/

alter tablespace sysaux end backup;


alter tablespace undotbs1 begin backup;

!cp -av /app/oracle/oradata/testdb/undotbs01.dbf  /data/backup/open/

alter tablespace undotbs1 end backup;


alter tablespace system begin backup;

!cp -av /app/oracle/oradata/testdb/system01.dbf  /data/backup/open/

alter tablespace system end backup;


alter tablespace example begin backup;

!cp -av /app/oracle/oradata/testdb/example01.dbf /data/backup/open/

alter tablespace example end backup;


alter database backup controlfile to /data/backup/open/control01.ctl;

:wq!


SQL> @/app/oracle/open_backup.sql



백업 상태여부 조회 

SQL>select a.file#,a.name,b.status,to_char(b.time,'YYYY-MM-DD:HH24:MI:SS') as time

  2   from v$datafile a, v$backup b

  3   where a.file#=b.file# ;


     FILE#       NAME                                                               STATUS             TIME

--------    -----------------------------------         -----------     --------------------

         1         /app/oracle/oradata/testdb/system01.dbf          NOT ACTIVE         2014-10-16:01:21:27

         2         /app/oracle/oradata/testdb/sysaux01.dbf           NOT ACTIVE         2014-10-16:01:20:47

         3         /app/oracle/oradata/testdb/undotbs01.dbf         NOT ACTIVE         2014-10-16:01:21:11

         4         /app/oracle/oradata/testdb/users01.dbf             NOT ACTIVE          2014-10-16:01:20:43

         5         /app/oracle/oradata/testdb/example01.dbf         NOT ACTIVE         2014-10-16:01:21:55


위 상태에서 STATUS 가 NOT ACTIVE 면 end backup 상태 ACTIVE 면 begin backup 상태 이므로 백업이 끝나면 확인해서 반드시 NOT ACTIVE 상태로 만들어 줘야 함


TIME 은 가장 마지막에 begin backup 을 받은 시간


※ Hot backup 구동 원리



- scn3 까지의 데이터를 Hot backup 중인 상태 -


이때 DML 작업이 일어나 D,E 가 추가되는 상황에서 data file 이 백업중이니 변경되는 내용은 Redo Log File 에 저장된다.

이때 Redo Log File 에 필요한 데이터만 저장되는게 아니라 블록 단위로 저장되어서 많은 양의 Redo Log 가 발생한다.

그래서 백업이 오래 지속되면 그 동안의 변경내용이 모두 리두로그파일에 저장되었다가 백업이 끝난후 다시 데이터파일에 적용해야 하기 때문에 데이터 손실을 막기 위해 아카이브 모드로 작동해야 한다.


End backup 을 해야 리두로그 파일에 블록단위로 안들어가고 필요한 데이터만 들어가므로 다량의 리두로그를 쌓지 않기 위해 반드시 begin 백업후에 end 백업을 해줘야 한다.



반응형