[Block corruption and repair] _ DBVERIFY를 이용한 block 관리.
[Backup&Recovery]/백업복구 2014. 11. 18. 12:18 |Block corruption and repair
DBverify
DBMS_repair -> DUL -> BBED : 백업 있든없든, 있는 파일을 그대로 열어버리는것.
*RMAN block recovery는 rman한테 block을 고치라고하면, rman이 블록만복구하는 것으로, 백업이없으면 x
1. DBVERIFY를 이용한 block관리.
* DBverify 유틸리티 : datafile block, index file block, undo block등을 점검해주는 유틸리티로, database가 open되어 있는 상태에서 사용하는 유틸리티라서 DB의 중단없이 점검할 수 있다. 대신 점검중인 데이터파일은 read-only가 되기 때문에 만약 점검중일 때 DML작업이 발생하면 잠시 작업이 중단되었다가 다시 실행된다.
- 사용 문법 : dbv file=file_name [options]
1) 주요 옵션들
- FILE - START - END - BLOCKSIZE - LOGFILE - FEEDBACK - PARFILE - USERID - SEGMENT_ID
|
: 점검해야 할 파일명. : 점검을 시작할 블록번호. (기본값 : 해당 파일의 첫번째 블록) : 점검을 종료할 블록번호. (기본값 : 해당파일의 마지막 블록) : 점검하기를 원하는 파일의 BLOCK 크기. (기본값 2048(2k)) : 점검 결과를 저장할 파일명. (기본값 : NONE) - 검사 결과를 화면으로 출력. : 0 이상의 숫자로 설정. (기본값 : 0초) - 검사가 진행되는 동안에 화면에 .(dot)를 찍어서 진행 과정 표시해줌. : DBV를 실행할 때 적용하는 각종 설정들을 저장해두고 불러와 사용. (exp나 datapump에서 parfile옵션과 비슷한 역할) : ASM 기반의 파일을 점검할 경우 ASM 인스턴스에 접속해야 하기 때문에 반드시 USERID를 사용해야 한다. : 특정 세그먼트(TABLE,INDEX,UNDO)만 골라서 검사할 수 있다. (9i이상에서만 사용 가능) |
2)DBV의 주요 특징들
① Block Level에서의 점검만 가능하다.
(analyze table... validate structure와 같이 테이블과 인덱스간의 불일치 같은 문제는 점검하지 못한다.)
② 오직 데이터 파일만 점검할 수 있다. (즉 Redo log file이나 control file은 점검할 수 없다. Redo log file을 점검하려고 시도하면 DBV-에러가 발생한다.)
③ ASM 파일까지 점검할 수 있다. 단 ASM 인스턴스에 로그인할 수 있는 계정 정보를 함께 입력해야 한다.
$ dbv file=+ASM/TESTDB/datafile/system01.dbf userid=system/oracle
④ 특정 데이터 파일이 아닌 세그먼트 단위로 검사할 수 있다. 예를들어 크기가 무척 큰 고객 테이블만 검사한다든지 특정 인덱스만 검사하는 것을 의미한다.
3) DBverify 실행하기.
(1) 특정 파일 검사하기 : $ dbv file=/app/oracle/oradata/testdb/example01.dbf
Total Pages Examined Total Pages Processed (Data) Total Pages Failing (Data) Total Pages Processed (Index) Total Pages Failing (Index) Total Pages Empty Total Pages Marked Corrupt Total Pages Influx
|
- 테스트한 총 블록의 개수 |
(2) 특정 세그먼트만 검사하기.
: 테이블의 segment ID를 조회해서 검사해보겠습니다.
①먼저 tablespace와 table을 생성하고, 값을 임의로 넣어줍니다.
②segment name으로 크기를 조회한다. (1MB가 안되서, 0으로 조회됨.)
③ segment ID 조회.
④ segment id로 데이터파일 검사.
⑤ 에러를 ctrl + c로 중간에 중단시켜 에러발생시킨 뒤 다시 조회하면 에러가뜬다. (11g기준)
⑥ 백업파일이 에러가 있어서 복구를 해도 복구되지 않으므로, corruption된 블록을 복구하려면 정상적인 백업파일을 복원한 후, recover 명령을 수행하거나 RMAN에서 recover하면 된다.
(3) Database 내 전체 데이터파일을 검사하는 dbv script
- 서버내에 아주 많은 데이터 파일이 있을 경우 자동으로 모든 파일의 위치를 찾아서 DBV로 검사하는 스크립트 사용
- OS 환경에 맞게 스크립트 작성
[스크립트 작성] |
[oracle@localhost ~]$ vi dbv.sql set feedback off set head off set echo off set linesize 200 set pagesize 3000 spool /home/oracle/dbv.sh select '!dbv file='||name||' blocksize='||block_size||' logfile='||substr(name, instr(name, '/', -1, 1) +1) ||'.'||file#||'.log' from v$datafile / spool off @/home/oracle/dbv.sh
** os환경에 맞게 파일 시스템의 스크립트가 수정되어야 한다.
[Raw Device] select '!dbv file='||name||' blocksize='||block_size||' end='||(bytes/block_size)||'logfile='||substr(name, instr(name, '/', -1, 1) +1) ||'.'||file#||'.log' from v$datafile [윈도우기반] select '!dbv file='||name||' blocksize='||block_size||' logfile='||substr(name, instr(name, '\', -1, 1) +1) ||'.'||file#||'.log' from v$datafile [ASM 기반] select '!dbv file='||name||' blocksize='||block_size||' userid=sys/&passwd logfile='||substr(name, instr(name, '/', -1, 1) +1) ||'.'||file#||'.log' from v$datafile --> 위 스크립트를 실행하면 sys암호를 묻게 되는데, 적당한 암호 입력시 DBV 작동.
|
[스크립트 실행] |
SYS>@/home/oracle/dbv.sql !dbv file=/app/oracle/oradata/testdb/system01.dbf blocksize=8192 logfile=system01.dbf.1.log !dbv file=/app/oracle/oradata/testdb/sysaux01.dbf blocksize=8192 logfile=sysaux01.dbf.2.log !dbv file=/app/oracle/oradata/testdb/undotbs01.dbf blocksize=8192 logfile=undotbs01.dbf.3.log !dbv file=/app/oracle/oradata/testdb/users01.dbf blocksize=8192 logfile=users01.dbf.4.log !dbv file=/app/oracle/oradata/testdb/example01.dbf blocksize=8192 logfile=example01.dbf.5.log !dbv file=/app/oracle/oradata/testdb/ts_b01.dbf blocksize=8192 logfile=ts_b01.dbf.6.log DBVERIFY: Release 11.2.0.2.0 - Production on Mon Nov 17 20:03:33 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. (검사하면 이 부분이 logfile로 지정한 부분에 저장된다.) DBVERIFY: Release 11.2.0.2.0 - Production on Mon Nov 17 20:04:40 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. (검사하면 이 부분이 logfile로 지정한 부분에 저장된다.) DBVERIFY: Release 11.2.0.2.0 - Production on Mon Nov 17 20:06:03 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. (검사하면 이 부분이 logfile로 지정한 부분에 저장된다.) |
'[Backup&Recovery] > 백업복구' 카테고리의 다른 글
[Block corruption and repair] _ DBMS_REPAIR 패키지를 이용한 Block Recovery★★ (0) | 2014.11.21 |
---|---|
Recovery Manager (RMAN) _ 백업하기 (0) | 2014.11.13 |
★★무정지 상태에서의 복구 - 2.clone DB를 이용한 drop tablespace 복구하기. (-) (0) | 2014.11.11 |
★★무정지 상태에서의 복구 - 1. cloneDB와 exp/imp를 이용한 drop table 복구. (0) | 2014.11.10 |
RedoLogFile장애 _ 3.current 아닌 그룹 중 archive 안 된 그룹이 삭제되고 DB open상태 / 5. current 그룹이 삭제된 후 DB open상태. (0) | 2014.11.06 |
RedoLogFile장애 _ 2.archive 완료된 그룹이 지워진 후 - DB close상태. (0) | 2014.11.06 |
RedoLogFile장애 기본지식 _ 1.그룹의 멤버가 1개만 장애 발생할 경우. (0) | 2014.11.06 |
불완전 복구 - DDL 관련 장애복구(2)_ drop tablespace명령으로 삭제된 tablespace 복구.(백업없는경우) (0) | 2014.11.04 |
불완전 복구 - DDL 관련 장애복구(2-2)_ drop table->drop tablespace 명령으로 삭제된 table복구. (0) | 2014.11.03 |
불완전 복구 - DDL 관련 장애복구(2)_ drop tablespace명령으로 삭제된 tablespace 복구.(백업있는경우) (0) | 2014.11.03 |