Bonjour,
Bonjour les experts, avant toutes choses je veux juste préciser que je n'y connais absolument rien en mssql.
Il faut bien commencer à un moment
1 - J'ai besoin d'une ligne de commande pour calculer les mdf,ldf,ndf
J'ai trouve ca pour les mdf,ldf sur developpez.com
Code: Tout sélectionner
use myDB
GO
SELECT 8 * SUM(CONVERT(DEC(15),SIZE)) as Taillemdf
FROM dbo.sysfiles
WHERE (status64 = 0)
GO
en enlevant le WHERE status64=0 il me sort taillemdf 5376 (base cree par defaut lors de l'installation du sql server)
Ca veut dire que le total de mes mdf est egual a 5 megaoctets et des poussieres ?
Est ce que cette commande me listera les mdf 1 par 1 ou va me mettre la taille totale ?
Tout d'abord, le code que tu as trouvé sur developpez.com te renvoie uniquement la taille des master datafiles (.mdf). Ceci est du à la clause
WHERE status&64 = 0.
La taille de 5376 que tu obtiens est celle allouée au mdf de la base "myDb" exprimée en Ko.
PS:merci de m'expliquer ce que fait le code histoire que je comprenne un peut mieux les mechanismes de mssql
En gros, chaque base de données SQL Server comporte des tables/vues systèmes qui répertorient toutes les informations les concernant.
Dans ta requête, tu interroges la table dbo.sysfiles qui contient uniquement des informations sur les fichiers de la base de données "myDB".
Si tu souhaites obtenir des informations sur les fichiers d'autres bases, tu es obligé de modifier à chaque fois le contexte à l'aide du "USE <myDB> ".

Voici un code qui te permet de récupérer les stats complètes sur les fichiers de toutes les bases de données présentes sur l'instance.
- Code: Tout sélectionner
--//////////// Création d'une table temporaire pour étendre sysaltfiles \\\\\\\\\\\\--
IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE name like '%tmpsysaltfiles%')
DROP TABLE #tmpsysaltfiles
CREATE TABLE #tmpsysaltfiles (
dbid int, fileid smallint, groupid smallint, size int NOT NULL, maxsize int NOT NULL, growth int NOT NULL,
status int, perf int, name sysname NOT NULL, filename nvarchar(520) NOT NULL, used_pages int, percent_used smallint
)
GO
sp_MSforeachdb 'USE [?];
INSERT INTO #tmpsysaltfiles
SELECT DB_ID(), fileid,groupid,size,maxsize,growth,status,perf,name,filename,
FILEPROPERTY(name,''SpaceUsed'') [used_pages],FILEPROPERTY(name,''SpaceUsed'')*100/size [percent_used]
FROM dbo.sysfiles'
--//////////// Extraction de stats sur les fichiers \\\\\\\\\\\\--
SELECT DB_NAME(dbid) AS [database_name],
CASE status&0x40 WHEN 0 THEN 'Datafile' ELSE 'Transaction Log' END AS [file_type],
name AS [logical_filename],
CONVERT(BIGINT,size)*8/1024 AS [size_in_mb],
CONVERT(BIGINT,used_pages)*8/1024 AS [used_size_in_mb],
CONVERT(BIGINT,maxsize)*8/1024 AS [maxsize_in_mb],
percent_used,
CONVERT(VARCHAR,growth*8/1024) + ' ' + CASE growth&100000 WHEN 0 THEN '%' ELSE 'MB' END [file_growth],
filename [physical_filename]
FROM #tmpsysaltfiles
ORDER BY 1

Le résultat obtenu par cette requête est en pièce jointe.
3 - avez vous un lien me permettant de comprendre la gestion des fichiers sous mssql ?
Voici un lien vers la MSDN Microsoft qui explique rapidement le fonctionnement des fichiers sous SQL Server:
http://msdn.microsoft.com/fr-fr/library/ms179316.aspx