2017年5月28日日曜日

【SQL Server】ミラーリング構築

◆メニュー
 【SQL Server】開発環境構築(ER図作成にSSMSを使用)

■SQL Server2012(試用版)でミラーリングを構築
●注意事項
  • 今回は監視サーバは使用しないが、手順はさほど変わらない。
  • 以下の手順ではANONYMOUSなるユーザに権限を与えているので注意!!誰でもミラーリングのポートにアクセスできるのかな?要調査&変更。
  • またミラーリングより後に、AlwaysOnが追加されて、置き換えられつつある。
●事前準備
1. Server1(以下ではwin10x64svr1)にOSインストール
2. Server1にSQLServer2012をインストール
3. Server1にwk(適宜変更すること)というデータベースを作成
4. Server2にOSインストール
5. Server2にSQLServer2012をインストール
6. Server2にwk(適宜変更すること)というデータベースを作成(Server2側のデータベースは作っておかなくても大丈夫かも)

●手順
◆以下Server1の作業
1. Server1で復旧モデルを「完全」にする
1.1. ssmsを起動し、ログイン
1.2. wkを右クリックし、プロパティを選択
1.3 復旧モデルを「完全」にして、OKボタン押下
2.  Server1で完全バックアップ取得
2.1. wkを右クリックし、タスク-バックアップを選択(データベースがある程度大きい場合は圧縮オプションをつけると容量が小さくなるかも、容量が小さくなれば、後でServer2へコピーする際の時間も早くなるはず)
2.2. 削除ボタン&追加ボタンを押下
2.3. バックアップ先をc:\bk\wk.bak(適宜読み替え)に変更し、OKボタン押下
2.4. OKボタン押下

3. Server1でトランザクションバックアップ取得
3.1. wkを右クリックし、タスク-バックアップを選択
3.2. 削除ボタン&追加ボタンを押下(データベースがある程度大きい場合は圧縮オプションをつけると容量が小さくなるかも、容量が小さくなれば、後でServer2へコピーする際の時間も早くなるはず)
3.3. バックアップ先をc:\bk\wk.trn(適宜読み替え)に変更し、OKボタン押下
3.4. OKボタン押下

4. ファイル共有またはリモートデスクトップで、wk.bak、wk.trnをServer2へコピー。

◆以下Server2の作業
5. バックアップの復元
5.1. wkを右クリックし、タスク- 復元-データベースを選択(wkデータベースは事前に作成しなくても復元できるかも)
5.2. デバイスを選択し、...ボタンを押下
5.3. 追加ボタン押下
5.4. Server1からServer2へコピーしたwk.bakを指定
5.5. OKボタン押下
5.6. オプションタブを選択
5.7. 以下のように設定し、OKボタン押下
「既存のデータベースを上書きする」をチェック
「RESTORE WITH NORECOVERY」を選択 ★★これは必須★★
「復元の前にログ末尾のバックアップを実行する」を解除
 他に接続があった場合は、以下のように失敗するので、「接続先データベースへの既存の接続を閉じる」を選択 しOKボタン押下
 5.8. OKボタン押下
6. トランザクションログ復元
6.1. wkを右クリックし、タスク-復元-トランザクションログを選択
6.2. 「ファイルまたはテープから」 を選択し、...ボタン押下
6.3. 追加ボタン押下
 6.4. Server1からServer2へコピーしたwk.trnを指定し、OKボタン押下
6.5. OKボタン押下
6.6. オプションタブ選択し、真ん中(RESTORE WITH NORECOVERY )を選択し、OKボタン押下 ★★これは必須★★
6.7. OKボタン押下

◆以下Server1・Server2の操作
7. ファイアウォールのポートを解除
7.1. Server1でWinキー押下し、fireを入力し、「セキュリティが強化されたWindowsファイアウォール」を選択

7.2. 詳細設定を選択
7.3. ポートを選択し、次へを押下
7.4. TCP、特定のローカルポートを選択し、「1433, 5022, 7022」を入力し、次へを押下(7022は不要かも)

7.5. 接続を許可するを選択し、次へを押下
7.6. 次へ押下
7.7. SQLServerMirror(適宜名前を変更する)を入力し、完了を押下
7.8. Server2に対して、7.1.~7.7.を実施。

◆以下Server1の操作
8.  ミラーリング構築
8.1. Server1でwkを右クリックし、タスク-ミラーを選択
8.2. セキュリティの構成ボタンを押下
8.3. 次へを押下
8.4. 今回は監視サーバによるフェールオーバーを使わないので、「いいえ」を押下。
8.5.  次へを押下
8.6. 接続ボタンを押下
8.7. Server2のホスト名を指定し、接続ボタンを押下(ここで失敗する場合、ファイアウォールやホスト名、ネットワーク関連で設定不備があると思われる、自分の場合ファイアウォールのポート番号で5022だけ開けておけば良いと思ってたが、1433も必要だった。)
8.8. 次へボタンを押下
8.9. 次へボタンを押下
8.10. 完了ボタンを押下
8.11. 閉じるボタンを押下
8.12. ミラーリングの開始ボタンを押下
8.13. はいボタンを押下
⇒以下のように同期完了が出れば成功
8.14.1. 本来なら上記のダイアログが表示されるはずだが、以下は失敗。
8.14.2. 失敗した場合はログを見てgoogle検索。自分の場合は権限だった。ログは、管理-SQL Server ログ-現在をダブルクリック。念のため、Server1、2両方見ること。
8.14.3. 下記のようなログが出力されていた。
エラーログ(テキスト)

日付 2017/05/28 17:07:02
ログ SQL Server (現在 - 2017/05/28 17:18:00)

ソース Logon

メッセージ
Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'.  [CLIENT: 2408:211:1427:2000:1904:d5f9:1ad1:1e30]

エラーがない場合は、以下の手順は不要。
◆以下Server1、Server2の操作
9. ANONYMOUSE LOGONに権限付与(本来は危険と思われる)
9.1. セキュリティ-ログインを右クリックし、新しいログインを選択
9.2. 検索ボタン押下
9.3. 詳細設定ボタン押下
9.4. 検索ボタン押下
9.5. ANONYMOUSE LOGONを選択し、OKボタンを押下
9.6. OKボタンを押下
9.7. サーバーロールタブを選択し、sysadminを選択し、OKボタンを押下。(この手順は不要?)
9.8. データベース-システムデータベース-masterを選択し、新しいクエリを押下
9.9. 以下を入力し、実行ボタンを押下。
GRANT CONNECT ON ENDPOINT::ミラー化 TO [NT AUTHORITY\ANONYMOUS LOGON];

手順9.1~9.8実施後に、再度、ミラーリング構築(手順8.1.~8.13)を実施したら同期に成功

OSSよりかは随分楽だが、それでも手順は長く、複雑だ…。
つーかMicrosoftの言うフェールオーバーって意味合ってんのか?手動でもフェールオーバーって言ってるけど手動で系切り替えするのって、スイッチオーバだと思ってたゾ。