トップ回答者
SQLServer2000(MSDE)からSQLServer2005Expressへのアップグレード

質問
回答
-
sapa39 さんからの引用 このデータをSQLServer2005Express環境にリストアすると、DB形式はSQLServer2000形式となっているかと思います。(確認方法が分からないため断言できませんが。。。それともバージョンごとに形式はない?)
それは、、互換性レベルのことでしょうか。
互換性レベルなら sp_dbcmptlevel で変更可能です。
http://msdn2.microsoft.com/ja-jp/library/ms178653.aspx -
返答ありがとうございます。
うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?
本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。
しかし、MSDEがマージモジュールのため単純なインストールではバージョンアップしてくれません。(Microsoftのサイトに掲載されていたMSDE2000からSQLServer2005Expressへのアップグレード資料を参照していますが、いまいち理解ができていません)
そこで、現在はSQLServer2005Expressを新規インストールし、MSDEで作成したバックアップをリストアすることで対応しようかと思っています。
ps.
教えていただいた「互換レベル」に関しては、これから勉強していきたいと思います。
-
米田です。
> うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?
> 本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。
実際に試行して、確認していますか?少なくとも、Backup, Restoreでは、コンバートされます。(ファイルのアタッチでもされるはずです)
SQL Server 2005のファイルに変換の上で、予約語や挙動の一部を2000に近づける設定になっているはずです。(errorlog辺りに情報が出たと思います)
また、確認方法としては、SQL Server 2005にRestoreやファイルのアタッチ後の、再度 SQL Server 2000 にBackup, Restoreやファイルのデタッチ、アタッチで戻そうとしてみると拒絶されることでも分かります。
-
カズ様、YONEDA様
情報提供ありがとうございます。
YONEDA様の内容にあるように、SQLServer2000の環境で作成したBackupをSQLServer2005にRestoreして試してみました。
しかし、今度はSQLServer2005でBackupを作成する際、エラーが発生してしまいました。
「3201」:「バックアップデバイス'バックアップファイル名'を開けません。オペレーティングシステムエラー5(アクセスが拒否されました。)。」
と表示されます。
このエラーが起こるということは、SQLServer2005にコンバートできていないということなのでしょうか?
-
簡単にいうと、単純に RESTORE すると BACKUP したときのファイルグループのパスで復元されます。
もし、SQL Server 2000 と SQL Server 2005 が同居していたとしたら、RESTORE は SQL Server 2000 側のパスに復元されてしまいます。
このとき SQL Server 2000 が動作していなければ問題ないのですが、動作していると SQL Server 2000 がファイルをつかんでいるので RESTORE エラーになります。
動作していない場合でも大いに問題があります。
SQL Server 2005 に使われてしまうと、データベースの互換性レベルを 80 にしたとしても、SQL Server 2000 を起動して対象データベースを動作させようとするとエラーで使えなくなります。まぁ、能書きはこれぐらいにして、私の環境でテストしてみましたが、問題ありませんでした。
-- SQL Server 2000 のバックアップファイルからファイルグループなどの情報の取得
RESTORE FILELISTONLY FROM DISK='E:\Test\Pubs.bak'
GO-- 実際にリストア、ファイルグループを明示的に移動させています
RESTORE DATABASE Pubs
FROM DISK='E:\Test\Pubs.bak'
WITH
MOVE 'pubs' TO 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs.mdf',
MOVE 'pubs_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs_log.ldf'
GO-- データベースの互換性レベルを 90(2005) に変更
EXEC sp_dbcmptlevel Pubs, 90
GO-- SQL Server 2005 のデータベースをバックアップ
BACKUP DATABASE Pubs TO DISK='E:\Test\Pubs90.bak'
GO
すべての返信
-
sapa39 さんからの引用 このデータをSQLServer2005Express環境にリストアすると、DB形式はSQLServer2000形式となっているかと思います。(確認方法が分からないため断言できませんが。。。それともバージョンごとに形式はない?)
それは、、互換性レベルのことでしょうか。
互換性レベルなら sp_dbcmptlevel で変更可能です。
http://msdn2.microsoft.com/ja-jp/library/ms178653.aspx -
返答ありがとうございます。
うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?
本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。
しかし、MSDEがマージモジュールのため単純なインストールではバージョンアップしてくれません。(Microsoftのサイトに掲載されていたMSDE2000からSQLServer2005Expressへのアップグレード資料を参照していますが、いまいち理解ができていません)
そこで、現在はSQLServer2005Expressを新規インストールし、MSDEで作成したバックアップをリストアすることで対応しようかと思っています。
ps.
教えていただいた「互換レベル」に関しては、これから勉強していきたいと思います。
-
米田です。
> うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?
> 本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。
実際に試行して、確認していますか?少なくとも、Backup, Restoreでは、コンバートされます。(ファイルのアタッチでもされるはずです)
SQL Server 2005のファイルに変換の上で、予約語や挙動の一部を2000に近づける設定になっているはずです。(errorlog辺りに情報が出たと思います)
また、確認方法としては、SQL Server 2005にRestoreやファイルのアタッチ後の、再度 SQL Server 2000 にBackup, Restoreやファイルのデタッチ、アタッチで戻そうとしてみると拒絶されることでも分かります。
-
カズ様、YONEDA様
情報提供ありがとうございます。
YONEDA様の内容にあるように、SQLServer2000の環境で作成したBackupをSQLServer2005にRestoreして試してみました。
しかし、今度はSQLServer2005でBackupを作成する際、エラーが発生してしまいました。
「3201」:「バックアップデバイス'バックアップファイル名'を開けません。オペレーティングシステムエラー5(アクセスが拒否されました。)。」
と表示されます。
このエラーが起こるということは、SQLServer2005にコンバートできていないということなのでしょうか?
-
簡単にいうと、単純に RESTORE すると BACKUP したときのファイルグループのパスで復元されます。
もし、SQL Server 2000 と SQL Server 2005 が同居していたとしたら、RESTORE は SQL Server 2000 側のパスに復元されてしまいます。
このとき SQL Server 2000 が動作していなければ問題ないのですが、動作していると SQL Server 2000 がファイルをつかんでいるので RESTORE エラーになります。
動作していない場合でも大いに問題があります。
SQL Server 2005 に使われてしまうと、データベースの互換性レベルを 80 にしたとしても、SQL Server 2000 を起動して対象データベースを動作させようとするとエラーで使えなくなります。まぁ、能書きはこれぐらいにして、私の環境でテストしてみましたが、問題ありませんでした。
-- SQL Server 2000 のバックアップファイルからファイルグループなどの情報の取得
RESTORE FILELISTONLY FROM DISK='E:\Test\Pubs.bak'
GO-- 実際にリストア、ファイルグループを明示的に移動させています
RESTORE DATABASE Pubs
FROM DISK='E:\Test\Pubs.bak'
WITH
MOVE 'pubs' TO 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs.mdf',
MOVE 'pubs_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs_log.ldf'
GO-- データベースの互換性レベルを 90(2005) に変更
EXEC sp_dbcmptlevel Pubs, 90
GO-- SQL Server 2005 のデータベースをバックアップ
BACKUP DATABASE Pubs TO DISK='E:\Test\Pubs90.bak'
GO