Powershell在SQL Server中查找主体/镜像
我想知道是否可以通过运行任何sql查询来知道sql server实例是否在镜像/优先级中?第二,我想每天早上4点在60-80个实例上运行它,这是自动可能的吗?我想使用powershell,以前使用过它,从经验来看很容易使用。这是可能的。您需要使用SMO对象Powershell在SQL Server中查找主体/镜像,sql,tsql,powershell,Sql,Tsql,Powershell,我想知道是否可以通过运行任何sql查询来知道sql server实例是否在镜像/优先级中?第二,我想每天早上4点在60-80个实例上运行它,这是自动可能的吗?我想使用powershell,以前使用过它,从经验来看很容易使用。这是可能的。您需要使用SMO对象 $server = "dwhtest-new" $srv = New-Object Microsoft.SqlServer.Management.Smo.Server $server $db = New-Object Microsoft.Sq
$server = "dwhtest-new"
$srv = New-Object Microsoft.SqlServer.Management.Smo.Server $server
$db = New-Object Microsoft.SqlServer.Management.Smo.Database
$dbs = $srv.Databases
foreach ($db1 in $dbs)
{
$db = New-Object Microsoft.SqlServer.Management.Smo.Database
$db = $db1
$DatabaseName = $db.Name
Write-Host $DatabaseName
Write-Host "MirroringStatus:" $db.MirroringStatus
Write-Host "DBState:" $db.Status
Write-Host
}
如果您的数据库镜像仍然完好无损,您将收到MirroringStatus的“Synchronized”(已同步)及其主镜像,其状态将显示为“Normal”(正常),如果故障切换,则显示为“Restoring”(恢复)。不幸的是,据我所知,没有办法摆脱“镜像”或“原则”的状态。您必须构建逻辑来检查这两个值。
恢复这取决于如何设置作业 如果您想从一台收集所有信息的中央服务器上运行它,那么SMO将是PowerShell的最佳选择。由提供的答案可以工作,但需要更多的工作才能在多台服务器上运行它。最好以他的例子为例,将其转换为一个工作函数,允许通过管道输入服务器名称 如果要在每个服务器上本地运行一个作业(计划任务或SQL代理作业),该作业可能指向网络共享上的脚本,然后可能会将该信息输出到一个文件(如servername_instance.log),您可以使用SQLPS的一行程序:
dir SQLSERVER:\SQL\KRINGER\Default\Databases | Select Name, MirroringStatus
KRINGER是我的服务器名,带有一个默认实例。如果已命名实例,则将“默认”替换为实例名称。
此命令的输出类似于:
Name MirroringStatus
---- ---------------
AdventureWorks None
AdventureWorksDW None
显然,镜像中没有涉及任何数据库