web-dev-qa-db-ja.com

異なるバージョン/エディションのバックアップファイルからデータベースを復元する

下位互換性の理由から、古いバージョンから新しいバージョンに復元している限り、SQL Serverでデータベースを復元することは可能であると読みました。

SQL Serverの異なるエディションの* .bakファイルからデータベースを復元できるかどうか、誰もが知っていますか?非常に大規模なデータベースをFTP経由で移動しますが、数日かかるため、これを行うのは1回だけにします。 FTP経由でデータベースを転送するまでに誰も応答しない場合は、明らかにこれを試し、テストで機能するかどうかを確認し、独自の質問に答えます。

以下は、SQL Serverのバージョンの詳細を取得するクエリです。 productversionの形式は{major revision}.{minor revision}.{release revision}.{build number}。私の場合、{release revision}の値は5500ソースと5512ターゲット。これで問題ありません。ただし、editionは異なります。

クエリ:

SELECT 
  SERVERPROPERTY('productversion'), 
  SERVERPROPERTY('productlevel'), 
  SERVERPROPERTY('edition')

ソースデータベース:

10.0.5500.0
SP3
Developer Edition (64-bit)

ターゲットデータベース:

10.0.5512.0
SP3
Enterprise Edition (64-bit)
11
MacGyver

DeveloperからEnterpriseまでは問題ありませんが、プロセッサライセンスを使用している場合は、ターゲットサーバーにすべてのCPUをカバーするライセンスがあることを確認してください。そして、それらをSQLから単に隠すだけでは十分ではありません。それらがマシンに物理的に接続されている場合は、あなたが責任を負います。

また、下位のビルドから上位のビルドに移行すると、データベースのバージョンが増加します。これが問題になる可能性のあるシナリオがいくつかあります。 2008の特定のビルドで15,000のパーティションサポートを使用している場合、2008 R2の特定のビルドにアップグレードすると機能しません。また、実際には古いビルドのバグであるが、新しいビルドでは修正されている最適化に依存している(そして回避策が講じられている)可能性があり、これによりパフォーマンスが低下する可能性があります。また、ソースで使用されているトレースフラグを確認し、宛先でも有効にする必要があるかどうかを判断することも重要です。ジョブ、ログインなどを気にしないでください.

もちろん後戻りはできません。 10.0.5512-> 10.0.5500のようなマイナーダウングレードを試したことはありませんが、サービスパックまたはバージョンでダウンすることは絶対に不可能です。したがって、Developer Editionインスタンスに2012データベースがあり、本番環境の2008インスタンスに配置したい場合は、作業が省略されます( ここ および を参照)。ここ )-特に2012年の機能を使用した場合。


しかし、この質問に人々を導くかもしれない他のケースをカバーするために(例えば、誰かが開発者->標準またはエンタープライズ-> Expressまたはあなたが何をしたいのか).

他のエディション->エディションのアップグレードがありますが、うまくいきません。 Expressでサポートされていない機能を使用した場合は、Developer-> Expressから(Enterprise以外のエディションでも同じです)。下位レベルのエディションでは使用できない機能の例(この場合、データベースをオンラインにしようとした時点で復元は停止します):

  • パーティショニング
  • 変更データキャプチャ
  • データ圧縮
  • 透過的なデータ暗号化

これを.BAKファイルから直接伝える方法があるかどうかはわかりません(ページヘッダーからどこかに抽出できる魔法があるか、または16進エディターで書き込む週末があるかどうかはわかりません) 、ただしデータベースはまだソースインスタンスに影響を与えていませんが、SKUが原因で利用可能な機能を使用しているかどうかを確認するには、いつでも次の操作を実行できます。

SELECT feature_name FROM sys.dm_db_persisted_sku_features;

SQL Server Auditがそのリストに含まれるべきかどうかはわかりません-その機能のエディションの独占性が変更されたため、おそらくそれをどのように使用しているかによって異なります。他にも使用している可能性があるがDMVに表示されないものがあります(コードに含まれているためにDMVが解析しないものや、データベースがSQL Serverエージェントなどの外部のものに依存していることが原因です、Service Brokerなど):

  • ミラーリング
  • 特定の形態の複製
  • ログシッピング
  • データベースのスナップショット
  • オンラインインデックス
  • 更新可能な分散パーティションビュー
  • バックアップ圧縮
  • ポリシーベースの管理
  • 計画ガイド
  • データベースメール
  • メンテナンス計画
  • 全文検索

また、ファイルサイズの制限により、DeveloperからExpressに移行できない場合もあります(Expressデータベースは、データファイルの合計サイズが10GBに制限されています)。

もちろん、警告されない他の落とし穴があるかもしれません-それらは移行を妨げませんが、それらはターゲット上で非常に異なるパフォーマンスをもたらすかもしれません。例:

  1. ターゲットエディション(またはターゲットの基盤となるオペレーティングシステム)に対するメモリ/ CPUの制限が異なる。これは、2008 R2 Enterpriseから2012 Enterprise(CAL)に移行した人の多くを表しており、サービスは人為的に最初の20コアに制限されています。これにより、直接的なパフォーマンスの違いが生じる可能性があります(たとえば、クエリを満たすのに十分なメモリがないか、並列クエリのパフォーマンスがはるかに遅くなります)。より微妙なものには、基盤となるハードウェアが異なるために行われる計画の選択が含まれます。
  2. ソースでのインデックス付きビューマッチングなどの機能への依存は、NOEXPANDを使用するようにソースコードを変更しない限り、ターゲットで自動的に尊重されません。そして、あなたはこの機能がクエリが突然遅くなる理由であることさえ知らないかもしれません。
  3. 同じことが、並列インデックス操作やおそらくこの瞬間に思い浮かばない多くの他の最適化にも当てはまります(ありがたいことに、私はエンタープライズスペースでほぼ排他的に作業するので、ほとんどの場合、下位エディションの制限について心配する必要はありません。 )。

[〜#〜] update [〜#〜]に基づいて this duplicate

データベースを特定のエディションから古いエディション(同じバージョンであっても)に復元しようとする場合があり、 役に立たないエラーが表示される

サーバー 'server\instance'のRESTOREが失敗しました。
RESTOREはデータベース 'databasename'を開始できませんでした。

これは直感的ではありません。ただし、SQL Serverのイベントログをより深く見ると、より有用なエラーが表示されます(例は1つだけです)。

SQL Serverの現在のエディションでは一部のデータベース機能を使用できないため、データベース 'databasename'を開始できません。
データベース 'databasename'には、パーティション関数 '_dta_pf__9987'が含まれているため、このエディションのSQL Serverでは起動できません。 SQL ServerのEnterpriseエディションのみがパーティション関数をサポートしています。

さて、それは真実ではありません-評価版または開発者版に復元することもできますが、それは要点の外です。このデータベースを復元するには、基本的に2つのオプションがあります。

  1. SQL Serverの適切なエディションに復元します。これは、新しいインスタンスを検索またはインストールすることを意味します。
  2. 別の名前の新しいデータベースとしてソースサーバーにバックアップを復元し、すべてのエンタープライズ機能を削除してから、データベースを再度バックアップし、それを下位エディションに復元します。 (この特定のケースでは、パーティション関数の名前をエラーメッセージに残しました。これはとにかく破棄可能なもののようです-データベースエンジンチューニングアドバイザによって作成されたものであり、そうでない人が作成した可能性があります。彼らが何をしていたか知っている。これはいつもそうだとは限らない。)

(2)のバリエーションは、ソースデータベースのパーティション分割とその他の機能を削除し、別のバックアップを取ることです。しかし、それが壊れていなければ...

15
Aaron Bertrand

開発者とエンタープライズは同じソフトウェアですが、ライセンス契約が異なります。

宛先でこのデータベースを正常に復元する必要があります。

3
Mark Henderson