Reducir archivo LOG

29/06/2005 - 21:34 por Diego M® Romero | Informe spam
Hola
Como hago para reducir el LOG de transacciones de una base de datos, el cual
ha crecido demasiado.
Ya hice lo que me dijeron aquí, pero no logro reducirlo:

Gracias

Diego

Reducir el Log de Transacciones.

Soluciones rápidas al problema.

Hacer Backup del Log y reducir el fichero.

Ejecuta dos o tres veces la instrucción CHECKPOINT. Esto asegurará que todas
las páginas de memoria se han escrito en el fichero de datos.
Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro de
transacciones.
Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero del
log a reducir.
(En la ayuda puedes ampliar información sobre estos dos mandatos).

Eliminar el fichero para que se genere de Nuevo (Esta solución es demasiado
drástica, emplearla solo si falla la anterior):

Pon la base de datos en modo "single user".
Ejecuta CHECKPOINT dos o tres veces. Esto asegurará que todas las páginas de
memoria se han escrito en el fichero de datos.
Asegúrate de que no hay conexiones abiertas a la base de datos, con lo que
no puede haber transacciones a medio ejecutar.
Utiliza sp_detach_db para desconectar dicha base de datos.
Elimina el fichero de log.
Utiliza sp_attach_db para reconectar la base de datos. SQL Server creará un
nuevo fichero de log.
¡¡¡ IMPORTANTE !!!
Si no ejecutas el proceso completamente y en este orden, podrías tener
problemas de consistencia de información en el fichero de datos.
Por ejemplo, si apagas el equipo sin más, SQL Server no ha tenido tiempo de
volcar las páginas de datos de la memoria al disco. Al reiniciar SQL Server,
el problema será corregido utilizando la información contenida en el
registro de transacciones, pero si este no está presente, el archivo de
datos se dará por bueno, y podría ser realmente inconsistente.

Otro detalle importante a tener en cuenta es que el log no se limpia nunca
completamente, ya que siempre hay operaciones internas que SQL Server
necesita mantener en él.


Causas habituales del crecimiento del Log.

Si el log ha crecido mucho es porque SQL Server lo ha necesitado. Esto es
debido a una de las siguientes causas:

Eso es lo que normalmente sucede y se debería ajustar la estrategia de
backup para hacer copias del log más a menudo.
Si el crecimiento del log se debe a una ejecución (insert, update, delete)
que afecta a un gran número de registros, bien por haber lanzado un proceso
de actualización masiva o porque alguien ha ejecutado una consulta mal
formada, que habría que detectarla (y darle un tirón de orejas al que la
haya enviado).
Las copias completas de la base de datos no truncan el registro de
transacciones. Utiliza una estrategia de copia de seguridad que mezcle
copias completas de la base de datos con copias del registro de
transacciones.

Puedes detectar las consultas enviadas a SQL Server con el Profiler.

No debes borrar el registro de transacciones manualmente salvo causa de
fuerza mayor. Lo que debes hacer es diseñar una estrategia de copia de
seguridad que sea acorde con el volumen de transacciones que tiene tu
sistema.

Problemas habituales que impiden reducir el tamaño del Log.

Los pasos para truncar el Transaction log pueden no ser tan obvios como
pueda parecer:

El registro de transacciones está compuesto por al menos dos registros
virtuales (VLF = Virtual Log Files). El truncado del registro de
transacciones se realiza VLF a VLF. Si sólo tienes dos registros virtuales y
te ocupan todo el fichero no podrás truncarlo, aunque dudo que cada VLF
llegue a ocupar mucho espacio. (Para ampliar información sobre este punto,
consulta en la ayuda 'Trucar el Registro de transacciones', encontrarás
información detallada y un gráfico muy explicativo).

Al ejecutar una instrucción DBCC SHRINKFILE solo se le indica a SQL Server
que se quiere reducir el tamaño físico del fichero de LOG. Si el último VLF
está al final del log, aunque el resto del fichero esté vacío, no se podrá
truncar el fichero, ya que SQL Server sólo puede reducirlo recortando por el
final.


Supongamos que hay una estrategia de copia de seguridad que incluye copias
completas y copias del log. En este caso son las copias del log las únicas
que truncan el registro de transacciones, por lo que si se ha ejecutado o no
DBCC SHRINKFILE, el registro no se truncará lógicamente hasta que se haga
una copia de seguridad del log (o se ejecute BACKUP LOG TuBase WITH
TRUNCATE_ONLY).

Sin embargo si el último VLF no está completo, no se podrá truncar, por lo
que se tendrá que forzar su llenado. Al ejecutar DBCC LOGINFO(TuBase) se
obtendrá una lista de VLF, si te fijas en la columna Status, 2 significa que
no está activo o que al menos no es reutilizable. Envía alguna
actualizaciones nulas (UPDATE TuTabla SET Campo1 = Campo1, por ejemplo) y
vuelve a ejecutar el comando DBCC LOGINFO hasta que veas que hay algún otro
VLF con status 2.

Ahora si que se puede ejecutar el BACKUP LOG para truncar el LOG y tras esto
SQL
Server podrá recortar el fichero físicamente eliminando uno o más VLFs.


Enlaces con información de Microsoft sobre el tema.

INF: Cómo reducir el registro de transacciones de SQL Server.


A consultar en los Books On Line y ampliar información:

DBCC SHRINKFILE
DBCC SHRINKDATABASE
DBCC LOGINFO
BACKUP LOG
sp_attach_db
sp_detach_db

Preguntas similare

Leer las respuestas

#1 Maxi
29/06/2005 - 21:44 | Informe spam
Hola, eso funciona muy bien, de todas maneras te lo resumo asi:

use basededatos
Go

checkpoint
backup log base with truncate_only
DBCC SHRINKFILE(archivolog,tamaño)
Go

sp_helpdb basededatos


Salu2
Maxi


"Diego M® Romero" escribió en el mensaje
news:%
Hola
Como hago para reducir el LOG de transacciones de una base de datos, el
cual
ha crecido demasiado.
Ya hice lo que me dijeron aquí, pero no logro reducirlo:

Gracias

Diego

> Reducir el Log de Transacciones.

Soluciones rápidas al problema.

Hacer Backup del Log y reducir el fichero.

Ejecuta dos o tres veces la instrucción CHECKPOINT. Esto asegurará que
todas
las páginas de memoria se han escrito en el fichero de datos.
Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro de
transacciones.
Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero
del
log a reducir.
(En la ayuda puedes ampliar información sobre estos dos mandatos).

Eliminar el fichero para que se genere de Nuevo (Esta solución es
demasiado
drástica, emplearla solo si falla la anterior):

Pon la base de datos en modo "single user".
Ejecuta CHECKPOINT dos o tres veces. Esto asegurará que todas las páginas
de
memoria se han escrito en el fichero de datos.
Asegúrate de que no hay conexiones abiertas a la base de datos, con lo que
no puede haber transacciones a medio ejecutar.
Utiliza sp_detach_db para desconectar dicha base de datos.
Elimina el fichero de log.
Utiliza sp_attach_db para reconectar la base de datos. SQL Server creará
un
nuevo fichero de log.
¡¡¡ IMPORTANTE !!!
Si no ejecutas el proceso completamente y en este orden, podrías tener
problemas de consistencia de información en el fichero de datos.
Por ejemplo, si apagas el equipo sin más, SQL Server no ha tenido tiempo
de
volcar las páginas de datos de la memoria al disco. Al reiniciar SQL
Server,
el problema será corregido utilizando la información contenida en el
registro de transacciones, pero si este no está presente, el archivo de
datos se dará por bueno, y podría ser realmente inconsistente.

Otro detalle importante a tener en cuenta es que el log no se limpia nunca
completamente, ya que siempre hay operaciones internas que SQL Server
necesita mantener en él.


Causas habituales del crecimiento del Log.

Si el log ha crecido mucho es porque SQL Server lo ha necesitado. Esto es
debido a una de las siguientes causas:

Eso es lo que normalmente sucede y se debería ajustar la estrategia de
backup para hacer copias del log más a menudo.
Si el crecimiento del log se debe a una ejecución (insert, update, delete)
que afecta a un gran número de registros, bien por haber lanzado un
proceso
de actualización masiva o porque alguien ha ejecutado una consulta mal
formada, que habría que detectarla (y darle un tirón de orejas al que la
haya enviado).
Las copias completas de la base de datos no truncan el registro de
transacciones. Utiliza una estrategia de copia de seguridad que mezcle
copias completas de la base de datos con copias del registro de
transacciones.

Puedes detectar las consultas enviadas a SQL Server con el Profiler.

No debes borrar el registro de transacciones manualmente salvo causa de
fuerza mayor. Lo que debes hacer es diseñar una estrategia de copia de
seguridad que sea acorde con el volumen de transacciones que tiene tu
sistema.

Problemas habituales que impiden reducir el tamaño del Log.

Los pasos para truncar el Transaction log pueden no ser tan obvios como
pueda parecer:

El registro de transacciones está compuesto por al menos dos registros
virtuales (VLF = Virtual Log Files). El truncado del registro de
transacciones se realiza VLF a VLF. Si sólo tienes dos registros virtuales
y
te ocupan todo el fichero no podrás truncarlo, aunque dudo que cada VLF
llegue a ocupar mucho espacio. (Para ampliar información sobre este punto,
consulta en la ayuda 'Trucar el Registro de transacciones', encontrarás
información detallada y un gráfico muy explicativo).

Al ejecutar una instrucción DBCC SHRINKFILE solo se le indica a SQL Server
que se quiere reducir el tamaño físico del fichero de LOG. Si el último
VLF
está al final del log, aunque el resto del fichero esté vacío, no se podrá
truncar el fichero, ya que SQL Server sólo puede reducirlo recortando por
el
final.


Supongamos que hay una estrategia de copia de seguridad que incluye copias
completas y copias del log. En este caso son las copias del log las únicas
que truncan el registro de transacciones, por lo que si se ha ejecutado o
no
DBCC SHRINKFILE, el registro no se truncará lógicamente hasta que se haga
una copia de seguridad del log (o se ejecute BACKUP LOG TuBase WITH
TRUNCATE_ONLY).

Sin embargo si el último VLF no está completo, no se podrá truncar, por lo
que se tendrá que forzar su llenado. Al ejecutar DBCC LOGINFO(TuBase) se
obtendrá una lista de VLF, si te fijas en la columna Status, 2 significa
que
no está activo o que al menos no es reutilizable. Envía alguna
actualizaciones nulas (UPDATE TuTabla SET Campo1 = Campo1, por ejemplo) y
vuelve a ejecutar el comando DBCC LOGINFO hasta que veas que hay algún
otro
VLF con status 2.

Ahora si que se puede ejecutar el BACKUP LOG para truncar el LOG y tras
esto
SQL
Server podrá recortar el fichero físicamente eliminando uno o más VLFs.


Enlaces con información de Microsoft sobre el tema.

INF: Cómo reducir el registro de transacciones de SQL Server.


A consultar en los Books On Line y ampliar información:

DBCC SHRINKFILE
DBCC SHRINKDATABASE
DBCC LOGINFO
BACKUP LOG
sp_attach_db
sp_detach_db





Respuesta Responder a este mensaje
#2 Alejandro Mesa
29/06/2005 - 22:06 | Informe spam
Reducir el Log de Transacciones.
http://www.helpdna.net/bosqlfaq01.htm


AMB

"Diego M® Romero" wrote:

Hola
Como hago para reducir el LOG de transacciones de una base de datos, el cual
ha crecido demasiado.
Ya hice lo que me dijeron aquí, pero no logro reducirlo:

Gracias

Diego

> Reducir el Log de Transacciones.

Soluciones rápidas al problema.

Hacer Backup del Log y reducir el fichero.

Ejecuta dos o tres veces la instrucción CHECKPOINT. Esto asegurará que todas
las páginas de memoria se han escrito en el fichero de datos.
Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro de
transacciones.
Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero del
log a reducir.
(En la ayuda puedes ampliar información sobre estos dos mandatos).

Eliminar el fichero para que se genere de Nuevo (Esta solución es demasiado
drástica, emplearla solo si falla la anterior):

Pon la base de datos en modo "single user".
Ejecuta CHECKPOINT dos o tres veces. Esto asegurará que todas las páginas de
memoria se han escrito en el fichero de datos.
Asegúrate de que no hay conexiones abiertas a la base de datos, con lo que
no puede haber transacciones a medio ejecutar.
Utiliza sp_detach_db para desconectar dicha base de datos.
Elimina el fichero de log.
Utiliza sp_attach_db para reconectar la base de datos. SQL Server creará un
nuevo fichero de log.
¡¡¡ IMPORTANTE !!!
Si no ejecutas el proceso completamente y en este orden, podrías tener
problemas de consistencia de información en el fichero de datos.
Por ejemplo, si apagas el equipo sin más, SQL Server no ha tenido tiempo de
volcar las páginas de datos de la memoria al disco. Al reiniciar SQL Server,
el problema será corregido utilizando la información contenida en el
registro de transacciones, pero si este no está presente, el archivo de
datos se dará por bueno, y podría ser realmente inconsistente.

Otro detalle importante a tener en cuenta es que el log no se limpia nunca
completamente, ya que siempre hay operaciones internas que SQL Server
necesita mantener en él.


Causas habituales del crecimiento del Log.

Si el log ha crecido mucho es porque SQL Server lo ha necesitado. Esto es
debido a una de las siguientes causas:

Eso es lo que normalmente sucede y se debería ajustar la estrategia de
backup para hacer copias del log más a menudo.
Si el crecimiento del log se debe a una ejecución (insert, update, delete)
que afecta a un gran número de registros, bien por haber lanzado un proceso
de actualización masiva o porque alguien ha ejecutado una consulta mal
formada, que habría que detectarla (y darle un tirón de orejas al que la
haya enviado).
Las copias completas de la base de datos no truncan el registro de
transacciones. Utiliza una estrategia de copia de seguridad que mezcle
copias completas de la base de datos con copias del registro de
transacciones.

Puedes detectar las consultas enviadas a SQL Server con el Profiler.

No debes borrar el registro de transacciones manualmente salvo causa de
fuerza mayor. Lo que debes hacer es diseñar una estrategia de copia de
seguridad que sea acorde con el volumen de transacciones que tiene tu
sistema.

Problemas habituales que impiden reducir el tamaño del Log.

Los pasos para truncar el Transaction log pueden no ser tan obvios como
pueda parecer:

El registro de transacciones está compuesto por al menos dos registros
virtuales (VLF = Virtual Log Files). El truncado del registro de
transacciones se realiza VLF a VLF. Si sólo tienes dos registros virtuales y
te ocupan todo el fichero no podrás truncarlo, aunque dudo que cada VLF
llegue a ocupar mucho espacio. (Para ampliar información sobre este punto,
consulta en la ayuda 'Trucar el Registro de transacciones', encontrarás
información detallada y un gráfico muy explicativo).

Al ejecutar una instrucción DBCC SHRINKFILE solo se le indica a SQL Server
que se quiere reducir el tamaño físico del fichero de LOG. Si el último VLF
está al final del log, aunque el resto del fichero esté vacío, no se podrá
truncar el fichero, ya que SQL Server sólo puede reducirlo recortando por el
final.


Supongamos que hay una estrategia de copia de seguridad que incluye copias
completas y copias del log. En este caso son las copias del log las únicas
que truncan el registro de transacciones, por lo que si se ha ejecutado o no
DBCC SHRINKFILE, el registro no se truncará lógicamente hasta que se haga
una copia de seguridad del log (o se ejecute BACKUP LOG TuBase WITH
TRUNCATE_ONLY).

Sin embargo si el último VLF no está completo, no se podrá truncar, por lo
que se tendrá que forzar su llenado. Al ejecutar DBCC LOGINFO(TuBase) se
obtendrá una lista de VLF, si te fijas en la columna Status, 2 significa que
no está activo o que al menos no es reutilizable. Envía alguna
actualizaciones nulas (UPDATE TuTabla SET Campo1 = Campo1, por ejemplo) y
vuelve a ejecutar el comando DBCC LOGINFO hasta que veas que hay algún otro
VLF con status 2.

Ahora si que se puede ejecutar el BACKUP LOG para truncar el LOG y tras esto
SQL
Server podrá recortar el fichero físicamente eliminando uno o más VLFs.


Enlaces con información de Microsoft sobre el tema.

INF: Cómo reducir el registro de transacciones de SQL Server.


A consultar en los Books On Line y ampliar información:

DBCC SHRINKFILE
DBCC SHRINKDATABASE
DBCC LOGINFO
BACKUP LOG
sp_attach_db
sp_detach_db






Respuesta Responder a este mensaje
#3 Maxi
29/06/2005 - 22:43 | Informe spam
Ale, el texto que puso nuestro amigo es justamente ese articulo. Pero el
indica que no le ha funcionado :(. Alguna otra variable debe estar en el
medio :-S


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
Reducir el Log de Transacciones.
http://www.helpdna.net/bosqlfaq01.htm


AMB

"Diego M® Romero" wrote:

Hola
Como hago para reducir el LOG de transacciones de una base de datos, el
cual
ha crecido demasiado.
Ya hice lo que me dijeron aquí, pero no logro reducirlo:

Gracias

Diego

>> Reducir el Log de Transacciones.

Soluciones rápidas al problema.

Hacer Backup del Log y reducir el fichero.

Ejecuta dos o tres veces la instrucción CHECKPOINT. Esto asegurará que
todas
las páginas de memoria se han escrito en el fichero de datos.
Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro
de
transacciones.
Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero
del
log a reducir.
(En la ayuda puedes ampliar información sobre estos dos mandatos).

Eliminar el fichero para que se genere de Nuevo (Esta solución es
demasiado
drástica, emplearla solo si falla la anterior):

Pon la base de datos en modo "single user".
Ejecuta CHECKPOINT dos o tres veces. Esto asegurará que todas las páginas
de
memoria se han escrito en el fichero de datos.
Asegúrate de que no hay conexiones abiertas a la base de datos, con lo
que
no puede haber transacciones a medio ejecutar.
Utiliza sp_detach_db para desconectar dicha base de datos.
Elimina el fichero de log.
Utiliza sp_attach_db para reconectar la base de datos. SQL Server creará
un
nuevo fichero de log.
¡¡¡ IMPORTANTE !!!
Si no ejecutas el proceso completamente y en este orden, podrías tener
problemas de consistencia de información en el fichero de datos.
Por ejemplo, si apagas el equipo sin más, SQL Server no ha tenido tiempo
de
volcar las páginas de datos de la memoria al disco. Al reiniciar SQL
Server,
el problema será corregido utilizando la información contenida en el
registro de transacciones, pero si este no está presente, el archivo de
datos se dará por bueno, y podría ser realmente inconsistente.

Otro detalle importante a tener en cuenta es que el log no se limpia
nunca
completamente, ya que siempre hay operaciones internas que SQL Server
necesita mantener en él.


Causas habituales del crecimiento del Log.

Si el log ha crecido mucho es porque SQL Server lo ha necesitado. Esto es
debido a una de las siguientes causas:

Eso es lo que normalmente sucede y se debería ajustar la estrategia de
backup para hacer copias del log más a menudo.
Si el crecimiento del log se debe a una ejecución (insert, update,
delete)
que afecta a un gran número de registros, bien por haber lanzado un
proceso
de actualización masiva o porque alguien ha ejecutado una consulta mal
formada, que habría que detectarla (y darle un tirón de orejas al que la
haya enviado).
Las copias completas de la base de datos no truncan el registro de
transacciones. Utiliza una estrategia de copia de seguridad que mezcle
copias completas de la base de datos con copias del registro de
transacciones.

Puedes detectar las consultas enviadas a SQL Server con el Profiler.

No debes borrar el registro de transacciones manualmente salvo causa de
fuerza mayor. Lo que debes hacer es diseñar una estrategia de copia de
seguridad que sea acorde con el volumen de transacciones que tiene tu
sistema.

Problemas habituales que impiden reducir el tamaño del Log.

Los pasos para truncar el Transaction log pueden no ser tan obvios como
pueda parecer:

El registro de transacciones está compuesto por al menos dos registros
virtuales (VLF = Virtual Log Files). El truncado del registro de
transacciones se realiza VLF a VLF. Si sólo tienes dos registros
virtuales y
te ocupan todo el fichero no podrás truncarlo, aunque dudo que cada VLF
llegue a ocupar mucho espacio. (Para ampliar información sobre este
punto,
consulta en la ayuda 'Trucar el Registro de transacciones', encontrarás
información detallada y un gráfico muy explicativo).

Al ejecutar una instrucción DBCC SHRINKFILE solo se le indica a SQL
Server
que se quiere reducir el tamaño físico del fichero de LOG. Si el último
VLF
está al final del log, aunque el resto del fichero esté vacío, no se
podrá
truncar el fichero, ya que SQL Server sólo puede reducirlo recortando por
el
final.


Supongamos que hay una estrategia de copia de seguridad que incluye
copias
completas y copias del log. En este caso son las copias del log las
únicas
que truncan el registro de transacciones, por lo que si se ha ejecutado o
no
DBCC SHRINKFILE, el registro no se truncará lógicamente hasta que se haga
una copia de seguridad del log (o se ejecute BACKUP LOG TuBase WITH
TRUNCATE_ONLY).

Sin embargo si el último VLF no está completo, no se podrá truncar, por
lo
que se tendrá que forzar su llenado. Al ejecutar DBCC LOGINFO(TuBase) se
obtendrá una lista de VLF, si te fijas en la columna Status, 2 significa
que
no está activo o que al menos no es reutilizable. Envía alguna
actualizaciones nulas (UPDATE TuTabla SET Campo1 = Campo1, por ejemplo) y
vuelve a ejecutar el comando DBCC LOGINFO hasta que veas que hay algún
otro
VLF con status 2.

Ahora si que se puede ejecutar el BACKUP LOG para truncar el LOG y tras
esto
SQL
Server podrá recortar el fichero físicamente eliminando uno o más VLFs.


Enlaces con información de Microsoft sobre el tema.

INF: Cómo reducir el registro de transacciones de SQL Server.


A consultar en los Books On Line y ampliar información:

DBCC SHRINKFILE
DBCC SHRINKDATABASE
DBCC LOGINFO
BACKUP LOG
sp_attach_db
sp_detach_db






Respuesta Responder a este mensaje
#4 Diego M® Romero
30/06/2005 - 00:47 | Informe spam
No se que estoy haciendo mal, pero no me funciona lo siguiente:
use dblog
Go
checkpoint
backup log dblog with truncate_only
DBCC SHRINKFILE('sbuLog')
Go

Lo siguiente, es la información de la base de datos:
1.
sbuLog C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\dbLog.mdf
PRIMARY 4544 KB Unlimited 10% data only
sbuLogLog
2 C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\dbLoglog.ldf
NULL 10920 KB Unlimited 10% log only

Agradezco me pueda dar un ejemplo.


Diego

"Maxi" escribió en el mensaje
news:
Hola, eso funciona muy bien, de todas maneras te lo resumo asi:

use basededatos
Go

checkpoint
backup log base with truncate_only
DBCC SHRINKFILE(archivolog,tamaño)
Go

sp_helpdb basededatos


Salu2
Maxi


"Diego M® Romero" escribió en el mensaje
news:%
> Hola
> Como hago para reducir el LOG de transacciones de una base de datos, el
> cual
> ha crecido demasiado.
> Ya hice lo que me dijeron aquí, pero no logro reducirlo:
>
> Gracias
>
> Diego
>
> > > Reducir el Log de Transacciones.
>
> Soluciones rápidas al problema.
>
> Hacer Backup del Log y reducir el fichero.
>
> Ejecuta dos o tres veces la instrucción CHECKPOINT. Esto asegurará que
> todas
> las páginas de memoria se han escrito en el fichero de datos.
> Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro


de
> transacciones.
> Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero
> del
> log a reducir.
> (En la ayuda puedes ampliar información sobre estos dos mandatos).
>
> Eliminar el fichero para que se genere de Nuevo (Esta solución es
> demasiado
> drástica, emplearla solo si falla la anterior):
>
> Pon la base de datos en modo "single user".
> Ejecuta CHECKPOINT dos o tres veces. Esto asegurará que todas las


páginas
> de
> memoria se han escrito en el fichero de datos.
> Asegúrate de que no hay conexiones abiertas a la base de datos, con lo


que
> no puede haber transacciones a medio ejecutar.
> Utiliza sp_detach_db para desconectar dicha base de datos.
> Elimina el fichero de log.
> Utiliza sp_attach_db para reconectar la base de datos. SQL Server creará
> un
> nuevo fichero de log.
> ¡¡¡ IMPORTANTE !!!
> Si no ejecutas el proceso completamente y en este orden, podrías tener
> problemas de consistencia de información en el fichero de datos.
> Por ejemplo, si apagas el equipo sin más, SQL Server no ha tenido tiempo
> de
> volcar las páginas de datos de la memoria al disco. Al reiniciar SQL
> Server,
> el problema será corregido utilizando la información contenida en el
> registro de transacciones, pero si este no está presente, el archivo de
> datos se dará por bueno, y podría ser realmente inconsistente.
>
> Otro detalle importante a tener en cuenta es que el log no se limpia


nunca
> completamente, ya que siempre hay operaciones internas que SQL Server
> necesita mantener en él.
>
>
> Causas habituales del crecimiento del Log.
>
> Si el log ha crecido mucho es porque SQL Server lo ha necesitado. Esto


es
> debido a una de las siguientes causas:
>
> Eso es lo que normalmente sucede y se debería ajustar la estrategia de
> backup para hacer copias del log más a menudo.
> Si el crecimiento del log se debe a una ejecución (insert, update,


delete)
> que afecta a un gran número de registros, bien por haber lanzado un
> proceso
> de actualización masiva o porque alguien ha ejecutado una consulta mal
> formada, que habría que detectarla (y darle un tirón de orejas al que la
> haya enviado).
> Las copias completas de la base de datos no truncan el registro de
> transacciones. Utiliza una estrategia de copia de seguridad que mezcle
> copias completas de la base de datos con copias del registro de
> transacciones.
>
> Puedes detectar las consultas enviadas a SQL Server con el Profiler.
>
> No debes borrar el registro de transacciones manualmente salvo causa de
> fuerza mayor. Lo que debes hacer es diseñar una estrategia de copia de
> seguridad que sea acorde con el volumen de transacciones que tiene tu
> sistema.
>
> Problemas habituales que impiden reducir el tamaño del Log.
>
> Los pasos para truncar el Transaction log pueden no ser tan obvios como
> pueda parecer:
>
> El registro de transacciones está compuesto por al menos dos registros
> virtuales (VLF = Virtual Log Files). El truncado del registro de
> transacciones se realiza VLF a VLF. Si sólo tienes dos registros


virtuales
> y
> te ocupan todo el fichero no podrás truncarlo, aunque dudo que cada VLF
> llegue a ocupar mucho espacio. (Para ampliar información sobre este


punto,
> consulta en la ayuda 'Trucar el Registro de transacciones', encontrarás
> información detallada y un gráfico muy explicativo).
>
> Al ejecutar una instrucción DBCC SHRINKFILE solo se le indica a SQL


Server
> que se quiere reducir el tamaño físico del fichero de LOG. Si el último
> VLF
> está al final del log, aunque el resto del fichero esté vacío, no se


podrá
> truncar el fichero, ya que SQL Server sólo puede reducirlo recortando


por
> el
> final.
>
>
> Supongamos que hay una estrategia de copia de seguridad que incluye


copias
> completas y copias del log. En este caso son las copias del log las


únicas
> que truncan el registro de transacciones, por lo que si se ha ejecutado


o
> no
> DBCC SHRINKFILE, el registro no se truncará lógicamente hasta que se


haga
> una copia de seguridad del log (o se ejecute BACKUP LOG TuBase WITH
> TRUNCATE_ONLY).
>
> Sin embargo si el último VLF no está completo, no se podrá truncar, por


lo
> que se tendrá que forzar su llenado. Al ejecutar DBCC LOGINFO(TuBase) se
> obtendrá una lista de VLF, si te fijas en la columna Status, 2 significa
> que
> no está activo o que al menos no es reutilizable. Envía alguna
> actualizaciones nulas (UPDATE TuTabla SET Campo1 = Campo1, por ejemplo)


y
> vuelve a ejecutar el comando DBCC LOGINFO hasta que veas que hay algún
> otro
> VLF con status 2.
>
> Ahora si que se puede ejecutar el BACKUP LOG para truncar el LOG y tras
> esto
> SQL
> Server podrá recortar el fichero físicamente eliminando uno o más VLFs.
>
>
> Enlaces con información de Microsoft sobre el tema.
>
> INF: Cómo reducir el registro de transacciones de SQL Server.
>
>
> A consultar en los Books On Line y ampliar información:
>
> DBCC SHRINKFILE
> DBCC SHRINKDATABASE
> DBCC LOGINFO
> BACKUP LOG
> sp_attach_db
> sp_detach_db
>
>
>
>
>


Respuesta Responder a este mensaje
#5 Alejandro Mesa
30/06/2005 - 02:43 | Informe spam
Diego,

En el comando "dbcc shrinkfile" debes usar el nombre logico del archivo y no
el fisico. Puedes usar "exec sp_helpdb dblog" para ver el nombre logico del
archivo log de transacciones.

Ejemplo:

use northwind
go

exec sp_helpdb northwind
go

checkpoint
go

backup log northwind with truncate_only
go

dbcc shrinkfile(northwind_log, 1)
go



AMB

"Diego M® Romero" wrote:

No se que estoy haciendo mal, pero no me funciona lo siguiente:
use dblog
Go
checkpoint
backup log dblog with truncate_only
DBCC SHRINKFILE('sbuLog')
Go

Lo siguiente, es la información de la base de datos:
1.
sbuLog C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\dbLog.mdf
PRIMARY 4544 KB Unlimited 10% data only
sbuLogLog
2 C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\dbLoglog.ldf
NULL 10920 KB Unlimited 10% log only

Agradezco me pueda dar un ejemplo.


Diego

"Maxi" escribió en el mensaje
news:
> Hola, eso funciona muy bien, de todas maneras te lo resumo asi:
>
> use basededatos
> Go
>
> checkpoint
> backup log base with truncate_only
> DBCC SHRINKFILE(archivolog,tamaño)
> Go
>
> sp_helpdb basededatos
>
>
> Salu2
> Maxi
>
>
> "Diego M® Romero" escribió en el mensaje
> news:%
> > Hola
> > Como hago para reducir el LOG de transacciones de una base de datos, el
> > cual
> > ha crecido demasiado.
> > Ya hice lo que me dijeron aquí, pero no logro reducirlo:
> >
> > Gracias
> >
> > Diego
> >
> > > > > Reducir el Log de Transacciones.
> >
> > Soluciones rápidas al problema.
> >
> > Hacer Backup del Log y reducir el fichero.
> >
> > Ejecuta dos o tres veces la instrucción CHECKPOINT. Esto asegurará que
> > todas
> > las páginas de memoria se han escrito en el fichero de datos.
> > Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro
de
> > transacciones.
> > Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero
> > del
> > log a reducir.
> > (En la ayuda puedes ampliar información sobre estos dos mandatos).
> >
> > Eliminar el fichero para que se genere de Nuevo (Esta solución es
> > demasiado
> > drástica, emplearla solo si falla la anterior):
> >
> > Pon la base de datos en modo "single user".
> > Ejecuta CHECKPOINT dos o tres veces. Esto asegurará que todas las
páginas
> > de
> > memoria se han escrito en el fichero de datos.
> > Asegúrate de que no hay conexiones abiertas a la base de datos, con lo
que
> > no puede haber transacciones a medio ejecutar.
> > Utiliza sp_detach_db para desconectar dicha base de datos.
> > Elimina el fichero de log.
> > Utiliza sp_attach_db para reconectar la base de datos. SQL Server creará
> > un
> > nuevo fichero de log.
> > ¡¡¡ IMPORTANTE !!!
> > Si no ejecutas el proceso completamente y en este orden, podrías tener
> > problemas de consistencia de información en el fichero de datos.
> > Por ejemplo, si apagas el equipo sin más, SQL Server no ha tenido tiempo
> > de
> > volcar las páginas de datos de la memoria al disco. Al reiniciar SQL
> > Server,
> > el problema será corregido utilizando la información contenida en el
> > registro de transacciones, pero si este no está presente, el archivo de
> > datos se dará por bueno, y podría ser realmente inconsistente.
> >
> > Otro detalle importante a tener en cuenta es que el log no se limpia
nunca
> > completamente, ya que siempre hay operaciones internas que SQL Server
> > necesita mantener en él.
> >
> >
> > Causas habituales del crecimiento del Log.
> >
> > Si el log ha crecido mucho es porque SQL Server lo ha necesitado. Esto
es
> > debido a una de las siguientes causas:
> >
> > Eso es lo que normalmente sucede y se debería ajustar la estrategia de
> > backup para hacer copias del log más a menudo.
> > Si el crecimiento del log se debe a una ejecución (insert, update,
delete)
> > que afecta a un gran número de registros, bien por haber lanzado un
> > proceso
> > de actualización masiva o porque alguien ha ejecutado una consulta mal
> > formada, que habría que detectarla (y darle un tirón de orejas al que la
> > haya enviado).
> > Las copias completas de la base de datos no truncan el registro de
> > transacciones. Utiliza una estrategia de copia de seguridad que mezcle
> > copias completas de la base de datos con copias del registro de
> > transacciones.
> >
> > Puedes detectar las consultas enviadas a SQL Server con el Profiler.
> >
> > No debes borrar el registro de transacciones manualmente salvo causa de
> > fuerza mayor. Lo que debes hacer es diseñar una estrategia de copia de
> > seguridad que sea acorde con el volumen de transacciones que tiene tu
> > sistema.
> >
> > Problemas habituales que impiden reducir el tamaño del Log.
> >
> > Los pasos para truncar el Transaction log pueden no ser tan obvios como
> > pueda parecer:
> >
> > El registro de transacciones está compuesto por al menos dos registros
> > virtuales (VLF = Virtual Log Files). El truncado del registro de
> > transacciones se realiza VLF a VLF. Si sólo tienes dos registros
virtuales
> > y
> > te ocupan todo el fichero no podrás truncarlo, aunque dudo que cada VLF
> > llegue a ocupar mucho espacio. (Para ampliar información sobre este
punto,
> > consulta en la ayuda 'Trucar el Registro de transacciones', encontrarás
> > información detallada y un gráfico muy explicativo).
> >
> > Al ejecutar una instrucción DBCC SHRINKFILE solo se le indica a SQL
Server
> > que se quiere reducir el tamaño físico del fichero de LOG. Si el último
> > VLF
> > está al final del log, aunque el resto del fichero esté vacío, no se
podrá
> > truncar el fichero, ya que SQL Server sólo puede reducirlo recortando
por
> > el
> > final.
> >
> >
> > Supongamos que hay una estrategia de copia de seguridad que incluye
copias
> > completas y copias del log. En este caso son las copias del log las
únicas
> > que truncan el registro de transacciones, por lo que si se ha ejecutado
o
> > no
> > DBCC SHRINKFILE, el registro no se truncará lógicamente hasta que se
haga
> > una copia de seguridad del log (o se ejecute BACKUP LOG TuBase WITH
> > TRUNCATE_ONLY).
> >
> > Sin embargo si el último VLF no está completo, no se podrá truncar, por
lo
> > que se tendrá que forzar su llenado. Al ejecutar DBCC LOGINFO(TuBase) se
> > obtendrá una lista de VLF, si te fijas en la columna Status, 2 significa
> > que
> > no está activo o que al menos no es reutilizable. Envía alguna
> > actualizaciones nulas (UPDATE TuTabla SET Campo1 = Campo1, por ejemplo)
y
> > vuelve a ejecutar el comando DBCC LOGINFO hasta que veas que hay algún
> > otro
> > VLF con status 2.
> >
> > Ahora si que se puede ejecutar el BACKUP LOG para truncar el LOG y tras
> > esto
> > SQL
> > Server podrá recortar el fichero físicamente eliminando uno o más VLFs.
> >
> >
> > Enlaces con información de Microsoft sobre el tema.
> >
> > INF: Cómo reducir el registro de transacciones de SQL Server.
> >
> >
> > A consultar en los Books On Line y ampliar información:
> >
> > DBCC SHRINKFILE
> > DBCC SHRINKDATABASE
> > DBCC LOGINFO
> > BACKUP LOG
> > sp_attach_db
> > sp_detach_db
> >
> >
> >
> >
> >
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida