none
SQLServer2012 → SQLServer2008R2 互換性レベルの変更が効かない RRS feed

  • 質問

  • お世話になります。

    表題の通りです。

    2012→2008R2にmdfを移動するため

    2012側で互換性を下げました。

    互換性は下げれたのですが2008R2でアタッチ時に以下のエラーが出てアタッチが出来ません。

    データベース 'dbName' のバージョンは 706 なので、開けません。このサーバーではバージョン 661 以前がサポートされます。

    このダウングレード パスはサポートされません。
    新しいデータベース 'dbNamedbName' を開けませんでした。CREATE DATABASE は中止されます。 (Microsoft SQL Server、エラー: 948)

    【2012側で互換性を下げた手順】

    1.Management StudioのGUIから行いました。

    2.1でダメだったのでクエリからも行いました。EXEC sp_dbcmptlevel @dbname = 'tempdb', @new_cmptlevel = 100

    何が原因でしょうか?宜しくお願い致します。

    2014年8月22日 0:46

回答

  • 問い合わせの件は、そもそもサポートされていないと思います。

    データベースの復旧モデルにかかわらず、SQL Server バックアップは、バックアップを作成したバージョンより古いバージョンの SQL Server では復元できません。
    http://technet.microsoft.com/ja-jp/library/ms191253.aspx

    データベースコピーツールを使用するのがいいかと思います。

    • 回答としてマーク sumi_sumi 2014年8月22日 22:41
    2014年8月22日 3:05

すべての返信

  • 問い合わせの件は、そもそもサポートされていないと思います。

    データベースの復旧モデルにかかわらず、SQL Server バックアップは、バックアップを作成したバージョンより古いバージョンの SQL Server では復元できません。
    http://technet.microsoft.com/ja-jp/library/ms191253.aspx

    データベースコピーツールを使用するのがいいかと思います。

    • 回答としてマーク sumi_sumi 2014年8月22日 22:41
    2014年8月22日 3:05
  • サヴロウ様

    有難うございます。

    そうなんですか・・・。知りませんでした・・・。

    それなら「互換性を変更出来る機能」とは

    何のためにあるのでしょう?

    目的が違うのでしょうか??

    2014年8月22日 5:12
  • 一言で表現するのは難しいのですが、SQLServer2008R2で動いていたSQLやストアドプロシージャ等がSQLServer2014にアップすると結果が違ったりそもそも動かない、なんてことになると大変ですよね。
    ですので後方互換性を保つために互換性レベルというものがデータベース単位で用意されています。
    ※互換性というのは単にSQLやストアドだけではなく、オプティマイザの動作やSQLServerの機能全般のことを指します。

    SQLServer2008R2(互換性レベル100)のデータベースをSQLServer2014にリストアし、互換性レベルを100のままにしておけば、SQLServer2008R2と同じ挙動をさせることができます。
    ただしこの場合はSQLServer2014(互換性レベル120)の新しい機能は使用できません。

    これとバックアップが戻せる戻せないは別になりますので、SQLServer2014でバックアップを取ったものはたとえ互換性レベルが100だったとしても、SQLServer2008R2には戻せません。

    互換性レベル
    http://msdn.microsoft.com/ja-jp/library/bb510680.aspx


    2014年8月22日 10:12
  • 原因は分離レベルを下げていない DB をアタッチしたからですね。
    エラーメッセージのとおりです。
    移動したい DB の互換性レベルを下げてからアタッチしてください。
    つまり、sp_dbcmptlevel の @dbname 引数に tempdb ではなく、移動したい DB の名前を指定しなければいけません。


    MCITP(Database Developer/Database Administrator)

    2014年8月22日 14:05
  • nagino さま

    有難うございます。

    もちろん@dbnamaの箇所は

    移動するdbの名前を入力しました。

    GUIでやっても結果は一緒でした・・・。

    2014年8月22日 22:37
  • サヴロウさま

    引き続き回答有難うございます。

    互換性を保つことの意味、分かりやすいご説明のおかげで理解出来ました。

    SQLServerに限った話ではないですね。

    2014年8月22日 22:40