SQL Server 2008 では、デタッチ操作とアタッチ操作を使用して、SQL Server 2000 または SQL Server 2005 のユーザー データベースをアップグレードできます。SQL Server 2005 または SQL Server 2000 のデータベースを SQL Server 2008 にアタッチした後は、データベースが直ちに使用可能となり、自動的にアップグレードされます。
ただし、次の制限事項が適用されます。
sp_detach_db ストアド プロシージャを使用して、SQL Server 7.0 または SQL Server 2000 のインスタンスからデータベースをデタッチします。
詳細については、各バージョンの SQL Server オンライン ブックを参照してください。
必要に応じて、デタッチされたデータベース ファイルとログ ファイルを移動します。
新しいログ ファイルを作成する場合であっても、ログ ファイルをデータ ファイルと一緒に移動する必要があります。場合によっては、データベースの再アタッチに既存のログ ファイルが必要になります。したがって、デタッチしたログ ファイルを使わずにデータベースを正常にアタッチできるまで、デタッチしたログ ファイルは必ずすべて保管しておいてください。
FOR ATTACH オプションまたは FOR ATTACH_REBUILD_LOG オプションを指定した CREATE DATABASE ステートメントを使用して、コピーしたファイルを SQL Server 2005 のインスタンスにアタッチします。
アップグレードされたデータベースで DBCC UPDATEUSAGE を実行することをお勧めします。
以前のバージョンの SQL Server では、テーブルおよびインデックスの行やページのカウント値が正しくならないことがありました。このため、SQL Server 2005 より前のバージョンで作成したデータベースには誤ったカウントが含まれている場合があります。データベースを SQL Server 2005 にアップグレードした後、DBCC UPDATEUSAGE を実行して無効なカウントを修正することをお勧めします。この DBCC ステートメントを実行すると、テーブルまたはインデックスのパーティションごとに、行、使用ページ、予約済みページ、リーフ ページ、およびデータ ページの数が修正されます。詳細については、「DBCC UPDATEUSAGE (Transact-SQL)」を参照してください。
(データベースを移動するのではなく) データベースのコピーを作成している場合、必要に応じて、SQL Server 7.0 または SQL Server 2000 のインスタンスで sp_attach_db ストアド プロシージャまたは sp_attach_single_file_db ストアド プロシージャを使用して、元のデータベースを再アタッチできます。
tempdb、model、msdb、および Resource データベースの互換性レベルは、アップグレード後、100 に設定されます。master システム データベースは、互換性レベルが 80 を下回っている場合は、アップグレード前の互換性レベルを保持します。アップグレード前の master の互換性レベルが 80 を下回っている場合は、アップグレード後、80 に設定されます。
アップグレード前のユーザー データベースの互換性レベルが 80 または 90 の場合は、アップグレード後も互換性レベルは変わりません。アップグレード前の互換性レベルが 70 以下の場合、アップグレードされたデータベースの互換性レベルは 80 に設定されます。これは、SQL Server 2008 でサポートされている下限の互換性レベルです。
データベースを別のサーバー インスタンスにアタッチするときは、ユーザーおよびアプリケーションに一貫した使用環境を提供するために、アタッチ先のサーバー インスタンスで、ログイン、ジョブ、権限などのデータベースのメタデータの一部またはすべてを作成し直す必要が生じる場合があります。詳細については、「データベースを別のサーバー インスタンスで使用できるようにするときのメタデータの管理」を参照してください。
次の例では、Transact-SQL ステートメントを使用して SQL Server 2000 pubs データベースをデタッチおよびアタッチし、SQL Server 2005 データベースにアップグレードします。
pubs
sp_detach_db
USE master; GO EXEC sp_detach_db @dbname = N'pubs'; GO
)
CREATE DATABASE
USE master; GO CREATE DATABASE pubs ON PRIMARY (FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf') LOG ON (FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_log.ldf') FOR ATTACH; GO
sp_attach_db
USE master; Go EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'; GO