Cold Backup 과 Hot Backup

백업을 할 때에는 Cold Backup 이나 Hot Backup 이나 다르지 않은 공통점이 있다. 그것은 바로 사용중인 파일에 대해서는 복사나 이동작업을 하면 안된다는 점이다. 이 점을 생각하면서 아래 두가지 방법을 살펴본다면 왜 이렇게 백업을 하는지 이해가 쉽다.




Cold Backup

서버를 완전히 shutdown 하고 수행하는 백업을 말한다. 이 경우는 가용성을 포기해야한다.
그러므로 DB를 사용하지 않을 때 사용하는 방법이다.

수행절차
1. shutdown immediate
2. ora파일을 복사하여 백업본 생성 (backup)
3. initxxxxx .ora 파일 백업
4. startup
5. 완료


Hot Backup (실무에서 가장 많이 사용 ☆)

서버를 내리지 않고 가용성을 지키며 할수 있는 백업방법이다.
(JAVA에서 소스코드의 변경내용을 적용할 때 서버를 내리지 않고 하는 hot deploy를 생각하면 될 것 같다.)
백업받을 TableSapce만 부분적으로 상태를 변경시켜서 백업받는다.



조건
cold Backup 과 다르게 archive log사용중이여야 hot backup 이 가능하다.
(Archive Log 포스팅 : http://tawool.tistory.com/197)
Hot Backup은 백업중에도 DB의 가용성을 지켜야 하기 때문에 변경사항들이 Redo Log에 쌓였다가 Backup이 끝나면 DataFile에 내려쓰는 구조로 동작한다. 그러므로 Archive Log의 사용은 필수다.


백업받을 테이블스페이스명 알아내는 쿼리
SELECT
 file_name
, tablespace_name
, v$backup.status 
FROM
 v$backup 
LEFT OUTER JOIN         
dba_data_files 
ON v$backup.file# = dba_data_files.file_id






수행절차
1. 위 쿼리로 백업받을 파일 확인
2. ALTER TABLESPACE {테이블스페이스명} BEGIN BACKUP;
3. 해당 파일 백업 (os)
4. ALTER TABLESPACE {테이블스페이스명} END BACKUP;
5. ALTER SYSTEM ARCHIVE LOG CURRENT;
6. 완료
★ BEGIN BACKUP 을 했으면 반드시 END BACKUP을 해야 한다.

위의 과정중 2, 3, 4 과정을 수행하기 위해서는 테이블 스페이스명을 알아야하고 테이블 스페이스가 많다면 일일이 입력하기 힘들다. 아래의 쿼리를 실행하면 자동으로 쿼리가 만들어진다.

아래의 쿼리를 실행하면 path 값을 입력받는다. 여기에 백업 디렉토리 경로를 적어주면 된다.
select
'alter tablespace '||b.name||' begin backup;'
, '!cp '||a.name||' &path'
, 'alter tablespace '||b.name||' end backup;'
from v$datafile a, v$tablespace b
where a.ts# = b.ts#


주의사항
1. 10g 까지는 테이블스페이스의 상태를 하나씩 바꿔서 백업이 가능하지만 11g에서는 한번의 명령어로 모든 테이블 스페이스의 상태의 변경이 가능하다. 하지만 이렇게 되면 Archive Log File 의 내용이 크게 증가하므로 권장하는 방법이 아니다.
2. Begin Backup을 하고 End Backup을 하지 않으면 평소와는 다르게 블록전체가 RedoLog에 쌓이게 되므로  RedoLog와 Archive Log의 양이 크게 증가한다.