2010年10月5日火曜日

SQLAzureへの既存DB移行

こんにちは。ビジネスサービス事業部隊長です。
一気に寒くなりましたね。自転車通勤にはいい季節です。

本日は既存SQLServerをSQLAzureへ移行する方法についてです。

まずは、SQLAzureのポータルで移行先のDBを作成します。
createDatabaseポチっと。

こんなポップアップが出るので、DB名、
Specify an Editionは、お試しプランだとwebで1個まで3か月間無料。
Specify the max size は、5Gでもお試し3か月無料なのかな?でも3か月経過後は1Gで900円、5Gで5千円(大体)です。
DB名はアンスコ等の記号が入力できません。
ローカルのDB名でアンスコを使っていた為、クラウド環境とローカル環境でテストの時にいちいちDB名を少し直さなければならなくなりました。めんどくさい。

作り終わると、一覧にDBが追加されてます。

次に開発環境から繋がるように、firewallの設定です。firewallsettingタブから。
開発拠点のIPを許可リストに入れます。

WindowsAzureのサービスから接続するDBの場合は、
allow microsoft services access to this serverのチェックをつけましょう。
参考:http://msdn.microsoft.com/en-us/library/ee621783.aspx

次にローカルDBの準備です。
2008R2であれば、データベースのタスクからスクリプトの生成ができます。
DL:Microsoft SQL Server 2008 R2 RTM - Express with Management Tools



全てのオブジェクトについて、データとスキーマをスクリプト化します。
データベースエンジンの種類に対応したスクリプトには、SQLAzureデータベースを指定します。


スクリプトが出力されれば、データ移行準備が完了です。
2008R2のSSMSであれば、ポータルで確認できる接続文字列で問題なく繋がるはずですので、
スクリプトを実行すればおしまい。


次に、データを移行する際の注意事項です。

1.照合順序
SQLAzureの照合順序は、「SQL_LATIN1_GENERAL_CP1_CI_AS」です。
データベースごとの照合順序設定はできませんので、日本語の列はJapanese_CI_ASでテーブルを作成します。
また、日本語項目はnvarcharを使用し、リテラルにはNプレフィックスを必ずつけます。

2.GETDATE()
WindowsAzureのアプリケーションでも同じですが、現在時刻はUTC時刻です。
日本時間にするにはDATEADD(HOUR,9,GETUTCDATE())というような感じにしなければなりません。


今のところ、SQLAzureを使う上で困難に当たってないです。
SQLAzureは単なるSQLServerのホスティングではない!
とMSがゆってましたけど、どこらへんがすばらしいのかもまだわかっておりません。

0 件のコメント:

コメントを投稿

とある規格化されたコード

世の中こんなもんまで規格化されていますよ、というお話 https://ja.wikipedia.org/wiki/ISO_5218 この辺が大変良くできた、ためになる(?)解説記事です。(長い https://qiita.com/aoshirobo/items/32deb...