Bonjour la communauté,

Je permets de m'inviter, car dans la même idée j'ai un sujet encore en suspens sur lequel je bloque.

La base (sql-server) étant de volume assez conséquent (plusieurs téraoctets) et les fichiers de cette base sur plusieurs partitions, sql écricrant en mode autogrowth d'un volume à l'autre il n'est pas évident d'identifier sur quel disques ce trouvent les data.

l'idée du besoin, serait de, lister toutes les tables d'un instance, la tailles des tables, et l'emplacement physique de les data (*.mdf, *.ndf, *.log).

J'ai bien deux requêtes, l'un permettant d'afficher les fichiers ldf, mdf, ndf pour la l'instance en question P10DTWH01J et l'autre permettant d'afficher toutes les tables de l’instance et tailles des tables
L'idée serait d'obtenir une requête faisant le job. Cela est-il techniquement possible ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
-- affiche les fichiers ldf, mdf, ndf pour la base P10DTWH01J
 
SELECT name, type_desc, physical_name, CAST(SUM(size * 8) AS FLOAT) / 1024  AS [Taille en Mo]
 
FROM   sys.master_files
 
WHERE name like '%P10DTWH01J%'
 
GROUP  BY name, type_desc, physical_name
 
ORDER BY 3 DESC;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- affiche toutes les tables de l’instance et tailles des tables
 
select TableName = convert(varchar(100),sysobjects.name)
 
    ,TotalRows = max(sysindexes.rows)
 
    ,MbData = (sum(convert(real,sysindexes.dpages)) * spt_values.low / 1048576)
 
from sysobjects join sysindexes on sysobjects.id = sysindexes.id
 
    join master.dbo.spt_values spt_values on spt_values.number = 1 and spt_values.type = 'E'
 
where sysobjects.type = 'U'
 
    and indid in (0,1,255)
 
group by sysobjects.name, spt_values.low
 
order by 3 desc

comment joindre ces deux requêtes, pour avoir la table, la taille, et connaitre son emplacement dans le fichier mdf de l’instance ?
Par avance merci pour votre aide.