以前のバージョンでのSQL Serverデータベースバックアップの復元


185

上位バージョンのSQL Serverデータベースバックアップファイルを下位バージョンのSQL Serverに復元する方法

SQL Server 2008 R2(10.50.1600)を使用してバックアップファイルを作成し、それをライブサーバーのSQL Server 2008(10.00.1600)に復元します。

SQL Server 2008にバックアップを復元しようとすると、エラーが発生しますRestore Failed

データベースは、バージョン10.50.1600を実行しているサーバーにバックアップされました。そのバージョンは、バージョン10.00.1600を実行しているこのサーバーと互換性がありません。

このサーバーでバックアップファイルを復元するにはどうすればよいですか?


2
あなたはこれを行うことができません-それは単に不可能です。SQL Serverは、*下の一つに、」上位バージョンからデータベースをダウングレードはできません。
marc_s

18
MicrosoftはSQLサーバーのすべてを知っており(作成したため)、2つのバージョン間でデータを移動することは不可能です。なぜ、ある種の互換モードがエクスポートで利用できないのか、単に理解できません。それはどれほど難しいですか?
dvdmn 2015年

1
さまざまなタイプ、さまざまなステートメント、さまざまなブロックレイアウトなど、トップギアのエピソードと同じくらい難しい@dvdmn。関係するバージョンに関係なく、データベース間でのデータの移動は非常に簡単です。ダウングレードはありませんが
Panagiotis Kanavos

2
@PanagiotisKanavos私は同意しません、mysqlではdbをsqlコマンドとしてエクスポートでき、mysqlの任意のバージョン(ダウンまたはアップ)で復元できます。はい、sql dbをスクリプトとしてエクスポートすることもできますが、相互に依存するストアドファンクション/プロシージャがある場合は簡単に復元できません。それは基本的に有用/解決策ではありません。
dvdmn

3
@dvdmnデータベースのスクリプトのエクスポートは、バックアップとは完全に異なります。一部の製品ではバックアップ/復元機能が提供されていないこと、またはさらに悪いことに、2つの概念を混同していることに気づきました。これは多くの場合、歴史的な理由により発生します。過去にバックアップが不足していたこと、一部の製品はその名前でエクスポート/スクリプト作成と呼ばれていました。現在、物理的および論理的なバックアップについて話し合うことで用語の競合を解決し続け、スクリプトについて話すときに
混乱する必要があり

回答:


78

いいえ、データベースをダウングレードすることはできません。10.50.1600はSQL Server 2008 R2バージョンです。このデータベースを復元したり、復元しようとしているSQL Server 2008インスタンスに接続したりする方法はまったくありません(10.00.1600はSQL Server 2008です)。あなたの唯一のオプションは:

  • このインスタンスをSQL Server 2008 R2にアップグレードするか、
  • SQL Server 2008 R2インスタンスにあるバックアップを復元し、すべてのデータをエクスポートして、SQL Server 2008データベースにインポートします。

権限の制限のため、クライアントのライブサーバーをアップグレードできません。データベースサイズが2.5GBを超えているため、メモリ例外エラーのためにデータスクリプトを作成できませんでした。

9
@Gauravデータをスクリプト化しないでください。代わりに、データなしでデータベース全体(テーブル、プロシージャ、トリガー、制約など)をスクリプト化し、新しいデータベースを作成して、ソースデータベースを右クリックし、[ツール]に移動して、テーブルの内容をデータベースに転送するための「データのエクスポート」。
ジムマクロード、

17
私は「あり得ない方法はない」というパットの答えに非常に疑っています。それは、あなたがまだ方法を見つけていないことを意味します。これを実行する理由は多数ある可能性があるため、これは役に立ちません。
ジェイイマーマン2014

6
@Jayは同意しません。可能な場合は回避策を提供する方が便利ですが、「できない」と答えることもできます。
ラッセルフォックス

1
@Zhang質問がある場合は、コメントではなく質問として質問してください。
Remus Rusanu

83

データベーススキーマとデータで構成されるファイルを生成するデータ層アプリケーションのエクスポートと呼ばれる機能を使用でき.bacpacます。

移行先サーバーでは、事前に作成されたファイルから新しいデータベースを作成してデータを取り込むデータ層アプリケーションのインポートオプションを使用でき.bacpacます。

データベーススキーマを転送するだけの場合は、データ層アプリケーションの抽出を使用してファイルを作成し、データ層アプリケーションを展開して作成したデータベーススキーマを展開できます。

SQL 2014からSQL 2012、SQL 2014からSQL 2008R2までのさまざまなバージョンのSQL Serverでこのプロセスを試してみましたが、うまくいきました。


8
これはもっと注目に値する答えです。ほとんどの場合、実際にはJust Workを実行します。ただし、孤立しているSQLユーザーがいる場合、エクスポート操作は失敗します。これらのビットを手動でいつでも削除/追加して、SQLバージョンを超越することができます。
Blue Blue

3
MSSQLEX2012(V11)にMSSQLEX2014(V12)で作成されたDBを作成するために、これを試してみました。「Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider is not valid」エラーが発生し、変更する方法がありません。
Craig、

5
.bakpacを使用したSQL Server 2014から2012へのインポートは機能しますが、正しいバージョンのSSMSが必要です。たとえば、SSMS 2016 CTP3を使用していますが、問題なく動作しました。それは私がSSMS 2012を使用するために動作しませんでした私がテストしていないSSMS 2014
グレッグガム

1
T-SQLでこの手順をスクリプト化できるかどうかは誰でも知っていますか?更新(少しグーグルで自分に答える):sqlpackage.exeコマンドラインでこれを自動化できます。詳細はGoogle。
Alex

1
これは、非常に大規模で複雑なSQL2017をSQL2016にダウングレードするために私のために機能した唯一のソリューションです。性能もとても良いです。
キースが吹く

35

必ずしも機能しない

動作します

  • スクリプトの生成 - タスク -> スクリプトの生成。[ スクリプトオプションの設定] -> [ 詳細]ページで、目的のターゲットSQL Serverバージョンを設定していることを確認してください。スキーマ、データ、またはその両方をコピーするかどうかをそこで選択することもできます。生成されたスクリプトで、非エクスプレスからエクスプレスまたはその逆に移動する場合は、mdf / ldfファイルのDATAフォルダーを変更する必要がある場合があります。

  • Microsoft SQL Serverデータベース公開サービス -SQL Server 2005以降に付属していると思います。こちらから最新バージョンをダウンロードしてください。前提条件:sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msiSQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msiここからダウンロードしてください)。


7
実質的なデータベースではスクリプトの生成は信頼できません。可能な限り避けてください。
Chris

下部の両方のリンクは404です。
Sнаđошƒаӽ

29

これを完了するためのさまざまなオプションに関する私の2セントは次のとおりです。

サードパーティのツール:おそらく、ジョブを実行する最も簡単な方法は、古いバージョンで空のデータベースを作成し、サードパーティのツールを使用してバックアップを読み取り、新しく作成したデータベースをバックアップと同期させることです。

レッドゲートは、最も人気のあるの一つですが、のような多くの人があるApexSQL DiffのApexSQLデータ差分アデプトSQLIderaは ...。これらはすべてプレミアムツールですが、試用モードで作業を完了することができます;)

スクリプトの生成:他の人がすでに述べたように、SSMSを使用していつでも構造とデータをスクリプト化できますが、実行の順序を考慮する必要があります。デフォルトでは、オブジェクトスクリプトの順序は正しくなく、依存関係に注意する必要があります。データベースが大きく、多くのオブジェクトがある場合、これは問題になる可能性があります。

インポートおよびエクスポートウィザード:すべてのオブジェクトを復元するのではなく、データテーブルのみを復元するため、これは理想的なソリューションではありませんが、必要なときにすばやく修正するために検討できます。


1
Red Gate Sql Cloneは、異なるバージョンのSQLサーバー間のクローン作成をサポートしていません。これを手動で実行しようとすると、まったく同じエラーが報告されます。
DarkDeny

29

上位バージョンで作成したデータベース(またはアタッチ)を下位バージョンに復元することはできません。唯一の方法は、すべてのオブジェクトのスクリプトを作成し、そのスクリプトを使用してデータベースを生成することです。

ここに画像の説明を入力してください

選択し、「スキーマおよびデータを」 - あなたは、バックアップスクリプトファイルへの両方の事をしたい場合は
選択スキーマのみを - スキーマだけが必要な場合。

ここに画像の説明を入力してください

はい、これで、データベースのスキーマとデータを使用したスクリプトの作成が完了しました。


16

これを行う別の方法は、「データベースのコピー」機能を使用することです。

ソースデータベースを右クリックして、[タスク]> [データベースのコピー]を選択します。

データベースをSQL Serverインスタンスの下位バージョンにコピーできます。これは、SQL Server 2008 R2(SP1)-10.50.2789.0からMicrosoft SQL Server 2008(SP2)-10.0.3798.0まで機能しました。


3
ターゲットがSQLサーバーエクスプレスの場合、これは機能しません。「宛先サーバーはSQL Server 2005以降のExpressインスタンスにすることはできません。」social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/...
オハッドシュナイダー

2
この方法でSQL Server 2012からSQL Server 2008にデータベースをコピーすることもできません。
Twinkles 2013年

1
データベースのコピーデタッチ/アタッチ操作です
Panagiotis Kanavos

1
このヒントをありがとう!それは私を大いに助けました。私は2008 R2 SQLにSQL 2008からデータをコピーする
dns_nx

8

これを試すことができます。

  1. SQL Server 2008にデータベースを作成します。
  2. データのインポート機能を使用すると、SQL Server R2(またはそれ以上のバージョン)からデータをインポートできます。
  3. 「RedGate SQLCompare」を使用してスクリプトを同期します。

6

移動Task->スクリプトの生成 ...

高度「スクリプトのためのデータの種類」を選択"Schema and data"して、下位バージョンでこのスクリプトを実行してみてください。


5
これは非常に優れたソリューションですが、大規模なデータベースではうまく機能しません。
veljasije

5

きれいではありませんが、SQL 2008 R2のインストールにこのオプションをインストールすることを許可した方法です。

1)SQL Server 2008 R2のデータベースを右クリックし、[タスク]をクリックします。ウィザードの[スクリプトの生成]で、最初の手順でデータベース全体とオブジェクトを選択します。[スクリプトオプションの設定]ステップで、[詳細設定]ボタンが表示されます。これを選択し、R2バージョンではなく、[サーバーバージョンのスクリプト] = SQL Server 2008を選択していることを確認してください。それ自体は、すべての主キー、制約、およびストアドプロシージャのような他のオブジェクトをもたらすわけではありません。」

2)クエリウィンドウを使用して新しいインストールまたはデータベースインスタンスSQL ExpressまたはSQL Server 2008で生成されたSQLスクリプトを実行するか、保存された.sqlスクリプトを開いて実行すると、新しいデータベースが表示されます。

3)新しいデータベースを右クリックして[タスク]を選択します。[データのインポート]を選択します。R2データベースとしてソースを選択し、新しいデータベースとして宛先を選択します。「1つ以上のテーブルまたはビューからデータをコピーする」、一番上のチェックボックスを選択してすべてのテーブルを選択してから、次のステップでパッケージを実行すると、古いバージョンのものがすべて揃います。これは、2005バージョンに戻る場合にも機能するはずです。これが誰かを助けることを願っています。


こんにちは@motogeek、私は同じ問題を抱えていますが、本番サーバーにはR2があり、ローカルには2008があります。この場合、インポートおよびエクスポートデータを使用できません。これのための理想的な解決策は何でしょうか?
Abbas

2

小さなテーブルにはBCPを使用できます。

BCP OUTコマンド:-

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

BCP INコマンド:-Invoicescopy1のテーブル構造を作成します。

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c

0

私はこれが古い投稿であることを感謝しますが、Azure移行ウィザード(Codeplexで利用可能-リンクできないのは、現在Codeplexが入力しているため、これを入力している)がこれを簡単に実行できることを知っていると役立つでしょう。


このツールは、SQL Serverデータ移行アシスタントに置き換えられました。参照:stackoverflow.com/questions/46517060/...
ahwm

0

すべてを移行するには、SSMSのインポート/エクスポートウィザードを使用する必要があります。

バックアップ/復元またはデタッチ/アタッチを使用して「ダウングレード」することはできません。したがって、あなたがしなければならないのは:

  1. 新しいSSMS / SQLバージョンを実行しているサーバーからデータベースをバックアップします。
  2. (ターゲットデータベースを右クリックした後)[タスク]メニューを展開し、[データのインポート]オプションを選択して、生成された.bakファイルからデータをインポートします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.