none
SQLServer2000(MSDE)からSQLServer2005Expressへのアップグレード RRS feed

  • 質問

  • ご存知の方がいらっしゃいましたら、以下の内容に関して教えてください。

    SQLServer2000(MSDE)環境にて作成したバックアップデータ(mdf,ldf)があります。

    このデータをSQLServer2005Express環境にリストアすると、DB形式はSQLServer2000形式となっているかと思います。(確認方法が分からないため断言できませんが。。。それともバージョンごとに形式はない?)

    これをSQLServer2005形式にアップグレードすることはできないのでしょうか?

    以上、よろしくお願いいたします。

    2006年11月16日 2:41

回答

  •  sapa39 さんからの引用

    このデータをSQLServer2005Express環境にリストアすると、DB形式はSQLServer2000形式となっているかと思います。(確認方法が分からないため断言できませんが。。。それともバージョンごとに形式はない?)

    それは、、互換性レベルのことでしょうか。
    互換性レベルなら sp_dbcmptlevel で変更可能です。
    http://msdn2.microsoft.com/ja-jp/library/ms178653.aspx

    2006年11月16日 6:13
  • 返答ありがとうございます。

    うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?

    本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。

    しかし、MSDEがマージモジュールのため単純なインストールではバージョンアップしてくれません。(Microsoftのサイトに掲載されていたMSDE2000からSQLServer2005Expressへのアップグレード資料を参照していますが、いまいち理解ができていません)

    そこで、現在はSQLServer2005Expressを新規インストールし、MSDEで作成したバックアップをリストアすることで対応しようかと思っています。

    ps.

    教えていただいた「互換レベル」に関しては、これから勉強していきたいと思います。

    2006年11月16日 8:55
  •  米田です。

    > うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?
    > 本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。
    実際に試行して、確認していますか?

     少なくとも、Backup, Restoreでは、コンバートされます。(ファイルのアタッチでもされるはずです)

    SQL Server 2005のファイルに変換の上で、予約語や挙動の一部を2000に近づける設定になっているはずです。(errorlog辺りに情報が出たと思います)

    また、確認方法としては、SQL Server 2005にRestoreやファイルのアタッチ後の、再度 SQL Server 2000 にBackup, Restoreやファイルのデタッチ、アタッチで戻そうとしてみると拒絶されることでも分かります。

     

    2006年11月16日 14:09
  • カズ様、YONEDA様

    情報提供ありがとうございます。

    YONEDA様の内容にあるように、SQLServer2000の環境で作成したBackupをSQLServer2005にRestoreして試してみました。

    しかし、今度はSQLServer2005でBackupを作成する際、エラーが発生してしまいました。

    「3201」:「バックアップデバイス'バックアップファイル名'を開けません。オペレーティングシステムエラー5(アクセスが拒否されました。)。」

    と表示されます。

    このエラーが起こるということは、SQLServer2005にコンバートできていないということなのでしょうか?

    2006年11月17日 0:23
  • RESTORE するときにファイルを明示的に違うパスに置き換えて RESTORE してみてください。
    それで BACKUP DATABASE を行うとどういう状態になりますか?
    2006年11月21日 13:52
  • おがわみつぎ 様

    返答ありがとうございます。

    返答頂いた内容にて確認してみます。

    また、返答頂いた内容ですが、明示的違うパスへ置き換えるというのは、現在BACKUPを行っているパスに問題があるということでしょうか?

    2006年11月22日 2:17
  • 簡単にいうと、単純に 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

    2006年11月23日 10:58
  • 大変遅い返答で申し訳ありません。

    互換性に関しては、2000で作成したバックアップも利用できることは分かりました。(特にコンバートの必要もなさそうです)

    また、途中で質問させていただいたバックアップ時に発生するエラーに関しても、システムが作成したバックアップファイルにアクセス権限が無かったことが原因と分かり、現在対処方法を検討しています。

    丁寧に返答いただきありがとうございました。

    2006年12月7日 5:35

すべての返信

  •  sapa39 さんからの引用

    このデータをSQLServer2005Express環境にリストアすると、DB形式はSQLServer2000形式となっているかと思います。(確認方法が分からないため断言できませんが。。。それともバージョンごとに形式はない?)

    それは、、互換性レベルのことでしょうか。
    互換性レベルなら sp_dbcmptlevel で変更可能です。
    http://msdn2.microsoft.com/ja-jp/library/ms178653.aspx

    2006年11月16日 6:13
  • 返答ありがとうございます。

    うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?

    本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。

    しかし、MSDEがマージモジュールのため単純なインストールではバージョンアップしてくれません。(Microsoftのサイトに掲載されていたMSDE2000からSQLServer2005Expressへのアップグレード資料を参照していますが、いまいち理解ができていません)

    そこで、現在はSQLServer2005Expressを新規インストールし、MSDEで作成したバックアップをリストアすることで対応しようかと思っています。

    ps.

    教えていただいた「互換レベル」に関しては、これから勉強していきたいと思います。

    2006年11月16日 8:55
  •  米田です。

    > うまく説明ができていなくて申し訳ありませんが、2000形式のDBを2005形式のDBにコンバートする仕組みは無いのでしょうか?
    > 本来やりたいことは、MSDE環境にSQLServer2005Expressをインストールすると、DB形式も含め2005形式にバージョンアップしたいと考えています。
    実際に試行して、確認していますか?

     少なくとも、Backup, Restoreでは、コンバートされます。(ファイルのアタッチでもされるはずです)

    SQL Server 2005のファイルに変換の上で、予約語や挙動の一部を2000に近づける設定になっているはずです。(errorlog辺りに情報が出たと思います)

    また、確認方法としては、SQL Server 2005にRestoreやファイルのアタッチ後の、再度 SQL Server 2000 にBackup, Restoreやファイルのデタッチ、アタッチで戻そうとしてみると拒絶されることでも分かります。

     

    2006年11月16日 14:09
  • カズ様、YONEDA様

    情報提供ありがとうございます。

    YONEDA様の内容にあるように、SQLServer2000の環境で作成したBackupをSQLServer2005にRestoreして試してみました。

    しかし、今度はSQLServer2005でBackupを作成する際、エラーが発生してしまいました。

    「3201」:「バックアップデバイス'バックアップファイル名'を開けません。オペレーティングシステムエラー5(アクセスが拒否されました。)。」

    と表示されます。

    このエラーが起こるということは、SQLServer2005にコンバートできていないということなのでしょうか?

    2006年11月17日 0:23
  • RESTORE するときにファイルを明示的に違うパスに置き換えて RESTORE してみてください。
    それで BACKUP DATABASE を行うとどういう状態になりますか?
    2006年11月21日 13:52
  • おがわみつぎ 様

    返答ありがとうございます。

    返答頂いた内容にて確認してみます。

    また、返答頂いた内容ですが、明示的違うパスへ置き換えるというのは、現在BACKUPを行っているパスに問題があるということでしょうか?

    2006年11月22日 2:17
  • 簡単にいうと、単純に 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

    2006年11月23日 10:58
  • 大変遅い返答で申し訳ありません。

    互換性に関しては、2000で作成したバックアップも利用できることは分かりました。(特にコンバートの必要もなさそうです)

    また、途中で質問させていただいたバックアップ時に発生するエラーに関しても、システムが作成したバックアップファイルにアクセス権限が無かったことが原因と分かり、現在対処方法を検討しています。

    丁寧に返答いただきありがとうございました。

    2006年12月7日 5:35