オンプレSQLServerをRDSへ移行した話

最近、オンプレにあったSQLServer2008をRDS(SQLServer2012)へ移行したので、その時のメモです。

SQLServer2012 Upgrade Advisor を利用して事前確認

SQLServer自体のバージョンアップにもなるので、MSが提供しているUpgrade Advisorを利用してバージョン上げても問題なさそうか、事前に確認しておきます。

(1) インストール環境の確認

以下が条件。上位バージョンなら問題ないだろと、 ".NET Framework 4.5"をインストールして作業していたら、Advisorがちっとも起動しないのでハマった。ちゃんと"4"を入れないといけないと起動しなかったです。

(2) SQLServer2012 Upgrade Advisor のインストール

管理者権限にてコマンドプロンプトを起動し、以下モジュールをインストール。

Download Microsoft® SQL Server® 2012 Feature Pack from Official Microsoft Download Center

msiexec /i (モジュール名)

(3) SQLServer2012 Upgrade Advisor の実行して、出力されたレポート内容を確認

この辺は表示されるウィザード見てれば、さくっと作成できます。奇跡的に何も問題出なかったので、RDSの移行へGO。

RDS for SQLServer インスタンスの作成

(1) RDSインスタンスの作成

せこせこと作る。

(2) DB Option Group の変更

今回の移行方法は、オンプレのdumpをRDSへリストアするという方法をとるので、以下のオプションが必要。該当オプションを付けてオプショングループを、作成したRDSインスタンスに付与してあげる。

(3) DB parameter group の確認

オンプレとRDSの”sys.configurations”ビューを比較して、違いや怪しそうなところがないか確認。

DBの移行(dumpファイル・リストア方式)

上に書いた通り、RDSにオンプレから取ったdumpファイルをリストアする形で移行する。AWSだとDatabase Migration ServiceっていうDB移行用のサービスもあるけど、同一DBMSなら、dumpで移してしまう方が安全だし、楽。

dumpファイルは事前にS3にアップロードしておく。

(1) S3にアップロードされたバックアップファイルからデータベースを復元する

以下のコマンド。

exec msdb.dbo.rds_restore_database 
        @restore_db_name='(database name)', 
        @s3_arn_to_restore_from='arn:aws:s3:::(bucket name)/(file name)';

(2) 互換性レベルのバージョンアップ

互換性上げるのを忘れない。

alter database (database name) set compatibility_level = 110

(3) 統計の更新

一応、更新しておくか。

create procedure dbo.sp_updstats
with execute as 'dbo'
as
exec sp_updatestats
go

exec dbo.sp_updstats

(4) フルテキスト・カタログの再構築

フルテキスト・カタログ使っている場合は、再構築しておく。

use (database name)
alter fulltext catalog (catalog name) rebuild

(5) インデックスの再作成

これも念のため。

alter fulltext index on (table name) start full population

SQLServer ログインアカウントの作成

dumpを移しただけだから、移行できていない設定があるので、そいつら設定してあげる。

(1) SQLServer ログインアカウントの作成

オンプレと同名、同パスワードのSQLServer認証のログインアカウントを作成しておく。

(2) データベースユーザとログインアカウントを再マッピング

作成したログインアカウントをデータベースユーザとマッピングしてあげる。

use (database name)
alter user (database user name) with login = (login account name)

SQLServer サーバーロールの設定

こいつもdumpじゃ移行されないから、設定してあげないと。

(1) SQLServer サーバーロールの作成

オンプレと同名のサーバーロールを作成する。

(2) SQLServer サーバーロールとログインアカウントを対応

exec sp_addsrvrolemember 'rogin account name','server role name'

SQLServer エージェント ジョブ

(1) ジョブ作成スクリプトの実行

移行元でジョブ作成スクリプトをエクスポートして、そいつをRDS側で実行。

その他

その他で気になった事といえば、

  • RDSは、そもそもDBLink使えないので、DBLink使ってるDBはRDSに移行できない
  • RDSではメンテナンスプランが利用できないので、メンテナンスプランで実行している処理はAgentジョブに置き換えたりしないといけない
  • SQLServerインスタンスのサーバ照合順序は変更不可だけど、DB単位の照合順序が正しいものになっているか、リストア後にはちゃんと確認する