¿Qué sucede cuando una consulta de base de datos Oracle encuentra el error ora-1578? ORA-01578 "El bloque de datos ORACLE está dañado
El error ORA-01578 es un error físico común de corrupción de bloques defectuosos en Oracle. Después de 10g, es posible recuperar bloques defectuosos en línea mediante copias de seguridad completas y registros de archivo, siempre que la pista donde se encuentra el bloque de datos todavía esté físicamente disponible.
La siguiente es una solución al error ORA-01578 en ausencia de copias de seguridad adecuadas, siempre que se pueda tolerar la pérdida de datos en la ubicación del bloque defectuoso:
SQL & gtexec DBMS_STATS. REUNIR _ BASE DE DATOS _ ESTADÍSTICAS
Inicie DBMS_STATS. GATHER _ DATABASE _ STATS end;
*
Error en la línea 1:
ORA-01578: bloque de datos ORACLE dañado (archivo n.º 4, bloque n.º 870212 )
ORA-01110: archivo de datos 4:
/s 01/oradata/g 10r 25/datafile/o 1_MF_users_7 ch 7d 4 NX_. dbf
ORA-06512: en "Sistema DBMS_STATS", línea 15188
ORA-06512: en "Sistema DBMS_STATS", línea 15530
ORA- 06512: en "System DBMS_STATS", línea 15674
ORA-06512: en "System DBMS_STATS", línea 15638
ORA-06512: en la línea 1
Utilice el Comando RMAN blockreocver para intentar modificar los bloques físicos defectuosos:
RMAN> archivo de datos blockrecover 4 bloques 870212;
La recuperación del bloque comenzó el 8 de noviembre de 2002 65438+ Inicio p>
Canal ORA_DISK_1: Bloques restaurados desde la entrada de respaldo 1
Bloques
handle =/s 01/flash_recovery_area/g 10r 25/backupset /2012_08_06/o 1_MF_nnndf_tag 20120806t 075500_81zd 4 njn_. bkp
tag=tag20120806T075500
Canal ORA_DISK_1: recuperación del bloque completada, tiempo necesario: 00:01:16
Iniciar recuperación de medios
Archivo
La secuencia 467 del hilo de registro 1 ya existe como un archivo en el disco
/s 01/flash _ recovery _ area/g 10r 25/archive log/2012 _ 10 _ 31/ o 1_MF_1_467_893571cm_. arc
Archivos
La secuencia 468 del hilo de registro 1 ya existe como un archivo en el disco
/s 01/flash_recovery_area/g 10r 25/ archive log/2012 _ 10 _ 31/o 1 _ MF _ 1 _ 468 _ 893 PC 84 l _. arc
Archivos
La secuencia 469 del hilo de registro 1 ya existe como un archivo en el disco
/s 01/flash_recovery_area/g 10r 25/ archive log/2012 _ 11 _ 01/o 1 _ MF _ 1 _ 469 _ 894 zs bym _.
arc
Archivos
La secuencia 470 del hilo de registro 1 ya existe como un archivo en el disco
/s 01/flash_recovery_area/g 10r 25/ archive log/2012_11_01/ o1_MF_1_470_896 b944 y_. Arco
4_. Arco
RMAN-00571: = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
RMAN-00569:= = = = = = = = = = = = = = = = = = = = La pila de mensajes de error es la siguiente = = = = = = = = = = = = = = = = = =
RMAN-00571:= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
RMAN-03002: El comando de recuperación de bloque falló el 08/11/2012 06:19:40
RMAN-06053: No se puede hacerlo debido a que faltan registros Realizando recuperación de medios p>
RMAN-06025: No se encontró que se restaurara la copia de seguridad del subproceso de registro 1 seq 466 SCN 27762151 bajo
RMAN-06025: No se encontró que se restaurara el subproceso de registro 1 seq 465 Copia de seguridad de SCN 27762145 bajo
RMAN-06025: Subproceso de registro 1 secuencia 464 secuencia 464 bajo SCN 27762142 no encontrado para ser restaurado
Blockrecover no puede tener éxito debido a la falta de registros de archivo necesarios, por lo que necesitamos encontrar otro forma.
Primero, confirme a qué segmento pertenece el bloque de datos.
Si se trata de datos de índice, se pueden reconstruir completamente sin pérdida de datos, pero si se trata de datos de tabla, debe tolerar la pérdida de datos en bloques defectuosos:
Nombre del espacio de tabla col de SQL y gta20
Tipo de segmento de columna SQL y gta10
Nombre del segmento de columna SQL y gta20
Propietario de la columna SQL y gta8
SQL y gt seleccionar nombre del espacio de tabla, segmento tipo, propietario, nombre del segmento
2 de dba_extents
3 donde file id = &fileid
4 y entre &block_id y block_id + bloques block id-1;
Ingrese el valor de fileid: 4
Antiguo 3: donde file ID = & ampfileid
Nuevo 3: donde file ID = 4
Ingrese el valor de blockid: 870212
Cuatro antiguos: y & amp ID de bloque e ID de bloque + ID de bloque entre bloques - 1
Nuevo 4: 870212-1 entre ID de bloque y ID de bloque + bloque
Nombre del espacio de tabla segmento_TY propietario nombre_del segmento
- - - -
Tabla de usuarios SYS CORRUPT_ME
Recuento de SQL y gtselect ( *) de CORRUPT_ME;
seleccione el recuento (*) de CORRUPT_ME
*
Error en la línea 1:
ORA-01578: bloque de datos ORACLE dañado (archivo n.° 4, bloque n.° 870212)
ORA-01110: archivo de datos 4:
/s 01/oradata/g 10r 25/datafile /o 1 _ MF _ usuarios _ 7 ch 7d 4 NX _. dbf
Tabla de análisis SQL & gt estructura de verificación corrupt_me;
Tabla de análisis estructura de verificación corrupt_me
*
Error en la línea 1:
ORA-01498: Error en la comprobación del bloque: consulte el archivo de seguimiento
SQL y gtoradebug setmypid
Informe procesado.
Nombre del archivo de seguimiento de SQL y gtoradebug
/s 01/admin/g 10r 25/udump/g 10r 25_ora_19749
Relativo al bloque corrupto para dba. : 0x010d4744 (Archivo 4, bloque 870212)
Encabezado de error encontrado al leer el búfer
Datos en bloque incorrecto:
Tipo: 6 formato: 2 rdba: 0x000d4744
Último SCN modificado: 0x 0000.0000000 seq: 0x ff flg: 0x 04
repuesto 1:0x 0 repuesto 2:0x 0 repuesto 3:0x 0
Valor de coherencia en la cola: 0x000006ff
Verifique el valor en el encabezado del bloque: 0x6323
Calcule la suma de comprobación del módulo: 0x0
Releyendo rdba: 0x010d4744 (archivo 4, bloque 870212) encontró los mismos datos corruptos
*** 2012-11-08 06:23:12.564
Escaneo de tabla: Segmento: Archivo#4Bloque#870211
Omitir fragmento dañadoFile#4Block#870212
*** 2012-11-08 06:23:36.955
Escaneo de tabla: Segmento: Archivo#4Block#870211
Omitir bloque dañado Archivo#4Block#870212
Omitir bloque dañado en rdba: 0x010d4744
Utilice 10231 nivel 10 para evitar errores ORA-01578 y copie la tabla de bloques defectuosos original:
Evento de configuración de sesión de SQL & gtalter "10231 contexto de nombre de seguimiento para siempre, nivel 10";
La sesión ha cambiado.
SQL & gtselect count(*) de CORRUPT _ ME;
Count(*)
-
50857
Tabla SQL y gt corrupt_me_copy usuario del espacio de tabla creado como select * from CORRUPT_ME
La tabla ha sido creada.
Tabla de análisis SQL & gt estructura de verificación corrupt_me_copy
La tabla ha sido analizada.
Después de esto, sólo necesita cambiar el nombre de la nueva tabla a la tabla anterior y reconstruir el índice:
SQL> renombrar la tabla corrupt_me a corrupt_me_copy 1;
El La tabla ha sido cambiada.
SQL>Renombrar tabla corrupt_me_copy a corrupt_me;
La tabla ha sido cambiada.
Índice SQL y gtRebuild