Pregunta

I copia de seguridad una base de datos:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

Y luego trató de restaurarlo:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

Y ahora la base de datos se ha quedado atascado en el estado de restauración.

Algunas personas tienen la teoría de que es porque no había ningún archivo de registro en la copia de seguridad, y que necesitaba ser puesto al día usando:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

Salvo que, por supuesto, falla:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Y exactamente lo que quiere en una situación catastrófica es una restauración que no va a funcionar.


La copia de seguridad contiene un archivo de registro de datos y:

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF
¿Fue útil?

Solución

Es necesario utilizar la opción WITH RECOVERY, con su comando RESTORE base de datos, para llevar su base de datos en línea como parte del proceso de restauración.

Esto es, por supuesto, sólo si no tiene intención de restaurar las copias de seguridad de registro de transacciones, es decir, sólo desea restaurar una copia de seguridad de base de datos y luego ser capaz de acceder a la base de datos.

Su comando debería tener este aspecto:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

Usted puede tener más éxito con el asistente de base de datos de restauración en SQL Server Management Studio. De esta manera se pueden seleccionar los lugares específicos de archivos, la opción de sobreescritura, y la opción con la recuperación.

Otros consejos

tuve esta situación restaurar una base de datos a una instancia de SQL Server 2005 Standard Edition mediante Symantec Backup Exec 11d. Después de terminada la tarea de restauración la base de datos se mantuvo en un estado de "Restauración". No tenía espacio en disco issues-- la base de datos simplemente no salió del estado "Restauración".

Me encontré con la siguiente consulta en la instancia de SQL Server y se encontró que la base de datos inmediatamente se volvió usable:

RESTORE DATABASE <database name> WITH RECOVERY

Así es como se hace:

  1. Detener el servicio (MSSQLSERVER);
  2. renombrar o borrar la base de datos y archivos de registro (C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ Data ...) o donde sea que tenga los archivos;
  3. Iniciar el servicio (MSSQLSERVER);
  4. Eliminar la base de datos con el problema;
  5. Restaurar la base de datos de nuevo.

he tenido un incidente similar con la detención de un registro de envío del servidor secundario. Después de que el comando para eliminar el servidor de transporte de registros y detuvo el trasvase de registros desde el servidor principal de la base de datos en el servidor secundario se quedó atascado en la restauración de estado después del comando

RESTORE DATABASE <database name> WITH RECOVERY

Los mensajes de bases de datos:

  

Restaurar base de datos procesado con éxito 0 páginas en 18.530 segundos   (0.000 MB / seg).

La base de datos era utilizable de nuevo después de esos 18 segundos.

he tenido un problema similar con la restauración utilizando SQL Management Studio. He intentado restaurar una copia de seguridad de la base de datos a una nueva con un nombre diferente. Al principio esto falló y después de la fijación de los nombres de archivo de la nueva base de datos se realizó con éxito - en cualquier caso, el tema que estoy describiendo re-produjo incluso si tengo este derecho desde la primera vez. Por lo tanto, después de la restauración, la base de datos original se quedó con un (Restauración ...) junto a su nombre. Teniendo en cuenta las respuestas del foro anterior (de Bhusan) Intenté funcionar en el editor de consultas en el lado de lo siguiente:

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

que fija el tema. Yo estaba teniendo problemas al principio porque la base de datos del nombre que contenía caracteres especiales. Resolví esto añadiendo comillas dobles -. Comillas simples no funcionarían dando una "sintaxis incorrecta cerca ..." error

Esta fue la solución mínima He tratado de resolver este problema (base de datos atascado en la restauración de estado) y espero que se puede aplicar a más casos.

Está bien, tengo un problema similar y exactamente como lo fue en el caso de Pauk, que fue causado por el servidor que ejecuta sin espacio en disco mientras se restaura y así causó un estado de restauración permanente. Cómo poner fin a este estado sin detener los servicios de SQL Server?

he encontrado una solución:)

Drop database *dbname*

Con la opción de recuperación se utiliza por defecto para la restauración de base de datos / comandos de restauración de registro es ejecutado. Si está atrapado en el proceso de "restauración" se puede traer de vuelta a una base de datos en línea del estado ejecutando:

RESTORE DATABASE YourDB WITH RECOVERY
GO

Si hay una necesidad de restaurar varios archivos, los comandos CLI requiere CON NORECOVERY y CON RECUPERACIÓN respectivamente - sólo el último archivo de comandos debe tener CON RECUPERACIÓN para traer de vuelta la base de datos en línea:

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

Puede utilizar el asistente de SQL Server Management Studio también:

introducir descripción de la imagen aquí

También hay proceso de restauración virtual, sino que tendrá que utilizar soluciones de 3 ª parte. Por lo general, se puede utilizar una copia de seguridad de base de datos como base de datos en línea en vivo. ApexSQL y Idera tiene sus propias soluciones. Revisión por SQL martillo sobre ApexSQL Restaurar . la restauración virtual es una buena solución si estás tratando con un gran número de copias de seguridad. Restaurar proceso es mucho más rápido y también puede ayudar a ahorrar una gran cantidad de espacio en disco. Puede echar un vistazo a infografía aquí por alguna comparación.

Esto puede ser bastante obvio, pero me disparado hasta ahora:

Si usted está tomando una copia de seguridad del final del registro, este problema también puede ser causado por tener esta opción marcada en el SSMS Asistente para restaurar - "Dejar base de datos de origen en el estado de restauración (WITH NORECOVERY)"

introducir descripción de la imagen aquí

Me di cuenta de por qué.

Si el cliente que emitió el comando desconecta RESTORE DATABASE durante la restauración, la restauración será atrapado.

Es curioso que el servidor, cuando se le dijo a restaurar una base de datos mediante una conexión de cliente, no terminar la restauración a menos que el cliente se mantiene conectado todo el tiempo.

el trabajo

este sí:

http: // social. msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

Yo tenía una situación en mi base de datos mostró estado de restauración y no pude ejecutar cualquier consulta y no podía conectar con nuestro software.

Lo que hice para salir de esta situación es la siguiente:

  1. Detener todos los servicios relacionados con SQL de servicios de Windows.

  2. Abrí la carpeta de datos en los archivos LDF y MDF reside en el directorio de SQL, normalmente es como: "C: \ Archivos de programa *********** \ MSSQL \ DATA

  3. A continuación he copiado tanto los archivos LDF y MDF de la base de datos:    [Nombre db] .mdf y [nombre db] _log.ldf

He copiado ambos de estos archivos a otra carpeta.

  1. Entonces empecé a todos los servicios relacionados con SQL (en el paso 1) de nuevo a partir de los servicios de Windows.

  2. Iniciado mi estudio MS SQL Management con el inicio de sesión normal.

  3. Haga clic derecho sobre la base de datos culpable y pulse borrar (para borrar la base de datos en absoluto).

  4. Todos los archivos MDF relacionados con esta base de datos se han ido de carpeta DATA (mencionado en el paso 2) y LDF.

  5. Se creó una nueva base de datos con el mismo nombre (el mismo nombre de la que eliminó en el paso 6 - Base de Datos culpable).

  6. A continuación, [nombre de la base de datos] -> clic derecho -> Tareas -.> Poner fuera de línea

  7. entonces copian tanto los archivos (de la etapa 3) de nuevo a la carpeta de datos (paso 2).

  8. [nombre de la base de datos] -> clic derecho -> Tareas -.> Poner en conexión

Yo tenía una. en mi nombre base de datos y la consulta no funcionó debido a que (diciendo sintaxis incorrecta cerca '') Entonces me di cuenta de que necesito un soporte para el nombre:

RESTORE DATABASE [My.DB.Name] WITH RECOVERY

En mi caso, era suficiente para caída de la base de datos que colgaba en el estado "Restauración ..." con el comando SQL

 drop database <dbname> 

en una ventana de consulta.

A continuación, right-hecho clic en Bases de datos y selecciona Actualizar , que quita la entrada en Management Studio. Después hice una nueva restauración que funcionaba bien (tenga en cuenta que llevándolo fuera de línea no funcionaba, un reinicio del servicio de SQL no funcionaba, un reinicio del servidor no funciona tan bien).

he tenido este problema cuando yo también recibí un error de TCP en el registro de eventos ...

La caída de la base de datos con SQL o clic derecho sobre él en el administrador de "eliminar" Y restaurar de nuevo.

De hecho, me he empezado a hacer esto por defecto. Escritura de la caída de DB, recrear y luego restaurar.

Por defecto, todos los RESTORE DATABASE viene con RECOVERY establecido. Opciones del 'NORECOVERY', básicamente le dice al SQL Server que la base de datos está a la espera de más restaurar archivos (podría ser un archivo DIF y LOG archivo y, podría incluir final del registro archivo de copia de seguridad, si es posible). Las opciones de 'recuperación', terminan todas las transacciones y dejar que la base de datos lista para llevar a cabo las transacciones.

Así que:

  1. Si su base de datos está configurado con SIMPLE modelo de recuperación, sólo se puede realizar una FULL restablecer con la opción NORECOVERY, cuando se tiene un DIF copia de seguridad. No LOG de copia de seguridad están permitidos en SIMPLE base de datos de modelo de recuperación.
  2. En caso contrario, si su base de datos está configurado con FULL o Registro masivo modelo de recuperación, puede realizar una FULL Restaurar seguido por NORECOVERYoption , a continuación, realizar una DIF seguido de NORECOVERY, y, por fin, realice Cerrar sesión restablecer con la opción RECOVERY.

Recuerde, LA ÚLTIMA RESTAURAR CONSULTA DEBE TENER RECOVERY OPCIÓN . Podría ser una manera explícita o no. En termias de T-SQL, la situación:

1.

 USE [master]
    GO
    RESTORE DATABASE Database_name 
    FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, 
    RECOVERY -- This option could be omitted.
    GO

CON opción debe utilizarse con precaución REEMPLAZAR ya que puede conducir a la pérdida de datos

O, si se realiza una copia de seguridad COMPLETA y DIF, se puede utilizar este

   USE [master]
    GO
    RESTORE DATABASE Database_name
      FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
       NOUNLOAD,NORECOVERY
    GO
    RESTORE DATABASE Database_name
      FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1, 
     NOUNLOAD, RECOVERY
    GO

 2. USE [master]
    GO
   -- Perform a Tail-Log backup, if possible. 
   BACKUP LOG Database_name
   GO
   -- Restoring a FULL backup
   RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
     NOUNLOAD,NORECOVERY
  GO 
  -- Restore the last DIFF backup
  RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
     NORECOVERY,NOUNLOAD
  GO
  -- Restore a Log backup
  RESTORE LOG Database_name
    FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
    RECOVERY, NOUNLOAD
  GO

Por supuesto, se puede realizar una restauración con la opción STATS = 10 que le dice al SQL Server para informar cada 10% completado.

Si lo prefiere, puede observar el proceso de restauración o de consulta basada en tiempo real. De la siguiente manera:

USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
        WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO

Espero que esta ayuda.

También puede haber un problema de eliminar una base de datos atascados si se habilita instantánea. Para mí esto funcionó:

  1. En primer lugar me siguió los pasos Tipu Delacablu ( leer algunos mensajes hacia arriba)
  2. ejecutar comandos: drop database [base de datos], que le dará un error que le dice el nombre de la base de datos instantánea
  3. comando ejecutar: base de datos de la gota [base de datos instantánea], y luego ejecutar el comando en el paso 2 de nuevo
  4. .

Ha intentado ejecutar un sólo verificará? Sólo para asegurarse de que es una copia de seguridad de sonido.

http://msdn.microsoft.com/en-us/library /ms188902.aspx

  1. Que comprobar y ejecutar servicio Agente SQL en primer lugar.
  2. El uso de T-SQL siguiente:

    nombre de archivo SELECT     DE master.sys.sysaltfiles     DONDE dbid = DB_ID ( 'nombre_bd');

  3. El uso de T-SQL de forma continua:

    Restaurar base de datos desde 'db_path' DISK = CON REINICIAR, REPLACE;

Espero que esta ayuda!

Todas las opciones basadas CON RECUPERACIÓN no funcionó para mí.

Lo que hizo fue hacer la restauración completa del estudio de la gerencia.

USE [master]
RESTORE DATABASE Sales_SSD
FROM  DISK = N'D:\databaseBackups02\Daily_Sales_20150309_0941.bak' 
WITH  FILE = 1,  
MOVE N'Sales_Data' TO N'C:\Data\SSD\Sales.mdf',  
MOVE N'Sales_Log' TO N'C:\Data\SSD\Sales_1.ldf',  
NOUNLOAD,  REPLACE,  STATS = 5

Yo tenía el mismo problema ... aunque no sé por qué mi base de datos experimentó este problema ya que mi coche no estaba lleno ... Es como si se corrompe o algo así. He intentado todo lo anterior ninguno de ellos totalmente trabajado, pensé en especial la propuesta para detener el servicio y borrar los archivos MDF y LDF trabajarían ... pero todavía congeló durante la restauración?

Terminé resolver esto mediante la eliminación de los archivos como se ha mencionado, pero en lugar de tratar de restaurar la base de datos de nuevo copié sobre .mdf y .ldf fresca y asignaron a estos mediante el asistente del accesorio frontal End. Alivio, funcionó !!

Se tardaba muchísimo en copiar los archivos nuevos como yo estoy usando una máquina virtual ... para copiar y pegar utilizando el portapapeles tomó como una hora en sí por lo que sólo lo recomendaría como un último intento.

He conseguido el MyDbName (Restauración ...) caso debido a SQL Express licencia límite.

En el archivo de registro, encontré esto:

  

CREATE DATABASE o ALTER DATABASE fracasaron porque la resultante   tamaño de la base de datos acumulativos exceda su límite autorizado de 10240 MB   por base de datos.

Así que si usted está tratando de restaurar una base de datos más grande, tiene que cambiar su servidor SQL Express a la edición desarrollador , por ejemplo.

Lo que se fija para mí era

  1. detener la instancia
  2. crear una copia de seguridad de los archivos .mdf y .ldf en la carpeta de datos
  3. Reinicio de la instancia
  4. eliminar la base de datos pegado restaurar
  5. poner los archivos .mdf and.ldf de nuevo en la carpeta de datos
  6. Adjuntar la instancia a la .mdf y .ldf archivos
RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top