Nous travaillons avec une taille de journal des transactions fixe sur nos bases de données, et j'aimerais mettre en place une application pour surveiller les tailles de journaux afin que nous puissions voir quand les choses deviennent trop serrées et nous devons augmenter le journal trn fixe.
Existe-t-il une commande TSQL que je peux exécuter qui me dira la taille actuelle du journal des transactions et la limite fixe du journal des transactions?
J'ai utilisé votre code, mais une erreur s'est produite lors de la conversion en int. "Msg 8115, niveau 16, état 2, ligne 1 Erreur de dépassement arithmétique lors de la conversion de l'expression en type de données int." Donc, partout où il y avait un "* 8", je l'ai changé en * 8.0 et le code fonctionne parfaitement.
SELECT (size * 8.0)/1024.0 AS size_in_mb
, CASE
WHEN max_size = -1
THEN 9999999 -- Unlimited growth, so handle this how you want
ELSE (max_size * 8.0)/1024.0 END AS max_size_in_mb
FROM YOURDBNAMEHERE.sys.database_files
WHERE data_space_id = 0
Une recherche rapide sur Google a révélé ceci:
DBCC SQLPERF ( LOGSPACE )
Pourquoi n'utilisez-vous pas la croissance automatique dans le journal des transactions? Il semble que ce serait une solution plus fiable.
L'utilisation de sys.database_files vous donne uniquement la taille du fichier journal et non la taille du journal qu'il contient. Ce n'est pas très utile si votre fichier est de toute façon de taille fixe. DBCC SQLPERF (LOGSPACE) est un peu vieille école, mais fonctionne bien si vous devez prendre en charge les anciennes versions de SQL Server.
Au lieu de cela, vous pouvez utiliser la table dm_os_performance_counters comme ceci:
SELECT
RTRIM(instance_name) [database],
cntr_value log_size_kb
FROM
sys.dm_os_performance_counters
WHERE
object_name = 'SQLServer:Databases'
AND counter_name = 'Log File(s) Used Size (KB)'
AND instance_name <> '_Total'
C'est sur le dessus de ma tête, donc vous voudrez peut-être revérifier les mathématiques ...
SELECT
(size * 8)/1024.0 AS size_in_mb,
CASE
WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want
ELSE (max_size * 8)/1024.0
END AS max_size_in_mb
FROM
MyDB.sys.database_files
WHERE
data_space_id = 0 -- Log file
Il y a plus que vous pouvez obtenir de cette vue système, comme l'incrément de croissance, si le journal est défini sur la croissance automatique et s'il est configuré pour augmenter d'un montant spécifique ou d'un pourcentage.
HTH!
Si vous avez vraiment besoin de vous en tenir à un journal des transactions de taille fixe, je suggère de le définir à une taille raisonnable, en laissant une marge, puis effectuez l'une des deux opérations suivantes:
OR
En outre, vous pouvez peut-être trouver l'article suivant utile: Comment empêcher le journal des transactions d'une base de données SQL Server de croître de façon inattendue .
Pour SQL 2008 et versions ultérieures, FILEPROPERTY
expose également la quantité d'espace utilisée dans un fichier et est beaucoup moins compliqué que toutes les autres réponses:
select [Name], physical_name [Path], CAST(size AS BIGINT)*8192 [TotalBytes], CAST(FILEPROPERTY(name,'SpaceUsed') AS BIGINT)*8192 [UsedBytes], (case when max_size<0 then -1 else CAST(max_size AS BIGINT)*8192 end) [MaxBytes]
from sys.database_files