2012-04-18 3 views
0

コンピュータに存在するSQL Serverインスタンスのリストを取得し、各インスタンスのデータベースの一覧を取得し、各データベースがどれくらいのスペースを占めているかを判断する必要があります。SQLクエリを記述せずにSQL Serverインスタンスが使用するデータベースとスペースの一覧を把握できますか?

私は簡単にレジストリからインスタンス名を取得できますが、データベースの名前を取得するためにテーブルを照会するアクセス権はありません。これを行う別の方法はありますか、おそらくWMIですか?

答えて

1

少し掘り下げた後、最終的に私の必要な情報を得るWMIクラスが見つかりました。私は、SQL Serverの3つのインスタンスを持つサーバーでは、私は

Win32_PerfFormattedData_MSSQLINST2_MSSQLINST2Databases 
Win32_PerfFormattedData_MSSQLINST3_MSSQLINST3Databases 
Win32_PerfFormattedData_MSSQLSERVER_SQLServerDatabases 

私のインスタンスがMSSQLINST2MSSQLINST3MSSQLSERVERある次のクラスで自分のデータを発見しました。私は命名体系を理解できませんでしたので、必要な情報を見つけるためにすべてのクラスを見なければなりませんでした。とにかく、ここで働いているコードです。たぶん、誰かが役に立つと思うかもしれません。

ManagementObjectSearcher sqlInstancesSearcher = new ManagementObjectSearcher(
    new ManagementScope(@"Root\Microsoft\SqlServer\ComputerManagement10"), 
    new WqlObjectQuery("select * from SqlServiceAdvancedProperty where propertyindex = 12"), 
    null); 

foreach (ManagementObject instance in sqlInstancesSearcher.Get()) 
{ 
    string instanceName = instance["ServiceName"].ToString().Replace("$", String.Empty); 
    Console.WriteLine("INSTANCE: " + instanceName); 

    ManagementObjectSearcher classNameSearcher = new ManagementObjectSearcher(
     new ManagementScope(@"root\cimv2"), 
     new WqlObjectQuery("select * from meta_class where __CLASS Like 'Win32_PerfFormattedData_" + instanceName + "%Databases%'"), 
     null); 

    foreach (ManagementClass wmiClass in classNameSearcher.Get()) 
    { 
     string className = wmiClass["__CLASS"].ToString(); 
     string query = "select * from " + className; 

     ManagementObjectSearcher databaseSearcher = new ManagementObjectSearcher(
      new ManagementScope(@"root\cimv2"), 
      new WqlObjectQuery(query), 
      null); 

     foreach (ManagementObject database in databaseSearcher.Get()) 
     { 
      Console.WriteLine(" " + database["Name"]); 
      Console.WriteLine(" Data Files  : " + database["DataFilesSizeKB"]); 
      Console.WriteLine(" Log Files  : " + database["LogFilesSizeKB"]); 
      Console.WriteLine(" Log Files Used : " + database["LogFilesSizeKB"]); 
     } 
    } 
} 
関連する問題