SQL Server のデータベースをパッケージングかするためのフレームワークとして DACFx (Data-Tier Application Framework) があります。
以前、sqlpackage と AzCopy を使用した SQL Database のデータ退避 という投稿を書きました。
データ層アプリケーション (DAC) に関しては SQL Server 2008 から登場したものですが当時は dacpac という定義情報のみを抽出するものでした。
SQL Server 2012 になり DAC BACKPAC というデータを含んだデータ層アプリケーションの抽出が可能になりました。
この機能を使用して、SQL Server 2012 より下位のバージョンの bacpac の作成についてまとめてみたいと思います。
今回は以下のような環境を作成してみました。
上から、
- SQL Server 2000 SP4
- SQL Server 2005 SP4
- SQL Server 2008
- SQL Server 2008 R2
となっています。
通常、SQL Server 2012 の SSMS でSQL Server 2012 や SQL Database のデータベースを右クリックするとタスクには以下のようなメニューが表示されます。
[データ層アプリケーションのエクスポート] を選択することで bacpac 形式のファイルを作成することができます。
それではこの操作を SQL Server 2000 に対して行ってみます。
SQL Server 2000 を対象として操作した場合には、以下のように表示されます。
この場合は bacpac でエクスポートするためのコンテキストメニューが表示されません。
それでは、コマンドで実行してみるとどうでしょう。
こちらも残念ながらサポートされていないため、エラーとなってしまいます。
Action を Extract にしても SQL Server 2000 のデータ層アプリケーションを作成することができませんでした。
今回は SQL Server 2012 SP1 CU3 の DACFx を使用しているのですがこのバージョンは SQL Server 2000 を操作することはできないようですね。
データ層アプリケーション を見る限り 2000 の dacpac であれば作成できるかなと思ったのですが、うまくできませんでした。
データベースからの DAC の抽出 / SQL Server オブジェクトとバージョンの DAC サポート / SQL Server 2012 で廃止された管理ツール機能 では SQL Server 2005 SP4 以降となっていたのでこれ以降のバージョンでないと作成はできなさそうですね。
それではサポート対象となっている SQL Server 2005 SP4 ではどうなるでしょう。
この場合はエクスポートが表示されますね。
それでは実際にエクスポートをしてみます。
今回は SQL Server 2000 の Northwind を SQL Server 2005 SP4 にリストアしたものを bacpac にエクスポートしてみようとしているのですが、以下のエラーが発生します。
SqlPackage.exe の Export のアクションの説明には以下の記述があります。
Export: ライブ データベース (データベース スキーマとユーザー データを含む) を SQL Server または Windows Azure SQL データベースから BACPAC パッケージ (.bacpac ファイル) にエクスポートします。
Export は SQL Server / SQL Database で使用できる bacpac を作成するために使用できるツールですので、SQL Database で使用するためのクラスター化インデックスのチェックが入っているようですね。
guest アカウントについては今のバージョンは使われていないと思いますのでこれは不要ですね。
これらの問題を解消すると以下のように SQL Server 2005 SP4 で bacpac が作成できます。
この動作は SQL Server 2005 SP4 ~ SQL Server 2008 R2 でも同様になります。
またエクスポートをしているのは DACFx になりますので、コマンドを実行する端末に SQL Server をインストールする必要はありません。
以下があれば実行することができます。
- Microsoft® SQL Server® 2012 SP1 Data-Tier Application Framework
- Microsoft SQL Server System CLR Types
- Microsoft SQL Server Transact-SQL ScriptDom
- .NET Framework 4.0
DACFx に関しては SQL Server の CU がリリースされたタイミングで最新版が更新されますが、基本的なモジュールに関しては Microsoft® SQL Server® 2012 SP1 用 Feature Pack といった Feature Pack からダウンロードすることができます。
bacpac は SQL Server 2012 や SQL Database だけでなく下位のバージョンの SQL Server に対しても使用することができます。
SQL Server 間であれば下位バージョンで取得したバックアップを上位バージョンにリストアすることで移行することができますが、SQL Database が対象となる場合には、Migration Wizard / bacpac / bcp を利用することになるかと思います。
bacpac が作成できるバージョンには幅がありますので、移行をする際の移行方法の検討材料としてこれが可能なことを把握しておくとよいかもしれないですね。