SQL Server 2014 データベース エンジンの非推奨機能SQL Server ではバックアップのリストアに下位互換があり、リストアしようとするバックアップを取得した SQL Server のバージョンにも依存するのですが、上位のバージョンでは下位のバージョンのバックアップをリストすることが可能です。
上位互換はないため、新しいバージョンで取得したバックアップを下位のバージョンにリストアすることはできません。
また、デタッチ / アタッチシナリオを利用して、データベースを新しいバージョンの SQL Server にアタッチした場合、アタッチしたタイミングでデータベースの内部のバージョンアップが行われています。
そのため、新しいバージョンでアタッチしたデータベースを下位のバージョンの SQL Server にアタッチするということもできません。
新しいバージョンに移行をした際の、切り戻し方法としてはデータベースのバックアップ / リストア、デタッチ / アタッチではなく、データベースのインポート / エクスポートを用いて実施する必要があります。
基本的には直近三世代のバージョンの SQL Server のバックアップをリストアすることが可能となっており、それ以前の世代のバックアップについてはリストアをすることができません。
簡単にではありますが、バックアップ / リストアについてまとめてみたいと思います。
本投稿では、
- SQL Server 2000
- SQL Server 2005
- SQL Server 2008 R2
で取得したバックアップを
- SQL Server 2008 R2
- SQL Server 2012
- SQL Server 2014
でリストアするパターンについて記述しています。
Contents
■互換性レベルのサポート状況について
まずは、互換性レベルのサポート状況についてまとめてみたいと思います。
SQL Server | 互換性レベル | ||||||
65 (6.5) |
70 (7.0) |
80 (2000) |
90 (2005) |
100 (2008) |
110 (2012) |
120 (2014) |
|
2000 | ○ | ○ | ○ | – | – | – | – |
2005 | – | ○ | ○ | ○ | – | – | – |
2008/R2 | – | – | ○ | ○ | ○ | – | – |
2012 | – | – | – | ○ | ○ | ○ | – |
2014 | – | – | – | -※1 | ○ | ○ | ○ |
※1 SQL Server 2014 に SSMS で接続した場合、GUI では互換性レベル 90 が表示されていますが、選択することができないので、対応しているのは 100 以降となります。
SQL Server では、リストアが可能なバージョンのバックアップをリストアした場合、互換性レベルの確認も行っており、
- リストアには対応しているが、互換性レベルが対応していない
というリストアを行った場合、対応している最下位の互換性レベルまでバージョンアップされます。
例としては以下のような状況を想像してみてください。
- SQL Server 2000 で互換性レベル 65 で使用していたデータベースを SQL Server 2008 R2 にリストア
SQL Server 2008 R2 では、SQL Server 2000 のバックアップをリストアすることが可能です。
# このマトリクスは後述します。
しかし、SQL Server 2008 R2 は、互換性レベル 65 には対応していません。
この場合、リストアをするとどうなるかというと互換性レベルが 80 に自動的に変更されます。
互換性レベルが変更されることでクエリのサポート状況が変わっていますので、
- 旧バージョンの SQL Server のデータベースをリストアできたが、互換性レベルが変わるためクエリの実行状況が変わってくる
という可能性があることは十分に注意する必要があります。
互換性レベルが変わることで何が起きるかは以下の情報が参考になります。
- SQL Server 2008
- ALTER DATABASE 互換性レベル (Transact-SQL)
- 90 以下と 100 の相違点
- 80 と 90 の相違点
- ALTER DATABASE 互換性レベル (Transact-SQL)
- SQL Server 2008 R2
- ALTER DATABASE 互換性レベル (Transact-SQL)
- 90 以下と 100 の相違点
- 80 と 90 の相違点
- ALTER DATABASE 互換性レベル (Transact-SQL)
- SQL Server 2012
- ALTER DATABASE 互換性レベル (Transact-SQL)
- 100 以下と 110 の相違点
- 90 と 100 の相違
- ALTER DATABASE 互換性レベル (Transact-SQL)
- SQL Server 2014
- ALTER DATABASE 互換性レベル (Transact-SQL)
- 110 以下と 120 の相違点
- 90 と 100 の相違点
- 110 と 120 の相違点
- ALTER DATABASE 互換性レベル (Transact-SQL)
ケースとして多そうなのは互換性レベル 80 から互換性レベル 100 への変更となるでしょうか。
この場合、
- 80 と 90 の相違点
- 90 と 100 の相違点
- 90 以下と 100 の相違点
の 3 つの情報を確認する必要が出てきます。
また、互換性レベルではなく、バージョンが上がることで機能としてサポートされなくなるものもあります。
非推奨機能については今後、使用ができなくなる予定の機能となっているため、該当のバージョンではまだ利用できます。
- SQL Server 2005
- SQL Server 2008
- SQL Server 2008 R2
- SQL Server 2012
- SQL Server 2014
SQL Server 2000 から SQL Server 2008 R2 へ移行する場合には、
- SQL Server 2005 の廃止された機能 / 重大な変更 / 動作の変更
- SQL Server 2005 の廃止された機能 / 重大な変更 / 動作の変更
も合わせて確認する必要があります。
これらは機能として廃止されているため、互換性レベルでどうなるというものではありませんので。
アップグレードのサポート情報としては以下も参考になります。
アップグレードに伴うエディションについてはこれらを確認するとよいかと。
- SQL Server 2005
- SQL Server 2008
- SQL Server 2008 R2
- SQL Server 2012
- SQL Server 2014
SQL Server では、アップグレードアドバイザーというアップグレード時のアドバイス用ツールが提供されていますので、これを使ってアップグレードに問題があるかを調査したほうがよいかと思います。
情報を一つ一つ追って机上確認は現実的ではありませんので。
話がそれてしまいましたが、SQL Server のバックアップのリストアについてまとめてみたいと思います。
■SQL Server 2000 のデータベースをリストア
SQL Server | 互換性レベル | ||||||
65 (6.5) |
70 (7.0) |
80 (2000) |
|||||
2008/R2 | ○※1 | ○※1 | ○ | ||||
2012 | – | – | – | ||||
2014 | – | – | – |
※1 リストア時に互換性レベルが 80 に移行される
SQL Server 2000 で取得したバックアップの、リストア先としては、SQL Server 2008 / R2 までとなります。
また、リストアをした際に、互換性レベルは 80 に変更されますので、クエリの互換性については注意が必要となってきます。
このご時世、65/70 の互換性レベルで動作しているものはそうそうないと信じたいですが…。
■SQL Server 2005 のデータベースをリストア
SQL Server | 互換性レベル | ||||||
70 (7.0) |
80 (2000) |
90 (2005) |
|||||
2008/R2 | ○※1 | ○ | ○ | ||||
2012 | ○※2 | ○※2 | ○ | ||||
2014 | ○※3 | ○※3 | ○※3 |
※1 リストア時に互換性レベルが 80 に移行される
※2 リストア時に互換性レベルが 90 に移行される
※3 リストア時に互換性レベルが 100 移行される
Windows Server 2003 + SQL Server 2005 の組み合わせが意外と多いかと思います。
Windows Server 2003 のサポート切れに伴い、2005 の移行先検討は実案件としても多そうですね。
SQL Server 2005 で取得したバックアップは、SQL Server 2014 まででリストアすることが可能です。
注意が必要な内容としてはリストアする SQL Server に応じて 互換性レベルが異なってくる点でしょうか。
SQL Server 2005 では、互換性レベル 70 ~ 90 までをサポートしています。
互換性レベル 70 のサポートは SQL Server 2000 までですので、2005 → 2008 にリストアした場合は、80 に変更されます。
一番インパクトが大きいのは SQL Server 2012 以降への以降でしょうか。
この場合互換性レベルが 90 に変更されます。
表の結合方法として [*=][=*] をサポートしているのは互換性レベル 80 までとなます。
このような外部結合演算子を使用している場合、SQL Server 2012 以降に移行した場合はクエリ修正が必須となります。
SQL Server 2008 / R2 への移行時には互換性レベル 80 を使用することでごまかせますが、今後を考えるとクエリの棚卸はしたほうがいいかなと思いますが。
SQL Server 2005 の互換性レベルを使用できるのは 2012 までですので、2005 の移行先を検討する場合、
- 移行後の互換性レベルは何を使用するか
の観点は気にしておいたほうがよいかと。
これを見ていると SQL Server 2014 で SQL Server 2005 のバックアップをリストアできるのはちょっと特例な感じがしますね。
■SQL Server 2008/ R2 のデータベースをリストア
SQL Server | 互換性レベル | ||||||
80 (2000) |
90 (2005) |
100 (2008) |
|||||
2012 | ○※1 | ○※1 | ○ | ||||
2014 | ○※2 | ○※2 | ○ |
※1 リストア時に互換性レベルが 90 に移行される
※2 リストア時に互換性レベルが 100 移行される
SQL Server 2008 /R2 では互換性レベル 80 ~ 100 までをサポートしています。
SQL Server 2012 への移行時には、互換性レベルが 90 以上、SQL Server 2014 への移行時には互換性レベルが 100 以上に変更されます。
■SQL Server 2012 のデータベースをリストア
SQL Server | 互換性レベル | ||
90 (2005) |
100 (2008) |
110 (2012) |
|
2014 | ○※1 | ○ | ○ |
※1 リストア時に互換性レベルが 100 移行される
SQL Server 2012 からの移行時には互換性レベル 90 が 100 に変更されるのが注意点でしょうか。