我可以找出数据库列表,并使用SQL Server实例,而无需编写SQL查询的空间?(Can I fi

2019-09-16 14:31发布

我需要得到目前的计算机上的SQL Server实例的列表,获取的每个实例数据库列表,然后确定每个数据库都多少空间占用。

我可以很容易地从注册表抢实例名称,但我没有访问查询表,以获得数据库的名称。 是否有这样做的另一种方式,也许虽然WMI?

Answer 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"]);
        }
    }
}


文章来源: Can I figure out a list of databases and the space used by SQL Server instances without writing SQL queries?