"오라클 온라인 백업"의 두 판 사이의 차이
DB CAFE
(→DB OPEN RESETLOGS) |
(→온라인 백업파일을 이용하여 완전복구 수행) |
||
(같은 사용자의 중간 판 16개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | == 온라인 | + | == 온라인 백업의 방법 과 절차 == |
− | === | + | === 백업 전 DB 점검사항 === |
− | |||
{{틀:고지상자 | {{틀:고지상자 | ||
|제목 = 온라인 백업 주의사항 | |제목 = 온라인 백업 주의사항 | ||
8번째 줄: | 7번째 줄: | ||
# startup 명령어에 의해 정상적으로 시작되어야 하며 | # startup 명령어에 의해 정상적으로 시작되어야 하며 | ||
# 사용자들의 SELECT, UPDATE, INSERT, DELETE 작업이 정상적으로 수행 가능 해야 함. | # 사용자들의 SELECT, UPDATE, INSERT, DELETE 작업이 정상적으로 수행 가능 해야 함. | ||
+ | # 반드시 아카이브 로그 모드 이어야 함. | ||
}} | }} | ||
+ | |||
+ | ==== DB Online 상태 확인 ==== | ||
<source lang=sql> | <source lang=sql> | ||
select status from v$instance; | select status from v$instance; | ||
14번째 줄: | 16번째 줄: | ||
==== 아카이브 모드 확인 ==== | ==== 아카이브 모드 확인 ==== | ||
− | |||
# 온라인 백업방법은 반드시 아카이브 모드이어야 합니다. | # 온라인 백업방법은 반드시 아카이브 모드이어야 합니다. | ||
# 오라클 서버가 사용자들에 의해 사용되고 있는 와중에 백업되는 방법이기 때문에 노-아카이브 모드에서는 수행될 수 없기 때문. | # 오라클 서버가 사용자들에 의해 사용되고 있는 와중에 백업되는 방법이기 때문에 노-아카이브 모드에서는 수행될 수 없기 때문. | ||
21번째 줄: | 22번째 줄: | ||
SQL> archive log list | SQL> archive log list | ||
</source> | </source> | ||
− | ==== | + | ==== 백업 디렉토리 생성 ==== |
− | |||
− | |||
<source lang=sql> | <source lang=sql> | ||
$ mkdir /backup/ | $ mkdir /backup/ | ||
</source> | </source> | ||
− | + | ------------------------------------------------ | |
− | ====== | + | === 테이블스페이스 단위 온라인 백업 절차 === |
+ | {{틀:고지상자 | ||
+ | |제목 = 테이블스페이스 온라인 백업 주의사항 | ||
+ | |내용 = | ||
+ | # 온라인 백업은 테이블스페이스 단위로 관련된 데이터 파일 복사 가능 | ||
+ | # 테이블스페이가 READONLY,OFFLINE 모드는 백업 불가 | ||
+ | }} | ||
+ | |||
+ | ==== [ SYSTEM ] 테이블스페이스 온라인 백업 절차 ==== | ||
+ | 1) SYSTEM 테이블스페이스 온라인 백업 시작 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP; | SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP; | ||
</source> | </source> | ||
− | + | ||
+ | |||
+ | 2) 백업 파일 복사 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> HOST cp /oracle/oradata/ora11g/system01.dbf /backup/ | SQL> HOST cp /oracle/oradata/ora11g/system01.dbf /backup/ | ||
</source> | </source> | ||
− | + | * host 명령어는 sql*plus 에서 쉘명령어를 호출하는 명령어 임. | |
+ | |||
+ | 3) SYSTEM 테이블스페이스에 대한 온라인 백업 종료 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> ALTER TABLESPACE SYSTEM END BACKUP; | SQL> ALTER TABLESPACE SYSTEM END BACKUP; | ||
</source> | </source> | ||
− | ==== | + | ---- |
+ | ==== [ TEMP ] 테이블스페이스에 대한 온라인 백업 절차 ==== | ||
− | + | 1) TEMP 테이블스페이스에 대한 온라인 백업 시작 | |
<source lang=sql> | <source lang=sql> | ||
SQL> ALTER TABLESPACE TEMP BEGIN BACKUP; | SQL> ALTER TABLESPACE TEMP BEGIN BACKUP; | ||
</source> | </source> | ||
− | + | ||
+ | 2) 백업 파일 복사 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> HOST cp /oracle/oradata/ora11g/temp01.dbf /backup/ | SQL> HOST cp /oracle/oradata/ora11g/temp01.dbf /backup/ | ||
</source> | </source> | ||
− | + | ||
+ | 3) TEMP 테이블스페이스에 대한 온라인 백업 종료 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> ALTER TABLESPACE TEMP END BACKUP; | SQL> ALTER TABLESPACE TEMP END BACKUP; | ||
</source> | </source> | ||
− | ==== | + | |
− | + | ==== [ UNDO ] 테이블스페이스에 대한 온라인 백업 절차 ==== | |
+ | 1) UNDO 테이블스페이스에 대한 온라인 백업 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> ALTER TABLESPACE UNDOTBS BEGIN BACKUP; | SQL> ALTER TABLESPACE UNDOTBS BEGIN BACKUP; | ||
</source> | </source> | ||
+ | |||
+ | 2) 백업 파일 복사 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> HOST cp /oracle/oradata/ora11g/undotbs01.dbf /backup/ | SQL> HOST cp /oracle/oradata/ora11g/undotbs01.dbf /backup/ | ||
</source> | </source> | ||
− | + | ||
− | + | 3) UNDO 테이블스페이스에 대한 온라인 백업 종료 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<source lang=sql> | <source lang=sql> | ||
SQL> ALTER TABLESPACE UNDOTBS END BACKUP; | SQL> ALTER TABLESPACE UNDOTBS END BACKUP; | ||
</source> | </source> | ||
− | |||
− | + | ==== [ 일반 테이블 ] 테이블스페이스에 대한 온라인 백업 절차 ==== | |
+ | 1) TS_EMP 테이블스페이스 백업 | ||
<source lang=sql> | <source lang=sql> | ||
− | SQL> ALTER TABLESPACE | + | SQL> ALTER TABLESPACE TS_EMP BEGIN BACKUP; |
SQL> HOST cp /oracle/oradata/ora11g/query01.dbf /backup/ | SQL> HOST cp /oracle/oradata/ora11g/query01.dbf /backup/ | ||
SQL> ALTER TABLESPACE TS_EMP END BACKUP; | SQL> ALTER TABLESPACE TS_EMP END BACKUP; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
95번째 줄: | 99번째 줄: | ||
|제목 = 주의사항 | |제목 = 주의사항 | ||
|내용 = | |내용 = | ||
− | # 온라인 백업을 | + | # 온라인 백업을 수행 시 가장 주의해야 할 점=> '''ALTER TABLESPACE ~ BEGIN BACKUP''' 명령문과 '''ALTER TABLESPACE ~ END BACKUP'''; 명령문을 수행하는 시간의 차이 임. |
− | # BEGIN | + | ## BEGIN BACKUP 문을 실행하는 순간부터 관련 테이블스페이스의 모든 파일들에는 CHECKPOINT가 더 이상 발생하지 않게됨. |
− | # | + | ## END BACKUP문을 실행해야만 CHECKPOINT가 다시 발생 |
+ | # 즉, 테이블스페이스를 생성할 때 너무 큰 크기의 데이터 파일을 생성하게 되면 온라인 백업을 수행할 때 CHECKPOINT의 시점관리에 문제가 발생하여 에러가 발생할 수도 있음. | ||
+ | ## 너무 큰 크기의 데이터 파일들은 2~3개 정도로 나누어 스트라이핑(Striping) 하시는 것이 원활한 백업과 복구작업에 도움이 됨. | ||
}} | }} | ||
110번째 줄: | 116번째 줄: | ||
</source> | </source> | ||
− | === DB 전체 백업 방법=== | + | === DB 전체 백업 방법 === |
+ | {{틀:고지상자 | ||
+ | |제목 = 주의사항 | ||
+ | |내용 = | ||
+ | # 테이블스페이스 단위 백업은 ALTER TABLESPACE ~ BEGIN BACKUP과 ALTER TABLESPACE ~ END BACKUP 명령어를 반복적으로 수행해야 하기 때문에 번거로움 | ||
+ | # READ ONLY 모드의 테이블스페이스와 OFFLINE 모드의 테이블스페이스에 대해서는 수행할 수 없는 것이 단점 | ||
+ | # DB 전체 백업으로 하면 READ ONLY,OFFLINE 테이블 스페이스도 백업 가능 | ||
+ | }} | ||
− | + | 1) 전체 DB 온라인 백업 시작 | |
− | |||
− | |||
− | |||
<source lang=sql> | <source lang=sql> | ||
SQL> ALTER DATABASE BEGIN BACKUP; | SQL> ALTER DATABASE BEGIN BACKUP; | ||
+ | </source> | ||
+ | 2) 파일 백업 | ||
+ | <source lang=sql> | ||
SQL> host cp /oracle/oradata/ora11g/system01.dbf /backup/full_online_backup | SQL> host cp /oracle/oradata/ora11g/system01.dbf /backup/full_online_backup | ||
SQL> host cp /oracle/oradata/ora11g/undotbs01.dbf /backup/full_online_backup | SQL> host cp /oracle/oradata/ora11g/undotbs01.dbf /backup/full_online_backup | ||
125번째 줄: | 138번째 줄: | ||
SQL> host cp /oracle/oradata/ora11g/users01.dbf /backup/full_online_backup | SQL> host cp /oracle/oradata/ora11g/users01.dbf /backup/full_online_backup | ||
SQL> host cp /oracle/oradata/ora11g/query01.dbf /backup/full_online_backup | SQL> host cp /oracle/oradata/ora11g/query01.dbf /backup/full_online_backup | ||
+ | </source> | ||
− | + | 3) 전체 DB 온라인 백업의 종료 | |
+ | <source lang=sql> | ||
SQL> ALTER DATABASE END BACKUP; | SQL> ALTER DATABASE END BACKUP; | ||
</source> | </source> | ||
− | === 온라인 백업을 이용한 완전 복구 === | + | === 온라인 백업을 이용한 완전 복구 방법 === |
− | + | {{틀:고지상자 | |
− | # | + | |제목 = 온라인 백업 파일을 이용하여 완전 복구작업 |
+ | |내용 =# 오라클의 모든 복구방법은 백업된 파일이 오프라인 백업 파일이든, 온라인 백업 파일이든 상관없이 모두 동일한 방법과 절차에 의해 수행함. | ||
# 복구작업을 수행할 때 온라인 백업된 파일을 이용하는 것 | # 복구작업을 수행할 때 온라인 백업된 파일을 이용하는 것 | ||
− | # 예시) 컨트롤 파일들이 저장되어 있는 모든 디스크에 장애가 발생. | + | # 예시) - 컨트롤 파일들이 저장되어 있는 모든 디스크에 장애가 발생. |
− | #: | + | #: - 모든 데이터 파일이 저장되어 있던 디스크에 치명적인 문제 발생. |
− | # | + | # 온라인 백업 파일을 이용하여 완전 복구작업 수행. |
+ | }} | ||
− | ==== | + | ==== 오라클 상태 점검 ==== |
+ | 1) 오라클 서버가 사용 가능한 상태인지 확인 | ||
<source lang=sql> | <source lang=sql> | ||
$ sqlplus "/as sysdba" | $ sqlplus "/as sysdba" | ||
SQL> startup | SQL> startup | ||
</source> | </source> | ||
− | + | ||
+ | 2) 아카이브 파일들이 정상적으로 생성되는지 확인 | ||
<source lang=sql> | <source lang=sql> | ||
alter system switch logfile; | alter system switch logfile; | ||
164번째 줄: | 183번째 줄: | ||
select count(*) from scott.dept; | select count(*) from scott.dept; | ||
</source> | </source> | ||
+ | |||
<source lang=sql> | <source lang=sql> | ||
SQL> host ls /oracle/dbs/arch/*.arc | SQL> host ls /oracle/dbs/arch/*.arc | ||
</source> | </source> | ||
− | |||
− | |||
− | + | ==== 장애 발생 시키기 ==== | |
+ | * 아래 장애 시나리오 수행 전 반드시 온라인 백업을 수행 하여 백업할것 | ||
+ | |||
+ | # 모든 컨트롤 파일과 데이터 파일이 함께 장애가 발생했다고 가정 한다. | ||
+ | |||
+ | 1) 갑작스런 정전상태를 만들기 위해 ABORT 옵션으로 오라클 서버를 강제 종료 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> shutdown abort | SQL> shutdown abort | ||
SQL> exit | SQL> exit | ||
</source> | </source> | ||
− | + | ||
+ | 2) 모든 데이터 파일들에 장애가 발생합니다. | ||
<source lang=sql> | <source lang=sql> | ||
rm /oracle/oradata/ora11g/system01.dbf | rm /oracle/oradata/ora11g/system01.dbf | ||
184번째 줄: | 208번째 줄: | ||
rm /oracle/oradata/ora11g/query01.dbf | rm /oracle/oradata/ora11g/query01.dbf | ||
</source> | </source> | ||
− | + | ||
+ | 3) 컨트롤 파일 삭제 | ||
<source lang=sql> | <source lang=sql> | ||
rm /oracle/oradata/ora11g/*.ctl | rm /oracle/oradata/ora11g/*.ctl | ||
</source> | </source> | ||
+ | |||
==== 온라인 백업파일을 이용하여 완전복구 수행 ==== | ==== 온라인 백업파일을 이용하여 완전복구 수행 ==== | ||
− | + | ||
− | + | 1) 장애가 발생한 모든 컨트롤 파일과 데이터 파일에 대한 온라인 백업 파일들을 원본 경로로 복사 | |
− | + | ||
− | + | 1-1) 백업된 데이터파일을 원본 경로로 복사 | |
− | |||
− | - | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<source lang=sql> | <source lang=sql> | ||
− | cp system01.dbf /oracle/oradata/ora11g/ | + | cp /backup/system01.dbf /oracle/oradata/ora11g/ |
− | cp undotbs01.dbf /oracle/oradata/ora11g | + | cp /backup/undotbs01.dbf /oracle/oradata/ora11g/ |
− | cp temp01.dbf /oracle/oradata/ora11g | + | cp /backup/temp01.dbf /oracle/oradata/ora11g/ |
− | cp temp02.dbf /oracle/oradata/ora11g | + | cp /backup/temp02.dbf /oracle/oradata/ora11g/ |
− | cp users01.dbf /oracle/oradata/ora11g | + | cp /backup/users01.dbf /oracle/oradata/ora11g/ |
− | cp query01.dbf /oracle/oradata/ora11g | + | cp /backup/query01.dbf /oracle/oradata/ora11g/ |
</source> | </source> | ||
− | - | + | 1-2) 백업된 컨트롤 파일을 원본 경로로 복사 |
<source lang=sql> | <source lang=sql> | ||
− | cp backup_control.ctl /oracle/oradata/ora11g/control01.ctl | + | cp /backup/backup_control.ctl /oracle/oradata/ora11g/control01.ctl |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
+ | |||
+ | 1-3) 장애가 발생한 모든 컨트롤 파일 복사 | ||
<source lang=sql> | <source lang=sql> | ||
cp backup_control.ctl /oracle/oradata/ora11g/control02.ctl | cp backup_control.ctl /oracle/oradata/ora11g/control02.ctl | ||
230번째 줄: | 240번째 줄: | ||
</source> | </source> | ||
− | + | ---- | |
− | + | 2) DB 마운트 모드 기동 | |
<source lang=sql> | <source lang=sql> | ||
$ sqlplus "/as sysdba" | $ sqlplus "/as sysdba" | ||
SQL> startup mount | SQL> startup mount | ||
</source> | </source> | ||
− | |||
− | -- control 파일 복구 | + | ---- |
+ | |||
+ | 3) control 파일 복구 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> recover database using BACKUP controlfile; | SQL> recover database using BACKUP controlfile; | ||
</source> | </source> | ||
+ | |||
* 복구해야 할 대상 파일에 이전의 컨트롤 파일이 포함되어 있으므로 USING BACKUP CONTROLFILE 옵션 절을 사용하여 복구작업 수행해야 합니다. | * 복구해야 할 대상 파일에 이전의 컨트롤 파일이 포함되어 있으므로 USING BACKUP CONTROLFILE 옵션 절을 사용하여 복구작업 수행해야 합니다. | ||
− | + | <source lang=sql> | |
ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed | ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed | ||
ORA-00280: Change 8050 for thread 1 is in sequence #5 | ORA-00280: Change 8050 for thread 1 is in sequence #5 | ||
Specify log: {=suggested | filename | AUTO | CANCEL} | Specify log: {=suggested | filename | AUTO | CANCEL} | ||
+ | </source> | ||
AUTO ← AUTO 키워드를 사용하여 모든 아카이브 파일을 적용. | AUTO ← AUTO 키워드를 사용하여 모든 아카이브 파일을 적용. | ||
+ | <source lang=sql> | ||
ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed | ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed | ||
ORA-00280: Change 8050 for thread 1 is in sequence arch_n.arc | ORA-00280: Change 8050 for thread 1 is in sequence arch_n.arc | ||
+ | </source> | ||
ERROR 발생 ← AUTO 키워드를 적용하여 아카이브를 적용했지만 마지막 아카이브 파일 | ERROR 발생 ← AUTO 키워드를 적용하여 아카이브를 적용했지만 마지막 아카이브 파일 | ||
259번째 줄: | 274번째 줄: | ||
리두로그 파일에 존재하기 때문입니다. | 리두로그 파일에 존재하기 때문입니다. | ||
− | + | * 에러가 발생하는 경우에는 다시 RECOVER DATABASE ~ 명령어 실행 | |
<source lang=sql> | <source lang=sql> | ||
− | SQL> | + | SQL> RECOVER DATABASE using BACKUP controlfile; |
ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed | ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed | ||
272번째 줄: | 287번째 줄: | ||
Media Complete Recovery. ← 복구작업이 완료되었습니다. | Media Complete Recovery. ← 복구작업이 완료되었습니다. | ||
</source> | </source> | ||
− | + | ||
+ | ---- | ||
+ | |||
+ | 4) DB OPEN RESETLOGS | ||
+ | {{틀:고지상자 | ||
+ | |제목 = 데이터베이스 내의 모든 상태정보 초기화 | ||
+ | |내용 =# 백업된 컨트롤 파일을 이용한 완전복구 방법과 동일 하게 수행 | ||
+ | # OPEN 단계에서 반드시 RESETLOGS 옵션을 사용해야 함. | ||
+ | ## 컨트롤 파일은 현재 시점으로 복구되었지만 데이터베이스 내의 상태정보는 여전히 일치하지 않기 때문 | ||
+ | # 반드시, 모든 상태정보를 초기화 해야만 데이터베이스를 OPEN 할 수 있음 | ||
+ | }} | ||
+ | |||
<source lang=sql> | <source lang=sql> | ||
SQL> alter database open resetlogs; | SQL> alter database open resetlogs; | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
− | -- | + | ---- |
+ | |||
+ | 5) 정상 복구 확인 | ||
<source lang=sql> | <source lang=sql> | ||
SQL> select count(*) from scott.dept; | SQL> select count(*) from scott.dept; | ||
− | SQL> | + | SQL> shutdown immediate; |
− | SQL> | + | SQL> startup; |
</source> | </source> | ||
2023년 8월 9일 (수) 23:37 기준 최신판
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 온라인 백업의 방법 과 절차[편집]
1.1 백업 전 DB 점검사항[편집]
1.1.1 DB Online 상태 확인[편집]
select status from v$instance;
1.1.2 아카이브 모드 확인[편집]
- 온라인 백업방법은 반드시 아카이브 모드이어야 합니다.
- 오라클 서버가 사용자들에 의해 사용되고 있는 와중에 백업되는 방법이기 때문에 노-아카이브 모드에서는 수행될 수 없기 때문.
SQL> archive log list
1.1.3 백업 디렉토리 생성[편집]
$ mkdir /backup/
1.2 테이블스페이스 단위 온라인 백업 절차[편집]
1.2.1 [ SYSTEM ] 테이블스페이스 온라인 백업 절차[편집]
1) SYSTEM 테이블스페이스 온라인 백업 시작
SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP;
2) 백업 파일 복사
SQL> HOST cp /oracle/oradata/ora11g/system01.dbf /backup/
- host 명령어는 sql*plus 에서 쉘명령어를 호출하는 명령어 임.
3) SYSTEM 테이블스페이스에 대한 온라인 백업 종료
SQL> ALTER TABLESPACE SYSTEM END BACKUP;
1.2.2 [ TEMP ] 테이블스페이스에 대한 온라인 백업 절차[편집]
1) TEMP 테이블스페이스에 대한 온라인 백업 시작
SQL> ALTER TABLESPACE TEMP BEGIN BACKUP;
2) 백업 파일 복사
SQL> HOST cp /oracle/oradata/ora11g/temp01.dbf /backup/
3) TEMP 테이블스페이스에 대한 온라인 백업 종료
SQL> ALTER TABLESPACE TEMP END BACKUP;
1.2.3 [ UNDO ] 테이블스페이스에 대한 온라인 백업 절차[편집]
1) UNDO 테이블스페이스에 대한 온라인 백업
SQL> ALTER TABLESPACE UNDOTBS BEGIN BACKUP;
2) 백업 파일 복사
SQL> HOST cp /oracle/oradata/ora11g/undotbs01.dbf /backup/
3) UNDO 테이블스페이스에 대한 온라인 백업 종료
SQL> ALTER TABLESPACE UNDOTBS END BACKUP;
1.2.4 [ 일반 테이블 ] 테이블스페이스에 대한 온라인 백업 절차[편집]
1) TS_EMP 테이블스페이스 백업
SQL> ALTER TABLESPACE TS_EMP BEGIN BACKUP;
SQL> HOST cp /oracle/oradata/ora11g/query01.dbf /backup/
SQL> ALTER TABLESPACE TS_EMP END BACKUP;
1.2.5 온라인 백업된 모든 데이터 파일 확인[편집]
$ cd /backup/
$ ls
SYSTEM01.DBF
UNDOTBS01.DBF
TEMP01.DBF
QUERY01.DBF
1.3 DB 전체 백업 방법[편집]
1) 전체 DB 온라인 백업 시작
SQL> ALTER DATABASE BEGIN BACKUP;
2) 파일 백업
SQL> host cp /oracle/oradata/ora11g/system01.dbf /backup/full_online_backup
SQL> host cp /oracle/oradata/ora11g/undotbs01.dbf /backup/full_online_backup
SQL> host cp /oracle/oradata/ora11g/temp01.dbf /backup/full_online_backup
SQL> host cp /oracle/oradata/ora11g/temp02.dbf /backup/full_online_backup
SQL> host cp /oracle/oradata/ora11g/users01.dbf /backup/full_online_backup
SQL> host cp /oracle/oradata/ora11g/query01.dbf /backup/full_online_backup
3) 전체 DB 온라인 백업의 종료
SQL> ALTER DATABASE END BACKUP;
1.4 온라인 백업을 이용한 완전 복구 방법[편집]
1.4.1 오라클 상태 점검[편집]
1) 오라클 서버가 사용 가능한 상태인지 확인
$ sqlplus "/as sysdba"
SQL> startup
2) 아카이브 파일들이 정상적으로 생성되는지 확인
alter system switch logfile;
insert into scott.dept values(1,'Personnel','Pusan');
insert into scott.dept values(2,'Account','Pusan');
insert into scott.dept values(3,'Q.C','Pusan');
alter system switch logfile;
insert into scott.dept values(4,'Personnel','Seoul');
insert into scott.dept values(5,'Account','Seoul');
insert into scott.dept values(6,'Q.C','Seoul');
alter system switch logfile;
insert into scott.dept values(7,'Personnel','Daejeon');
insert into scott.dept values(8,'Account','Daejeon');
insert into scott.dept values(9,'Q.C','Daejeon');
commit;
select count(*) from scott.dept;
SQL> host ls /oracle/dbs/arch/*.arc
1.4.2 장애 발생 시키기[편집]
- 아래 장애 시나리오 수행 전 반드시 온라인 백업을 수행 하여 백업할것
- 모든 컨트롤 파일과 데이터 파일이 함께 장애가 발생했다고 가정 한다.
1) 갑작스런 정전상태를 만들기 위해 ABORT 옵션으로 오라클 서버를 강제 종료
SQL> shutdown abort
SQL> exit
2) 모든 데이터 파일들에 장애가 발생합니다.
rm /oracle/oradata/ora11g/system01.dbf
rm /oracle/oradata/ora11g/undotbs01.dbf
rm /oracle/oradata/ora11g/temp01.dbf
rm /oracle/oradata/ora11g/temp02.dbf
rm /oracle/oradata/ora11g/users01.dbf
rm /oracle/oradata/ora11g/query01.dbf
3) 컨트롤 파일 삭제
rm /oracle/oradata/ora11g/*.ctl
1.4.3 온라인 백업파일을 이용하여 완전복구 수행[편집]
1) 장애가 발생한 모든 컨트롤 파일과 데이터 파일에 대한 온라인 백업 파일들을 원본 경로로 복사
1-1) 백업된 데이터파일을 원본 경로로 복사
cp /backup/system01.dbf /oracle/oradata/ora11g/
cp /backup/undotbs01.dbf /oracle/oradata/ora11g/
cp /backup/temp01.dbf /oracle/oradata/ora11g/
cp /backup/temp02.dbf /oracle/oradata/ora11g/
cp /backup/users01.dbf /oracle/oradata/ora11g/
cp /backup/query01.dbf /oracle/oradata/ora11g/
1-2) 백업된 컨트롤 파일을 원본 경로로 복사
cp /backup/backup_control.ctl /oracle/oradata/ora11g/control01.ctl
1-3) 장애가 발생한 모든 컨트롤 파일 복사
cp backup_control.ctl /oracle/oradata/ora11g/control02.ctl
cp backup_control.ctl /oracle/oradata/ora11g/control03.ctl
cp backup_control.ctl /oracle/oradata/ora11g/control04.ctl
2) DB 마운트 모드 기동
$ sqlplus "/as sysdba"
SQL> startup mount
3) control 파일 복구
SQL> recover database using BACKUP controlfile;
- 복구해야 할 대상 파일에 이전의 컨트롤 파일이 포함되어 있으므로 USING BACKUP CONTROLFILE 옵션 절을 사용하여 복구작업 수행해야 합니다.
ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed
ORA-00280: Change 8050 for thread 1 is in sequence #5
Specify log: {=suggested | filename | AUTO | CANCEL}
AUTO ← AUTO 키워드를 사용하여 모든 아카이브 파일을 적용.
ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed
ORA-00280: Change 8050 for thread 1 is in sequence arch_n.arc
ERROR 발생 ← AUTO 키워드를 적용하여 아카이브를 적용했지만 마지막 아카이브 파일
을 적용할 때 에러가 발생하는 경우가 있습니다. 왜냐하면, 적용해야 할 마지막 백업 데이터는 아카이브 파일에 저장되어 있지 않고 CURRENT 리두로그 파일에 존재하기 때문입니다.
- 에러가 발생하는 경우에는 다시 RECOVER DATABASE ~ 명령어 실행
SQL> RECOVER DATABASE using BACKUP controlfile;
ORA-00279: Change 8050 generated at 01/20/98 15:22:26 needed
ORA-00280: Change 8050 for thread 1 is in sequence arch_n.arc
Specify log: {=suggested | filename | AUTO | CANCEL}
/oracle/oradata/ora11g/redo01.log ← 마지막 백업 데이터가 저장되어 있는 CURRENT 리두로그 파일을 입력
Log Applied.
Media Complete Recovery. ← 복구작업이 완료되었습니다.
4) DB OPEN RESETLOGS
SQL> alter database open resetlogs;
5) 정상 복구 확인
SQL> select count(*) from scott.dept;
SQL> shutdown immediate;
SQL> startup;
1.5 오프라인 백업[편집]
- 불완전 복구를 수행하고 나면 반드시 이전의 마지막 백업파일은 재 사용될 수 없기 때문에 다시 오프라인 백업을 수행해야 함.
- 이전의 아카이브 파일, 트레이스 파일 제거
$ cp /oracle/oradata/ora11g/*.* /backup
$ cp /oracle/admin/ora11g/init.ora /backup
$ rm /oracle/oradata/ora11g/arch/*.arc