SQLクエリを実行することで、SQLサーバーのインスタンスがミラー/プリンシパルにあるかどうかを知ることができるかどうかを知りたいですか? 次に、毎日午前 4 時に 60 ~ 80 のインスタンスでこれを自動的に実行したいですか? 経験上かなり使いやすく以前使っていたpowershellを使ってみたいと思います。Tks
2 に答える
可能です。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
}
DBのミラーリングがまだ損なわれていない場合は、MirroringStatusとそのプライマリの「Synchronized」を受け取り、ステータスは「Normal」と表示され、フェイルオーバーの場合は「Restoring」と表示されます。残念ながら、「ミラー」または「原則」のステータスを単に引き出す方法はありません。これらの値の両方をチェックするロジックを構築する必要があります。復元
それは、ジョブをどのようにセットアップするかによって異なりますか?
すべての情報を収集する 1 つの中央サーバーから実行する場合は、PowerShell を使用する方法として SMO が適しています。KickerCostが提供する回答は機能しますが、複数のサーバーで実行できるようにするには、さらに作業が必要です。彼の例を取り上げて、サーバー名をパイプできるようにする機能に変えるのが最善でしょう。
ネットワーク共有上のスクリプトを指す可能性のあるジョブ (スケジュールされたタスクまたは SQL エージェント ジョブ) を各サーバーでローカルに実行するだけの場合は、その情報をファイル (servername_instance.log など) に出力することができます。 SQLPS を使用したワンライナー:
dir SQLSERVER:\SQL\KRINGER\Default\Databases | Select Name, MirroringStatus
KRINGER は私のサーバー名で、デフォルトのインスタンスがあります。インスタンスに名前を付けた場合は、「デフォルト」をインスタンス名に置き換えます。このコマンドの出力は次のようになります。
Name MirroringStatus
---- ---------------
AdventureWorks None
AdventureWorksDW None
明らかに、ミラーリングに関与するデータベースはありません。