2011-10-28 16 views
1

C#で(SQL)データベースの使用サイズを取得する最良の方法は何ですか? データベースの接続文字列にアクセスでき、データベースへのdbadminアクセス権も持っていると仮定します。データベースの使用サイズを取得する方法は?

This場所は、Microsoft.SqlServer.Smo.dllを使用することを提案していますが、System.Data自体のSql *名前空間を使用してこれを行うことが可能かどうかを知りたいと思いますか? (SqlConnection、DbConnectionなど)

+1

'データベースのサイズ' です正確に何を?ファイルサイズ? –

+0

はい、私は.mdfと.ldfファイルを意味します。 – Santhosh

+0

申し訳ありませんが、Microsoft.SqlServer.Smo.dllを使用すると何が問題になりますか?私はMicrosoft.SqlServer.Smo.dllのファンがそれを使用して非常に多くのDBツールを開発しています。 –

答えて

4

sp_spaceusedは、割り当てられた空き領域を返します。 (http://msdn.microsoft.com/en-us/library/ms188776.aspx)、後者を前者から差し引いて、実際に使用されているスペースを取得します。

EXEC sp_spaceused 

SQL Serverのバリアントの場合。

ジャストたDbConnectionを作成し、接続からファイル名を取得することができます付属のデータベースの場合

how to query sql server database size

+0

これは私の場合は最初に3500 MBのデータベースに割り当てられた唯一の合計サイズを返します。しかし、私はわずか12メガバイトを使用して、残りはすべて無料です。どのくらい使っているのか、どのくらい無料であるのか正確に知りたいです。何かご意見は? Sql Server管理スタジオのデータベースを右クリックすると、この空き領域情報が表示されます。 – Santhosh

+0

sp_spaceusedの説明が更新されました。 –

+0

ok;とった;それは今働きます! reader ["unallocated space"]は未割り当て領域を取得します。 – Santhosh

4

このSPROCを実行します。これにより、.ldfファイルも作成でき、System.IO.Fileを使用してファイルサイズを取得できます。

'通常の'サーバー登録dbsの場合、わかりません。

+0

.mdfファイル名を作成し、System.IO.File APIを使用してファイルサイズを取得すると、初期割り当てサイズが取得され、現在使用されているサイズは取得されません。 – Santhosh

4

をあなたはその情報を取得するために、SQL-Serverのクエリを実行できます。

USE <databasename>; 
GO 

/* get the database size, including the log file */ 
exec sp_spaceused; 

/* get the size of the table */ 
exec sp_spaceused <tablename>; 

/* the actual database file sizes */ 
SELECT * FROM sys.database_files; 
+0

SQL Server 2005以降では、代わりに 'SELECT * FROM sys.database_files'を使用することをお勧めします - 古い" sysobjects "と" sysfiles "カタログビューは遅かれ早かれ削除されます.... –

+1

@marc_s:thanksあなたの情報で答えを更新しました。 (私はこのコメントを数時間前に実際のアップデートの後に追加したいと思っていましたが、その後私たちの会社は接続の問題に苦しんでいました。 –

関連する問題