La meilleure façon de find de l'espace libre dans les bases de données SQL Server?

Je veux être capable de find combien d'espace rest dans mes files de database afin que je puisse savoir quand augmenter l'espace afin qu'il ne le fasse pas lorsque l'application est en cours d'exécution.

Je préférerais être en mesure d'écrire ceci afin que je puisse l'exécuter régulièrement sur plusieurs bases de données.

J'ai des bases de données SQL Server 2000 et SQL Server 2005 mais je préférerais pouvoir exécuter le même script sur les deux.

Je peux utiliser Management Studio pour le faire manuellement sur les bases de données 2005, mais pas sur les bases de données 2000.

Essayez sp_spaceused :

Affiche le nombre de lignes, l'espace disque réservé et l'espace disque utilisé par une table, une vue indexée ou une queue Service Broker dans la database actuelle ou affiche l'espace disque réservé et utilisé par la database entière.

Je crois que c'était présent dans SQL Server 2000, mais je ne peux pas le prouver. Cela fonctionne en 2005 et 2008.

Et vous pouvez y jeter un coup d'œil avec sp_helptext , si vous voulez l'attacher à une logique côté server.

EDIT : extension de mon commentaire ci-dessous, et merci au consortingbuteur original à http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359 , voici un moyen de décomposer l'utilisation par file:

 select name , filename , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB , convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)) as SpaceUsedMB , convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) as FreeSpaceMB from dbo.sysfiles a 

Il est possible d'exécuter des scripts SQL pour vérifier l'espace libre manuellement. Mais il est préférable de créer des tâches et d'atsortingbuer des alertes pour informer automatiquement l'administrateur lorsqu'il ne rest plus assez d'espace.

Le meilleur article que j'ai trouvé – Gestion de l'utilisation des données de la database avec Custom Space Alertes (connection SQLServerCentral est nécessaire) peut être suivi même par le personnel de soutien sans beaucoup d'expérience DBA.

Vous pouvez également utiliser un article similaire Surveillez les tailles de file de database avec les travaux SQL Server .

Aussi pour le contrôle manuel, je préfère sp_SOS (peut être téléchargé depuis http://searchsqlserver.techtarget.com/tip/Find-size-of-SQL-Server-tables-and-other-objects-with-stored-procedure )

 EXEC dbo.sp_SOS @OrderBy='T' 

Exécutez la command ci-dessous pour connaître l'espace libre actuellement disponible dans votre SQL Server 2000:

 DECLARE @command VARCHAR(5000) DECLARE @DBInfo TABLE ( ServerName VARCHAR(100), DatabaseName VARCHAR(100), PhysicalFileName NVARCHAR(520), FileSizeMB DECIMAL(10,2), SpaceUsedMB DECIMAL(10,2), FreeSpaceMB DECIMAL(10,2), FreeSpacePct varchar(8) ) SELECT @command = 'Use [' + '?' + '] SELECT @@servername as ServerName, ' + '''' + '?' + '''' + ' AS DatabaseName , filename , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB , convert(decimal(12,2),round(fileproperty(a.name,'+''''+'SpaceUsed'+''''+')/128.000,2)) as SpaceUsedMB , convert(decimal(12,2),round((a.size-fileproperty(a.name,'+''''+'SpaceUsed'+''''+'))/128.000,2)) as FreeSpaceMB, CAST(100 * (CAST (((a.size/128.0 -CAST(FILEPROPERTY(a.name,' + '''' + 'SpaceUsed' + '''' + ' ) AS int)/128.0)/(a.size/128.0)) AS decimal(4,2))) AS varchar(8)) + ' + '''' + '%' + '''' + ' AS FreeSpacePct from dbo.sysfiles a' INSERT INTO @DBInfo EXEC sp_MSForEachDB @command SELECT * from @DBInfo 

Pour moi, le server SQL allouait automatiquement plus d'espace jusqu'à ce que le disque dur soit plein, il suffit donc d'interroger l'espace libre sur le disque dur.

Quels parameters utilisez-vous pour augmenter l'espace d'une database?