다른 명령
온라인 백업의 방법 과 절차
백업 전 DB 점검사항
DB Online 상태 확인
select status from v$instance;
아카이브 모드 확인
- 온라인 백업방법은 반드시 아카이브 모드이어야 합니다.
- 오라클 서버가 사용자들에 의해 사용되고 있는 와중에 백업되는 방법이기 때문에 노-아카이브 모드에서는 수행될 수 없기 때문.
SQL> archive log list
백업 디렉토리 생성
$ mkdir /backup/
테이블스페이스 단위 온라인 백업 절차
[ 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;
[ 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;
[ 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) 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;
온라인 백업된 모든 데이터 파일 확인
$ cd /backup/ $ ls SYSTEM01.DBF UNDOTBS01.DBF TEMP01.DBF QUERY01.DBF
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) 오라클 서버가 사용 가능한 상태인지 확인
$ 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) 갑작스런 정전상태를 만들기 위해 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) 장애가 발생한 모든 컨트롤 파일과 데이터 파일에 대한 온라인 백업 파일들을 원본 경로로 복사
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;
오프라인 백업
- 불완전 복구를 수행하고 나면 반드시 이전의 마지막 백업파일은 재 사용될 수 없기 때문에 다시 오프라인 백업을 수행해야 함.
- 이전의 아카이브 파일, 트레이스 파일 제거
$ cp /oracle/oradata/ora11g/*.* /backup $ cp /oracle/admin/ora11g/init.ora /backup $ rm /oracle/oradata/ora11g/arch/*.arc