■ 블록 손상(block corruption)
- 블록을 읽거나 쓸때마다 일관성 검사한다.
1) 블록에 대한 블록버전 체크
2) 블록 dba 값(data block address)과 비교되는 캐시의 dba 값을 체크
3) 블록에 대한 활성화된 블록의 체크섬(=:블록의 건강상태)
- 손상된 블록의 경우
1) media 손상
2) 논리적/ 소프트웨어 손상(물리적)
#) backup 있는지 확인
=> cold/hot 백업 , RMAN 백업 체크
[oracle1@oracle cold_20240131]$ ls
[oracle1@oracle hot_20240131]$ ls
RMAN> list backup;
#) 스키마 확인
RMAN> report schema;
#) 샘플 테이블 생성
create table hr.emp_copy as select * from hr.employees;
#) 테이블의 file_id, block 확인 및 위치 확인
select file_id, block_id from dba_extents where segment_name = 'EMP_COPY' and owner ='HR';
select file_name from dba_data_files where file_id = 4;
#) block 손상시키는 작업
=> dd : 복제하는 명령어
! dd if=/dev/zero of=/u01/app/oracle/oradata/ora11g/users01.dbf bs=8192 seek=880 count=2 conv=notrunc
#) buffer cache*2번 이상
alter system flush buffer_cache;
#) 샘플테이블 확인
select count(*) from hr.emp_copy;
#) DB 내리기
shutdown immediate
#) DB 올리기
startup
=> 엥? 장애 발생을 하지 않음
#) OS 나와서 확인해보기
=> 손상된 것을 확인해보기
[oracle1@oracle ~]$ dbv userid=system/oracle file=/u01/app/oracle/oradata/ora11g/users01.dbf blocksize=8192
Total Pages Examined # 총 블록의 수
Total Pages Processed (Data) # 테이블 블록의 수
Total Pages Failing (Data) # 테이블 블록 중 문제가 되는 블록의 수
Total Pages Processed (Index) # 인덱스 블록의 수
Total Pages Failing (Index) # 인덱스 블록 중 문제가 있는 블록 수
Total Pages Processed (Other) # 테이블이나 인덱스 외의 다른 블록의 수
Total Pages Processed (Seg) # segment 관련 정보의 블록 수
Total Pages Failing (Seg) # segment 관련 정보의 블록 중 문제되는 블록의 수
Total Pages Empty # 비어 있는 블록의 수
Total Pages Marked Corrupt # 문제가 있어서 corrupt marked 된 블록 수
Total Pages Influx
# dbv를 사용하고 있는 동안 다른 사용자가 데이터를 변경하고 있는 블록을 dbv를 사용하기 위해 다시 읽은 블록의 수
Total Pages Encrypted # 데이터베이스 또는 파일 시스템에서 암호화된 페이지의 총 수
Highest block SCN # Oracle 데이터베이스에서 관리되는 scn 중에서 가장 높은 값
if) 장애가 발생했다면, 오류발생
select count(*) from hr.emp_copy;
ORA-01578: ORACLE data block corrupted(file 4, block 880)
ORA-01110: data file 4: '/u01/app/oracle/oradata/ora11g/users01.dbf'
<rman session>
=> 특정 데이터파일의 물리적 무결성을 확인하는 명령어 : validate datafile (파일번호);
=> 데이터 파일이 손상되었는지 확인
RMAN> validate datafile 4;
#) 장애 확인
RMAN> list failure;
RMAN> list failure 5514 detail;
#) 해결방법: 손상된 block
#1) advise 해보기
RMAN> advise failure;
#2) 장애 복구 방법
RMAN> repair failure preview;
#2) 장애 복구 하기
RMAN> repair failure;
#) 확인해보기
RMAN> validate datafile 4;
#) block 체크해보기(운영 중에 하지 않고, 중간중간에 해주는것이 좋다!)
RMAN> validate database;
※ 손상된 블록에 대한 복구 작업의 trigger(트리거)
1. DBMS_REPAIR의 트리거
- Oracle의 'DBMS_REPAIR' 패키지를 사용하여 손상된 블록을 복구할 때, 특정 블록에 대한 복구가 자동으로 트리거된다.
- 손상된 블록을 복구하기 위해 적절한 조치를 자동으로 수행한다.
2. 트리거 기반의 무결성 제약 조건
- 트리거를 사용하여 데이터베이스의 특정 테이블에 대한 무결성 제약 조건을 강제화할 수 있다. 이러한 트리거는 데이터가 삽입, 갱신 또는 삭제될 때 자동으로 실행되어 무결성을 유지하도록 도와준다.
3. 자동 복구 매커니즘
- 데이터베이스 관리 시스템 이 특정 이벤트를 감지하고, 이벤트에 대응하여 손상된 블록을 자동으로 복구하는 매커니듬이 트리거성으로 작동할 수 있다.
※ 트리거(Trigger)란?
- 데이터베이스에서 특정 이벤트가 발생했을 떄 자동으로 실행되는 일련의 작업을 정의하는 데이터베이스 객체.
- 데이터의 변경이나 특정 상황에 대응하여 사전에 정의된 작업이나 프로시저를 자동으로 실행함
* 다음과 같은 이벤트에 반응하여 동작
1) INSERT, UPDATE, DELETE
2) BEFORE, ATLER : 행이 변경되기 전 / 변경된 후에 실행
3) DML 및 DDL : 데이터 조작 및 정의 문장
- 데이터베이스에 자동화된 작업을 수행할 수 있다.
- DB의 무결성 유지, 비즈니스 role을 강제화하는데 유용하며, DB의 일관성을 유지하는데 기여
'Backup > FlashBack' 카테고리의 다른 글
Flashback Data Archive, Flashback Database (0) | 2024.01.31 |
---|---|
Flashback Query, Flashback version query, Flashback Table (1) | 2024.01.31 |