我想知道是否可以通过运行任何sql查询来了解sql server的实例是否在mirror / prinicipal中?其次我希望每天凌晨4点在60-80个实例上自动运行吗?我想使用powershell之前使用它很容易从经验中使用。 TKS
答案 0 :(得分:1)
有可能。您将需要使用SMO对象。
$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',它的Primary将为状态显示“Normal”,如果它的故障转移,它将显示“Restoring”。不幸的是,我不知道,只是拉出“镜子”或“原则”的状态。你将jsut必须构建逻辑来检查这些值。 还原
答案 1 :(得分:0)
这取决于你将如何设置这份工作?
如果您想从收集所有信息的一个中央服务器运行它,那么SMO就是使用PowerShell的方式。 KickerCost提供的答案可以运行,但需要更多的工作才能为多个服务器运行它。最好把他的例子变成一个工作函数,允许服务器名称被输入。
如果您要在每个服务器上本地运行作业(计划任务或SQL代理作业),这可能指向网络共享上的脚本,那么可能将该信息输出到文件(如servername_instance.log)可以使用带有SQLPS的单行:
dir SQLSERVER:\SQL\KRINGER\Default\Databases | Select Name, MirroringStatus
KRINGER是我的服务器名称,带有默认实例。如果您已命名实例,则将“default”替换为实例名称。 此命令的输出类似于:
Name MirroringStatus
---- ---------------
AdventureWorks None
AdventureWorksDW None
显然我没有涉及镜像的任何数据库。