1 테스트 환경
n 서버 : Sun Enterprise E3500 (2048M)
n 운영체제 : Solaris 9
n 오라클 : Oracle 10.2.0.4 Enterprise 64bit
2 DBV Utility
– Database verify 의 약자로, 7.3.2 부터 지원되는 유틸리티.
– Data 나 Index block 이 어느 정도 신뢰성이 있는지, 손상(corruption)의 유무에 대한 정도를 점검.
– dbv 는 Block level 까지만 점검하기 때문에, ‘ANALYZE TABLE … VALIDATE STRUCTURE CASCADE’ 와는 달리 Index 와 Data block 간의 일치성 점검은 수행하지는 않는다.
– dbv 는 Analyze 시 Table lock(TM) 이 걸리는 문제 때문에, Analyze 할 수 없는 상황에서 유용하게 사용될 수 있다.
Keyword |
Description |
(Default) |
FILE |
File to Verify |
(NONE) |
START |
Start Block |
(First Block of File) |
END |
End Block |
(Last Block of File) |
BLOCKSIZE |
Logical Block Size |
(8192) |
LOGFILE |
Output Log |
(NONE) |
FEEDBACK |
Display Progress |
(0) |
PARFILE |
Parameter File |
(NONE) |
USERID |
Username/Password |
(NONE) |
SEGMENT_ID |
Segment ID (tsn.relfile.block) |
(NONE) |
HIGH_SCN |
Highest Block SCN To Verify (scn_wrap.scn_base OR scn) |
(NONE) |
3 DBV Utility 사용법
– dbv 유틸리티는 data file에 대해서만 사용될 수 있고 Redo log 나 control file 에 대해서는 사용할 수 없다.
– raw device 에 대해서는 직접 dbv 를 수행할 수 없고 symbolic link 를 사용해야 한다. 그리고 link name은 반드시 확장자(extension)를 줘야한다.
(ln -s /dev/rvol/users /oracle/users01.dbf)
n 일반적인 File의 사용법
– 만약 ASM를 사용하는 경우에는 반드시 userid를 넣어줘야만 한다.
(Ex : dbv file=+DG1/ORCL/datafile/system01.dbf userid=system/sys)
$ dbv file=파일명 blocksize=8192 |
– 만약 dbv를 실행한 결과에서 Marked Corrupt 나 Failing 이 있다면, 다시 dbv 를 수행하여 일시적인 현상인지 확인한다.
n Raw Device의 사용법
– 파일명은 ln -s /dev/rvol/users /oracle/users01.dbf 와 같이 symbolic link를 걸어서 넣어준다.
– Start=1로 설정을 하고 End는 datafile의 bytes를 db_block_size로 나눈 값을 넣는다.
End 값 구하는 방법 SQL> show parameter ● 위에서 구한 db_block_size를 구하려는 datafile의 bytes 값으로 나누면 얻을 수 있다.
SQL> select bytes/8192 from |
– 위에서 구한 값을 end 값으로 넣어서 실행을 하면 된다.
$ dbv file=파일명 blocksize=8192 start=1 end= (bytes/db_block_size)
|
– SEGMENT_ID를 이용해서 특정 Segment만 지정하여 사용할 수도 있다.
SQL> select t.ts#, s.header_file, s.header_block from v$tablespace t, dba_segments s where s.segment_name=’EMP_TEST’ and t.name = s.tablespace_name |
– 위 예제처럼 원하는 Segment의 TS#, HEADER_FILE, HEADER_BLOCK를 구하여서 dbv를 이용하여 Check를 할 수 있다. Segment만 사용할 경우에는 userid를 넣어줘야 한다.
$ dbv userid=system/oracle segment_id=4.10.851
|
n Corrupt 된 Object 확인 방법
● Corrupt가 발생된 출력 예제
|
– 위와 같이 Corrupt된 예제를 살펴보면 관련 file과 block을 확인 할 수 있다. File과 block를 이용하여 corrupt된 Object를 확인 할 수 있다.
SQL > select segment_name, segment_type, owner from dba_extents where file_id = (Absolute file number) and (corrupted block number) between block_id and block_id + blocks -1;
|