SQL Server 2012から2008へのデータベースの移動


29

2008サーバーにコピーしたいSQL Sever 2012インスタンスにデータベースがあります。2008サーバーは、2012サーバーによって作成されたバックアップを復元できません(試しました)。

2012年には、2008互換のバックアップを作成するオプションが見つかりません。何か不足していますか?

スキーマとデータをバージョンに依存しない形式にエクスポートして、2008年にインポートできる簡単な方法はありますか?

データベースは2012固有の機能を使用しません。テーブル、データ、ストアドプロシージャが含まれています。

ここに私が今まで試したものがあります

2012サーバーで[タスク][ スクリプトの生成]を試してみたところ、スキーマ(ストアドプロシージャを含む)をSQLスクリプトとして生成できました。ただし、これにはデータは含まれていません。

2008マシンでそのスキーマを作成した後、2012マシンで「データのエクスポート」ウィザードを開くことができ、2012をソースマシンとして、2008をターゲットマシンとして設定した後、テーブルのリストが表示されました。コピーできました。すべてのテーブル(300以上)を選択し、ウィザードをクリックしました。残念ながら、スクリプトの生成に何年も費やし、「読み取り専用列 'FOO_ID'への挿入に失敗しました」などのエラーで失敗します。

また、「2000以降から2005以降に」コピーできると主張している「データベースコピーウィザード」も試しました。次の2つのモードがあります。

  1. エラーで失敗した「切り離して接続」:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. エラーで失敗したSQL管理オブジェクトメソッド

    IsFileStreamプロパティを読み取ることができません。このプロパティは、SQL Server 7.0では使用できません。」


直接エクスポートできますか?DBの大きさはわかりませんが、これは小規模なデータベースを操作するときに行うことです。
デイブ

2
SQL Serverの古いバージョンは、新しいバージョンからバックアップを復元できません。これは仕様です。エクスポート機能、テーブルアウトスクリプトやデータを使用し、SQL 2008にスクリプト目標を設定

4
「彼らの正しい心の誰かが後方に移行する理由を解明しようとしています。」-2012年に運用サーバーを実行していますが、開発マシンには2008年しかありません。開発を支援するためにDBのローカルコピーが欲しいのですが、まだ開発マシンに2012年をインストールしたくありません。それだけの空き容量があり、インストールに何時間も費やしたくありません。(だから私は代わりに逆方向に移行しようとして何時間も費やしている....それは私だけです。)
リッチ

1
あなたはほとんどそこにいます。行ったエクスポートセクションには、スキーマだけでなくデータも含めるオプションがあります。

1
Ramhoundに追加したかったのは、開発環境でSQL 2008 R2をSQL 2012にアップグレードした後、アップグレードしたインスタンスで多くのスキーマとデータを変更した後、VS 2010がスキーマまたはデータをSQL 2012と比較できないことです。 VS 2010およびVS 2012のSSDTは、スキーマをSQL 2012と比較できますが、元のVS 2010データベースプロジェクトと互換性がなく、データを比較できません。簡単に言えば、SQL 2008 R2に戻って、会社ごとに2012年に進むという決定が下されるまで待ちます。しかし、新しいスキーマ/データを保存したいと思います。私の知る限り、私の心は正しい。
GFK

回答:


40

2012 SQL Management Studioでデータベースを右クリックし、[タスク->スクリプトの生成]を選択します。ようこそ画面を過ぎてクリックし、「データベース全体とすべてのデータベースオブジェクトをスクリプト化する」を選択します。「スクリプトの保存方法を指定する」ページで、「詳細」をクリックします。ポップアッププロパティページの[全般]で、[スクリプトへのデータの種類]を[スキーマのみ]から[スキーマとデータ]に変更し、[サーバーバージョンのスクリプト]を[2012]から[2008]に変更します。

その後、データベースの作成方法を微調整するために、この大規模なSQLファイルの開始を編集する方法を見つける必要がありました-このqを参照してください:https : //stackoverflow.com/questions/102829/best-free-text-editor -4GB以上のファイルをサポート

そして最後に、SQL Management Studioで開くには大きすぎるSQLスクリプトを実行する方法を見つける必要がありました-このqを参照してください:https : //stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-file


ファイルの先頭で何を調整しましたか?
JonoRR

1
正確に思い出せない、ごめんなさい。アプリ固有のもの。おそらくデータベース名またはそのようなもの。同じ問題を抱えている人々に関連するものであれば、ここに追加したと思います。
リッチ

3
@JonoRRほとんどの場合、CREATE DATABASEステートメントを編集し、データファイルパスを宛先サーバーで意味のあるものに設定する必要があります。
イグビーラージマン14年

12

SQLの移行には、無料のオープンソースSQLデータベース移行ウィザードを使用します。

数千万件のレコードを持つ5GBのデータベースがあり、Generate Scriptを介してルートを試した後、sqlcmd.exeで実行しました。まず第一に、生成されたスクリプトは常に正しく動作していませんでした。第二に、sqlcmd.exeは大きなファイルでも失敗する可能性があり、使用可能なメモリについて文句を言います。osql.exeは機能しますが、時間がかかります(コマンドライン引数も同じです)。

その後、SQL ServerをSQL Azureデータベースに移行するためのすばらしいツールに出会いました。これは、SQL 2012データベースを2008 R2に移行する場合など、SQL ServerからSQL Serverでも機能します。一括コピーを使用するbcp.exeを使用します。GUIとコマンドライン(バッチ)バージョンが利用可能であり、それはオープンソースです。http://sqlazuremw.codeplex.com/を参照してください。私の場合、操作には16分かかりました。

詳細画面では、ターゲットがSQL AzureではなくSQL Serverであることを選択できます。


1
このウィザードの2008 R2はどこで設定しますか?
JonoRR

素晴らしいヒント、Express 2012からWeb 2008にデータベースを復元しました。非常に簡単です。
rkawano

広告どおりに機能することを確認できます。2014-> 2012、クロスドメイン、ローカルSQLサーバーを実行しました。このツールはどのように長い間私の検索を避けましたか?アズール以外の使用でも驚くべきことです。
ごみ節

3

私はSQLは初めてですが、2012年から2008年に移行することができました。そのために、SQLインポートおよびエクスポートユーティリティを使用しました。SQL 2012サーバーと移行するデータベースを選択し、最終的に2008サーバーを選択して、移行先のデータベースとして新しいデータベースを作成しました。出来た。


2

APEXSQLツールをお試しください。データベースをスクリプト化し、データもスクリプト化するツールがあります。


「299ドルから」-無料の代替手段はありますか?
リッチ

1

2008マシンでそのスキーマを作成した後、2012マシンで「データのエクスポート」ウィザードを開くことができ、2012をソースマシンとして、2008をターゲットマシンとして設定した後、テーブルのリストが表示されました。コピーできました。すべてのテーブル(300以上)を選択し、ウィザードをクリックしました。残念ながら、スクリプトの生成に何年も費やし、「読み取り専用列 'FOO_ID'への挿入に失敗しました」などのエラーで失敗します。

問題は、ID列を挿入できないことです。そのため、

  1. すべてのテーブルにチェックを入れて選択します
  2. すべてのテーブルを選択します(これを行う方法は、最初のテーブルをクリックし、Shiftキーを押しながら最後のテーブルをクリックすることです)
  3. [マッピングの編集]をクリックします。次のボタンのすぐ上とプレビューの横に表示されます。
  4. ウィンドウが表示されたら、「IDの挿入を有効にする」にチェックマークを付けてから、[次へ]をクリックして先に進みます。これは機能するはずです。それは私のために働いた。

1

上記のリッチのソリューションhttps://superuser.com/a/469597/312310をフォローしましたが、うまくいきました!ありがとう-ここではまだ投票できません!

これを機能させるために必要な追加の手順は次のとおりです。

  • 論理ファイル名を変更し、パスが正しいことを確認してください。また、生成されたログ名を変更する必要がありました。変更しないと、ログでmdfファイルを上書きしてから、このエラーをスローしようとしましたhttps://stackoverflow.com/questions/7534664/sql-server-script-error-database-is-使用中

    CREATE DATABASE [xxxxx] ON PRIMARY(NAME = xxxxx '、FILENAME = N'C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf'、SIZE = 14400KB、MAXSIZE = UNLIMITED、FILEGROWTH = 1024KB)ログオン(NAME = N'xxxxxldf '、FILENAME = N'C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf'、SIZE = 18560KB、MAXSIZE = 2048GB、FILEGROWTH = 10 %)GO

  • 生成されたセクションをコメント化し、その後手動でユーザー権限を追加する必要がありました

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

すぐに試してみて、新しいUmbraco 7.1.2データベースをSQL Server 2008 R2のみを搭載したWebサーバーに復元できるようになりました!


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