我需要环境中每个SQL服务器实例(PROD / Non PROD)的数据库计数。
如果我登录到每个SQL Server,那对我来说这是一项非常繁琐的任务,所以我需要自动化它。
是否有任何t-sql或powershell脚本,我可以从中获取一个地方所有服务器的数据库计数的综合报告。
答案 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
请注意,没有错误检查,我假设您在具有服务器和数据库引擎权限的上下文中运行。