by 디비디비딥 [Oracle Admin] ORA-01115 [2022.11.02 12:27:58]
안녕하세요!
특정 쿼리 돌리다가 아래 오류가 났는데요
ORA-01115 IO error reading block from file
[ERROR] datafile 80 'TEST_34.DBS'
몇 가지 구글링 해보니, 테이블 찾아 복구하란 내용이 있어서 하려다가 궁금한점이 있어 문의드립니다
저 80번 데이터 파일 말고 35.DBS도 새로 만들어서 온라인 상태인데 왜 갑자기 full이 찬 80 파일을 액세스 하려 하는지가 이해가 안되서요
설명 가능하실까요?
관련 직무를 수행 경험은 없으나 사정상 급히 확인을 해야 하는 상황이라 질문이 너무 초보적이고 두서 없어도 양해를 부탁드릴께요 ㅠㅠ
ORA-01115 은 특정 Table, Index 등을 읽고 쓰려고 할 때, 해당 정보가 저장된 물리 영역 ( ???.DBS 파일 ) 의 해당 Block 를 정상적으로 Access 못 한다는 의미 입니다.
- OS 상에서 권한이 없거나, 해당 Block 이 논리적으로 오류 상태 이거나 (이 경우 복구 가능), 해당 Block 이 물리적으로 손상된 경우 등 이 있습니다.
해당 DBF/DBS 파일의 사용율 ( Usage Full ? 인지 여부) 과는 상관 없이, 찾아야 하는 Table 등이 저장된 File 명으로 오류가 발생됩니다. 목록에 있는 File 명을 찾음
지속적으로 발생되면 DB 기술지원 업체를 통해서 해결하시는 것이 좋겠습니다.
@포동푸우님 답변 감사드립니다!
상세 메시지 공유를 드려보면, 아래와 같은데요.
ORA-01115: IO error reading block from file (block # )
ORA-01110: data file 80: 'TEST/TEST_34.DBS'
ORA-27072: File I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 5
Additional information: 24532
Additional information: 32929662723
위 오류 메시지가 가리키는 File ID와 block ID를 단서로 아래 쿼리를 사용해서 어떤 테이블이 문제인지는 찾은것 같습니다.
SELECT segment_name , segment_type , owner , tablespace_name
FROM sys.dba_extents
WHERE file_id = 91 --&bad_file_id
AND &bad_block_id BETWEEN block_id and block_id + blocks -1;
말씀하신대로, 논리적인 오류인지 물리적인 손상인지 찾을 수 있는 방법이 있을지요?
논리 Corruption 복구는, 보통 RMAN Backup 본을 이용해서 RMAN VALIDATE, RMAN repair failure 를 하게 됩니다.
- 개념 이해 : http://www.dba-oracle.com/t_rman_repair_corrupt_blocks.htm
물리 오류는 VALIDATE 과정에서 확인 됩니다. 백업본을 이용해서 최근 시점으로 엔지니어들이 수동복구 하는 경우가 많습니다.
백업본이 없는 경우 사용할 수 있는 Repair 을 위한 Tool 들이 있다는데, 저는 사용해 보지 않아서 잘 모르겠습니다.