증가분의 백업이 만들어진 이유: 백업 속도를 빠르게 하기 위해 + 리두 적용을 줄이기 위해서
★ 블록 체인지 트래킹 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 는 클라우드
2024년 1월 31일 2교시 플래시백 데이터베이스 (0) | 2024.01.31 |
---|---|
2024년 1월 31일 1교시 플래시백 데이터 아카이브 (0) | 2024.01.31 |
2024년 1월 30일 3교시 RMAN 풀 백업, 인크레멘털 백업 (0) | 2024.01.30 |
2024년 1월 30일 2교시 : 1교시 때 했던 것 원복하기 (데이터 파일 이관작업) (0) | 2024.01.30 |
2024년 1월 30일 1교시 모든 데이터파일, 컨트롤파일, 리두로그 파일이 손상되었을 때 RMAN으로 복구하기 (2) | 2024.01.30 |