読者です 読者をやめる 読者になる 読者になる

雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

続・SQL Server 高可用性3台ミラー構成

備忘録(Windows)

前回の記事に書いたように、SQL Server 2012以降で「非推奨」となってしまった・・・
SQL Server 高可用性3台ミラー構成 - 雑記&備忘録
しかしやはりしぶとく問い合わせがある。
つーか、とっとと「AlwaysOn」にしてほしいのだが。

◆ フェールオーバー手動実行のTransact-SQLコマンド
use master
go
ALTER DATABASE <データベース名> SET PARTNER FAILOVER

検証はSQL Server 2008 R2で実施した。
この情報、ググるSQL Server 2005のときの情報か、
それとも何か成立する条件があるのか、
ALTER DATABASE SET PARTNER だけ書いてあり、
実行するとSETの前にDB名を入れていないために構文エラーが出てうまくいかない。

◆ 上を用いた自動フェールバックの仕組み

これもAlwaysOnではプロパティで実現できる(らしい)、
優先してプリンシパルの役割を実行するサーバーのサービスが起動したときに、
自動的に再度フェールバックを行い、優先のサーバーをプリンシパルに戻す、
「自動フェールバック」の実現方法。

ミラー側でSQL Server エージェントを起動する
(サーバー再起動にも対応できるように、自動でサービス起動するように設定する)
 ↓
SQL Server Managament Studioでミラー側へアクセスし、
オブジェクトエクスプローラーの「SQL Server エージェント」の下の
「ジョブ」を開き、「データベースミラーリングモニターのジョブ」を右クリック、
プロパティを開く
 ↓
左上のペインで「ステップ」を選択し、
新しくステップを追加する。
コマンドの欄に上のTransact-SQLコマンドを入力(use〜FAILOVERまで全部)し、
ステップ1の次に実行されるようにする
 ↓
これで、1分に1回ミラー側サーバーのSQL Server エージェントがミラー状態を監視し、
問題なければ(問題あっても?)フェールオーバーのTransact-SQLコマンドを
実行するので、自動フェールバックが実現できる

実際に「データベースミラーリングモニターのジョブ」を右クリックして
「履歴の表示」で履歴を見てみると、
優先プリンシパルサーバーのサービスが停止しているときに、
1分に1回ひたすら×アイコンが出ていて見た目は良くない。
何かもっと良い方法があるのかもしれないが、発見できず。

ミラーリング手順過去記事の訂正

約1年前に書いた記事の訂正。
ミラーリング再構築、あるいは構築時にエラー1478が出た時の手順で、
一度ログバックアップチェーンをクリアする方法を載せたが、
トランザクションログもバックアップする方法が本筋のようだ。

バックアップの種類「完全」で取ったあと、
同じファイルへの追記でよいのでバックアップの種類「トランザクション ログ」で取得する。
そのファイルをミラー側へコピーし、
データベースの復元でデバイスを選択したときに
「復元するバックアップセットの選択」ペインで完全とトランザクションを両方選択して
RESTORE WITH NORECOVERYで復元する。

これでエラーが出ずにミラーできる。