상세 컨텐츠

본문 제목

2024년 1월 30일 4교시 질문 투성이 블록 체인지 트래킹

오라클 백업 리커버리

by 병아리 엔지니어 2024. 1. 30. 15:36

본문

 

증가분의 백업이 만들어진 이유: 백업 속도를 빠르게 하기 위해 + 리두 적용을 줄이기 위해서

 

★ 블록 체인지 트래킹 block change tracking (10g 버전부터~)

- 변경된 데이터를 추적 및 관리한다.

- incremental 백업의 성능을 좋게 하고자 변경사항이 있는 블록(의 rowid)을 추적 파일에 기록한다.

- CTWR: 풀 백업 (0번) 이후의 변경사항을 추적하고 기록하는 프로세스

- 활성화된 경우 RMAN 에 의해 자동으로 사용된다.

  (QUESTION. 뭐가 활성화된 경우라는 거야? 파라미터 말이야?

   아... 혹시 아래에 나오는 enable 말하는 건가?)

  (ANSWER. 그렇다.)

- alter database enable block change tracking using file '/home/oracle/backup/rman/block_tracking.txt';

  파일을 생성해서 그 위치에 기록이 남도록 하기

  (파일 이름과 확장자 이름은 마음대로)

- 백업 중에 전체 데이터파일을 스캔하지 않도록 incremental 백업을 최적화한다. (I/O 성능을 좋게 함)

 


 

1. 블록 체인지 트래킹 파일 만들기

 

SYS@ora11g>

alter database enable block change tracking using file '/home/oracle/backup/rman/block_tracking.txt';
Database altered.

 

파일 만들고

 

SYS@ora11g> ! ls -l /home/oracle/backup/rman/block_tracking.txt
-rw-r-----. 1 oracle oinstall 11600384 Jan 30 14:56 /home/oracle/backup/rman/block_tracking.txt

 

확인하기

 

SYS@ora11g> show parameter db_create_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string

 

db_create_file_dest 라는 파라미터가 설정되어 있는지 보기 : 설정되어 있지 않다.

db_create_file_dest 파라미터를 설정한 경우 블록 변경사항 추적 파일을 설정할 필요가 없다.

(OMF 방식, Oracle Managed File)

(QUESTION. 왜 설정할 필요가 없어? 지가 다 알아서 해줘서?

 근데 이 파라미터에 대해서도 수업시간에 배웠어? 난 왜 기억이 없지... 안한 것 같은데?...)

(ANSWER. 저기에 경로를 설정해놓으면 그 경로에 지가 알아서 다 추적해줌)

 

만약 저 파라미터가 설정되어 있다면 굳이 블록 체인지 트래킹 파일을 만들 것 없이

alter database enable block change tracking;

라고만 하면 된다. (그런데 지금은 하면 안됨 - 파라미터가 설정되어 있지 않으므로)

alter database disable block change tracking;

비활성화

 

SYS@ora11g> select * from v$block_change_tracking;
블록 트래킹 체인지 상태와 (활성화된 상태인지 비활성화된 상태인지), 블록트래킹 파일 이름, 파일 크기 보기

 

 

SYS@ora11g> ! ps -ef | grep ctwr
oracle   31768     1  0 14:56 ?        00:00:00 ora_ctwr_ora11g
oracle   31981 31761  0 15:03 pts/2    00:00:00 /bin/bash -c  ps -ef | grep ctwr
oracle   31983 31981  0 15:03 pts/2    00:00:00 grep ctwr

 

CTWR (블록 체인지 트래킹을 해주는) 이라는 프로세스가 떠 있는지 확인하기: 떠 있다.


 

(RMAN 에서)

 

2. 블록 트래킹 실습을 해보자.

 

백업본 모두 지우기

 

RMAN> delete backup;

Do you really want to delete the above objects (enter YES or NO)? yes

 

0 번 레벨 백업 받아놓기

RMAN> backup incremental level 0 database;

 

받아놓은 백업본 확인하기

RMAN> list backup;

더보기

RMAN> list backup;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
69      Incr 0  1.27G      DISK        00:00:35     30-JAN-24

          --- incremental 백업본에는 incremental 백업본이라는 표시가 뜬다.
        BP Key: 109   Status: AVAILABLE  Compressed: NO  Tag: TAG20240130T174853
        Piece Name: /u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_30/o1_mf_nnnd0_TAG20240130T174853_lvkfzow1_.bkp
  List of Datafiles in backup set 69
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/system01.dbf
  2    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/sysaux01.dbf
  4    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/users01.dbf
  5    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/example01.dbf
  6    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/undotbs01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
70      Full    9.95M      DISK        00:00:01     30-JAN-24   
        BP Key: 110   Status: AVAILABLE  Compressed: NO  Tag: TAG20240130T174939
        Piece Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_30/o1_mf_s_1159638579_lvkg13wc_.bkp
  SPFILE Included: Modification time: 30-JAN-24
  SPFILE db_unique_name: ORA11G
  Control File Included: Ckp SCN: 2282700      Ckp time: 30-JAN-24

 

리두 정보 확인

 

select a.group#, b.sequence#, a.member, b.bytes/1024/1024MB, b.archived, b.status, b.first_change#, b.next_change#
from v$logfile a, v$log b
where a.group# = b.group#
order by 1;

 

 

블록 트래킹이 활성화되어 있는지 확인

 

SYS@ora11g> select status, filename, bytes/1024/1024mb from v$block_change_tracking;

 

블록 트래킹을 활성화시켜 놨으니

이제 블록에 변화를 주고 쟤가 진짜로 변화를 추적해내는지 한번 보자.

 

SYS@ora11g> update hr.employees set salary=salary*1.1 where department_id=20;
2 rows updated.

부서번호가 20번인 사원들의 월급을 1.1배로 인상하고

 

SYS@ora11g> create table hr.inc_emp as select * from hr.employees;

Table created.

hr.inc_emp 라는 테이블 만들기

 

이렇게 블록 변경 작업을 하고 

 

SYS@ora11g> commit;
Commit complete.

 

커밋하면: 블록의 변경 사항들을 추적당하게 된다.

 

SYS@ora11g> delete from hr.inc_emp where department_id=50;
45 rows deleted.

 

SYS@ora11g> commit;
Commit complete.

 

로그 스위치 발생시키기

 

SYS@ora11g> alter system switch logfile;
System altered.

 

/

/

 

리두 정보 확인

 

select a.group#, b.sequence#, a.member, b.bytes/1024/1024MB, b.archived, b.status, b.first_change#, b.next_change#
from v$logfile a, v$log b
where a.group# = b.group#
order by 1;

 

(QUESTION. 여기서 뜬금없이 로그 스위치는 왜 발생시켰고 리두는 왜 확인했어?)

(ANSWER. 그냥 데이터 저장되었는지 보려고, 아카이브 떨어뜨리려고)

 

 

트래킹 정보 확인

 

select status, filename, bytes/1024/1024mb from v$block_change_tracking;

(QUESTION. ...?

이게 트래킹 정보를 확인한 거라고?

이건 파일 확인한 거잖아? 추적해주는지 안해주는지 확인하는 내용이 있었을 텐데?

내가 또 수업 내용을 놓친 건가? ㅠㅠ)

(ANSWER. 선생님이 너무 용량이 작아서 변화가 없다고 하고 그냥 넘어가심)

 

 

RMAN> backup incremental level 1 database;

변경사항에 대한 내용만 백업받기 (1레벨로 incremental 백업)

풀 데이터베이스 백업받을 때보다 훨씬 (그렇게 훨씬은 아님) 금방 된다.

 

RMAN> list backup;

그리고 나서 백업본을 확인해 보면:

아까 받은 0 레벨 풀 백업과 1 레벨 인크레멘털 백업 이렇게 2개의 백업본이 보이는데

더보기

RMAN> list backup;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
69      Incr 0  1.27G      DISK        00:00:35     30-JAN-24   
        BP Key: 109   Status: AVAILABLE  Compressed: NO  Tag: TAG20240130T174853
        Piece Name: /u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_30/o1_mf_nnnd0_TAG20240130T174853_lvkfzow1_.bkp
  List of Datafiles in backup set 69
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/system01.dbf
  2    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/sysaux01.dbf
  4    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/users01.dbf
  5    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/example01.dbf
  6    0  Incr 2282671    30-JAN-24 /u01/app/oracle/oradata/ora11g/undotbs01.dbf

0 레벨로 받은 백업은 0 레벨로 받았다고 표시가 되고

 

더보기

RMAN> list backup;

 

List of Backup Sets
===================

 

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
71      Incr 1  5.37M      DISK        00:00:02     30-JAN-24   
        BP Key: 111   Status: AVAILABLE  Compressed: NO  Tag: TAG20240130T181823
        Piece Name: /u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_30/o1_mf_nnnd1_TAG20240130T181823_lvkhq00q_.bkp
  List of Datafiles in backup set 71
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1    1  Incr 2284484    30-JAN-24 /u01/app/oracle/oradata/ora11g/system01.dbf
  2    1  Incr 2284484    30-JAN-24 /u01/app/oracle/oradata/ora11g/sysaux01.dbf
  4    1  Incr 2284484    30-JAN-24 /u01/app/oracle/oradata/ora11g/users01.dbf
  5    1  Incr 2284484    30-JAN-24 /u01/app/oracle/oradata/ora11g/example01.dbf
  6    1  Incr 2284484    30-JAN-24 /u01/app/oracle/oradata/ora11g/undotbs01.dbf

1레벨로 받은 백업은 1레벨로 받았다고 표시가 된다.

 

select f.tablespace_name, f.file_name
from dba_extents e, dba_data_files f
where f.file_id = e.file_id
and e.segment_name ='INC_EMP'
and e.owner = 'HR';

 

INC_EMP 테이블이 어느 테이블스페이스에 있는지 확인:

유저 테이블스페이스에 있다고 나온다. (/u01/app/oracle/oradata/ora11g/users01.dbf)

 

 

 

저 테이블스페이스 지워서 장애 유발하기

 

SYS@ora11g> ! rm /u01/app/oracle/oradata/ora11g/users01.dbf

 

SYS@ora11g> ! ls /u01/app/oracle/oradata/ora11g/users01.dbf
ls: cannot access /u01/app/oracle/oradata/ora11g/users01.dbf: No such file or directory

 

분명 유저 테이블스페이스를 지워서 장애를 유발했고

그런 데이터파일은 없다고 확인까지 받았는데도

DB 가 정상적으로 내려감. (뭐지...)

 

SYS@ora11g> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

 

근데 정상적으로 올라오진 않음.

 

SYS@ora11g> startup

ORACLE instance started.

Total System Global Area  711430144 bytes
Fixed Size                  1367004 bytes
Variable Size             448791588 bytes
Database Buffers          255852544 bytes
Redo Buffers                5419008 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/app/oracle/oradata/ora11g/users01.dbf'

 

데이터파일 4번 (유저 테이블스페이스에 속한) 에 문제가 있다고 친절하게 알려준다.

 

RMAN 으로 다시 접속하기

 

[oracle@oracle ~]$ rman target /

 

RMAN> list failure;

오류 확인

더보기

RMAN> list failure;

using target database control file instead of recovery catalog
List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
128        HIGH     OPEN      30-JAN-24     One or more non-system datafiles are missing
102        HIGH     OPEN      08-JAN-24     One or more non-system datafiles are offline

 

RMAN> list failure 128 detail;

더보기

RMAN> list failure 128 detail;

List of Database Failures
=========================


Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
128        HIGH     OPEN      30-JAN-24     One or more non-system datafiles are missing
  Impact: See impact for individual child failures
  List of child failures for parent failure ID 128
  Failure ID Priority Status    Time Detected Summary
  ---------- -------- --------- ------------- -------
  14950      HIGH     OPEN      30-JAN-24     Datafile 4: '/u01/app/oracle/oradata/ora11g/users01.dbf' is missing
    Impact: Some objects in tablespace USERS might be unavailable

 

RMAN  복구

 

RMAN> advise failure;

RMAN 에게 문제에 대한 조언 구하기

더보기

RMAN> advise failure;

List of Database Failures
=========================

Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
128        HIGH     OPEN      30-JAN-24     One or more non-system datafiles are missing
  Impact: See impact for individual child failures
  List of child failures for parent failure ID 128
  Failure ID Priority Status    Time Detected Summary
  ---------- -------- --------- ------------- -------
  14765      HIGH     OPEN      30-JAN-24     Datafile 4: '/u01/app/oracle/oradata/ora11g/users01.dbf' is missing
    Impact: Some objects in tablespace USERS might be unavailable

analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=171 device type=DISK
analyzing automatic repair options complete

Mandatory Manual Actions
========================
no manual actions available

Optional Manual Actions
=======================
1. If file /u01/app/oracle/oradata/ora11g/users01.dbf was unintentionally renamed or moved, restore it

Automated Repair Options
========================
Option Repair Description
------ ------------------
1      Restore and recover datafile 4
  Strategy: The repair includes complete media recovery with no data loss
  Repair script: /u01/app/oracle/diag/rdbms/ora11g/ora11g/hm/reco_1696459851.hm

 

RMAN> repair failure preview;

더보기

RMAN> repair failure preview;

Strategy: The repair includes complete media recovery with no data loss
Repair script: /u01/app/oracle/diag/rdbms/ora11g/ora11g/hm/reco_490981551.hm

contents of repair script:
   # restore and recover datafile
   restore datafile 4;
   recover datafile 4;
   sql 'alter database datafile 4 online';

 

RMAN> repair failure;

Do you really want to execute the above repair (enter YES or NO)? yes

더보기

RMAN> repair failure;

Strategy: The repair includes complete media recovery with no data loss
Repair script: /u01/app/oracle/diag/rdbms/ora11g/ora11g/hm/reco_1696459851.hm

contents of repair script:
   # restore and recover datafile
   restore datafile 4;
   recover datafile 4;
   sql 'alter database datafile 4 online';

Do you really want to execute the above repair (enter YES or NO)? yes
executing repair script

Starting restore at 30-JAN-24
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/ora11g/users01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_30/o1_mf_nnnd0_TAG20240130T150452_lvk4d638_.bkp
channel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_30/o1_mf_nnnd0_TAG20240130T150452_lvk4d638_.bkp tag=TAG20240130T150452
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 30-JAN-24

Starting recover at 30-JAN-24
using channel ORA_DISK_1
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00004: /u01/app/oracle/oradata/ora11g/users01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_30/o1_mf_nnnd1_TAG20240130T151515_lvk4zmsq_.bkp
channel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_30/o1_mf_nnnd1_TAG20240130T151515_lvk4zmsq_.bkp tag=TAG20240130T151515
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 30-JAN-24

sql statement: alter database datafile 4 online
repair failure complete

 

RMAN> alter database open;

DB 열기

 

(QUESTION. 근데 얘 자꾸 나한테는 DB 오픈해줄지 말지 안물어보는데 이건 왜 그런 거야?

선생님한테는 물어보셨다는데?)

(ANSWER. 싸가지가 없어서 안물어보는듯)

 

(QUESTION. 근데 이거 추적이 되는지 안되는지 그거 실습하기로 한 거 아니었어?

갑자기 웬 백업만 주구장창 하고 또 장애 유발시키고... 이건 왜 한 거야?

추적하는 거 그건 대체 언제 해? 내가 필기를 꿈속에서 했나?)

(ANSWER. 위에 써놓음)

 

오라클 버전 이름에서 i 는 = internet / g 는 grid infra structure

(격자 하부 구조, 로드 밸런싱과 가용성을 좋게 하는 구조:

예를 들어 DB 하나에 인스턴스가 2개일 경우 하나가 내려가도 다른 하나가 살아 있으면

DB 는 내려가지 않고 운영 가능하다)

c 는 클라우드

관련글 더보기