web-dev-qa-db-ja.com

SQL Server 2012から2008にデータベースを移動する

SQL Server 2012インスタンス上のデータベースがあり、それを2008サーバーにコピーします。 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では利用できません。 "

29
Rich

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

データベースの作成方法を微調整するには、この巨大なSQLファイルの先頭部分を編集する方法を見つけなければなりませんでした。こちらの記事を参照してください。 https://stackoverflow.com/questions/ 102829/4-gb以上のファイルをサポートする最高のフリーテキストエディタ

そして最後に、SQL Management Studioで開くには大きすぎるSQLスクリプトを実行する方法を見つける必要がありました。こちらの記事を参照してください。 https://stackoverflow.com/questions/431913/300-ms-sql-sqlファイルの実行方法

40
Rich

SQLの移行には、フリーでオープンソースのSQLデータベース移行ウィザードを使用してください。

私は2〜3千万のレコードを持つ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であることを選択できます。

12
lvmeijer

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

3
Fernando

APEXSQL ツールを試してください。彼らはデータベースをスクリプト化し、データもスクリプト化するツールを持っています。

2
Paul

私は上記のRichの解決方法 https://superuser.com/a/469597/312310 をフォローしましたが、それは素晴らしい結果をもたらしました!ありがとう - 私はここでまだ投票することはできません!

これを機能させるために私がしなければならなかった追加のステップは以下のとおりです。

  • 論理ファイル名を変更して、パスが正しいことを確認してください。私はまた生成されたログ名を変更しなければなりませんでした、さもなければそれはログでmdfファイルを上書きしようとしてそれからこのエラーを投げました https://stackoverflow.com/questions/7534664/sql-server -sスクリプトエラーデータベースはすでに使用されています

    プライマリでデータベース[xxxxx]を作成します(NAME = xxxxx '、FILENAME = N'C:¥Program Files¥Microsoft SQL Server¥MSSQL11.MSSQL¥DATA¥xxxxx.mdf'、SIZE = 14400KB、MAXSIZE = UNLIMITED、FILEGROWTH = 1024KB)ログオン(NAME =N'xxxxxldf '、ファイル名= 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
    

それを実行してください、そして私は今SQL Server 2008 R2だけを持っている私のウェブサーバーに私の新しいUmbraco 7.1.2データベースを復元することができます!

1
ladygargar

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

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

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

xSQLスキーマ比較xSQLデータ比較 をご覧ください。最初にスキーマをschema compareと同期させてからデータをコピーすることができます。

免責事項:私はxSQLと提携しています。

0
Endi Zhupani