Datafile Backup

AeZan·2023년 11월 22일
0

no archive log mode 에서 장애 해결 (불완전 복구)

cold backup
cp -R /oracle/oradata/ORA19C/* /backup/close/

no archive log mode 로 변경

SQL> startup mount
SQL> alter databse noarchivelog
SQL> alter database open;
SQL> archive log list

기존 archive 파일 삭제
cd /archive
rm -rf *.dbf

현재 tablespace 조회

user01 데이터 날리기

SQL> shutdown immediate
rm -rf users01.dbf

복구
SQL> startup

datafile restore
cd /backup/close
cp users01.dbf /oracle/oradata/ORA19C

SQL> select * from v$recover_file;

SQL> recover databse;

완전 복구 (archive mode) - 물리적 장애 복구

oracle 에서 절대적으로 지켜야 하는 원칙
파일 I/O 발생 시에 절대 데이터 이동, 복사 복구 작업을 해서는 안됨
따라서 복구 할 때는 해당 파일에 I/O 가 발생하지 않도록 하고 진행해야 함
그래서 복구할 때 데이터 파일의 I/O 를 일어나지 않게 만들 수 있냐 없냐에 따라 DB 를 open 시킨 상태에서 복구를 할 수 있는지 없는지 결정됨

해당 데이터 파일에 I/O 일어나지 않게 하려면 offline 이나 shutdown 필수

  1. 아카이브 모드로 변경

SQL> shutdown immediate
startup mount
alter database archivelog;
alter database open;

  1. 테이블스페이스 생성, 유저 생성

  1. open backup
    SQL> alter tablespace yejin begin backup;
    SQL> !cp /oracle/oradata/ORA19C/jin01.dbf /backup/open/
    SQL> alter tablespace yejin end backup;

  2. 장애 발생 -> 데이터파일 유실
    rm -rf jin01.dbf

  3. yejin 유저로 접속 테이블 생성 후 데이터 추가해보기

데이터 파일이 존재하지 않아 오류 발생

테이블은 왜 만들어지는가

해당 파라미터가 true 이면 첫 번째 행이 테이블에 삽입될 때까지 테이블 및 해당 종속 객체(LOB, 인덱스)에 대한 세그먼트가 생성되지 않음

  1. restore
    데이터 파일 offline 시키기
    SQL> alter database datafile '/oracle/oradata/ORA19C/jin01.dbf' offline;

cd /backup/open
cp test01.dbf /oracle/oradata/ORA19C/

데이터 파일 online 시도
SQL> alter database datafile '/oracle/oradata/ORA19C/test01.dbf' online;

recover 해주기

온라인 시키기
alter table space yejin online;

  1. 확인해보기
    SQL> conn yejin/yejin
    select * from tab;
    select * from abc;
    insert into abc values(1);
    commit;

원하는 시점으로 복구

sqlplus / as sysdba

SQL> alter system switch logfile; 여러 번 수행

온라인 백업: 백업 시점 test user 의 테이블 잘보기 (abc 테이블에 값이 2개

  1. 온라인 백업

  2. 백업 후 중간 데이터 삽입

  1. 장애 발생
    rm -rf jin01.dbf

  2. 복구
    데이터 파일 오프라인 후 복구

  3. 복구 확인 (아카이브 로그로 중간 데이터도 복구)

SQL> conn yejin/yejin
SQL> select * from tab;
SQL> select * from abc;

Offline 이 안되는 테이블 스페이스 복구하기 (system, undo)

오프라인 안되는 테이블스페이스

  1. system 테이블 스페이스에 테이블 만들고 값 삽입

  1. 온라인 백업 /backup/open 디렉토리 비우기

  2. 장애 발생
    rm system01.dbf

  3. 복구
    system 테이블 스페이스와 데이터파일은 offline 되지 않으므로 shutdown 후 복구

SQL> shutdown abort

cp /backup/open/system01.dbf /oracle/oradata/ORA19C/

SQL> startup

SQL> recover database;
SQL> alter database open;
SQL> select * from test1;

불완전 복구 - 논리적 장애 복구

불완전 복구란 장애가 발생했을 경우 현재시점까지 전부 복구하는 것이 아니라 과거의 특정 시점까지만 복구하는 것임

Data file 을 과거 백업 본으로 전부 복원하고, archive log 파일을 적용 시켜 장애 직전 시점까지 복구하는 것

data file 은 사고 시점 이전 백업파일로부터 복원하고, redo log와 control file은 현재 시점의 것을 사용해야 함

테이블 확인

col ts_name for a20 
col file_name for a40 
select a.name "TS_NAME", b.name "FILE_NAME", b.bytes/1024/1024 MB, b.status 
from v$tablespace a, v$datafile b 
where a.ts#=b.ts#;
  1. 유저 생성
    이전에 만들었음 test 유저
    SQL> create user test identified by test default tablespace test;

SQL> grant connect, resource to test;

  1. DB 내리기
    SQL> shutdown immediate

  2. close backup
    cp -R /oracle/oradata/ORA19C/* /backup/close/
    test01 테이블 없는 상태의 백업본임

  3. 장애 발생시키기

현재 시간 조회
select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;

테이블 생성 후 값 추가
SQL> create table test.test01(no number, hdate date);

insert into test.test01 values(1, sysdate);

insert into test.test01 values(2, sysdate);

insert into test.test01 values(3, sysdate);

테스트 유저로 접속하고 데이터 확인

테스트 유저로 데이터 넣기

SQL> shutdown immediate

cp -R /oracle/oradata/ORA19C/* /backup/close/
이걸 왜 또 하지..? 강사님은 데이터를 만들기 전 받아둔 백업본을 이용한다 하셧는데.. 왓..

  1. 테이블 날리기
    drop table test.test01;

select 문으로 조회하면 당연히 오류남

shutdown immediate

  1. restore

cp /backup/close/*.dbf /oracle/oradata/ORA19C

restore 함

3번째 데이터까지 복구해보기

SQL> startup mount
SQL> alter session set nls_date_format='yyyy-mm-dd:hh24:mi:ss';
SQL> recover database until time '2023-10-26:21:16:01';
SQL> alter database open resetlogs;

복구 확인
SQL> select no, to_char(hdate, 'YYYY-MM-DD:HH24:MI:SS') from test.test01;

3번째 데이터 까지만 나와야하는데 5번째 데이터 까지 다 복구됨..
강사님은 잘되셨는데 왜... 안되는지.. 모르겠음

0개의 댓글

관련 채용 정보