続・SQL Server 高可用性3台ミラー構成
前回の記事に書いたように、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で復元する。
これでエラーが出ずにミラーできる。