0

SQLクエリを実行することで、SQLサーバーのインスタンスがミラー/プリンシパルにあるかどうかを知ることができるかどうかを知りたいですか? 次に、毎日午前 4 時に 60 ~ 80 のインスタンスでこれを自動的に実行したいですか? 経験上かなり使いやすく以前使っていたpowershellを使ってみたいと思います。Tks

4

2 に答える 2

0

可能です。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」と表示されます。残念ながら、「ミラー」または「原則」のステータスを単に引き出す方法はありません。これらの値の両方をチェックするロジックを構築する必要があります。復元

于 2012-04-20T22:08:25.560 に答える
0

それは、ジョブをどのようにセットアップするかによって異なりますか?

すべての情報を収集する 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

明らかに、ミラーリングに関与するデータベースはありません。

于 2012-04-21T03:19:30.210 に答える