Restaurar la base de datos de SQL Server sin registro de transacciones


Hay alguna manera, dado un SQL Server 2008 .archivo bak, para restaurar una base de datos de la .archivo bak sin el registro de transacciones?

La razón por la que pregunto es que el tamaño del archivo de registro de transacciones de esta base de datos es enorme, excediendo el espacio en disco que tengo disponible. No tengo ningún interés en el registro de transacciones, y ningún interés en ninguna transacción incompleta, por lo que normalmente simplemente reduciría el registro a cero una vez que haya restaurado la base de datos. Pero eso no ayuda cuando tengo espacio en disco insuficiente para crear el registro en primer lugar. Lo que necesito es una manera de decirle a SQL Server para restaurar solo los datos de la .archivo bak, no el registro de transacciones. ¿Hay alguna manera de hacer eso?

Tenga en cuenta que no tengo control sobre la generación de la .archivo bak - es de una fuente externa. Así que la reducción del registro de transacciones antes de generar el .el archivo bak no es una opción.

Author: PhantomDrummer, 2011-12-07

5 answers

Esta es realmente una pregunta para los sitios ServerFault o DBA, pero la respuesta corta es no, solo puede restaurar el completo .archivo bak (dejando de lado escenarios 'exóticos' como grupos de archivos o restauraciones fragmentadas). No dices lo que significa "enorme", pero el espacio en disco es barato; si agregar más realmente no es una opción, entonces necesitas encontrar una forma alternativa de obtener los datos de tu fuente externa.

 3
Author: Pondlife,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-07 13:33:18

El diario de las transacciones es parte integrante de la copia de seguridad. No puede decirle a SQL Server que ignore el registro de transacciones, porque no hay forma de, digamos, restaurar y reducir el archivo de registro de transacciones al mismo tiempo. Sin embargo, puede echar un vistazo a DBA post para hackear el proceso, aunque no se recomienda en absoluto

Alternativamente, puede probar algunas herramientas de terceros para restaurar, particularmente el proceso de restauración virtual que puede ahorrar mucho espacio y tiempo. Salida ApexSQL Restore, RedGate Virtual Restore, Idera Virtual Database.

Descargo de responsabilidad: Trabajo para ApexSQL como ingeniero de soporte

 8
Author: Marko Krstic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:42:38

No, el diario de las transacciones es obligatorio.

Opción 1:

Una opción puede ser restaurarlo a una máquina en la que tenga suficiente espacio. Luego, en la copia restaurada, cambie el registro a registro masivo o simple, reduzca los registros, haga otra operación de copia de seguridad en esta nueva copia y luego use eso para restaurar en la máquina de destino con el registro de transacciones ahora mucho más pequeño.

Opción 2:

Alternativamente, tal vez el contacto en el la fuente externa podría reducir el registro de transacciones antes de enviarlo a usted (esto puede no funcionar si el registro es grande debido a muchas transacciones grandes).

Los documentos sobre el comando para reducir el archivo de registro están disponibles aquí.

 6
Author: Chris Townsend,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-07 13:49:52

Esto puede no funcionar ya que no tiene control sobre la generación del .bak archivo, pero si usted podría convencer a su fuente para separar la base de datos y luego le enviará una copia de la .archivo mdf directamente, a continuación, podría adjuntar el .mdf y su servidor crearían automáticamente un nuevo archivo de registro de transacciones vacío.

Consulte sp_detach_db y sp_attach_db (o CREE database database_name PARA ADJUNTAR dependiendo de la versión de sql server).

 2
Author: Aaron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-26 21:02:46

Sé que este es un hilo viejo ahora, pero me tropecé con él mientras estaba teniendo problemas de corrupción de registros transaccionales, aquí es cómo lo sorteé sin ninguna pérdida de datos (¡Sin embargo, tuve tiempo de inactividad!)

Esto es lo que hice: {

Detener el servicio de instancias de sql server haga una copia de la base de datos afectada .archivo mdf y .archivo ldf (si tiene un .archivo ndf, copia eso también!)- Solo para estar seguro, siempre puedes devolverlos si no funciona para ti.

Reinicie el Servicio.

Inicie sesión en sql management studio y cambie el modo de base de datos a simple, luego realice una copia de seguridad completa.

Cambie el tipo de base de datos de nuevo y una vez más realice una copia de seguridad completa, luego realice una copia de seguridad de registro transaccional.

Separar la base de datos.

Haga clic derecho en bases de datos y haga clic en restaurar, seleccione el nombre de la base de datos de la lista desplegable, seleccione la copia de seguridad completa de la base de datos creada más tarde (no la tomada del modo simple) y también seleccione la transaccional copia de seguridad del registro.

Haga clic en restaurar y debe volver a ponerlo todo sin ningún tipo de corrupción en los archivos de registro.

Esto funcionó para mí sin errores y mis copias de seguridad funcionaron correctamente después y no hubo más errores de registro transaccional.

 0
Author: Filfish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-27 16:18:10