ローカルからRDSにデータ移行(SQLServer2012/2016編)

こんにちは。
ネクストスケープの開發@mamikaihatsu)です。

前回の記事で、オンプレDBをクラウド移行を考えている方にーと振っておきながら
データ移行ネタを書いていない事に気づきました・・・。
ということで、今回は大好きなSQLServerをローカルからRDSにデータ移行します。
SQLServer2012/2016の場合と2008R2の場合で方法が異なるので
まずは、SQLServer2012/2016版で記載します。


本記事環境

移行元DB(ローカル)

  • Windows Server 2014

移行先DB(Alibaba Cloud)

  • Windows Server 2016

手順

前準備(Alibaba Cloud)

  • RDSの作成
  • OSSの作成

前準備(ローカル)

  • SQLServerのバックアップ

データ移行(Alibaba Cloud)


前準備(Alibaba Cloud)

RDSの作成


 RDSの作成方法は前回の記事をご参考にしてください。 

OSSの作成


作成方法を記載しますが、既存のOSSがあれば、それを利用してもOKです。


管理コンソールのOSS > バケット作成


RDSと同じリージョンに設定しておきます。

これでOSSは作成完了です。


前準備(ローカル)

DBの確認

移行元のローカルDBに問題がないか、以下のクエリを実行して確認します
DBCC CHECKDB
エラーが出る場合は、バックアップ前に問題を解決する必要があります。

バックアップ


クエリでバックアップも可能ですが、今回はSQL Server Management Serviceを利用します。


DBを右クリック>Tasks > BackUp からバックアップします。
Backup typeは「Full」にしてください。


データ移行(Alibaba Cloud)

バックアップファイルのアップロード


ossbrowser やOSS APIでアップロードは可能ですが、5GBよりファイルが小さい場合は管理コンソールからアップデートが可能です。
ということで管理コンソールのOSSからアップロードしちゃいます。


管理コンソールのOSS > アップロード


後は赤枠の部分にファイルをドラッグアンドドロップでアップロード出来ます。


アップロード出来ました!

RDSへバックアップデータをリカバリ

いよいよ、RDSへデータを移します!


管理コンソールのRDS > バックアップとリカバリ > OSSバックアップデータのアップロード

インポートガイドが表示されます。


次へ


次へ


バックアップファイルを置いたOSSバケットを指定すると、バックアップファイルが選択出来るようになります。
すぐにデータベースを起動するにチェックを入ておきます。

初回の移行時には権限が付与されていない為、[Authenticate]をクリックします。

[クラウドリソースアクセス権付与]の画面が別画面で開きます。


[権限付与に同意]をクリック


インポートガイドに「RDS 公式サービスアカウントに OSSへのアクセス権限を付与しました。」のメッセージがでたら、OKボタンを押します。
※表示されない場合は、再度インポートガイドを開き直してみてください。


[バックアップデータのアップロード履歴]にタスクが開始されたことが確認できます。
タスクステータスが[完了]になれば、データ移行完了となります。


管理コンソールやSSMSからDBが移行されている事が確認できます。
もちろん、データやインデックスなど漏れなく移行されていました。


おまけ

移行後は、DBのアカウントが特権(マスター)アカウントのみアクセス出来る状態なので
必要に応じて、RDSのアカウント管理から標準アカウントを追加してください。


許可済みデータベースに、移行したDBを許可にしておきます。


最後に

データ移行に関しては、1か月ほど前にSQLServerをData Transmission Service(DTS)を利用して移行しようとしたのですが、Viewのインデックスが付いていないことが発覚。
テクニカルサポートに問い合わせてSQLServerの場合はサポートされていない事が発覚(現時点)
OSS経由の移行を教えていただきました(いつもありがとう!)
その時はインデックスを使ってるViewが1つだけだったので、もうインデックス作っちゃったのですが
今回やってみて・・・簡単すぎた。そしてインポートガイドがとっても親切。

RDSは気になるのって日本語訳の部分ぐらいかな。
「歴史イベント」とか「特権アカウント」とか・・・。訳すと逆にわかりにくくなっちゃう。