none
Recuperar una base de datos que tiene sólo el archivo .mdf RRS feed

  • Pregunta

  • ¿Se puede recuperar una base de datos de SQL con sólo tener el archivo .mdf?, el .ldf no está. No se porque desapareció este último. De todas formas estuve viendo en el foro y me encontre con esto:

    http://social.msdn.microsoft.com/Forums/es-ES/0b472b20-e03a-4774-949a-1796fb7f9c10/sql-server-2008-recuperar-base-de-datos-a-partir-de-solo-el-archivo-mdf?forum=sqlserveres

    y esto:

    http://social.msdn.microsoft.com/Forums/es-ES/bf5bc9c3-7b28-4e7d-a012-6a504bbc0deb/archivo-log-corrupto?forum=sqlserveres

    En este último link hice lo que comentan ahí, crear la base de datos con el mismo nombre y también volvi a escribir las tablas, sólo les puse el nombre, son más de 20, aunque hay que agregar si o si un campo. Detuve el servicio de SQL y pise mi antiguo archivo mibase.mdf con el que había creado (mibase.mdf) desde el Management Studio de SQL 2008 junto al .mibase.ldf. Volví a iniciar SQL y ejecute la siguiente línea como consulta: ALTER DATABASE <nombre base> SET EMERGENCY;

    Y ahora mi base de datos está en rojo y dice Construccion (Emergencia). Ese es el estado que tiene. Ahora no se que más debo hacer para recuperar la base con su tablas y demás. ¿Que más me queda por hacer? O si hay otra forma de recuperar mi base de datos sólo con el archivo Construccion.mdf me gustaría saber.

    Espero su ayuda

    Damian



    • Editado Damian E. _ sábado, 8 de febrero de 2014 1:03
    sábado, 8 de febrero de 2014 1:01

Respuestas

  • Hola.

    Varias cuestiones.

    Sobre el estado de emergencia, es un último recurso que te permitirá leer los datos de tu base de datos para recuperar lo que puedas y llevarlo a una base de datos nueva que crees a tal efecto.

    En tu situación, lo que yo haría sería parar el servicio de SQL Server y copiar el fichero .mdf. Luego pegarlo en otra ubicación. Arrancas SQL Server de nuevo y, empleando la sentencia que Guillermo te dejó, realizar un attach, dándole otro nombre a la base de datos:

    CREATE DATABASE Construccion_2 ON 
    (FILENAME = 'C:\NuevaRuta\Construccion.mdf') 
    FOR ATTACH_REBUILD_LOG;

    Si dicha operación no resulta, nos dices qué errores recibes.

    Por último, recordar que la mejor opción es restaurar la última copia de seguridad que poseas de tu base de datos.



    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    • Marcado como respuesta Damian E. _ martes, 11 de febrero de 2014 14:17
    martes, 11 de febrero de 2014 8:39
    Moderador
  • Hola.

    Puedes modificar el estado de "SINGLE_USER" a "MULTI_USER" de varias formas, por ejemplo con un script:

    use master
    go
    alter database TuBD set MULTI_USER
    go


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    • Marcado como respuesta Damian E. _ miércoles, 12 de febrero de 2014 20:45
    martes, 11 de febrero de 2014 14:57
    Moderador

Todas las respuestas

  • Bueno, parece que nadie sabe como puedo recuperar un base de datos de SQL con sólo el archivo .mdf. O quizás no se puede hacer nada, pero al ver esos links que comente en mi anterior entrada, creía que si. Puede ser que haya realizado algo mal, si alguien me puede decir bien detallado los pasos o donde explican algo así, me ayudaría mucho.

    Ahora veo que la base después de estar como "emergencia", ahora no dice nada esta con el color amarillo, pero con la imagen de una persona. De todas formas no la puedo abrir no aparece el típico "+" para ir explorando las tablas y demás.

    Ayudaaaaaa tenía mas de 20 tablas con muchos datos!!!!


    • Editado Damian E. _ sábado, 8 de febrero de 2014 13:06
    sábado, 8 de febrero de 2014 13:02
  • Hola,

    En principio deberías poder recuperar una base de datos únicamente con el fichero .mdf (Si no está corrupto). 

    http://social.msdn.microsoft.com/Forums/sqlserver/en-US/189be01f-23de-48b0-96cc-8f1292c13c54/attaching-db-without-ldf-file-?forum=sqldisasterrecovery

    Un saludo.

    domingo, 9 de febrero de 2014 11:03
  • Hola. Por favor indícanos que sucede si ejecutas la siguiente instrucción en SQL Server Management Studio:

    CREATE DATABASE <TuBD> ON (FILENAME = '{drive}:\{file path}\<TuBD>.mdf') FOR ATTACH_REBUILD_LOG;

    Gracias y saludos,


    Guillermo Taylor F.
    IT Pro & Xbox gamer
    My blog

    domingo, 9 de febrero de 2014 13:37
  • 1) Con respecto al primer comentario, voy a ver si entiendo ese link que me pasas. Ya vi que está en inglés.

    2) Hola Guillermo, te cuento que tire dicha sentencia:

    CREATE DATABASE Construccion ON (FILENAME = '{drive}:\{file path}\Construccion.mdf') FOR ATTACH_REBUILD_LOG;

    y me pone:

    La base de datos 'Construccion' ya existe. Elija un nombre diferente para la base de datos.

    Igual el mensaje es obvio si se está creando una base que ya existe.

    lunes, 10 de febrero de 2014 21:35
  • Hola.

    Varias cuestiones.

    Sobre el estado de emergencia, es un último recurso que te permitirá leer los datos de tu base de datos para recuperar lo que puedas y llevarlo a una base de datos nueva que crees a tal efecto.

    En tu situación, lo que yo haría sería parar el servicio de SQL Server y copiar el fichero .mdf. Luego pegarlo en otra ubicación. Arrancas SQL Server de nuevo y, empleando la sentencia que Guillermo te dejó, realizar un attach, dándole otro nombre a la base de datos:

    CREATE DATABASE Construccion_2 ON 
    (FILENAME = 'C:\NuevaRuta\Construccion.mdf') 
    FOR ATTACH_REBUILD_LOG;

    Si dicha operación no resulta, nos dices qué errores recibes.

    Por último, recordar que la mejor opción es restaurar la última copia de seguridad que poseas de tu base de datos.



    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    • Marcado como respuesta Damian E. _ martes, 11 de febrero de 2014 14:17
    martes, 11 de febrero de 2014 8:39
    Moderador
  • Bueno Guillermo y Alberto...no lo puedo creer. La sentencia se ejecuto con éxito. Ahora sí puedo ver todas las tablas (50) con todo sus datos y hasta el procedimiento almacenado que había creado. Lo que sí es que al realizar la consulta me puso:

    Error de activación de archivo. Puede que el nombre del archivo físico "C:\MSSQL7\data\Construccion_1.LDF" sea incorrecto.
    Se creó el nuevo archivo de registro 'C:\Documents and Settings\Damian\Escritorio\pendrive\BackupWXP\Construccion_log.LDF'.
    Convirtiendo la base de datos 'Construccion_2' de la versión 611 a la versión actual 655.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 611 a la versión 621.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 621 a la versión 622.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 622 a la versión 625.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 625 a la versión 626.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 626 a la versión 627.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 627 a la versión 628.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 628 a la versión 629.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 629 a la versión 630.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 630 a la versión 631.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 631 a la versión 632.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 632 a la versión 633.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 633 a la versión 634.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 634 a la versión 635.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 635 a la versión 636.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 636 a la versión 637.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 637 a la versión 638.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 638 a la versión 639.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 639 a la versión 640.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 640 a la versión 641.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 641 a la versión 642.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 642 a la versión 643.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 643 a la versión 644.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 644 a la versión 645.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 645 a la versión 646.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 646 a la versión 647.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 647 a la versión 648.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 648 a la versión 649.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 649 a la versión 650.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 650 a la versión 651.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 651 a la versión 652.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 652 a la versión 653.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 653 a la versión 654.
    La base de datos 'Construccion_2' está ejecutando el paso de actualización de la versión 654 a la versión 655.

    Pero al final puso "Consulta ejecutada correctamente." Y yo veo toda la BD bárbaro, la verdad pense que nunca iba a poder recuperarla...ahora a hacer un backup.

    Una última cosa hay una base de datos que aparece en el Management Studio como "NombredeBD (Usuario único)" como puedo hacer para cambiarlo a su estado normal, o sea que sea accedido por cualquier usuario y simultáneamente.

    Gracias por poder lograr que pueda recuperar la BD.

    martes, 11 de febrero de 2014 14:17
  • Hola.

    Puedes modificar el estado de "SINGLE_USER" a "MULTI_USER" de varias formas, por ejemplo con un script:

    use master
    go
    alter database TuBD set MULTI_USER
    go


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    • Marcado como respuesta Damian E. _ miércoles, 12 de febrero de 2014 20:45
    martes, 11 de febrero de 2014 14:57
    Moderador
  • Bueno, gracias nuevamente. El script anduvo perfecto.

    Saludos!!!

    miércoles, 12 de febrero de 2014 20:45