가. 물리적 장애 : Disk fail, file error 등
나. 논리적 장애 : 사용자의 DML, DDL 실수 등
2. NOARCHIVELOG Mode 와 Archivelog Mode에서의 복구
가. NOARCHIVELOG MODE
- 특정 datafile에 장애 발생 시 해당 파일만 offline drop 처리하여 open하거나, 마지막으로 cold 백업했던 데이터파일을 모두 restore 하여 오픈한다. 단, offline drop 처리한 경우 해당 데이터파일만 손실되지만, cold 백업했던 순간으로 모든 데이터파일을 restore 한다면 그 시점부터의 데이터는 모두 손실된다.
- 만일 장애 시점에 필요한 데이터가 redolog 파일에 저장되어 있던 상태라면 데이터의 손실없이 복구도 가능하지만 그 가능성은 희박하다.
나. ARCHIVELOG MODE
- 완전복구 : 장애 난 시점까지의 모든 데이터를 복구
- 불완전 복구 : 백업데이터와 장애발생 사이의 시점으로 데이터를 복구
3. 예제
가. NO ArchiveLog에서 장애해결
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 |
-- NO ArchiveLog 모드인지 확인ARCHIVE LOG list;CREATE TABLESPACE testDATAFILE '/home/oracle/oradata/testdb/test01.dbf' SIZE 1M;-- cold 백업 수행shutdown IMMEDIATE!cp /home/oracle/oradata/testdb/*.dbf /data/backup/!cp /home/oracle/oradata/testdb/*.ctl /data/backup/!cp /home/oracle/oradata/testdb/*.log /data/backup/startup-- 장애발생 : 데이터파일 손실!rm -rf /home/oracle/oradata/testdb/test01.dbfALTER SYSTEM SWITCH logfile;//shutdown ABORT-- 인스턴스가 내려간 이후 재시작 시도-- 장애가 발생하여 mount 단계까지만 올라옴startup-- restore 수행!cp /data/backup/test01.dbf /home/oracle/oradata/testdb/-- 복구를 시도하나 archivelog 파일이 존재하지 않아 복구에 실패함.-- 아래 명령어도 가능함-- recover tablespace test;-- recover datafile '/home/oracle/oradata/testdb/test01.dbf';RECOVER database;-- 데이터베이스 open에 실패함ALTER DATABASE OPEN;-- 해당 데이터파일을 offline 처리하여 데이터베이스를 open하기로 함ALTER DATABASE DATAFILE '/home/oracle/oradata/testdb/test01.dbf' OFFLINE DROP;-- open 시도ALTER DATABASE open;-- 상태확인SELECT status FROM v$instance; |
나. ArchiveLog에서 장애해결
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
-- ArchiveLog 모드인지 확인ARCHIVE LOG list;CREATE TABLESPACE testDATAFILE '/home/oracle/oradata/testdb/test01.dbf' SIZE 1M;-- test 테이블스페이스 hot 백업ALTER TABLESPACE test BEGIN backup;!cp /home/oracle/oradata/testdb/test01.dbf /data/backup/ALTER TABLESPACE test END backup;-- 장애 발생!rm -f /home/oracle/oradata/testdb/test01.dbfCREATE TABLE abc (no number) TABLESPACE test;INSERT INTO abc VALUES (111);INSERT INTO abc VALUES (222);commit;SELECT * FROM abc;-- 장애발생 확인ALTER TABLESPACE test offline;ALTER TABLESPACE test online;-- restore 후에 복구 시도!cp /data/backup/test01.dbf /home/oracle/oradata/testdb/RECOVER TABLESPACE test;-- 아래명령어도 동일한 복구 가능-- recover datafile '/home/oracle/oradata/testdb/test01.dbf';ALTER TABLESPACE test online;-- 데이터 복구 확인SELECT * FROM abc; |
참고 : 백업된 데이터 파일이 없을 경우 복구하는 방법
redolog 및 ARCHIVELOG 파일을 토대로 복구하는 것이므로 ARCHIVELOG 모드일 때 가능하다. 만일 redolog 파일에 복구에 필요한 모든 정보가 저장되어 있다면 NOARCHIVELOG 모드에서도 가능할 수 있으나 가능성이 매우 희박하다.
|
1
2 |
ALTER DATABASE CREATE DATAFILE '/home/oracle/oradata/testdb/test01.dbf'AS '/home/oracle/temp/test01.dbf'; |