[DBVerify Utility]
- ORACLE 7.3.2 버전부터 현재까지 제공됨
- Data file block과 index file block, undo block 등을 점검해주는 유틸리티
- Database가 Open되어 있는 상태에서 사용가능 (DB중단없이가능)
- 점검중인 data file은 Read-only가 되기때문에 점검중일때 DML작업이 발생하면 잠시 작업이 중단되었다가 다시 실행됨
[문법]
$ dbv file=파일명 [옵션]
[옵션]
옵션 |
설명 |
FILE |
점검해야 할 파일명 |
START |
점검을 시작할 블록 번호설정, 기본값은 해당파일의 첫번째 블록 |
END |
점검을 종료할 블록 번호 설정, 기본값은 해당파일의 마지막 블록 |
BLOCKSIZE |
점검을 원하는 파일의 블록크기, 기본값은 2048(2k) |
LOGFILE |
점검 결과를 저장할 파일명 지정, 기본값 none, 검사결과를 화면에 출력 |
FEEDBACK |
검사가 진행되는 동안 .(dot)으로 진행과정 표시, 0이상의 숫자로 설정(기본값은 0초) |
PARFILE |
dbv를 실행할때 각종 설정들을 파일에 저장해두고 불러와서 사용 (exp/imp의 parfile) |
USERID |
ASM기반의 파일을 점검할 경우 ASM인스턴스에 접속해야하기때문에 반드시 userid사용해야함 |
SEGMENT_ID |
특정세그먼트(table, index, undo)만 골라서 검사가능, 9i이상에서만 사용가능 |
[DBV의 주요특징]
① Block Level에서만 점검가능,
Analyze table.. Validate structure와 같은 테이블과 인덱스간의 불일치 같은 문제는 점검불가
② 오직 데이터파일만 점검가능,
즉 Redo log file이나 Control file은 점검 불가, Redo log file을 점검하려고 시도하면 에러발생
[oracle@localhost ~]$ dbv file=/app/oracle/oradata/testdb/redo01_a.log
DBVERIFY: Release 11.2.0.2.0 - Production on Mon Nov 17 19:20:56 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBV-00103: Specified BLOCKSIZE (8192) differs from actual (512)
③ ASM 파일까지 점검가능,
단 ASM 인스턴스에 로그인할수 있는 계정정보를 함께 입력해야함
[oracle@localhost ~]$ dbv file=+ASM/TESTDB/datafile/system01.dbf userid=system/oracle
④ 특정 데이터 파일이 아닌 세그먼트 단위로 검사가능
예) 크기가 아주 큰 고객 테이블만 검사하기, 특정 인덱스만 검사하기
[DBVerify 실행하기]
1. 특정파일 검사하기
[oracle@localhost ~]$ dbv file=/app/oracle/oradata/testdb/system01.dbf
DBVERIFY: Release 11.2.0.2.0 - Production on Mon Nov 17 19:25:55 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /app/oracle/oradata/testdb/system01.dbf
DBVERIFY - Verification complete
Total Pages Examined : 90880 --테스트한 총 블록의 개수
Total Pages Processed (Data) : 60048 --테스트한 총 테이블 블록 개수
Total Pages Failing (Data) : 0 -- 문제가 있는 블록 개수
Total Pages Processed (Index) : 12795 --테스트한 총 인덱스 블록 개수
Total Pages Failing (Index) : 0 -- 문제가 있는 블록 개수
Total Pages Processed (Other) : 3868 --테이블이나 인덱스 외 다른 블록 개수
Total Pages Processed (Seg) : 1
Total Pages Failing (Seg) : 0
Total Pages Empty : 14169 --비어있는 블록개수
Total Pages Marked Corrupt : 0 --문제가 있어서 corrupt marked된 블록 개수
Total Pages Influx : 0 --다른 사용자가 먼저 데이터를 변경하고 있어서 DBV를 하기위해 다시 읽은 블록 개수
Total Pages Encrypted : 0
Highest block SCN : 1427894 (0.1427894)
2. 특정 세그먼트만 검사하기
## 연습용으로 사용할 테이블 생성 및 데이터 입력
SYS>create table scott.tt800 (no number);
Table created.
SYS>begin
2 for i in 1..1000 loop
3 insert into scott.tt800 values (i);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
SYS>select sum(bytes)/1024/1024 as MB
2 from dba_segments
3 where segment_name='TT800';
MB
----------
15
## 생성한 테이블의 segment ID 확인
SYS>select t.ts#, s.header_file, s.header_block
2 from v$tablespace t, dba_segments s
3 where s.segment_name='TT800'
4 and t.name=s.tablespace_name;
TS# HEADER_FILE HEADER_BLOCK
---------- ----------- ------------
4 4 1042
DBVERIFY: Release 11.2.0.2.0 - Production on Mon Nov 17 19:25:55 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : SEGMENT_ID=4.4.1042
DBVERIFY - Verification complete
Total Pages Examined : 384
Total Pages Processed (Data) : 308
Total Pages Failing (Data) : 0
Total Pages Processed (Index) : 0
Total Pages Failing (Index) : 0
Total Pages Processed (Other) : 75
Total Pages Processed (Seg) : 1
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 1427894 (0.1427894)
## 백업받은 data file의 블록을 corruption
[oracle@localhost ~]$ dd if=/dev/zero of=/data/temp/example01.dbf bs=8k
(명령 수행 도중에 Ctrl + C를 눌러 취소)
## 검사수행 -> 물리적인 손상을 입은 블록들은 DBVerify로 검증가능
[oracle@localhost ~]$ dbv file=/data/temp/example01.dbf
DBVERIFY: Release 11.2.0.2.0 - Production on Mon Nov 17 19:57:06 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBV-00107: Unknown header format (0) (0) -- block corruption 발생내역
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
:wq!
## 일반 파일 시스템의 스크립트에서 굵은글씨로 표시된 부분만 추가하면 됨
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로 지정한 부분에 저장됨)
'oracle > [Recovery] 기타' 카테고리의 다른 글
[Block Corruption and Repair] BBED (0) | 2014.11.24 |
---|---|
[Block Corruption and Repair] DBMS_REPAIR package (0) | 2014.11.18 |
[Clone DB] Clone db로 복구 후 DB Link를 이용해서 이동하기 (0) | 2014.11.11 |
[Clone DB] clone db를 이용한 drop tablespace 복구 (1) | 2014.11.10 |
[Clone DB] clone db와 exp/imp를 이용한 drop table복구 (0) | 2014.11.10 |
댓글