Log transaccional en SQL Server 2005 parte 2

Imagen de JuanPLG

Hola como están ? , bueno, hoy vamos a tratar como monitorear el espacio utilizado del log transaccional en MSSQL2K5. Bien sabemos que podemos monitorearlo desde la Consola Administrativa o SQL Server Management Studio, generando un reporte ya definido en forma standart, actualizándola con la función de la tecla F5, pero este método no resulta demasiado útil para seguir una transacción e ir chequeando cuando llega o supera un umbral determinado en un tiempo determinado, entonces para ello no nos queda otra que sumar una pequeñas líneas al código, las cuales son las siguientes:

--******************************************************************************
DECLARE @tran_log_espacio_usado table(
nombre_db sysname
, tamaño_log_mb float
, tamaño_log_usado_porcentaje float
, estado int
);
INSERT INTO @tran_log_espacio_usado
EXEC('DBCC SQLPERF ( LOGSPACE )') ;
SELECT nombre_db,tamaño_log_mb,tamaño_log_usado_porcentaje,getdate() as diahora FROM @tran_log_espacio_usado where nombre_db = 'mibase'
--******************************************************************************
Cabe aclarar que pueden generar un procedimiento almacenado o stored procedure que reciba parámetros y directamente llamarlo con el parámetro que represente el nombre de la base de datos.

Espero que sirva y les mando un abrazo virtual a todos !

JuanPL

Link's relacionados:
http://www.todosql.com/blog/200706/log-transaccional-en-sql-server-2005-...
http://www.todosql.com/blog/200705/mirror-y-log-transaccional-en-sql-ser...

Comentarios

hola al ejecutar el codigo

hola al ejecutar el codigo me sale un error:
EXECUTE cannot be used as a source when inserting into a table variable.
el error se localiza en la sentencia:
EXEC('DBCC SQLPERF ( LOGSPACE )') ;
A ver si me das una mano

Gracias

Imagen de JuanPLG

Hola xekitor, como estás, a

Hola xekitor, como estás, a continuación te paso un stored procedure donde podrás ejecutar la consulta en cuestión.

CREATE PROCEDURE mide_log
@@base AS VARCHAR(255)
AS
DECLARE @tran_log_space_usage TABLE(
database_name SYSNAME
, log_size_mb FLOAT
, log_space_used_porcentaje FLOAT
, status INT
)
INSERT INTO @tran_log_space_usage
EXEC('DBCC SQLPERF ( LOGSPACE )') ;
SELECT database_name,log_size_mb,log_space_used_porcentaje,GETDATE() AS fecha_hora
FROM @tran_log_space_usage WHERE database_name = @@base

GO

La llamas por query o código de la siguiente manera:

exec mide_log MiBaseUsuario

Espero tus comentarios.

Sl2

Hola JuanPL. Creo que al

Hola JuanPL. Creo que al traducir el script que encontraste te equivocaste en la ultima linea:
database_name = 'nombre_db' debe ser 'nombre_db_name = 'nombre_db'

H.

Imagen de JuanPLG

Hola H. como estás !, sí,

Hola H. como estás !, sí, pero el filtro(ultima línea) debería ser el siguiente:

where nombre_db = 'mibase'

Gracias por tu colaboración, ya fue editado correctamente !.

JuanPL.