2008でのバックアップのSQL Server 2012下位互換性


14

SQL Server 2008を使用するクライアントが多数ありますが、これもサーバー上にあります。バックアップファイルを使用して、クライアント間およびオフィスでデータベースをやり取りします。

SQL Server 2012からバックアップを作成すると、2008インスタンスに復元する方法がないことを読みました。互換性レベルがこの問題を処理すると仮定しましたが、そうではありません。そのため、アップグレード方法については迷っています。すべてのクライアントを一度にアップグレードすることは不可能ですが、これは不可能ですが、これを行うためのクリーンな方法は考えられません。

データベースをクライアントに送信するだけでなく、クライアントからデータベースを受信する必要があります。これは、SQL Serverでの最初のバージョンアップグレードであるため、この問題は初めてです。進め方に関するアイデアはありますか?


4
SQL Server 2008の1つのインスタンスと、SQL Server 2012の1つのインスタンスを同時に異なるインスタンス名でサーバーにインストールできます。おそらく、それは異なるバージョンのクライアントに関するあなたの問題を解決するでしょうか?
ミカエルエリクソン

SOに関する同様の質問:stackoverflow.com/q/1744808/95710
DForck42

回答:


16

ここには、ファイルのバージョン番号と互換性レベルの2つのことが関係しています。データベースを新しいメジャーバージョン(2008から2008R2、2008R2から2012など)にアタッチすると、データベースのバージョンが永続的に変更され、そのデータベースを古いバージョンに再度アタッチすることはできません。

互換性レベルは、古いバージョンのSQL Serverで動作していた古い学校の非推奨T-SQLを解析するためのものです。データがディスクに保存される方法は変わりません。

古いバージョンのSQL Serverのユーザーにデータベースを提供するには、データをエクスポートして別のデータベースにインポートする必要があります。これには、Red GateのData Compareなどのツールが役立ちます。


うん、私は前にこれとまったく同じ問題を抱えていた。データベース全体をスクリプト化してから、すべてのデータをスクリプト化することになりました。Red GateのSQL CompareとData Compareがその日、救いに来ました。
-DForck42

@ DForck42:私の場合、データベースが大きすぎてデータをスクリプト化できないため、スキーマをスクリプト化してからデータを移動しましたbcp
ivan_pozdeev

@ivan_pozdeevは、SQL Server 2012 BCPを使用してエクスポートし、SQL Server 2008R2 BCPを使用してインポートしたと言っていますか?ファイル形式に互換性があることを知って、ありがとうございます。
クリス

2
@Chris msdn.microsoft.com/en-us/library/ms162802.aspx "SQL Server 2014では、bcpユーティリティは、SQL Server 2000、SQL Server 2005、SQL Server 2008、SQL Server 2008 R2、およびSQL Server2012。」
ivan_pozdeev

@ivan_posdeevに感謝します。これは啓示でした。他の人に役立つ場合に備えて、以下の手順を文書化しました。
クリス

6

SQL Serverは、互換性レベルの設定を使用して、特定の新機能の処理方法を決定します。これにより、アプリケーションに問題が発生することなく、DBを新しいバージョンのSQLに移行できます。互換性レベルは前後に変更できます。

残念ながら、バックアップファイルには後方互換性がありません。1つの方法は、インポート/エクスポートを使用して、現在のDBから古いバージョンのインスタンスにデータを移動することです。


3

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であることを選択できます。


2

以前のバージョンのSQL Serverにデータを取得し、RDSからデータをプルするために、BCPがいくつかのツールよりも効果的であることがわかりました。(@ivan_posdeevに感謝します。)

最初に、SQL Server Management Studioのデータベース、タスク、スクリプトの生成を右クリックして、スキーマを生成します。すべてのオブジェクトにチェックマークを付け、高度なオブジェクトでは必要なものすべてがスクリプト化される(統計、インデックスなど)ことを確認しますスキーマを作成するファイル。(使用して、先にデータベースを作成し、その上でこのファイルを実行osqlsqlcmdまたはGUI)。

データを移動するには、ソースデータベースで次のクエリを2回実行します。最初に2番目の列をコメント化してデータを抽出するバッチファイルを生成し、次に最初の列をコメント化してインポート先バッチファイルを生成します。(ソースサーバーと宛先サーバー、インスタンス名、出力ファイルと入力ファイルのディレクトリ、ユーザー名とパスワードを追加する必要があります。統合セキュリティを使用するには、とオプションをで置き換えます。)-U-P-T

これはUnicodeをサポートしています。必要ない場合は、-N両方のステートメントのスイッチをに変更してください-n

SELECT 
   'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME  + ' out d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
--    'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME  + ' in d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME  + '.ERRORS.dat'
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.Name, t.NAME

schema.tablename.ERRORS.datという名前のチェックファイルを実行すると、失敗した行が含まれます。失敗した行はありません。

BCPのMSDNリファレンスはこちらBCPオプションのよりわかりやすい説明はこちらです。

これは、スクリプトの生成や私が試したツールのどれよりもはるかに優れていることがわかりました。また、RDSデータベース(バックアップを許可しない)で実行されます。生成されるデータファイルはSQLスクリプトのサイズの30%であり、それらの実行にかかる時間はほんのわずかであり、はるかに信頼性が高くなります。(データのスクリプトを作成するためにSQL Serverによって生成されたスクリプトは、常に最新のトリップ、時には予想通り時々 、生成されたSQLは2008R2と互換性がありませんでした(例えば、使用されていないnvarchar(0)、多くの場合、識別可能な理由などを完了しなかったBCPはまた、任意の制約違反を複製、参照整合性など)。

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