トップ回答者
SQLServer2008のDBをSQLServer2005に移行するには

質問
回答
-
こんにちは、naginoです。
やり方はいろいろありそうですが、今手元に SQL Server 2008 の環境が無いため確認できていません。
参考情報ということでお願いします。
ぱっと思いつくのは、標準機能によるバックアップ&リストアでしょうか。
ただし 2005 上で互換性レベルが 100 のバックアップはおそらく復元できないと思われますので、
事前に互換性レベルが 90 の DB を 2008 内にコピーで作成しておくなど、何らかの形で
バックアップされた DB の互換性レベルが90になるようにする工夫が必要と思われます。
あとはエクスポートウィザードや SSIS でのコピーでしょうか。
ネットワークで接続できる場合、エクスポートウィザードが一番手軽と思われます。
他に、DB をスクリプト化して 2005 上で実行という手もあります。
SQL Server Management Studio のオブジェクトエクスプローラで、DB の右クリックで表示されるメニューから
CREATE文が生成できたかと思います。
データまで CREATE文に含まれたかどうかは記憶が定かではありませんが、もし含まれないようであれば
エクスポートウィザード/インポートウィザードでデータだけ別途コピーすれば良いかと思います。
ご参考になれば幸いです。
-
やっと時間が出来てSQL Server 2008の検証環境が出来たのでちょっと調べてみました。
※ちょっと否定的なことばかり書いてしまいますが、お許しください。
> ぱっと思いつくのは、標準機能によるバックアップ&リストアでしょうか。
> ただし 2005 上で互換性レベルが 100 のバックアップはおそらく復元できないと思われますので、
> 事前に互換性レベルが 90 の DB を 2008 内にコピーで作成しておくなど、何らかの形で
> バックアップされた DB の互換性レベルが90になるようにする工夫が必要と思われます。
SQL Server 2008のデータベースの互換性レベルを変更してバックアップしても、それ以前のバージョンのSQL Serverにリストアすることはできません。
(SQL Server 2008に限らず、SQL Server 2005→SQL Server 2000も不可)
また、当然ですがデタッチ/アタッチもできません。
> あとはエクスポートウィザードや SSIS でのコピーでしょうか。
> ネットワークで接続できる場合、エクスポートウィザードが一番手軽と思われます。
SQL Serverのデータベースインポート/エクスポートウィザードですが、VIEWまでデータとしてコピーしてしまうので転送オブジェクトにVIEWを含んでいる場合は実質、使えません。
また、SSISでのコピーですが、SQL Server 2000にあったDTSのSQL Server同士のコピーも同じバージョン
(というかSQL Server 2008同士)でしかコピーできないようです。
ODBCもしくはOleDBドライバを指定してコピーすればコピーできると思います。
ただし、主キーやインデックスまでコピーされたかはまだ検証していません。
あと、SQL Server 2008でデータベースコピーウィザードがありますが、こちらもうまくいきませんでした。
実際の実行(というかジョブ)はSQL Server 2005側に作成されますが、SQL Server 2008に接続できないと
エラーがレポートされてしまいます。
> 他に、DB をスクリプト化して 2005 上で実行という手もあります。
> SQL Server Management Studio のオブジェクトエクスプローラで、DB の右クリックで表示されるメニューから
> CREATE文が生成できたかと思います。
> データまで CREATE文に含まれたかどうかは記憶が定かではありませんが、もし含まれないようであれば
> エクスポートウィザード/インポートウィザードでデータだけ別途コピーすれば良いかと思います。
さすがにデータまでは含まれません。
また先述の通り、インポート/エクスポートウィザードではVIEWをテーブルとしてコピーしてしまいます。
あと、Database Publishing Wizard 1.1ですが、SQL Server 2008には対応していないようで、
インストールできませんでした。(インストールしたSQL Server 2008がx64版だからかもしれませんが)
と言うことで、現時点でSQL Server 2008からSQL Server 2005へのデータのコピーですが、
naginoさんが言われているように、まずDB の右クリックからCREATEのスクリプトを生成して、
それをSQL Server 2005に適用します。
次に各テーブルのコピーですが、SQL Server 2005でリンクサーバーを設定しておき、
INSERT INTO テーブル名 SELECT * FROM [SQL Server 2008のコンピュータ名].dbo.テーブル名
を各テーブルに対して行うか、BCPコマンドでテキストファイルにエクスポートし、それをSQL Server 2005に
インポートする方法が考えられます。
テーブルの一覧ですが、対象データベースで以下のクエリーを実行すると一覧が取得できます。
select name from sysobjects where xtype='U'
※自分もSQL Server 2008を検証しかけたところなので、間違った部分があったらごめんなさい。
-
この間の書き込みで、データベースのインポート/エクスポートウィザードで「VIEWもテーブルとしてコピーされてしまう」と記述しましたが、VIEWは最後の方でテーブルとは違ったアイコンで表示されますので、エクスポートする際に転送のチェックを外せばインポート/エクスポートウィザードでもテーブルのデータのコピーは可能でした。
作業手順をまとめますと、以下のようになります。
-
SQL Server 2008でManagement Studioを開き、当該データベースにて右クリックし[タスク]-[スクリプトの生成]を選択します。
-
スクリプト生成ウィザードが起動するので、後は画面の指示に従い[次へ]をクリックします。
ストアドプロシージャ、テーブル、ビューは全て選択してください。
続いてスクリプトを生成するストアドプロシージャ、テーブル、ビューも全て選択してください。 -
生成したスクリプトをファイルもしくはクリップボードに出力します。
-
続いて、SQL Server 2005でSSMSを起動します。
生成したスクリプトではデータベースまでは作成されないため、あらかじめデータベースを作成しておきます。 -
続いて、先程生成したスクリプトを開いて実行します。(これで入れ物が作成されました)
-
SQL Server 2005で[タスク]-[データのインポート]を実行します。
[データソースの選択]でコピー元をSQL Server 2008、変換先の選択でローカルコンピュータを選択します。
(ちなみにデータソースとして"SQL Native Client"を指定しました) -
[テーブルのコピーまたはクエリの指定]で[一つ以上のテーブルまたはビューからデータをコピーする]をチェックします。
-
[コピー元のテーブルおよびビューを選択]で、テーブルのみを指定します。
(ビューの場合、アイコンが違い最後の方にまとまっているため、一目でわかると思います) -
あとは実行するだけです。
特にエラーが出ていなければ、データのコピーはされているはずですので、コピー後の内容を確認してみてください。
# アップグレードは簡単なのにダウングレードは何でこんなに面倒なんだろ。
# というより、早くDatabase Publishing WizardをSQL Server 2008に対応してくれればこんな苦労をしなくても良いのに。
-
すべての返信
-
こんにちは、naginoです。
やり方はいろいろありそうですが、今手元に SQL Server 2008 の環境が無いため確認できていません。
参考情報ということでお願いします。
ぱっと思いつくのは、標準機能によるバックアップ&リストアでしょうか。
ただし 2005 上で互換性レベルが 100 のバックアップはおそらく復元できないと思われますので、
事前に互換性レベルが 90 の DB を 2008 内にコピーで作成しておくなど、何らかの形で
バックアップされた DB の互換性レベルが90になるようにする工夫が必要と思われます。
あとはエクスポートウィザードや SSIS でのコピーでしょうか。
ネットワークで接続できる場合、エクスポートウィザードが一番手軽と思われます。
他に、DB をスクリプト化して 2005 上で実行という手もあります。
SQL Server Management Studio のオブジェクトエクスプローラで、DB の右クリックで表示されるメニューから
CREATE文が生成できたかと思います。
データまで CREATE文に含まれたかどうかは記憶が定かではありませんが、もし含まれないようであれば
エクスポートウィザード/インポートウィザードでデータだけ別途コピーすれば良いかと思います。
ご参考になれば幸いです。
-
やっと時間が出来てSQL Server 2008の検証環境が出来たのでちょっと調べてみました。
※ちょっと否定的なことばかり書いてしまいますが、お許しください。
> ぱっと思いつくのは、標準機能によるバックアップ&リストアでしょうか。
> ただし 2005 上で互換性レベルが 100 のバックアップはおそらく復元できないと思われますので、
> 事前に互換性レベルが 90 の DB を 2008 内にコピーで作成しておくなど、何らかの形で
> バックアップされた DB の互換性レベルが90になるようにする工夫が必要と思われます。
SQL Server 2008のデータベースの互換性レベルを変更してバックアップしても、それ以前のバージョンのSQL Serverにリストアすることはできません。
(SQL Server 2008に限らず、SQL Server 2005→SQL Server 2000も不可)
また、当然ですがデタッチ/アタッチもできません。
> あとはエクスポートウィザードや SSIS でのコピーでしょうか。
> ネットワークで接続できる場合、エクスポートウィザードが一番手軽と思われます。
SQL Serverのデータベースインポート/エクスポートウィザードですが、VIEWまでデータとしてコピーしてしまうので転送オブジェクトにVIEWを含んでいる場合は実質、使えません。
また、SSISでのコピーですが、SQL Server 2000にあったDTSのSQL Server同士のコピーも同じバージョン
(というかSQL Server 2008同士)でしかコピーできないようです。
ODBCもしくはOleDBドライバを指定してコピーすればコピーできると思います。
ただし、主キーやインデックスまでコピーされたかはまだ検証していません。
あと、SQL Server 2008でデータベースコピーウィザードがありますが、こちらもうまくいきませんでした。
実際の実行(というかジョブ)はSQL Server 2005側に作成されますが、SQL Server 2008に接続できないと
エラーがレポートされてしまいます。
> 他に、DB をスクリプト化して 2005 上で実行という手もあります。
> SQL Server Management Studio のオブジェクトエクスプローラで、DB の右クリックで表示されるメニューから
> CREATE文が生成できたかと思います。
> データまで CREATE文に含まれたかどうかは記憶が定かではありませんが、もし含まれないようであれば
> エクスポートウィザード/インポートウィザードでデータだけ別途コピーすれば良いかと思います。
さすがにデータまでは含まれません。
また先述の通り、インポート/エクスポートウィザードではVIEWをテーブルとしてコピーしてしまいます。
あと、Database Publishing Wizard 1.1ですが、SQL Server 2008には対応していないようで、
インストールできませんでした。(インストールしたSQL Server 2008がx64版だからかもしれませんが)
と言うことで、現時点でSQL Server 2008からSQL Server 2005へのデータのコピーですが、
naginoさんが言われているように、まずDB の右クリックからCREATEのスクリプトを生成して、
それをSQL Server 2005に適用します。
次に各テーブルのコピーですが、SQL Server 2005でリンクサーバーを設定しておき、
INSERT INTO テーブル名 SELECT * FROM [SQL Server 2008のコンピュータ名].dbo.テーブル名
を各テーブルに対して行うか、BCPコマンドでテキストファイルにエクスポートし、それをSQL Server 2005に
インポートする方法が考えられます。
テーブルの一覧ですが、対象データベースで以下のクエリーを実行すると一覧が取得できます。
select name from sysobjects where xtype='U'
※自分もSQL Server 2008を検証しかけたところなので、間違った部分があったらごめんなさい。
-
この間の書き込みで、データベースのインポート/エクスポートウィザードで「VIEWもテーブルとしてコピーされてしまう」と記述しましたが、VIEWは最後の方でテーブルとは違ったアイコンで表示されますので、エクスポートする際に転送のチェックを外せばインポート/エクスポートウィザードでもテーブルのデータのコピーは可能でした。
作業手順をまとめますと、以下のようになります。
-
SQL Server 2008でManagement Studioを開き、当該データベースにて右クリックし[タスク]-[スクリプトの生成]を選択します。
-
スクリプト生成ウィザードが起動するので、後は画面の指示に従い[次へ]をクリックします。
ストアドプロシージャ、テーブル、ビューは全て選択してください。
続いてスクリプトを生成するストアドプロシージャ、テーブル、ビューも全て選択してください。 -
生成したスクリプトをファイルもしくはクリップボードに出力します。
-
続いて、SQL Server 2005でSSMSを起動します。
生成したスクリプトではデータベースまでは作成されないため、あらかじめデータベースを作成しておきます。 -
続いて、先程生成したスクリプトを開いて実行します。(これで入れ物が作成されました)
-
SQL Server 2005で[タスク]-[データのインポート]を実行します。
[データソースの選択]でコピー元をSQL Server 2008、変換先の選択でローカルコンピュータを選択します。
(ちなみにデータソースとして"SQL Native Client"を指定しました) -
[テーブルのコピーまたはクエリの指定]で[一つ以上のテーブルまたはビューからデータをコピーする]をチェックします。
-
[コピー元のテーブルおよびビューを選択]で、テーブルのみを指定します。
(ビューの場合、アイコンが違い最後の方にまとまっているため、一目でわかると思います) -
あとは実行するだけです。
特にエラーが出ていなければ、データのコピーはされているはずですので、コピー後の内容を確認してみてください。
# アップグレードは簡単なのにダウングレードは何でこんなに面倒なんだろ。
# というより、早くDatabase Publishing WizardをSQL Server 2008に対応してくれればこんな苦労をしなくても良いのに。
-
-
sg12 さん、
こんにちは!
フォーラム オペレーターの服部 清次です。
sg12 さんが質問を投稿されてから少し時間が経ちましたが、その後いかがでしょうか?
今回、nagino さんと CatTail さんが提供してくださった回答が参考になったのではないかと思いましたので、ひとまず、私の方で回答チェックを付けさせていただきました。
万が一 sg12 さんの問題がまだ解決していない場合は、お気軽に回答チェックを外して質問を続けてください。
その際には、ぜひ現在の状況も合わせて教えていただければ嬉しいです。
これからも TechNet Forum をどうぞよろしくお願いします!
それでは、また!
_____________________________________________
マイクロソフト株式会社 フォーラム オペレータ 服部 清次