2011-12-07 16 views
37

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

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

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

+1

+1, buena pregunta! –

+0

Como nota al final, el tiempo de restauración también es un problema, especialmente si está realizando pruebas de desarrollo y manuales en bases de datos y las intercambia regularmente – Savage

Respuesta

2

Esto es realmente una pregunta para los sitios ServerFault o DBA, pero la respuesta corta es no, solo puede restaurar el archivo .bak completo (dejando de lado escenarios 'exóticos' como grupos de archivos o restauraciones fragmentarias). No dice qué significa "enorme", pero el espacio en disco es barato; Si agregar más realmente no es una opción, entonces necesita encontrar una forma alternativa de obtener los datos de su fuente externa.

+0

OK. – PhantomDrummer

6

No, el registro de transacciones es obligatorio.

Opción 1:

Una opción puede ser la de restaurarlo a una Máquina que no tienen suficiente espacio en. Luego, en la copia restaurada, cambie el registro a registros masivos o simples, reduzca los registros, realice otra operación de copia de seguridad en esta nueva copia y luego utilícela para restaurar a la máquina de destino con el ahora mucho más pequeño registro de transacciones.

Opción 2:

Como alternativa, tal vez el contacto en 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 una gran cantidad de grandes transacciones) .

Los documentos del comando para reducir el tamaño del archivo de registro son available here.

+0

Gracias. No puedo hacer nada con el archivo .bak, así que supongo que será un caso de encontrar una máquina que tenga suficiente espacio en el disco. – PhantomDrummer

+5

Fuera de interés, ¿alguien sabe * por qué * MS no proporcionó una opción para restaurar solo los datos, no el registro de transacciones? Supongo que la única razón por la cual el TL en el db restaurado es tan grande es que el archivo .bak debe contener una bandera que diga 'por favor reserve tanto espacio para el TL cuando restaure', y no parece haber ningún razón lógica por la cual el proceso de restauración no debería ser capaz, en principio, de ignorar tal bandera. Así que estoy intrigado por qué esa opción no está allí. Para mi archivo .bak particular, el espacio requerido para el TL es de 50GB, aunque invariablemente este es casi en su totalidad espacio vacío. – PhantomDrummer

2

Esto puede no funcionar porque no tiene control sobre la generación del archivo .bak, pero si puede convencer a su fuente para separar la base de datos y luego enviarle una copia del archivo .mdf directamente, puede 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 CREATE DATABASE nombre_base_datos PARA ACOPLAR dependiendo de su versión de servidor sql).

8

El registro de transacciones es una parte integral de la copia de seguridad. No puede decirle a SQL Server que ignore el registro de transacciones, porque no hay forma de, por ejemplo, restaurar y reducir el archivo de registro de transacciones al mismo tiempo. Sin embargo, puede consultar DBA post para hackear el proceso, aunque no se recomienda

Como alternativa, puede probar algunas herramientas de terceros para restaurar, en particular el proceso de restauración virtual que puede ahorrar mucho espacio y tiempo. Consulte ApexSQL Restore, RedGate Virtual Restore, Idera Virtual Database.

responsabilidad: yo trabajo para ApexSQL como ingeniero de soporte

0

Sé que esto es un hilo de edad ahora, pero yo me encontré con ella mientras yo estaba teniendo problemas transaccional de corrupción de registro, aquí es cómo llegué a su alrededor, sin cualquier pérdida de datos (! yo tengo el tiempo aunque)

Aquí es lo que hice: -

Detener el servicio de instancia de SQL Server hacer una copia de la base de datos afectada .mdf archivo y el archivo .ldf (si tiene un archivo .ndf, ¡copie eso también!) - Solo para asegúrese de que siempre puede volver a guardarlos si no funciona para usted.

reinicie el servicio.

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

Cambie de nuevo el tipo de base de datos 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 las bases de datos y haga clic en Restaurar, seleccione el nombre de la base de la lista desplegable, seleccione la última copia de seguridad de la base de datos completa creada (no la tomada del modo simple) y también seleccione la copia de seguridad del registro transaccional.

Haga clic en restaurar y se debe volver a colocar todo sin ningún daño 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.

Cuestiones relacionadas