none
LDF(トランザクションログ)を消してしまった。 RRS feed

  • 質問

  • いつもお世話になります。 

    <SQLServer 2000>

    LDF(トランザクションログ)を消して、再起動してしまい。
    以降、SQLServerが立ち上がらない状況です。
    仕方なく、前のデータファイルとトランザクションログを戻し
    再起動したのですが、以下の通り、okidbが分析できません。

    色々調べてみたのですが、分かりません。 宜しくお願いします。

    <正常時>
    2008-10-16 14:31:58.37 server    SQL Server を優先度クラス 'normal'(2 CPUs 検出) で開始しています。
    2008-10-16 14:31:58.40 server    SQL Server が thread モード処理用に設定されました。
    2008-10-16 14:31:58.40 server    dynamic ロック アロケーションを使用しています。 [2500] ロック ブロック、[5000] ロック所有者ブロック。
    2008-10-16 14:31:58.43 server    分散トランザクション コーディネータ (MS DTC) を初期化しようとしています。
    2008-10-16 14:32:11.57 spid3     データベース 'master' の開始中。
    2008-10-16 14:32:11.61 server    'SSNETLIB.DLL' のバージョン '8.0.766' を使用しています。
    2008-10-16 14:32:11.61 spid5     データベース 'model' の開始中。

    2008-10-16 14:32:11.61 spid3     サーバー名は 'ISSSQLSERVER' です。
    2008-10-16 14:32:11.61 spid8     データベース 'msdb' の開始中。
    2008-10-16 14:32:11.61 spid9     データベース 'pubs' の開始中。
    2008-10-16 14:32:11.61 spid10    データベース 'Northwind' の開始中。
    2008-10-16 14:32:11.61 spid11    データベース 'okidb' の開始中。
    2008-10-16 14:32:11.61 spid12    データベース 'testdb' の開始中。
    2008-10-16 14:32:11.62 server    SQLServer は 192.1.1.251: 1433 で受信を待っています。
    2008-10-16 14:32:11.64 spid5     tempdb データベースの消去中。
    2008-10-16 14:32:11.65 spid11    データベース 'okidb' (7) の分析は 100% 完了しました (約 0 秒以上)
    2008-10-16 14:32:11.68 server    SQLServer は TCP, Shared Memory, Named Pipes で受信を待っています。
    2008-10-16 14:32:11.68 server    SQL Server はクライアント接続できます
    2008-10-16 14:32:11.68 spid5     データベース 'tempdb' の開始中。
    2008-10-16 14:32:11.70 spid3     復旧が完了しました。
    2008-10-16 14:32:11.70 spid3     SQL global counter collection task is created.

    <現状>
    2009-06-29 17:33:41.60 server    SQL Server を優先度クラス 'normal'(2 CPUs 検出) で開始しています。
    2009-06-29 17:33:41.68 server    SQL Server が thread モード処理用に設定されました。
    2009-06-29 17:33:41.70 server    dynamic ロック アロケーションを使用しています。 [2500] ロック ブロック、[5000] ロック所有者ブロック。
    2009-06-29 17:33:41.73 server    分散トランザクション コーディネータ (MS DTC) を初期化しようとしています。
    2009-06-29 17:33:55.20 server    Failed to obtain TransactionDispenserInterface: Result Code = 0x8004d01b
    2009-06-29 17:33:55.23 spid3     データベース 'master' の開始中。
    2009-06-29 17:33:55.48 server    'SSNETLIB.DLL' のバージョン '8.0.766' を使用しています。

    2009-06-29 17:33:55.48 spid5     データベース 'model' の開始中。
    2009-06-29 17:33:55.50 spid3     サーバー名は 'ISSSQLSERVER' です。
    2009-06-29 17:33:55.50 spid8     データベース 'msdb' の開始中。
    2009-06-29 17:33:55.50 spid9     データベース 'pubs' の開始中。
    2009-06-29 17:33:55.50 spid10    データベース 'Northwind' の開始中。
    2009-06-29 17:33:55.50 spid11    データベース 'okidb' の開始中。
    2009-06-29 17:33:55.50 spid12    データベース 'testdb' の開始中。
    2009-06-29 17:33:55.57 server    SQLServer は 192.1.1.251: 1433 で受信を待っています。
    2009-06-29 17:33:55.64 spid5     tempdb データベースの消去中。
    2009-06-29 17:33:55.68 server    SQLServer は TCP, Shared Memory, Named Pipes で受信を待っています。
    2009-06-29 17:33:55.68 server    SQL Server はクライアント接続できます
    2009-06-29 17:33:55.90 spid5     データベース 'tempdb' の開始中。
    2009-06-29 17:33:55.92 spid11    Bypassing recovery for database 'okidb' because it is marked SUSPECT.
    2009-06-29 17:33:56.01 spid3     復旧が完了しました。

    2009年6月30日 1:36

回答

すべての返信

  • 'okidb' のFull バックアップは採取されておりますか。
    Full バックアップがあるようであれば、'okidb' のみをリストアすれば良いと思います。
    2009年6月30日 2:01
  • こんにちは、nagino です。

    この手のトラブルはバージョンや操作に依存することがありますので、可能であれば以下についてもう少し詳細な情報をご提示願います。

    ● OS (Windows 2003 SP1 など)
    ● SQL Server (SQL Server 2000 SP3 など)
    ● 「前のデータファイルとトランザクションログに戻し」とは? (バックアップから復元、データファイルとトランザクションログの 2 ファイルをコピーしてアタッチ、など)
    ● 現在手元にあるデータ・環境 (完全バックアップがあるか、デタッチしたファイルのコピーがあるか、検証環境の有無、など)



    とりあえず「0x8004d01b」エラーの原因としては、MSDTC(分散トランザクションコーディネータ)が起動する前に SQL Server の起動処理が先に進んでしまっているためと思われます。
    もしかしたら以下のケースが該当するかもしれません。
    http://support.microsoft.com/kb/911845/ja

    現段階で改善の可能性がありそうな対処法は、ぱっと思いつく限りでは以下でしょうか。
    ・ SQL Server SP4 を適用する。
    ・ MSDTC のサービスを手動で起動してから、SQL Server のサービスを起動する。



    また、「Bypassing recovery ~(後略)」エラーの原因は、理由は様々ですが okidb に何らかの問題があるため、復旧処理が行えなかったと思われます。
    「前のデータファイルとトランザクションログに戻し」た手順や、戻したファイルに問題がある可能性があります。

    これについては、以下のように okidb を再度復元/アタッチしなおして再現するかどうかご確認ください。
    ・ 正常なバックアップがある ⇒ 一度 okidb を削除して、バックアップから復元する
    ・ デタッチしたファイルのコピーがある ⇒ 一度 okidb を削除して、アタッチしなおす

    ご参考になれば幸いです。

    MCITP(Database Developer/Database Administrator)
    2009年6月30日 2:07
  • 残念ながら、SQLServerでのFullバックアップは無いようです。

    OSを含めた完全バックアップはあります。
    但し、完全バックアップには戻したく無いようです。
    2009年6月30日 3:22

  • 現在の環境は
      OS = Windows Server 2003 Enterprise SP2 (2台でクラスタを組んでいます)
      DB = SQL Server2000 SP4


    なお、指摘して頂いた改善策のSQL ServerSP4を適用した結果
    下記のアラームは無くなりましたが症状に変化はありません。
    Failed to obtain TransactionDispenserInterface: Result Code = 0x8004d01b

    但し、okidbについてはエラーが残ったままです。
    Bypassing recovery for database 'okidb' because it is marked SUSPECT.

    -------------------------------------------------------
    okidbのファイルを戻した作業手順は、
    1 [消去]
       XXXX.mdfを消去

    2 [コピー]
       過去に保存してあった、XXXX.mdf と  XXXX.ldfをフォルダにコピー

    3 [SQLServer起動]
       EMで、△マークが緑色になるが接続出来ず。

    4 [クエリアナライザー実行]
       以下のアラームが出て接続出来ず

       サーバー メッセージ 18456  レベル 16  状態 1
       [MicroSoft][ODBC SQL Server Driver][SQLServer] 接続出来ません。

    接続できれば、一旦okidbを消去し再構築する予定なのですが、
    接続出来ずに困っています。 宜しくお願いします。
    2009年6月30日 6:36
  • drop database コマンドにて、SUSPECT 状態のデータベースにつきましても、削除ができると思います。

    2009年6月30日 6:47
  • 再構築をされることを前提に動かれているのであれば、以下のコマンドを実行してみてはどうでしょう。

    use master
    go
    sp_configure 'allow updates',1
    go

    reconfigure with override
    go

    -- 未確認モード解除
    update master..sysdatabases set status = 16 where name = 'データベース名'
    go


    DBCC DBRECOVER ('データベース名', IGNOREERRORS)
    go


    その後、SQL Server を再起動後、DBCC CheckDB にて整合性チェックを実施。

    ※ただ、データベースが破損している場合は、もうどうしようも無いのですが。

    2009年6月30日 6:55
  • 現状、接続出来ない状態ですが、dropコマンドを発行する方法が
    別に存在するのでしょうか?

    クエリアナライザを用いで、sa/saなどでも
    接続を試みましたが駄目でした。

    DBについては一応経験あるのですが、SQLServerの経験が無く
    困り果てています・・・。 宜しくお願いします。

    2009年6月30日 7:00
  • 例えば、 コマンドプロンプトから osql -E -dmaster などと指定しても、master データベースに接続出来ないでしょうか。
    (saの場合、 osql -Usa -Pパスワード -dmaster : 名前つきインスタンスの場合は、-S を更に追加します。)


    osql ユーティリティ
    http://msdn.microsoft.com/ja-jp/library/ms162806.aspx
    • 回答としてマーク kumakiti 2009年6月30日 9:01
    2009年6月30日 8:06
  • osql -Usa -Piss -dmaster -SISSSQLSERVER

    上記、コマンドで接続成功しました。

    -Sの指定が必要だったようです。

    と、いう事で以下のコマンドを試してみようと思います。

    use master
    go
    sp_configure 'allow updates',1
    go

    reconfigure with override
    go

    -- 未確認モード解除
    update master..sysdatabases set status = 16 where name = 'データベース名'
    go


    DBCC DBRECOVER ('データベース名', IGNOREERRORS)
    go

    2009年6月30日 8:26
  • 上記のコマンドが正しいパスワードなのであれば、公開しないほうが良いですよ。

    2009年6月30日 8:42
  • ありがとうございます。

    DBCCでの復旧は失敗しましたが、okidbを削除(drop)し、
    EnterPriseManagerでも操作できるようになりました。
    2009年6月30日 9:05