none
SQL2000でデータベースの新規追加を行おうとすると「デバイス アクティブ化エラー」 RRS feed

  • 質問

  • MS-SQL2000 EE SP4にて、DBの新規作成を行おうとすると、以下のエラーが発生し、DBを作ることができません。いくつかネット上を探したのですが有力な情報が見つからず、なにか情報をいただければと思い投稿させていただきます。

    エラーは下記です。
    ---------------------------------------------------------------------------
    Microsoft SQL-DMO (ODBC SQLState: 42000)
     ---------------------------------------------------------------------------
    エラー945: ファイルにアクセスできなかったか、メモリまたはディスク領域が不足しているので、データベース '
    0907011032_test'を開けません。詳細については、SQL Serverのエラーログを参照してください。
    CREATE DATABASE:ディスク'test_Data'に1.00MB割り当てています。
    CREATE DATABASE:ディスク'test_Log'に1.00MB割り当てています。デバイス アクティブ化エラー。
    物理ファイル名'R:\program File\Microsoft SQL Server\MSSQL\Data\Distribution.LDF'は正しくありません。

    <補足情報>
    ・関係あるかどうかはわかりませんが、DBはサーバー2台でのMSクラスタ環境(Active/Passive)に作成しています。
    ・クラスタのどちらのノードからエンタープライズマネージャーを起動しても、同様のエラーのになります。
    ・エラーに示されているようなディスク領域などはもちろん余裕がありますし、メモリも平常時で2GB以上利用可能メモリが残っています。
    ・エラーログには、「2009-07-01 11:37:25.08 spid102 データベース 'test' の開始中。」という記述しかありませんでした。
    ・データベースの保存先のパスは存在しますし、保存先にはsaにフルコントロールが割り当てられています。
    ・OSはWindows server 2003 EE SP1(32bit)です。


    なお、利用部門からの不確かな報告ですが、3月までの時点では問題なく作成ができていたということです。 4月ごろにはSQLの監査アプリを導入しておりその関連も考えられますが、情報が不確かなためベンダーにも逃げられております。。。
     なにか情報があればぜひとも賜れればと存じます。
    2009年7月1日 2:59

回答

  • 結果から述べさせていただくと、新規追加ができるようになりました!

    distributionデータベースについて調べてたら、システムDBで、dstmdl.ldf/mdfで復元できるという情報がなんとなく浮き上がってきました。
    distributionデータベースは今回の環境には存在していませんでしたが、dstmdl.ldf/mdfはありましたので、
    それをdistribution.ldf/mdf という名前でコピーしてアタッチをかけたところ、
    それ以降エラーが出なくなり、新規追加が可能になりました!

    ありがとうございました!!

    しかし、山のような疑問が・・

    ・distribution データベースって情報がすごく少ないんですが、何者なんでしょう?
    ・アタッチの際、distribution.mdfを選択しても、結局 dstmdl.ldf/mdfが使われています。(変更できなかったです。)なぜなのでしょう?
    ・検証の為、復元したdistribution データベースを削除しても、問題なく新規追加できてしまいました。なぜ??

    どなたか、ご存知でしたら是非ご教示ください。

    • 回答としてマーク Villarrica 2009年7月2日 5:30
    2009年7月1日 7:56

すべての返信

  • エラーは下記です。
    ---------------------------------------------------------------------------
    Microsoft SQL-DMO (ODBC SQLState: 42000)
     ---------------------------------------------------------------------------
    エラー945: ファイルにアクセスできなかったか、メモリまたはディスク領域が不足しているので、データベース '
    0907011032_test'を開けません。詳細については、SQL Serverのエラーログを参照してください。
    CREATE DATABASE:ディスク'test_Data'に1.00MB割り当てています。
    CREATE DATABASE:ディスク'test_Log'に1.00MB割り当てています。デバイス アクティブ化エラー。
    物理ファイル名'R:\program File\Microsoft SQL Server\MSSQL\Data\Distribution.LDF'は正しくありません。


     物理ファイルの'R:\program File\Microsoft SQL Server\MSSQL\Data\Distribution.LDF'が残っているということはありませんでしょうか?
     確か、物理ファイルが残っている状態でデータベースを作成しようとすると、エラーになったはずです。(未確認ですが)

     もし他のデータベースで使われていなくてファイルが残っていれば、ファイルを削除してからデータベースを作成してみてください。
    2009年7月1日 4:47
  • ご回答ありがとうございます。

    Distribution.LDFですが、存在していませんでした。
    サーバー全体も検索をかけたのですがファイルは見つからず、
    レジストリ内にも記述はありませんでした。

    Distribution.LDFってSQL Serverの既定値か何かと思いこんでいたのですが、
    そういうわけでもないのですかね?Knowldge Baseでも引っかからないし。

    ちなみに、Distribution.LDFという空のファイルを作ったうえで、DBの新規追加を行うと
    ---------------------------------------------------------------------------
    Microsoft SQL-DMO (ODBC SQLState: HY000)
     ---------------------------------------------------------------------------
    エラー823:CREATE DATABASE:ディスク'test_Data'に1.00MB割り当てています。
    CREATE DATABASE:ディスク'test_Log'に1.00MB割り当てています。

    というエラーになります。
    Distribution.LDF が何か鍵を握ってるということでしょうかね?

    引き続き何かありましたらよろしくお願い申し上げます。

    2009年7月1日 5:39
  • 確か、データーベースが破損している場合にも発生しうる現象だと思います。

    念のため、システムデータベース(master など) 及び ユーザーデータベースに対して、DBCC CheckDB を実行されてはどうでしょう。

    2009年7月1日 7:52
  • 結果から述べさせていただくと、新規追加ができるようになりました!

    distributionデータベースについて調べてたら、システムDBで、dstmdl.ldf/mdfで復元できるという情報がなんとなく浮き上がってきました。
    distributionデータベースは今回の環境には存在していませんでしたが、dstmdl.ldf/mdfはありましたので、
    それをdistribution.ldf/mdf という名前でコピーしてアタッチをかけたところ、
    それ以降エラーが出なくなり、新規追加が可能になりました!

    ありがとうございました!!

    しかし、山のような疑問が・・

    ・distribution データベースって情報がすごく少ないんですが、何者なんでしょう?
    ・アタッチの際、distribution.mdfを選択しても、結局 dstmdl.ldf/mdfが使われています。(変更できなかったです。)なぜなのでしょう?
    ・検証の為、復元したdistribution データベースを削除しても、問題なく新規追加できてしまいました。なぜ??

    どなたか、ご存知でしたら是非ご教示ください。

    • 回答としてマーク Villarrica 2009年7月2日 5:30
    2009年7月1日 7:56
  • 一つ言えますことは、Distribution データベースとは、レプリケーションにて使用されているデータベースです。
    SQL Server 2000 では、既定で distmdl.mdf/ldf という名前で作成されていたと思います。

    恐らくですが、この環境では、以前レプリケーションを使用されていたのではないでしょうか。
    その環境が何らかの要因によって不正な状態になっていたのだと思います。

    2009年7月2日 3:18