Accidentalmente borré manualmente un archivo de datos en Oracle. ¿Qué tengo que hacer?

CÓMO RECUPERAR LOS ARCHIVOS DE DATOS DE ORACLE BORRADOS SIN TIEMPO DE INACTIVO

por Christo Kutrovsky

7 de noviembre de 2007

Publicado en: Pista Técnica

Etiquetas: DBA Lounge, Oracle, recuperación

Entonces, ¿eliminó accidentalmente un archivo de datos de su base de datos de producción? Lo primero, ¡no se asuste! Hay una manera fácil de recuperar archivos de datos eliminados, mientras su base de datos permanezca activa. El siguiente procedimiento funciona en Linux , sin embargo, este método puede funcionar para otras plataformas.

Este procedimiento incluso funcionará si su base de datos está en modo NOARCHIVELOG .

Es posible que haya llegado a esta publicación a través de Google, y en un apuro por obtener la solución de inmediato, así que aquí está.

La recuperación se realiza en dos fases.

Fase 1: recuperación instantánea para evitar errores de Oracle (como ORA-27041 “no se puede abrir el archivo”, ORA-01110, ORA-01116)

  1. Encuentre el PID de DBWRITER para la correcta http://database.ps -ef | grep dbw0_SID_OF_YOUR_DB oracle 12272 1 0 10:55? 00:00:00 ora_dbw0_test oracle 12941 11501 0 12:36 pts / 0 00:00:00 grep dbw0_test
  2. Enumere los identificadores de archivos eliminados para ese DBWRITER http://process.ls -l / proc / _PID_OF_DBWRITER / fd | grep eliminado lrwx—— 1 oracle oinstall 64 oct 15 11:24 10 -> /home/oracle/product/10.2.0.2/dbs/lkinsttest (eliminado) lrwx—— 1 oracle oinstall 64 oct 15 11:24 23 -> / ra5a / orabkp / test / TEST / datafile / o1_mf_lost_3k6xzjpm_.dbf (eliminado)
  3. Cree un enlace simbólico a su archivo de datos con el nombre original. Ln -s / proc / PID_OF_DBWRITER / fd / 23 /ra5a/orabkp/test/TEST/datafile/o1_mf_lost_3k6xzjpm_.dbf Eso es todo. Ahora ya no obtendrá errores. Sin embargo, si su base de datos se cae ahora, perderá ese archivo de datos para siempre.

Fase 2: restaurar el archivo

Base de datos ARCHIVELOG

  1. (Opcional). Emita un punto de control. Esto es para reducir el tiempo de recuperación al poner el archivo en línea, dependiendo de la actividad para ese archivo de datos. Desafortunadamente, no puede poner un punto de verificación en un solo archivo, por lo que el punto de verificación puede tomar algo de tiempo.
  2. Copia de seguridad del archivo de datos con rman. ¿Por qué rman? Es mucho más fácil de lo que piensas. El tiempo de inactividad total es de aproximadamente un segundo para los archivos de datos inactivos, y más para los activos (con escrituras) .rman target / report schema; copia de seguridad como copia del archivo de datos SU_DATOS_DATOS_NÚMERO formato ‘/ ubicación_de_su_base_datos/nuevo_nombre_para_Archivo.dbf’; sql ‘alterar el archivo de datos de la base de datos YOUR_DATAFILE_NUMBER sin conexión’; cambie el archivo de datos YOUR_DATAFILE_NUMBER para copiar; recuperar el archivo de datos YOUR_DATAFILE_NUMBER; sql ‘alterar el archivo de datos de la base de datos YOUR_DATAFILE_NUMBER en línea’; salida;

Base de datos NOARCHIVELOG

  1. Haga que el espacio de tabla con ese archivo de datos sea de solo lectura, seleccione tablespace_name distinto de dba_data_files donde file_name = ‘YOUR_DELETED_FILE’; alter tablespace THE_TABLESPACE de solo lectura;
  2. Copie el archivo del enlace simbólico a un nuevo nombrecp SIM_LINK_DATA_FILE NEW_NAME_FOR_DATAFILE.dbf
  3. ADVERTENCIA: ¡Asegúrese de que su copia esté completa! Luego, bloquee la base de datos./*WAIT FOR COPY !!! * / shutdown abort;
  4. Elimine el enlace simbólico ahora no válido y cambie el nombre del archivo de datos a su nombre original. Tenga cuidado de no eliminar el archivo incorrecto ahora, eso sería un desastre: rm -i SIM_LINK_DATA_FILE mv NEW_NAME_FOR_DATAFILE.dbf SIM_LINK_DATA_FILE
  5. Inicie su base de datos normalmente y haga que el espacio de tabla lea / escriba.

Espero que esto te ayude a salir de una situación desagradable.

Aquí están ambos casos totalmente capturados desde la terminal. Tenga en cuenta que estoy usando archivos administrados por Oracle. Esto no cambia los pasos.

/ ra5a / orabkp / test / TEST / datafile> sqlplus ‘/ as sysdba’ SQL * Plus: Release 10.2.0.2.0 – Producción el lunes 15 de octubre 12:31:55 2007 Copyright (c) 1982, 2005, Oracle. Todos los derechos reservados. Conectado a: Oracle Database 10g Release 10.2.0.2.0 – 64bit Production SQL> SQL> seleccione tablespace_name, file_name from dba_data_files TABLESPACE_NAME FILE_NAME —————————— ————————————— ‘. . . SQL> seleccione tablespace_name, table_name de dba_tables donde owner = ‘TESTING’; TABLESPACE_NAME TABLE_NAME —————————— —————————— LOST LOST_TABLE SQL> conectar pruebas / pruebas SQL> seleccionar cuenta (*) de lost_table; COUNT (*) ———- 50070 SQL> alter system flush buffer_cache; Sistema alterado. SQL> select count (*) from lost_table; COUNT (*) ———- 50070 SQL> Desconectado de Oracle Database 10g versión 10.2.0.2.0 – Producción de 64 bits / ra5a / orabkp / test / TEST / datafile> ls -lF total 1015132 -rw-r—– 1 oracle oinstall 157294592 15 de oct. – 1 oráculo oinstall 503 324 672 15 Oct 12:32 o1_mf_system_3k6xgwd4_.dbf -rw-r– 1 oráculo oinstall 20979712 Oct 15 10:17 o1_mf_temp_3k6xj9xn_.tmp -rw-r– 1 oráculo oinstall 26222592 Oct 15 12:32 o1_mf_undotbs1_3k6xgwg9_.dbf – rw-r—– 1 oracle oinstall 5251072 15 de octubre 12:22 o1_mf_users_3k6xgwhb_.dbf / ra5a / orabkp / test / TEST / datafile> rm o1_mf_lost_3k74mq08_.dbf / ra5a / orabkp / test / testing / test / prueba / SQL : Versión 10.2.0.2.0 – Producción el lunes 15 de octubre 12:35:24 2007 Copyright (c) 1982, 2005, Oracle. Todos los derechos reservados. Conectado a: Oracle Database 10g Release 10.2.0.2.0 – 64bit Production SQL> select count (*) from lost_table; COUNT (*) ———- 50070 SQL> alter system flush buffer_cache; Sistema alterado. SQL> select count (*) from lost_table; seleccione count (*) from lost_table * ERROR en la línea 1: ORA-01116: error al abrir el archivo de base de datos 6 ORA-01110: archivo de datos 6: ‘/ra5a/orabkp/test/TEST/datafile/o1_mf_lost_3k74mq08_.dbf’ ORA-27041 : no se puede abrir el archivo Linux-x86_64 Error: 2: No existe dicho archivo o directorio Información adicional: 3 SQL> SQL> Desconectado de Oracle Database 10g Release 10.2.0.2.0 – Producción de 64 bits / ra5a / orabkp / test / TEST / datafile> ps -ef | grep dbw0_test oracle 12272 1 0 10:55? 00:00:00 ora_dbw0_test oracle 12941 11501 0 12:36 pts / 0 00:00:00 grep dbw0_test / ra5a / orabkp / test / TEST / datafile> ls -l / proc / 12272 / fd | grep eliminado lrwx—— 1 oracle oinstall 64 oct 15 11:24 10 -> /home/oracle/product/10.2.0.2/dbs/lkinsttest (eliminado) lrwx—— 1 oracle oinstall 64 oct 15 12:17 26 -> / ra5a / orabkp / test / TEST / archivo de datos / o1_mf_lost_3k74mq08_.dbf (suprimido) / ra5a / orabkp / prueba / prueba / archivo de datos> ln -s / proc / 12272 / fd / 26 /ra5a/orabkp/test/TEST/datafile/o1_mf_lost_3k74mq08_.dbf / ra5a / orabkp / test / TEST / datafile> ls -lF total 912620 -rw-r—– 1 oracle oinstall 157294592 Oct 15 12:22 o1_mf_example_3k6xjdjw_.dbf lrwxrwxrwx 1 oracle oinstall 17 oct 15 12:37 o1_mf_lost_3c / c / d2 / 2/74 fd / 26 -rw-r—– 1 oracle oinstall 241180672 15 de octubre 12:32 o1_mf_sysaux_3k6xgwdf_.dbf -rw-r—– 1 oracle oinstall 503324672 15 de octubre 12:32 o1_mf_system_3k6xgwd4_.dbf-1w12-rw12 15 10:17 o1_mf_temp_3k6xj9xn_.tmp -rw-r—– 1 oráculo oinstall 26222592 15 de octubre 12:32 o 1_mf_undotbs1_3k6xgwg9_.dbf -rw-r—– 1 oracle oinstall 5251072 15 de octubre 12:22 o1_mf_users_3k6xgwhb_.dbf / ra5a / orabkp / test / TEST / datafile> sqlplus testing / testing SQL * Plus: Release 10.2.0.2 15 de octubre 12:38:18 2007 Copyright (c) 1982, 2005, Oracle. Todos los derechos reservados. Conectado a: Oracle Database 10g Release 10.2.0.2.0 – 64bit Production SQL> select count (*) from lost_table; COUNT (*) ———- 50070 SQL> alter system flush buffer_cache; Sistema alterado. SQL> select count (*) from lost_table; COUNT (*) ———- 50070 SQL> SQL> Desconectado de Oracle Database 10g Release 10.2.0.2.0 – 64bit Production / ra5a / orabkp / test / TEST / datafile> rman target / Recovery Manager: Release 10.2.0.2.0 – Producción el lunes 15 de octubre 12:39:48 2007 Copyright (c) 1982, 2005, Oracle. Todos los derechos reservados. conectado a la base de datos de destino: TEST (DBID = 1934173752) RMAN> esquema de informe; utilizando el archivo de control de la base de datos de destino en lugar del catálogo de recuperación Informe del esquema de la base de datos Lista de archivos de datos permanentes =========================== Tamaño de archivo (MB) Espacio de tabla RB segs Nombre del archivo de datos —- ——– ——————– ——- ———————— 1480 SYSTEM *** /ra5a/orabkp/test/TEST/datafile/o1_mf_system_3k6xgwd4_.dbf 2 25 UNDOTBS1 *** /ra5a/orabkp/test/TEST/datafile/o1_mf_undotbs1_3k6xgwg9_.dbf 3 230 SYSAUX *** /ra5a/orabkp/test/TEST/datafile/o1_mf_sysaux_3k6xgwdf_.dbf5 5 / USERS / *** / test / 5 TEST / datafile / o1_mf_users_3k6xgwhb_.dbf 5 150 EJEMPLO *** /ra5a/orabkp/test/TEST/datafile/o1_mf_example_3k6xjdjw_.dbf 6 100 LOST *** /ra5a/orabkp/test/TESTqda_f_kf_fest_tm_f3_f_tm Archivos ======================= Tamaño del archivo (MB) Espacio de tabla Tamaño máximo (MB) Nombre del archivo temporal —- ——– ——————– —— —– ——————– 1 20 TEMP 32767 /ra5a/orabkp/test/TEST/datafile/o1_mf_temp_3k6xj9xn_.tmp RMAN> copia de seguridad como copia del archivo de datos 6 formato ‘/ ra5a / orabkp / test / TEST / datafile / lost.dbf ‘; Inicio de la copia de seguridad en 2007-10-15 12:40:45 canal asignado: ORA_DISK_1 canal ORA_DISK_1: sid = 154 devtype = DISK channel ORA_DISK_1: inicio del archivo de datos copia de entrada de datos fno = 00006 nombre = / ra5a / orabkp / test / TEST / datafile / o1_mf_lost_3k74mq08_.dbf salida nombre de archivo = / ra5a / orabkp / test / TEST / datafile / lost.dbf tag = TAG20071015T124045 recid = 13 stamp = 636036046 canal ORA_DISK_1: copia de archivo de datos completa, tiempo transcurrido: 00:00:01 Copia de seguridad terminada en 2007: 10:00:01 -15 12:40:46 RMAN> sql ‘alterar archivo de datos de base de datos 6 fuera de línea’; instrucción sql: alterar el archivo de datos de la base de datos 6 fuera de línea RMAN> cambiar el archivo de datos 6 para copiar; el archivo de datos 6 cambió a la copia del archivo de datos “/ra5a/orabkp/test/TEST/datafile/lost.dbf” RMAN> recuperar el archivo de datos 6; Inicio de la recuperación en 15/10/2007 12:41:07 usando el canal ORA_DISK_1 inicio de recuperación de medios recuperación completa de medios, tiempo transcurrido: 00:00:00 Recuperación finalizada en 15/10/2007 12:41:07 RMAN> sql ‘alter database archivo de datos 6 en línea ‘; instrucción sql: modifique el archivo de datos de la base de datos 6 RMAN en línea> Recovery Manager complete. / ra5a / orabkp / test / TEST / datafile> ls -lF total 1015132 -rw-r—– 1 oracle oinstall 104865792 Oct 15 12:41 lost.dbf -rw-r—– 1 oracle oinstall 157294592 Oct 15 12:22 o1_mf_example_3k6xjdjw_ .dbf lrwxrwxrwx 1 oracle oinstall 17 de octubre 15 12:37 o1_mf_lost_3k74mq08_.dbf -> / proc / 12272 / fd / 26 -rw-r—– 1 oracle oinstall 241180672 15 de octubre 12:32 o1_mf_sysaux_3k6-rw-rf-rf oráculo oinstall 503324672 Oct 15 12:38 o1_mf_system_3k6xgwd4_.dbf -rw-r– 1 oráculo oinstall 20979712 Oct 15 10:17 o1_mf_temp_3k6xj9xn_.tmp -rw-r– 1 oráculo oinstall 26222592 Oct 15 12:38 o1_mf_undotbs1_3k6xgwg9_.dbf -rw- r—– 1 oracle oinstall 5251072 15 de octubre 12:22 o1_mf_users_3k6xgwhb_.dbf / ra5a / orabkp / test / TEST / datafile> rm o1_mf_lost_3k74mq08_.dbf / ra5a / orabkp / test / TEST / data testing 10.2.0.2.0 – Producción el lunes 15 de octubre 12:42:03 2007 Copyright (c) 1982, 2005, Oracle. Todos los derechos reservados. Conectado a: Oracle Database 10g Release 10.2.0.2.0 – 64bit Production SQL> select count (*) from lost_table; COUNT (*) ———- 50070 SQL> alter system flush buffer_cache; Sistema alterado. SQL> select count (*) from lost_table; COUNT (*) ———- 50070 SQL> Desconectado de Oracle Database 10g Release 10.2.0.2.0 – Producción de 64 bits

A2A …

Según el comentario que agregó a su pregunta, el archivo de datos es para un espacio de tabla de índice. Las respuestas anteriores a esta pregunta son correctas, ya que si no tiene copias de seguridad (y archivado), no podrá recuperar este archivo de datos. También esencialmente ha tirado a la basura el espacio de tabla. Si no tiene las copias de seguridad y los registros para recuperar el archivo de datos, su única opción es soltar el espacio de tabla porque no será recuperable. La buena noticia es que si solo existieran índices … no ha perdido datos y puede volver a crear los índices una vez que cree un espacio de tabla de índice de reemplazo.

Si tiene RMAN, puede restaurar la última copia del archivo de datos, suponiendo que haya eliminado un archivo en el espacio de tabla de usuarios

CORRER {
SQL ‘ALTERAR TABLESPACE usuarios OFFLINE INMEDIATE’;
RESTAURAR usuarios de TABLESPACE;
RECUPERAR usuarios de TABLESPACE;
SQL ‘ALTERAR TABLESPACE usuarios EN LÍNEA’;
}

Si el archivo de datos se eliminó manualmente del servidor, y si no tiene una copia de seguridad del mismo, no podrá restaurar esos datos.

Una forma de lidiar con esto es desconectar su tablespace. Si eso no funciona, intente desconectar su archivo de datos, puede ver la identificación del archivo de datos desde v $ datafile.

Una vez que se confirma la identificación, puede dar

ALTERAR BASE DE DATOS BASE DE DATOS (datafile_id O datafile_path) OFFLINE;

Si tiene una copia de seguridad, puede restaurarla copiando el mismo archivo de la copia de seguridad en la ubicación respectiva.

¡Espero que esto ayude!

Como otros DBA han señalado, debe restaurar el archivo de datos y REALIZAR UNA RECUPERACIÓN de ese archivo de datos que requerirá los registros de archivo generados desde la última copia de seguridad hasta la actualidad. Sin esa recuperación, no podrá volver a poner el espacio de tabla en línea, así que restaure y recupere VAMOS JUNTOS. Si no puede completar la recuperación y / o no puede restaurar ese archivo de datos / espacio de tablas, entonces deberá decidir cómo proceder dependiendo de lo que se perdió al perder ese archivo de datos / espacio de tablas y si tiene sentido poner el espacio de tablas fuera de línea y mantenga su base de datos en línea (no es una solución si el 99% de sus datos se almacenaron allí), o para restaurar toda su base de datos (nuevamente no es una solución si el contenido del espacio de tabla dañado es el 1% de los datos de la base de datos). Es posible que necesite echar un vistazo a los escenarios de Restauración / Recuperación Avanzada de la documentación de Oracle y determinar cuál se adapta mejor a su situación.

Buena suerte y aprenda de su error adaptando / mejorando sus políticas de respaldo.

Primero verifique si tiene una copia de seguridad válida, si es así, restaure y recupere de eso. Debería ser la forma ideal de hacer esto.

De lo contrario, intenta recuperarlo de los registros de rehacer.

Si nada funciona y si el espacio de tablas no tiene muchos datos, debe volver a crear el espacio de tablas y cargar los datos nuevamente.

¡¡Seguir aprendiendo!!

prmscan es una herramienta de escaneo de fragmentos de bloques oracle. Puede escanear todo el disco y encontrar cualquier bloque de Oracle disponible. Por lo tanto, puede probar esta herramienta que puede recuperar su evento de archivo de datos eliminado por error.

El DBA físico o el DBA pueden obtener una copia de eso si la base de datos se respalda regularmente.