2009-06-15 17 views
54

Oracle tiene comandos SQL que se pueden emitir para que una transacción no se registre. ¿Hay algo similar para SQL Server 2008?Inhabilitar registro de transacciones

Mi caso: necesitamos registros de Tx en los servidores (Dev, QA, Prod), pero tal vez podemos prescindir de ellos en las máquinas de desarrollo.

+1

¿Ha intentado utilizar vistas para sus datos calculados? –

+0

Perdón por secuestrar su pregunta, pero ¿cómo desactivar el registro de transacciones en Oracle para un procedimiento/consulta particular? ¡Gracias! – Victor

+2

@Kaushik es mejor que preguntes esto como si fuera tu propia pregunta. –

Respuesta

91

No puede prescindir de registros de transacciones en SQL Server, bajo ninguna circunstancia. El motor simplemente no funcionará.

PUEDE establecer su modelo de recuperación en SIMPLE en sus máquinas de desarrollo, lo que evitará que el registro de transacciones se desinfle cuando las copias de seguridad de los registros tran no estén terminadas.

ALTER DATABASE MyDB SET RECOVERY SIMPLE; 
+13

Solo una GRAN advertencia: esta respuesta es 100% técnicamente correcta. Pero es únicamente algo que desearía usar en sus máquinas DESARROLLADORES o cuando NO se preocupa de poder hacer una copia de seguridad de sus datos. Consulte http://www.sqlservervideos.com/video/logging-essentials/ y http://www.sqlservervideos.com/video/shrinking-log-files/ para obtener más información y antecedentes. –

39

SQL Server requiere un registro de transacciones para funcionar.

Dicho esto, hay dos modos de operación para el registro de transacciones:

  • simple
  • completa

En modo Full el registro de transacciones sigue creciendo hasta que una copia de seguridad de la base de datos . En Modo simple: el espacio en el registro de transacciones se 'recicla' cada Punto de control.

Muy pocas personas tienen la necesidad de ejecutar sus bases de datos en el modelo de recuperación completo . El único punto en el uso del modelo completo es si desea hacer una copia de seguridad de la base de datos varias veces al día, y hacer una copia de seguridad de toda la base de datos lleva demasiado tiempo, por lo que solo hace una copia de seguridad del registro de transacciones.

El registro de transacciones sigue creciendo todo el día, y usted sigue respaldando. Esa noche usted hace su copia de seguridad completa, y SQL Server luego trunca el registro de transacciones, comienza a reutilizar el espacio asignado en el archivo de registro de transacciones.

Si solo hace copias de seguridad completas de la base de datos, no desea el modo de recuperación completa.

+0

Esto está un poco mal: necesita hacer una copia de seguridad del * log * para (con suerte) detener el crecimiento del registro de transacciones. Por supuesto, si tiene una transacción abierta o una transacción enorme, el registro crecerá porque las asignaciones internas de archivo de registro (VLF) no se pueden reutilizar o necesita más. Es una descripción rápida por cierto, no capítulo y verso – gbn

+1

@gbn No hace una copia de seguridad del registro para evitar que crezca el registro. quiero decir que * haz *, pero ese no es el * punto * de la función. Microsoft no creó un registro de transacciones para jugar el juego * "consumir todo el disco duro porque olvidó hacer una copia de seguridad del registro" *. El * motivo * por el que el registro sigue creciendo (y luego necesita una copia de seguridad para evitar que crezca), es para que pueda hacer una copia de seguridad * solo * del registro. –

1

¿Cuál es su problema con los registros de Tx? ¿Ellos crecen? Luego, simplemente configure truncar en la opción punto de control.

De la documentación de Microsoft:

En SQL Server 2000 o en SQL Server 2005, el modelo de recuperación "simple" es equivalente a "truncar registro en puesto de control" en las versiones anteriores de SQL servidor. Si el registro de transacciones es truncado cada vez que un punto de control es realizado en el servidor, esto impide que utilice el registro para la recuperación de la base de datos . Solo puede usar copias de seguridad completas de la base de datos para restaurar sus datos. Las copias de seguridad del registro de transacciones están desactivadas cuando se utiliza el modelo de recuperación "Simple" .

+1

Bueno, problemas de espacio: algunos desarrolladores tienen máquinas antiguas y podemos prescindir de ellas. Más al punto, ¡tengo curiosidad si esto es posible! Tenía la impresión de que la opción "Truncar el registro en el punto de control" solo se configuraba utilizando el modo de recuperación simple en SQL 2008. ¿Hay alguna otra manera? –

+1

@Tapori, son lo mismo. Lo renombraron en 2000. – zvolkov

34

Hay un tercer modo de recuperación no mencionado anteriormente.El modo de recuperación determina en última instancia qué tan grandes son los archivos LDF y con qué frecuencia se escriben. En los casos en que va a hacer cualquier tipo de inserciones en bloque, debe configurar el DB para que esté en "BULK/LOGGED". Esto hace que los insertos a granel se muevan rápidamente y se puedan cambiar sobre la marcha.

Para ello,

USE master ; 
ALTER DATABASE model SET RECOVERY BULK_LOGGED ; 

volver a cambiarlo:

USE master ; 
ALTER DATABASE model SET RECOVERY FULL ; 

En el espíritu de la adición a la conversación acerca de por qué alguien no querría un LDF, añado esto: Hacemos modelado multidimensional. Básicamente, utilizamos el DB como un gran almacén de variables que se procesan a granel utilizando programas externos. NUNCA NECESITAMOS retrocesos. Si pudiéramos obtener un impulso en el rendimiento al activar TODOS los registros, lo tomaríamos en un abrir y cerrar de ojos.

+1

Gracias por esto. Usamos el DB exactamente de la misma manera. No nos puede importar menos poder retroceder.El puro rendimiento es todo lo que buscamos – Dan

+0

Para este escenario, podría considerar una base de datos diferente, como Mongo (permite deshabilitar registros) o en memoria (redis y otros) – Tim

0

Si esto es solo para máquinas de desarrollo con el fin de ahorrar espacio, simplemente vaya con el modo de recuperación simple y lo hará bien.

En las máquinas de producción, le recomiendo que mantenga las bases de datos en modo de recuperación completa. Esto asegurará que pueda hacer recuperación puntual si es necesario.

Además, tener bases de datos en modo de recuperación completa puede ayudarlo a deshacer actualizaciones accidentales y elimina leyendo el registro de transacciones. Ver a continuación o más detalles.

How can I rollback an UPDATE query in SQL server 2005?

Read the log file (*.LDF) in sql server 2008

Si el espacio es un problema en máquinas de producción a continuación, sólo crear copias de seguridad de registro de transacciones frecuentes.

Cuestiones relacionadas