백업을 받는 방법은 크게 세 가지로 나누어볼 수 있습니다.
1. 수동 백업 (User-Managed Backup)
2. RMAN 백업 (Recovery Manager)
3. 백업 솔루션을 이용한 백업 (Third Party Solution)
또한, 데이터베이스를 운영(Open) 중에 받을지 중지하고 받을지에 따라
Hot Backup, Cold Backup으로 나누어 생각해볼 수 있다고 설명 드렸습니다.
1. Hot Backup = Open 상태에서 받는 백업(=Online Backup, Inconsistent Backup)
2. Cold Backup = Shutdown 상태에서 받는 백업(=Offline Backup, Consistent Backup)
각 사이트마다 상황에 맞게 다양한 백업 전략을 사용합니다만,
일반적으로 Oracle 백업은 주로 Hot backup으로 이루어지며,
(Cold Backup시 SGA를 초기화해야하기 때문에 비효율이 큼)
RMAN을 이용하거나 수동 백업 스크립트를 작성하여 운영하는 경우가 대부분입니다.
따라서 이번 시간에는 수동으로 백업된 파일들과 RMAN으로 백업된 파일들을 이용하여
데이터베이스를 복구하는 방법에 대해 알아보겠습니다.
먼저, 수동 백업을 받기 위해선, 데이터베이스에 접속하여 Begin Backup 모드로
데이터베이스(혹은 테이블스페이스 단위도 가능)의 상태를 전환해주어야 합니다.
Backup Mode로 전환할 때는 [ALTER DATABASE BEGIN BACKUP;] 명령어를 이용할 수 있습니다.
데이터베이스가 백업모드로 전환되면 백업모드가 종료될 때까지 DB를 종료할 수 없으며
강제로 종료를 해주어도 다음번 기동 시 각 데이터파일에 걸려있는 백업모드를 풀어줘야
데이터베이스를 OPEN 상태로 진입시킬 수 있습니다.
Begin Backup 명령어를 통해 백업모드로 들어왔다면
C/D/R(Control File, Data File, Redo Log File)이 저장되어있는 서버 경로로 이동하여
cp 명령어를 통해 별도의 저장매체로 복사해주면 됩니다.
복사작업이 끝난 후에 다시 데이터베이스에 접속하여
[ALTER DATABASE END BACKUP;] 명령어를 입력해주면 백업 모드가 풀리게 되고,
정상적인 데이터베이스 종료가 가능합니다.
한 가지 주의해야할 사항은 Begin Backup 모드가 시작되면
Redo Log에 Redo Data를 쓰는 것이 아니라,
Buffer Cache에 올라와있는 Dirty 상태의 버퍼들을 고스란히 내려쓰기 때문에
Redo Log File의 크기가 증가하는 속도가 8배 이상 증가하게 됩니다.
따라서 백업을 받는 동안 복사 대상의 파일이 저장될 공간이 충분하지,
Redo Log와 Archived Log가 쌓일 공간에 디스크 용량에 여유가 있는지
반드시 확인하고 백업을 수행해주어야 합니다.
수동 백업을 수행할 때 데이터베이스 전체를 백업모드로 두고 모든 데이터파일을
일괄적으로 복사하는 방법도 있지만, 실무에서는 잘 사용되지 않는 방법입니다.
운영 망에서는 주로 테이블스페이스 단위의 백업이 이루어지며,
이는 Redo Log File과 Archived Log 크기가 폭발적으로 증가하는 현상을
어느 정도 방지해줄 수 있습니다.
1. 데이터베이스 전체 백업 방법
SQL> ALTER DATABASE BEGIN BACKUP;
$ cp [복사할 파일명] [대상 경로/이름]
SQL > ALTER DATABASE END BACKUP;
2. 테이블스페이스 백업 방법
SQL> ALTER TABLESPACE [테이블 스페이스명] BEGIN BACKUP;
$ cp [복사할 테이블스페이스를 구성하는 데이터파일] [대상 경로/이름]
SQL> ALTER TABLESPACE [테이블 스페이스명] END BACKUP;
백업이 완료된 후에 장애가 발생하면,
기존 데이터파일이 있던 곳에 cp 명령어를 통해서
백업파일을 물리적으로 위치시키고(Restore)
Restore된 백업파일(C/D/R 등)의 시점(SCN)을 Recovery 작업을 통해
백업 파일의 SCN을 논리적으로 전진(Roll Forward)시키면 됩니다.
Recovery에 필요한 명령어는 [RECOVER DATABASE]라는 명령어이며,
해당 명령어를 수행하면 SMON에 의해 Control File과 Data File에
Redo를 Apply하는 Recover 작업이 수행됩니다.
Restore와 Recover는 데이터베이스에서 전혀 다른 용어로 사용되므로
해당 단어의 의미를 정확하게 이해하는 것이 매우 중요합니다.
1. Restore : 백업받았던 파일을 실제 데이터 경로에 물리적으로 위치시키는 것
2. Recover : 물리적으로 옮겨진 파일의 SCN을 논리적으로 전진시키는 것
Recover 명령어로 데이터베이스가
Archived Log를 찾아서 자동으로 복구를 할 수 없는 경우에는
[RECOVER DATABASE UNTIL CANCEL] 명령어를 통해
수동으로 Archived Log의 경로를 입력해줄 수 있습니다.
이 명령어는 Archived Log의 위치를 수동으로 입력해주는 것 외에도
특정 시점으로 복구를 수행하는 PITR 복구[Point-In-Time Recovery] 기법에도 이용됩니다.
수동백업에서 가장 중요하게 생각해야할 것은 바로
[백업 당시의 Redo가 담긴 Archive Log]입니다.
백업 받을 당시의 Redo Log는 후에 Archived 되어 별도의 저장 공간에 저장될 것입니다.
그리고 이 파일은 훗날 장애 상황 시에 Restore된 백업을 Recover하는
가장 첫 단추 역할을 수행하게 됩니다.
만약 이 파일이 없을 경우 C/D/R의 SCN이 다르기 때문에
어떠한 방법으로도 OPEN시킬 수 없고 해당 DB는 100%로 데이터 유실을 겪게 됩니다.
따라서 백업받을 당시의 Redo Log가 담긴 Archive Log를
백업본과 같이 안전하게 보관하는 것은 무엇보다 중요하다고 말씀을 드릴 수 있습니다.
RMAN을 통해 백업/복구를 수행하는 경우에는
[rman target /]라는 명령어를 통해 RMAN 프롬프트로 접속하여 진행할 수 있습니다.
RMAN에 접속한 후에는 별도의 RMAN 전용 명령어들을 사용하여
백업/복구를 진행하게 되는데 주로 쓰이는 명령어는 다음과 같습니다.
1. LIST BACKUP; - 백업된 파일 리스트 조회
2. LIST ARCHIVELOG ALL; - 백업된 아카이브 목록 조회
3. BACKUP DATABASE; - 데이터베이스 전체 백업 시작
4. BACKUP ARCHIVELOG ALL; - 아카이브로그 전체 백업 시작
5. SHOW ALL; - 현재 설정된 RMAN Configuration을 모두 조회
6. CROSSCHECK BACKUP; - Control File에 기록된 백업파일의 실존여부 확인
7. CROSSCHECK ARCHIVELOG ALL; - Control File에 기록된 Archived Log들의 실존여부 확인
8. LIST FAILURE; - 현재 Database에 일어난 장애 상황을 자동으로 검사해줌
9. ADVISE FAILURE; - 장애 상황에 대한 Trouble Shooting 가이드 제공
10. REPAIR FAILURE; - 제공된 Trouble Shooting 가이드에 따라 데이터베이스 복구
11. DELETE BACKUP; - 백업된 파일 삭제
12. DELETE ARCHIVELOG ALL; - 백업된 아카이브로그 삭제
13. DELETE OBSOLETE; - Control File과 실제 File을 CROSSCHECK하여 미존재 기록/파일 삭제
RMAN을 통해 백업 복구를 수행하게 되면
Control File에 기재된 기록이 몹시 중요하기 때문에
Control File을 잘 보관/관리하는 것이 무엇보다 중요합니다.
Control File은 일반적으로 약 1주일 정도의 보관주기를 가지므로,
1주일 이상 기록을 유지할 필요가 있는 경우는 백업/복구를 위한
Catalog Database를 구성할 수 있습니다.
RMAN으로 백업된 파일을 이용하여 RESTORE / RECOVER 작업이 필요한 경우
아래와 같은 명령어를 이용할 수 있습니다.
RECOVER까지 완료된 이후에는
$ ALTER DATABASE OPEN [RESETLOGS / NORESETLOGS] 명령어로
데이터베이스 오픈을 진행할 수 있습니다.
14. RESTORE DATABASE; - 데이터베이스 백업 본을 운영 위치로 덮어쓰기
15. RECOVER DATABASE; - 덮어쓴 파일을 논리적으로 복구시킴(Redo Apply)
'[DB] ORACLE' 카테고리의 다른 글
[ORACLE] ASM 관련 쿼리 (0) | 2024.06.11 |
---|---|
[ORACLE] UNDO Tablespace Full 모니터링 및 조치 (1) | 2024.01.08 |
[ORACLE] Oracle Database Backup Basic - 백업 개념 (0) | 2023.11.08 |
[ORACLE] Lock 걸린 테이블 및 오브젝트 조회, Kill session (0) | 2023.09.27 |
[ORACLE] Toad For Oracle 단축키 모음 (0) | 2023.09.01 |