Powershell在SQL服务器中查找主体/镜像

时间:2012-04-10 15:24:22

标签: sql tsql powershell

我想知道是否可以通过运行任何sql查询来了解sql server的实例是否在mirror / prinicipal中?其次我希望每天凌晨4点在60-80个实例上自动运行吗?我想使用powershell之前使用它很容易从经验中使用。 TKS

2 个答案:

答案 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

显然我没有涉及镜像的任何数据库。