自动化所有SQL Server的数据库计数

时间:2018-06-12 20:11:51

标签: sql-server powershell

我需要环境中每个SQL服务器实例(PROD / Non PROD)的数据库计数。

如果我登录到每个SQL Server,那对我来说这是一项非常繁琐的任务,所以我需要自动化它。

是否有任何t-sql或powershell脚本,我可以从中获取一个地方所有服务器的数据库计数的综合报告。

2 个答案:

答案 0 :(得分:0)

您可以使用Azure Functions with Timer计划自动执行您想要的操作。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer 并且您可以使用具有azure函数的存储过程。

答案 1 :(得分:0)

查看SqlServer模块文档,特别是Get-SqlDatabase cmdlet。您可以从文件中导入服务器名称,也可以在数组中定义它们,然后遍历它们。

#get your credential
$credentials = get-credential
#read server names from a file
$servers = get-content "C:\Some\Path\servers.txt"
#use calculated properties
$servers | select-object `
    @{Name='ServerName';Expression={$_}},
    @{Name='DatabaseCount';Expression={
        #force to array to ensure .count exists
        @(Get-SqlInstance -MachineName $_ -Credential $credential | Get-SqlDatabase).Count
    }}

如果您无法安装SqlServer模块,可以使用SMO

进行安装
#load the assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
#read server names from a file
$servers = get-content "C:\Some\Path\servers.txt"
#use calculated properties
$servers | select-object `
    @{Name='ServerName';Expression={$_}},
    @{Name='DatabaseCount';Expression={
        (New-Object Microsoft.SqlServer.Management.SMO.Server $_).Databases.Count
    }}

输出:

ServerName          DatabaseCount
----------          -------------
ServerOne                      12
ServerTwo                      22
ServerThree                     6

请注意,没有错误检查,我假设您在具有服务器和数据库引擎权限的上下文中运行。