SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

DMS の Managed Instance のオンライン移行が Preview 機能として使用できるようになりました

leave a comment

Ignite 2018 の前後で使えるようになった機能なのですが、Azure SQL Database Managed Instance に対して、Database Migration Services のオンライン移行 (Online Migration) の機能が使用できるようになりました。

MI については、SQL Server からのオンライン移行が可能となっています。
image
オンライン移行については「ビジネスクリティカル (Business Critical)」でのみ、使用できる機能となります。
Preview 開始当初は「オンライン移行機能」が使用できるリージョンは限定的なもので、日本ではオンライン移行を使うことができなかったのですが、使用可能なリージョンが拡充されて、今は使えるようになったみたいですね。
投稿を書くにあたり、東日本の DMS で試してみましたが正常に移行することができました。
DMS でオンライン移行が使えないリージョンからデータを移行したい場合は、DMS の仮想ネットワークと移行対象の SQL Server / MI を VPN 接続することで回避できますので、ネットワーク構成によって、移行元 / 移行先は柔軟に対応できるかと。
ドキュメントとしては DMS を使用して、SQL Server を Azure SQL Data で公開されているのですが、この情報では少し足りていない箇所がありますので、検証する際のポイントを補足しておきたいと思います。

SQL Server から MI へのオンライン移行ですが、SQL Server の「完全バックアップ」をリストアし、以降は、「トランザクションログバックアップ」を継続してリストアすることでオンライン移行を実施するという仕組みとなっています。
通常、MI では、トランザクションログのリストアを実施することができないため、ログ配布のような仕組みにより、トランザクションログを定期的にリストアするということを実現することができません。
しかし、今回 Preview として提供された DMS のオンライン移行では、定期的に取得したトランザクションログのバックアップをリストアすることができるようになりますので、ログ配布のような仕組みにより、データの移行を実施することが可能です。
(ログ配布と異なり、読み取りを一時的に許可することはできませんが)

 

初期準備として実施することの注意点

実際に触ってみないとわからない点ではあるのですが、初期準備として「初期移行に使用するバックアップ」を、利用者が自身で取得する必要があります。
オフライン移行の場合は、移行用バックアップの取得を DMS で実施することができるのですが、オンライン移行については、移行作業者が明示的に取得する必要があります。
次の画面は、DMS でオンライン移行を実施する際の設定画面の一部となのですが、ここで指定する「ネットワーク共有の場所」に次のバックアップの配置を手動で行っておく必要があります。

  • 完全バックアップ
  • トランザクションログバックアップ

image
この時、使用するバックアップですが一つ注意点があり、「バックアップは CHECKSUM オプションを有効にして取得する必要がある」ということです。
CHECKSUM が有効になっていない、バックアップについては DMS でオンライン移行しようとしたタイミングでエラーとなりますので、CHECKSUM を使用したバックアップの取得は必須です。
検証を始めた時点では、バックアップのチェックサムの有効化の厳密な確認されておらず、移行が開始された後に Internal Server Error でエラーとなり理由がわかりずらかったのですが、投稿を書いている時点では、そこは改善されて、今は途中でエラーになるようになったみたいですね。
具体的には、次のようなクエリでバックアップを取得する必要があります。

BACKUP DATABASE MIMigration TO DISK=N'C:\BackupShare\MIMigration.bak'
WITH INIT,FORMAT,COMPRESSION,CHECKSUM
GO
BACKUP LOG MIMigration TO DISK=N'C:\BackupShare\MIMigration_01.trn'
WITH INIT,FORMAT,COMPRESSION,CHECKSUM
GO
BACKUP LOG MIMigration TO DISK=N'C:\BackupShare\MIMigration_02.trn'
WITH INIT,FORMAT,COMPRESSION,CHECKSUM
GO
BACKUP LOG MIMigration TO DISK=N'C:\BackupShare\MIMigration_03.trn'
WITH INIT,FORMAT,COMPRESSION,CHECKSUM
GO

COPY_ONLY オプションについても検証したのですが、完全バックアップについて COPY_ONLY で問題ありませんでした。

しかし、トランザクションログのバックアップについては、ディレクトリ内の最初のトランザクションログについては問題ないのですが、2 個目以降の COPY_ONLY のトランザクションログのバックアップについては、現時点ではリストアがうまく行われていませんでした。
そのため、COPY_ONLY の利用については次のようになるのではないでしょうか。

  • 完全バックアップについては COPY_ONLY が利用可能
  • トランザクションログについては、COPY_ONLY は一つのみリストア可能だが、継続したトランザクションログの適用には利用が難しい

正常に動作させると、ポータルは次のような内容になり、継続したリストアが行われます。
image
この時、MI 上の DB については、次のようになります。
image
DMS からオンライン移行した場合は、「リストア中」で止めることができ、継続的なトランザクションログのリストアができる状態で止められています。
DMS で指定した共有ディレクトリに新しいバックアップを出力すると、自動的にバックアップが認識され、リストアが行われます。

image
リストア中の状態から実際に使用することができるようにするには、DMS の「一括で開始」を行います。

image
これにより、最後のトランザクションログのリストアが行われ、DB にアクセス可能となります。

このタイミングで、GUID で作成されていた DB が、最終的な名称として設定されます。
まだ Preview 機能ではありますが、ログ配布のようなシナリオとして DMS のオンライン移行を使用することができそうですね。

Share

Written by Masayuki.Ozawa

10月 27th, 2018 at 3:40 pm

Leave a Reply