web-dev-qa-db-fra.com

Comment obtenir le nom logique du journal de transaction dans SQL Server 2005

J'essaie d'écrire une routine T-SQL qui réduit le fichier journal de transaction à l'aide de DBCC Shrinkfilefile en fonction du nom logique de la base de données. La fonction DB_NAME() La fonction vous donne le nom logique de la base de données. Y a-t-il un équivalent pour le journal des transactions? Sinon, existe-t-il une autre façon d'obtenir cette information? Le nom par défaut des journaux de transaction est <<Database Name>>_log, mais je préférerais ne pas compter sur cela.

24
DanM

Vous pouvez utiliser:

SELECT name
FROM sys.master_files
WHERE database_id = db_id()
  AND type = 1

Les fichiers journaux ont le type = 1 pour tout database_id et tous les fichiers pour toutes les bases de données se trouvent dans sys.master_files.

ÉDITER:

Je tiens à souligner que vous ne devriez pas CISSEMENT votre journal sur une base régulière. Votre journal des transactions doit être dimensionné de façon appropriée pour l'empêcher de jamais avoir à croître, puis laissé à cette taille. Le journal des transactions ne peut pas être un fichier instantané initialisé et doit être zero'd lorsque l'espace est ajouté, ce qui est une opération séquentielle lente qui dégrade les performances.

40
Jonathan Kehayias

En supposant une base de données standard (par exemple un seul fichier journal), le fichier journal est toujours File_Id = 2. Ceci s'applique même si vous avez plusieurs fichiers de données (ID = 3+ pour NDFS).

Le DBCC Donne également l'ID de fichier aussi. Ainsi, DBCC SHRINKFILE (2...) fonctionnera toujours. Vous ne pouvez pas paramétrer à l'intérieur du DBCC, donc cela évite les SQL DYNANMIQUE. Si vous voulez le nom, utilisez nom_fichier (2).

14
gbn
select Name
from sys.database_files

Génère,

SomeDb_Data  
SomeDb_Log

SQLSERVER 2012

5
SAm