0

コンピューターに存在するSQLサーバーインスタンスのリストを取得し、各インスタンスのデータベースのリストを取得してから、各データベースが使用しているスペースの量を確認する必要があります。

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

4

1 に答える 1

2

少し掘り下げてみたところ、必要な情報を取得できるWMIクラスがついに見つかりました。SQL Serverのインスタンスが3つあるサーバーで、次のクラスのデータが見つかりました

Win32_PerfFormattedData_MSSQLINST2_MSSQLINST2Databases
Win32_PerfFormattedData_MSSQLINST3_MSSQLINST3Databases
Win32_PerfFormattedData_MSSQLSERVER_SQLServerDatabases

私のインスタンスは、、MSSQLINST2です。命名規則がわからなかったので、必要な情報を見つけるためにすべてのクラスを調べなければなりませんでした。とにかく、これが機能しているコードです。多分誰かがそれが役に立つと思うでしょう。MSSQLINST3MSSQLSERVER

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"]);
        }
    }
}
于 2012-04-26T20:46:28.120 に答える