중화사전망 - 서예자전 - Oracle 데이터베이스 쿼리에 ora- 1578 오류가 발생하면 어떻게 됩니까? Ora-01578 "Oracle 블록이 손상되었습니다

Oracle 데이터베이스 쿼리에 ora- 1578 오류가 발생하면 어떻게 됩니까? Ora-01578 "Oracle 블록이 손상되었습니다

스스로 문제를 해결할 수 없다면 MACLEAN 의 전문 데이터베이스 복구 팀에 연락할 수도 있습니다.

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> 색인 재지정