この記事では、SQLServerログ配布の展開プロセスを段階的に説明します。セットアップと保守が簡単なのは、データベースレベルのディザスタリカバリソリューションです。
ログ配布には3つのステップが含まれます:
- プライマリデータベースでログバックアップを生成します。
- バックアップをネットワーク上の場所またはセカンダリサーバー上の特定のディレクトリにコピーします。
- セカンダリサーバーでログバックアップを復元します。
ログ配布テクノロジは、SQLServerエージェントジョブを使用して上記の手順を実行します。構成プロセス中に、ログ配布ウィザードはプライマリサーバーとセカンダリサーバーにこれらのジョブを作成します。
ログ配布には2つの操作モードがあります。
- 復元モード 。 SQLジョブは、セカンダリデータベースのトランザクションログバックアップを復元します。データベースの状態はRESTORING 、アクセスできません。
- スタンバイモード 。 SQLジョブはセカンダリデータベースのトランザクションログバックアップを復元しますが、データベースは読み取り専用モードのままにすることができます。したがって、ユーザーはそれに対して読み取り操作を実行できます。このオプションにより、レポートアプリケーションをオフロードできます。
注:スタンバイモードには欠点があります。復元ジョブの実行中はデータベースを使用できません。データベースに接続しているすべてのユーザーは、そのプロセス中に切断する必要があります。そうしないと、復元ジョブが遅れる可能性があります 。
ログ配布の主な欠点は、自動フェイルオーバーがサポートされていないことです。フェイルオーバーを実行するには、次の手順を実行する必要があります。
- テールログバックアップを生成し、セカンダリデータベースサーバーにコピーします。
- プライマリサーバー上のすべてのログ配布ジョブを停止します。
- セカンダリサーバーでログを復元します。
このプロセスにより、セカンダリデータベースの可用性が遅れる可能性があります。
次に、段階的な展開プロセスの検討に進みます。まず、ワークステーションを次のように設定して準備しました。
サーバー名 | 役割 |
SQL01 | プライマリサーバー |
SQL02 | セカンダリサーバー |
iSCSI \ SQL2017 | 監視サーバー |
\\ domain \ Log Shipping Backups | バックアップをコピーするためのネットワーク共有 |
プライマリサーバーの構成
SQL01 プライマリサーバーおよびデータベースとして機能します。 AdventureWorks2017データベース間でログ配布を設定します。
ログ配布を構成するには、SQL01インスタンスに接続します。
- SQL ServerManagementStudioを開きます
- データベースの拡張
- AdventureWorks2017を右クリック
- タスクにカーソルを合わせる
- 出荷トランザクションログをクリックします。

データベースのプロパティ ダイアログボックスが開きます。
ログ配布を有効にするには、ログ配布構成のプライマリデータベースとしてこれを有効にするをクリックします。 オプション。
ログ配布のトランザクションログバックアップスケジュールを構成するには、バックアップ設定をクリックします。 。

[トランザクションログのバックアップ設定]ダイアログボックスが開きます。
ダイアログボックスで、トランザクションログのバックアップをコピーするネットワーク共有を指定します–バックアップフォルダへのネットワークパス テキストボックス。バックアップの保持期間は、古いファイルを削除するで確認できます。 テキストボックスに記載されています。バックアップジョブが失敗した場合、またはテキストボックスで指定された時間バックアップファイルが発生しなかった場合、SQLServerはアラートを生成します。
ログ配布では、SQLServerはログファイルのバックアップをネットワーク共有にコピーします。ウィザードは、展開プロセス中にバックアップジョブを自動的に作成します。スケジュールも自動的に作成されますが、[スケジュール]ボタンをクリックして変更できます。
私の場合、バックアップジョブの名前を変更して識別しました。ジョブの名前はLogShipping_Backup_AdventureWorks2017 。
ジョブスケジュールとバックアップ圧縮設定に変更を加えませんでした。

セカンダリサーバーの構成
セカンダリサーバーとデータベースを追加するには、[追加]をクリックします データベースプロパティ ダイアログボックス。

セカンダリデータベース設定という名前のダイアログボックス 開くでしょう。セカンダリデータベースサーバーに接続する必要があります。これを行うには、[追加]をクリックします。
ダイアログボックスが開きます。サーバー名を入力し、[接続]をクリックします :

セカンダリデータベース設定の構成
セカンダリデータベースを初期化する
[セカンダリデータベースの初期化]タブで、データベースを復元するために次の3つのオプションのいずれかを設定できます。
- データベースがセカンダリサーバーに存在しない場合は、完全バックアップを生成してセカンダリサーバーに復元できます。このシナリオでは、最初のオプションを使用できます。
- 他のバックアップジョブによって生成されたデータベースの完全バックアップがある場合、またはすでにバックアップがある場合は、セカンダリサーバーに復元できます。このシナリオでは、2番目のオプションを選択できます。
- NORECOVERY状態でセカンダリデータベースを復元した場合は、3番目のオプションを選択できます。

ファイルのコピー
ファイルのコピー タブで、コピーされたバックアップファイルの場所の宛先ディレクトリを指定できます。保持期間もそこで定義されています。
ウィザードは、ファイルを宛先ディレクトリにコピーするSQLジョブを作成します。バックアップ先フォルダは\\ domain \ LogShippingBackupsです。 コピージョブの名前はLogShipping_Copy_SQL01_AdventureWorks2017 。

トランザクションログの復元
トランザクションログの復元 タブでは、データベースモードを指定できます。データベースを読み取り専用モードのままにする場合は、スタンバイモードを選択します。 または、リカバリなしモードを選択します 。
このデモでは、データベースの状態をNORECOVERYとして保持します。バックアップの復元遅延を指定し、指定した間隔内に復元されなかったバックアップのアラートを構成できます。この場合、デフォルト設定は使用しません。
復元ジョブの名前はLogShipping_Restore_SQL01_AdventureWorks2017です。

構成の準備ができたら、[OK]をクリックして変更を保存します。
ご覧のとおり、セカンダリサーバーとデータベースは「セカンダリサーバーインスタンスとデータベースグリッド」に追加されています。 」データベースのプロパティ 画面。

監視インスタンスの構成
モニターサーバーインスタンスを構成する場合は、モニターサーバーインスタンスを使用するにチェックマークを付けます。 。モニターインスタンスを追加するには、[設定]をクリックします 。

ログ配布の監視サーバーとしてiscsi\SQL2017インスタンスを使用します。
ログ配布モニターの設定 ダイアログボックスで、サーバーインスタンスの監視で名前を指定します テキストボックス。
saを使用します ログ配布を監視するためのアカウント。したがって、 saを提供する必要があります ユーザー名とパスワードとして。監視アラートと履歴の保持期間を指定することもできます。
ここでは、デフォルト設定を使用します。アラートジョブの名前はLogShipping_Alert_iscsi \ sql2017 。
[OK]をクリックして構成を保存し、ダイアログボックスを閉じます。

スクリプト構成をクリックすると、構成全体のT-SQLスクリプトを生成できます。 ボタン。構成スクリプトをクリップボードまたはファイルにコピーするか、新しいクエリエディターウィンドウで開きます。

アクションをスクリプト化する必要はありません。この手順は無視してかまいません。
[OK]をクリックしてログ配布構成を保存すると、プロセスが開始されます:

ログ配布を構成すると、成功ダイアログボックスが表示されます。

フェイルオーバーシナリオのテスト
USE [AdventureWorks2017]
GO
CREATE TABLE [Person](
[BusinessEntityID] [int] NOT NULL,
[PersonType] [nchar](2) NOT NULL,
[NameStyle] [dbo].[NameStyle] NOT NULL,
[Title] [nvarchar](8) NULL,
[FirstName] [dbo].[Name] NOT NULL,
[MiddleName] [dbo].[Name] NULL,
[LastName] [dbo].[Name] NOT NULL,
[Suffix] [nvarchar](10) NULL,
[EmailPromotion] [int] NOT NULL,
[ModifiedDate] [datetime] NOT NULL,
CONSTRAINT [PK_Person_BusinessEntityID] PRIMARY KEY CLUSTERED
(
[BusinessEntityID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
次のクエリを実行して、デモデータを挿入します。
insert into [Person]([BusinessEntityID],[PersonType],[NameStyle],[Title],[FirstName] ,[MiddleName],[LastName] ,[Suffix] ,[EmailPromotion],[ModifiedDate])
select top 10 [BusinessEntityID],[PersonType],[NameStyle],[Title],[FirstName] ,[MiddleName],[LastName] ,[Suffix] ,[EmailPromotion],[ModifiedDate]
from Person.Person
フェイルオーバーを実行するには、adventureworks2017データベースのテールログバックアップを取ります。次のクエリを実行します:
Backup Log adventureworks2017 to disk='\\domain\LogShippingBackups\Tail_Log_Backup.trn' with norecovery
SQL02(セカンダリサーバー)に接続し、RESTOREWITHRECOVERYを使用してテールログバックアップを復元します。次のコードを実行します:
RESTORE LOG [AdventureWorks2017] FROM DISK = N'\\domain\LogShippingBackups\Tail_Log_Backup.trn' WITH RECOVERY
テールログバックアップが正常に復元されたら、クエリを実行して、データがセカンダリサーバーにコピーされていることを確認します。
Select * from person
クエリ出力:

ご覧のとおり、データはセカンダリサーバーに復元されます。
結論
この記事では、SQLServerのログ配布プロセスとその構成方法について説明しました。また、ログ配布の段階的なフェイルオーバープロセスについても説明しました。