最近、オンプレにあったSQLServer2008をRDS(SQLServer2012)へ移行したので、その時のメモです。
SQLServer2012 Upgrade Advisor を利用して事前確認
SQLServer自体のバージョンアップにもなるので、MSが提供しているUpgrade Advisorを利用してバージョン上げても問題なさそうか、事前に確認しておきます。
(1) インストール環境の確認
以下が条件。上位バージョンなら問題ないだろと、 ".NET Framework 4.5"をインストールして作業していたら、Advisorがちっとも起動しないのでハマった。ちゃんと"4"を入れないといけないと起動しなかったです。
- Windows Vista SP1、または SP2、Windows 7 および Windows Server 2008 R2
- Windows インストーラー 4.5 以降のバージョン
- Microsoft .NET Framework 4
(2) SQLServer2012 Upgrade Advisor のインストール
管理者権限にてコマンドプロンプトを起動し、以下モジュールをインストール。
Download Microsoft® SQL Server® 2012 Feature Pack from Official Microsoft Download Center
- Microsoft SQL Server 2012 Transact-SQL ScriptDom(x86)
- Microsoft SQL Server 2012 Upgrade Advisor(x86)
msiexec /i (モジュール名)
(3) SQLServer2012 Upgrade Advisor の実行して、出力されたレポート内容を確認
この辺は表示されるウィザード見てれば、さくっと作成できます。奇跡的に何も問題出なかったので、RDSの移行へGO。
RDS for SQLServer インスタンスの作成
(1) RDSインスタンスの作成
せこせこと作る。
(2) DB Option Group の変更
今回の移行方法は、オンプレのdumpをRDSへリストアするという方法をとるので、以下のオプションが必要。該当オプションを付けてオプショングループを、作成したRDSインスタンスに付与してあげる。
- SQLSERVER_BACKUP_RESTORE
(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側で実行。
その他
その他で気になった事といえば、