ログ配布はSQL Serverの機能の一つで、データベース(以下、DB)に可用性を持たせることができます。
本記事では、ログ配布の概要から、タイトルに記載している「データファイルが複数ディスクに分かれたデータベースでのログ配布設定」をする際の注意点について紹介いたします。
SQL Serverのログ配布とは
「ログ配布」は、SQL Server(プライマリ・サーバ)が生成するトランザクションログ*1のバックアップを、定期的に別のSQL Server(セカンダリ・サーバ)に転送してデータベースを冗長化させる技術です。
これにより、万が一プライマリ・サーバで障害が発生した際に、セカンダリ・サーバから復元処理を実行することで、システムを復旧させることができます。
前提条件
- 設定対象DBの復旧モデルが、「完全復旧モデル」か「一括ログ復旧モデル」であること
- 「単純復旧モデル」の場合、トランザクションログのバックアップが取得できないため、「完全復旧モデル」か「一括ログ復旧モデル」を使用する必要があります
- プライマリサーバとセカンダリサーバ両方からアクセスできる共有の領域を用意すること
- プライマリサーバでトランザクションログバックアップを取得・保存し、セカンダリサーバでそのトランザクションログバックアップのコピー・リストアを行う挙動になるため、両サーバからアクセスできる領域を用意する必要があります。
ログ配布設定する場合の注意点
ログ配布を使い、プライマリで取得したトランザクションログバックアップをセカンダリにリストアするには、まずプライマリで取得したフルバックアップをセカンダリにリストアする必要があります。
ログ配布の設定の中でフルバックアップリストアもまとめて実施してくれる便利な設定がありますが、その方法を使う場合には1点注意しなければならない点があります。
それが「データファイルが複数のディスクに分かれたDBでログ配布設定」をする場合です。
ログ配布をする場合、プライマリと全く同じ構成のDBを障害対策のためセカンダリに用意するのが必須事項かと思います。
しかし、ログ配布設定対象のDBのデータファイルがDドライブやEドライブ等2つ以上のディスクに分かれて作成されている場合、ログ配布の設定の中でフルバックアップリストアを実施すると、セカンダリ側でリストアされたDBのデータファイルが一つのディスクにまとめて作成されてしまい、プライマリとセカンダリとでDBの構成に違いが生じてしまいます。
もしプライマリ側で障害が発生し、セカンダリ側にあるDBを使って復旧しようとした際に、DBの構成が違うことで問題が生じてしまう可能性もあります。
対応方法
データファイルが複数のディスクに分かれたDBでログ配布設定をする場合は、ログ配布の設定の中でDBのフルバックアップ・リストアを行うのではなく、ログ配布の設定前に手動でDBのフルバックアップ・リストアを実施する必要があります。
簡単な手順を本項で記載いたします。
※DBのバックアップリストアやログ配布の設定の流れについては、下記のMicrosoft社の公式Docs等を参照してください
- フルバックアップ取得
- フルバックアップ復元
- ログ配布の設定
- SQL Server Management Studio等を使用し、ログ配布を設定するプライマリ側のDBのフルバックアップを取得します。
- 取得したフルバックアップをセカンダリ側でリストアします。
※この時DBの復旧状態を「NORECOVERY」もしくは、「Standby」にしておきます。
- プライマリ側でログ配布の設定をします。
ログ配布の設定を進める中で、下図のようなセカンダリデータベースの初期化状態を選択する際に、【いいえ、セカンダリデータベースは初期化されています】を選択し、設定を進めます。
この手順の通り進めれば、プライマリとセカンダリとで、データファイルの保存場所に差異なくログ配布の設定を行うことができます。
さいごに
今回は、SQL Server上でデータファイルが複数ディスクに分かれたDBでのログ配布を設定する場合の注意点等について紹介させていただきました。
DBフルバックアップ・リストア=全く同じ構成のDBが作られると認識している方も多いかと思いますが、ログ配布の設定内でフルバックアップ・リストアを実施する場合はその限りではないようです。
ログ配布を設定する際に本記事が参考になれば幸いです。
*1:データベース内のすべてのトランザクションと、それらのトランザクションによって加えられた変更を記録する情報