행위

오라클 온라인 백업

DB CAFE

Dbcafe (토론 | 기여)님의 2023년 8월 9일 (수) 23:04 판 (온라인 백업을 이용한 완전 복구)
thumb_up 추천메뉴 바로가기


1 온라인 백업의 방법 과 절차[편집]

1.1 백업 전 DB 점검사항[편집]

  1. startup 명령어에 의해 정상적으로 시작되어야 하며
  2. 사용자들의 SELECT, UPDATE, INSERT, DELETE 작업이 정상적으로 수행 가능 해야 함.
  3. 반드시 아카이브 로그 모드 이어야 함.



1.1.1 DB Online 상태 확인[편집]

select status from v$instance;

1.1.2 아카이브 모드 확인[편집]

  1. 온라인 백업방법은 반드시 아카이브 모드이어야 합니다.
  2. 오라클 서버가 사용자들에 의해 사용되고 있는 와중에 백업되는 방법이기 때문에 노-아카이브 모드에서는 수행될 수 없기 때문.
SQL>  archive log list

1.1.3 백업 디렉토리 생성[편집]

$ mkdir /backup/

1.2 테이블스페이스 단위 온라인 백업 절차[편집]

  1. 온라인 백업은 테이블스페이스 단위로 관련된 데이터 파일 복사 가능
  2. 테이블스페이가 READONLY,OFFLINE 모드는 백업 불가



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. 온라인 백업을 수행 시 가장 주의해야 할 점=> ALTER TABLESPACE ~ BEGIN BACKUP 명령문과 ALTER TABLESPACE ~ END BACKUP; 명령문을 수행하는 시간의 차이 임.
    1. BEGIN BACKUP 문을 실행하는 순간부터 관련 테이블스페이스의 모든 파일들에는 CHECKPOINT가 더 이상 발생하지 않게됨.
    2. END BACKUP문을 실행해야만 CHECKPOINT가 다시 발생
  2. 즉, 테이블스페이스를 생성할 때 너무 큰 크기의 데이터 파일을 생성하게 되면 온라인 백업을 수행할 때 CHECKPOINT의 시점관리에 문제가 발생하여 에러가 발생할 수도 있음.
    1. 너무 큰 크기의 데이터 파일들은 2~3개 정도로 나누어 스트라이핑(Striping) 하시는 것이 원활한 백업과 복구작업에 도움이 됨.



1.2.5 온라인 백업된 모든 데이터 파일 확인[편집]

$ cd /backup/
$ ls 
SYSTEM01.DBF
UNDOTBS01.DBF
TEMP01.DBF
QUERY01.DBF

1.3 DB 전체 백업 방법[편집]

  1. 테이블스페이스 단위 백업은 ALTER TABLESPACE ~ BEGIN BACKUP과 ALTER TABLESPACE ~ END BACKUP 명령어를 반복적으로 수행해야 하기 때문에 번거로움
  2. READ ONLY 모드의 테이블스페이스와 OFFLINE 모드의 테이블스페이스에 대해서는 수행할 수 없는 것이 단점
  3. DB 전체 백업으로 하면 READ ONLY,OFFLINE 테이블 스페이스도 백업 가능



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. 오라클의 모든 복구방법은 백업된 파일이 오프라인 백업 파일이든, 온라인 백업 파일이든 상관없이 모두 동일한 방법과 절차에 의해 수행함.
  2. 복구작업을 수행할 때 온라인 백업된 파일을 이용하는 것
  3. 예시) - 컨트롤 파일들이 저장되어 있는 모든 디스크에 장애가 발생.
    - 모든 데이터 파일이 저장되어 있던 디스크에 치명적인 문제 발생.
  4. 온라인 백업 파일을 이용하여 완전 복구작업 수행.



1.4.1 오라클 서버가 사용 가능한 상태인지 확인[편집]

$ sqlplus   "/as  sysdba"
SQL>  startup

1.4.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.3 장애 발생[편집]

  1. 모든 컨트롤 파일과 데이터 파일이 함께 장애가 발생했다고 가정

-- 갑작스런 정전상태를 만들기 위해 ABORT 옵션으로 오라클 서버를 강제 종료합니다.

SQL>  shutdown abort   
SQL>  exit

-- 모든 데이터 파일들에 장애가 발생합니다.

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

-- 컨트롤 파일 삭제

rm /oracle/oradata/ora11g/*.ctl

1.4.4 온라인 백업파일을 이용하여 완전복구 수행[편집]

1.4.4.1 장애가 발생한 모든 컨트롤 파일과 데이터 파일에 대한 온라인 백업 파일들을 현재 경로로 복사[편집]
$ cd  /backup/
$ ls

-- 데이터파일 cp

SQL> ALTER  TABLESPACE  TS_EMP  BEGIN  BACKUP;
$ ls
$ cd  /oracle/oradata/ora11g/
$ cp *.*  backupp
cp system01.dbf    /oracle/oradata/ora11g/
cp undotbs01.dbf   /oracle/oradata/ora11g
cp temp01.dbf      /oracle/oradata/ora11g
cp temp02.dbf      /oracle/oradata/ora11g
cp users01.dbf     /oracle/oradata/ora11g
cp query01.dbf     /oracle/oradata/ora11g

-- control 파일 cp

cp backup_control.ctl  /oracle/oradata/ora11g/control01.ctl
SQL> ALTER  TABLESPACE  TS_EMP  BEGIN  BACKUP;
$ ls
$ cd  /oracle/oradata/ora11g/
$ cp *.*  backup
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
  • 장애가 발생한 모든 컨트롤 파일 복사
1.4.4.2 DB mount 모드 기동[편집]
$ sqlplus  "/as  sysdba"
SQL>  startup mount
1.4.4.3 control 파일 복구[편집]

-- 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.            ← 복구작업이 완료되었습니다.
1.4.4.4 DB OPEN RESETLOGS[편집]
SQL>  alter database open resetlogs;
  • 백업된 컨트롤 파일을 이용한 완전복구 방법과 동일 하게 수행
  • OPEN 단계에서 반드시 RESETLOGS 옵션을 사용해야 합니다.
    • 컨트롤 파일은 현재 시점으로 복구되었지만 데이터베이스 내의 상태정보는 여전히 일치하지 않기 때문입니다.
    • 반드시, 모든 상태정보를 초기화 해야만 OPEN 할 수 있습니다.

-- 정상 복구 확인

SQL> select count(*) from scott.dept;
SQL> shutdown
SQL> exit

1.5 오프라인 백업[편집]

  • 불완전 복구를 수행하고 나면 반드시 이전의 마지막 백업파일은 재 사용될 수 없기 때문에 다시 오프라인 백업을 수행해야 함.
  • 이전의 아카이브 파일, 트레이스 파일 제거
$ cp  /oracle/oradata/ora11g/*.*     /backup
$ cp  /oracle/admin/ora11g/init.ora  /backup
$ rm  /oracle/oradata/ora11g/arch/*.arc