Backup/FlashBack

블록 손상(block corruption)

잇꼬 2024. 1. 31. 17:47
728x90
반응형
SMALL

■ 블록 손상(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;


alert_ora11g.log


#) 확인해보기
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의 일관성을 유지하는데 기여

 

 

728x90
반응형
LIST