중화사전망 - 서예자전 - Oracle 데이터베이스 쿼리에 ora- 1578 오류가 발생하면 어떻게 됩니까? Ora-01578 "Oracle 블록이 손상되었습니다
Oracle 데이터베이스 쿼리에 ora- 1578 오류가 발생하면 어떻게 됩니까? Ora-01578 "Oracle 블록이 손상되었습니다
ORA-0 1578 오류는 Oracle 에서 흔히 볼 수 있는 물리적 손상된 블록 손상 오류입니다. 10g 이후에는 전체 백업 및 아카이브 로그를 사용하여 손상된 블록을 온라인으로 복구할 수 있습니다 (블록이 있는 트랙을 여전히 물리적으로 사용할 수 있는 경우).
다음은 백업이 충분하지 않은 경우 ORA-0 1578 에 대한 잘못된 솔루션입니다. 단, 손상된 블록이 있는 위치의 데이터 손실을 용인할 수 있는 경우에 한합니다.
SQL & gtexec DBMS_STATS. GATHER _ DATABASE _ STATS
DBMS_STATS 를 시작합니다. GATHER _ DATABASE _ STATS 종료;
*
1 행 오류:
ORA-0 1578: ORACLE 데이터 블록이 손상되었습니다 (파일 # 4, 블록 # 8702 12)
ORA-0 1 1 10: 데이터 파일 4:
/s01/oradata/g10r25/datafile/o1_ MF _ users _ Dbf
ORA-065 12: at "시스템 DBMS_STATS", 15 188 행
ORA-065 12: at "시스템 DBMS_STATS", 15530 행
ORA-065 12: at "시스템 DBMS_STATS", 15674 행
ORA-065 12: at "시스템 DBMS_STATS", 15638 행
ORA-065 12: 행 1 에서
RMAN blockreocver 명령을 사용하여 물리적 손상된 블록을 수정하려고 합니다.
RMAN & gt;; Blockrecover 데이터 파일 4 블록 870212;
시작 블록 복구는 2002 년 1 1 월 8 일 65438+ 에 시작되었습니다
채널 ORA_DISK_ 1: 백업 조각 1 에서 복원된 블록입니다
블록
Handle =/s01/flash _ recovery _ area/g10r25/백업 세트/20/klle Bkp
태그 = 태그 20 120806T075500
채널 ORA_DISK_ 1: 블록 복구 완료, 시간 소요: 00:0 1: 16
미디어 복구 시작
기록 보관소
로그 스레드 1 시퀀스 467 은 이미 디스크에 파일로 존재합니다
/s01/flash _ recovery _ area/g10r25/archivelog/20/kloc-0 호
기록 보관소
로그 스레드 1 시퀀스 468 은 이미 디스크에 파일로 존재합니다
/s01/flash _ recovery _ area/g10r25/archivelog/20/kloc-0 호
기록 보관소
로그 스레드 1 시퀀스 469 는 이미 디스크에 파일로 존재합니다
/s01/flash _ recovery _ area/g10r25/archivelog/20/kloc-0 호
기록 보관소
로그 스레드 1 시퀀스 470 은 이미 디스크에 파일로 존재합니다
/s01/flash _ recovery _ area/g10r25/archivelog/20/kloc-0 호
4_. 호
Rman-00571:= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
RMAN-00569:= = = = = = = = = = = = = = = = = = = = = 오류 메시지 스택은 다음과 같습니다 = = = = = = = = = = = = = = =
Rman-00571:= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
RMAN-03002:11/08/2012 06:19: 40 의 블록 복구 명령
RMAN-06053: 로그가 없어서 미디어 복구를 수행할 수 없습니다
RMAN-06025: 복원할 로그 스레드1seq466lowscn 27762151에 대한 백업을 찾을 수 없습니다
RMAN-06025: 복원할 로그 스레드1seq465lowscn 27762145 에 대한 백업을 찾을 수 없습니다
RMAN-06025: 복원할 로그 스레드1seq464lowscn 27762142 에 대한 백업을 찾을 수 없습니다
필요한 아카이브 로그가 없어 Blockrecover 가 성공하지 못했기 때문에 다른 방법을 찾아야 했습니다.
먼저 데이터 블록이 속한 세그먼트를 확인합니다. 인덱스 데이터의 경우 데이터 손실 없이 완전히 재구축할 수 있지만 테이블 데이터의 경우 손상된 블록의 데이터 손실을 용인해야 합니다.
SQL & gta20 에 대한 col 테이블스페이스 이름
SQL>A 10 에 대한 열 세그먼트 유형
SQL & gta20 의 열 세그먼트명
SQL & gta8 의 열 소유자
SQL> 테이블스페이스 이름, 세그먼트 유형, 소유자, 세그먼트 이름 선택
2 dba_extents 에서
3 여기서 파일 id = & ampfileid
4 와 & ampblock_id 와 block_id+blocks 사이의 blockid-1;
Fileid 값 입력: 4
기존 3: 여기서 파일 id = & ampfileid
신규 3: 여기서 파일 id = 4
Blockid 값을 8702 12 로 입력합니다
넷째:& 블록 id 와 블록 id+블록 사이의 블록 id-1
새 4: 블록 id 와 블록 id+블록 간 8702 12- 1
테이블스페이스 _ 이름 세그먼트 _TY 소유자 세그먼트 _ 이름
----
사용자 테이블 SYS CORRUPT_ME
Sql> select count (*) from corrupt _ me;
Count (*) from corrupt _ me 선택
*
1 행 오류:
ORA-0 1578: ORACLE 데이터 블록이 손상되었습니다 (파일 # 4, 블록 # 8702 12)
ORA-0 1 1 10: 데이터 파일 4:
/s01/oradata/g10r25/datafile/o1_ MF _ users _ Dbf
SQL> 분석 테이블 corrupt_me 검증 구조;
분석 테이블 corrupt_me 검증 구조
*
1 행 오류:
ORA-0 1498: 블록 검사 실패-추적 파일 참조
SQL & gtoradebug setmypid
보고서가 처리되었습니다.
SQL & gtoradebug 추적 파일명
/s01/admin/g10r25/udump/g10r25 _ ora _/kloc/
Dba 에 상대적인 손상된 블록: 0x0 10d4744 (파일 4, 블록 8702 12)
버퍼를 읽는 동안 오류 제목이 발견되었습니다
불량 블록의 데이터:
유형: 6 형식: 2 rdba: 0x000d4744
마지막 변경 SCN: 0x0000.00000000seq: 0xff flg: 0x04
Spare1:0x0spare2: 0x0spare3: 0x0
꼬리의 일관성 값: 0x000006ff
블록 헤더의 값 확인: 0x6323
모듈 체크섬 계산: 0x0
Rdba 다시 읽기: 0x010d4744 (파일 4, 블록 8702 12) 에서 동일한 손상 데이터가 발견되었습니다
* * * 2012-11-08 06: 23:12.564
표 스캔: 섹션: 파일 # 4 블록 # 8702 1 1
손상된 블록 파일 # 4 블록 # 8702 12 건너뛰기
* * * 2012-11-08 06: 23: 36.955
표 스캔: 섹션: 파일 # 4 블록 # 8702 1 1
손상된 블록 파일 # 4 블록 # 8702 12 건너뛰기
Rdba 에서 손상된 블록 건너뛰기: 0x0 10d4744
Ora-0 1023 1 레벨 10 을 사용하여 ORA-0 1578 오류를 방지하고 원본 손상된 블록 테이블을 복제합니다.
SQL & gtalter session set 이벤트' 1023 1 항상 이름 컨텍스트 추적, 레벨10';
세션이 변경되었습니다.
Sql> select count (*) from corrupt _ me;
개수 (*)
--
50857
SQL> 는 corrupt_me_copy 테이블스페이스 사용자를 select * from CORRUPT _ ME 테이블로 생성합니다
테이블이 이미 생성되었습니다.
SQL> 분석 테이블 corrupt_me_copy 검증 구조;
테이블이 분석됩니다.
그 후 새 테이블의 이름을 이전 테이블로 바꾸고 인덱스를 재구축하기만 하면 됩니다.
SQL> 는 corrupt_me 테이블의 이름을 corrupt _ me _ copy1;
양식이 변경되었습니다.
SQL> 는 corrupt_me_copy 테이블의 이름을 corrupt _ me; 로 바꿉니다
양식이 변경되었습니다.
SQL> 색인 재지정