web-dev-qa-db-ja.com

SQL Server 2005でSQL Server 2008のバックアップを復元することは可能ですか

SQL Server 2008データベースのバックアップをSQL Server 2005のインスタンスに復元することはできますか?

データベースのバックアップがSQL Server 2008にあるサンプルアプリケーションで作業する必要があります。しかし、2008をインストールすることはできません。2005年にバックアップを復元することはできますか?

26
Nayana Setty

いいえ。新しいバージョンのバックアップからデータベースを復元することはできません。

あなたがそれに夢中になっているなら、私はあなたの最良のオプションはSQL 2008のオブジェクトエクスプローラーでデータベースを選択し、右クリックして「タスク」->「スクリプトを生成」を選択することだと思います。

また、[SQL 2005のスクリプト]を選択してください。

ソース

オブジェクトをターゲットサーバーにインポートするときに、オブジェクトが大きい場合、Management Studioを介してSQLファイルを開くことができない場合があります(完全に役に立たない「操作を完了できませんでした」というエラーが発生します)。 sqlcmd でファイルをロードするだけで問題ありません。

35
Garry Shutler

すべての回答に重要な1つの欠落があります。それは、SSMSのスクリプトの生成がスクリプトを正しく順序付けしていないという事実です。

親テーブルなどの後に子テーブルが作成されるように、スクリプトは正しい依存関係の順序で並べる必要があります。

これは、手動でスクリプトを並べ替えるのが簡単な小さなデータベースの問題ではありませんが、100以上のオブジェクトを持つデータベースを扱う場合、大きな問題になる可能性があります。

私の経験では、バックアップを読み取ってスクリプトを正しい順序で生成できるサードパーティのツールを使用するのが最も便利です。私は ApexSQL Diff とApexSQLのData Diffを使用していますが、一般的なベンダーで問題が発生することはありません。

6
Monte Chavis

いいえ、直接ではありません。 SQL Server 2008データベースのバックアップは、SQL Server 2005との下位互換性がありません。ただし、SQL Server 2008 Management Studioを使用すると、SQL Server 2005モードでデータとスキーマをスクリプト化できます。この 記事 は、プロセスを詳細に説明しています。

5
Mitch Wheat

はい、可能です

SQL Server 2008でのエクスポートの使用。All Programs-> Microsoft SQL Server 2008-> Import and Export Dataに移動します。

  • 次にSQL Server Import AND Export Wizardウィンドウが開きます。 Nextを押します

  • データソースを選択します(SQL Server 2008の場合)。宛先を選択します(SQL Server 2005の場合)。

  • Copy data from one or more tables or viewを選択します

  • ソースのテーブルと宛先のテーブルを選択します

  • NextFinishをクリックします

完了します。

4
Hazem Fergany

私は長い間この問題を抱えてきました。

SQL2008バックアップをSQL2005インスタンスに復元することはできません。

そして、私にとって、ウィザードのインポート/エクスポート、またはfor SQL2005オプションを指定した生成スクリプトを使用してSQL2008からデータベースをスクリプト化するような回避策は機能しません。なぜなら、私のデータベースは、ビューとストアドプロシージャまたはudfs内で相互参照しているからです。それらは私の責任を完全に果たさないため、1つのデータベースに統合することはできません。それらは、ビューとストアドプロシージャ内で直接相互に参照する6つのdbのセットです。それらを1つのSQL2005インスタンスから別のインスタンスに転送するとき、通常は完全バックアップ/復元を行います。

それらをスクリプト化する場合、with dependencyオプションを使用しても、db1はdb3内のビューを見つけられないため、最初にcreate db1スクリプトを実行したため、再作成時にエラーが発生します。最初にdb3を試した場合、同様の例外が発生します。

これらの依存関係の例外が発生しないようにそれらをスクリプト化する唯一の方法は、機能するシーケンスを理解し、その方法でそれらを部分的にスクリプト化することです。 。

そのようなシーケンスがあります。そして、そのような6 dbの新しいセットを作成する必要があるとき、小さい部分的なスクリプトを順番に実行しました。

これは、依存関係があり、データがあり、SQL2005バージョンのスクリプトに設定されている生成スクリプトが、私にとって機能しない理由を説明しています。

インポート/エクスポートウィザードは、テーブルをコピーし、その後、すべてのビュー、sp、udfsなどをスクリプト化する必要があるため、私の場合はより優れています。

私が本当に必要なのは、SQL2008バックアップファイルをSQL2005形式に変換するための変換ツールです。その後、私の問題はなくなります。または、SQL2008の完全バックアップファイルからの復元を可能にするツールのようなもので、あまり質問をしません。

誰かがそのようなツールを知っていて、それらを使用したことがあれば、私に知らせてください。

4
scorpiophd

DBSave を使用できます。これは、さまざまなマシンでms sqlサーバーをバックアップおよび復元するための優れたフリーウェアツールです。設定も使用も非常に簡単です。

1
MP1963

インポート/エクスポートに失敗した(フラットファイルエクスポートは、インポート中に文字セットマッピングの問題(同じ文字セットが全体で使用されていたとしても)および/または切り捨ての問題(ソースと宛先がまったく同じ構造であったとしても)を主張し、失敗した)、および「スクリプトの生成」オプションを使用しても運が悪い Garry Shutlerの提案 (構文エラーのあるスクリプトが生成された)、私は最終的にSQL Server bcp utility を使用して、2008年から2005年にコピーしたい大きなテーブルをコピーできます。したがって、これはこの状況の別のオプションですが、データベース全体の場合はテーブルごとになり、おそらくビューなどには役立ちません。

私が使用した手順:

  1. ソースサーバーで、「スクリプトテーブルAs ... CREATE」を使用して構造を取得し、ターゲットサーバーで実行します。

  2. ターゲットサーバーで、新しく作成したテーブルを使用してbcp形式のファイルを作成します。

    bcp database.owner.table format nul -f table.fmt -n

    (Windows認証を使用していない場合は、-Uおよび-Pユーザー名とパスワードを指定するオプション。)

  3. そのフォーマットファイルをソースサーバーにコピーします(必要な場合)。

  4. ソースサーバー上のファイルにデータをエクスポートします。

    bcp database.owner.table out table.dat -f table.fmt

    (再び、おそらく-Uおよび-P。)

  5. データファイルをターゲットサーバーにコピーします(必要な場合)。

  6. ターゲットサーバーにデータをインポートします。

    table.dat -f table.fmtのbcp database.owner.table

    (再び、おそらく-Uおよび-P。)

それが他の誰かに役立つことを期待して。

0
T.J. Crowder

できませんが、red gateのSQL Compare/Data Compareなどのツールは、バックアップファイルを直接読み取り、その情報をライブデータベースに転送して、SS2005で互換性のない構文や設定を処理できます。

0
thecoop