web-dev-qa-db-ja.com

MS SQL Server 2008トランザクションログファイルのバックアップの失敗

こことStackOverflowでこの件についていくつか読んだことがありますが、実際に質問に答えて先に進むには十分です。

MS SQL 2008サーバーが実行されていることを説明します。トランザクションログファイルのバックアップは毎晩失敗しました。これまでに経験した他のエラーのいくつかを確認しました。これはディスクまたはI/Oのように見える可能性があります。これはホストマシンであり、変更を開始したため、時間がかかります。Sodsの法律により、変更に近づくほど壊滅的な可能性が高くなります起こります。つまり、私たちが安全であることを確認する必要があります。

私はDBAではありません(もしそうだったとしても、質問することはおそらくないでしょう)。

今私が理解しているように、完全復旧モデルを使用しているときにトランザクションログのバックアップが失敗すると、問題が発生します。

シンプルモデルがバックアップ中にデータベースにすべてを書き込むことを理解しているので、私はシンプルリカバリモデルに変更しました(復元時に失敗するバックアップよりも、バックアップが適切な時点の影響を理解しています)。トランザクションログの観点から、これが実際に何を意味するのかはわかりません。つまり、データベースがこの瞬間に停止し、バックアップから復元する必要があったが、トランザクションログのバックアップが失敗した場合、これは私にとって意味がありません。 DBとログのバックアップ計画があります。ログのバックアップが失敗することはわかっていますが、シンプルリカバリモードでデータベースがバックアップされていても、ログのバックアップが失敗した場合、データベースをリカバリできますか?回復することでこれをまっすぐにすることができます、私は最後のバックアップから単純に復元することで物事を再び機能させることについて話しているのですか?

次に、ディスクのセクターに問題があると想定した場合(私はできるだけ早く移動する必要がありますが、新しいマシンなどは私の影響範囲から外れています)、それが私に起こりますログファイルはディスクの同じ部分にある可能性が高いため、ログファイルの削除と再作成は機能しません。では、新しいログファイルを作成し、古いログファイルを削除する(ただし、古いファイルをディスクに残す)ことはしないでしょうか。これにより、使用されている不良セクターが効果的に停止します(別のパーティションでも解決できますが、これはC:であり、D:の問題であり、C:のスペースが狭いです。

もしそうなら、どうすればいいですか?すべての影響がわからないので、私はここで段階的に本当に求めていると思います。サービスを停止してログファイルを削除すると、ファイルと同じ名前の新しいファイルを再作成し、サービスを開始します。だから私は何をしますか?

すべてのコメントを本当に感謝します

よろしくお願いします

3
Brooker

ここにいる皆さんに感謝し、すべてがとても役に立ちました。

特に単純なリカバリバックアップについて知っている。

参考までに、ログパスを別のパーティションに変更して問題を解決しました。別のパーティションからスペースを回復しなければならず、新しいパーティションを作成する必要があるなど、移動は別の問題でした。

皆さんに感謝します。参考までに、私はあなたの両方の回答が両方とも役に立ったので投票してみましたが、どうやら私は投票するのにあまりにも多くの初心者です。

1
Brooker

フルバックアップを実行してから、別のトランザクションログバックアップを実行してみましたか?どのようなエラーメッセージが表示されますか?

ログのバックアップが失敗することはわかっていますが、シンプルリカバリモードでデータベースがバックアップされていても、ログのバックアップが失敗した場合、データベースをリカバリできますか?回復することでこれをまっすぐにすることができます、私は最後のバックアップから単純に復元することで物事を再び機能させることについて話しているのですか?

データベースに障害が発生した場合は、完全復旧と単純復旧のどちらに設定されているかに関係なく、最後の完全バックアップでデータベースを復旧できます。単純復旧では、ログのバックアップはまったくサポートされていません。したがって、基本的には、最後の完全バックアップ以降のすべてを失うことになります。

では、新しいログファイルを作成し、古いログファイルを削除する(ただし、古いファイルをディスクに残す)ことはしないでしょうか。

いいえ。ログファイルを削除しないでください。データベースを強制終了する可能性があり、修正しようとしている症状は、正しくバックアップされないことです。

お勧めします この記事 、「SQL Serverトランザクションログの初心者向けガイド」。特にこのビット:

SQL Serverデータベースはトランザクションログなしで機能しますか?

いいえ、SQL Serverの設計とACIDに準拠しているため、これは不可能です。 ACIDは、原子性、一貫性、分離性、耐久性を表しています。

また この記事 完全復旧と単純復旧について。

この記事 からクリブするには:

  1. データベースでdbcc checkdbを実行します
  2. データベース内のすべてのユーザーアクティビティを停止する
  3. SIMPLE復旧モデルに切り替えます(ログのバックアップチェーンを解除し、ログの破損した部分をバックアップする必要があるという要件を削除します)(これで完了です)
  4. 完全復旧モデルに切り替える
  5. データベース全体のバックアップを作成します(したがって、新しいログバックアップチェーンを開始します)。
  6. ログのバックアップを取る
1

シンプルなモデルがバックアップ中にすべてをデータベースに書き込むことを理解しています。確信が持てないことは、トランザクションログの観点から、これが実際に何を意味するかです。つまり、データベースがこの瞬間に停止し、バックアップから復元する必要があったが、トランザクションログのバックアップが失敗した場合、これは私にとって意味がありません。 DBとログのバックアップ計画があります。ログのバックアップが失敗することはわかっていますが、シンプルリカバリモードでデータベースがバックアップされているが、ログのバックアップが失敗した場合、データベースをリカバリできますか?

復旧モデルに関係なく、SQLはあなたが言ったようにログにすべてを書き込みますが、書き留めておく必要があることがかなりあります。

以下がバックアッププランであるとします:毎日午前6時のフルバックアップ、12時間ごとの差分バックアップ、5分ごとのログバックアップ(フル状態であると想定) 、一括ログ復旧モデル)

次に、各復旧モデルを取り上げて、物事をまっすぐにしましょう。

Simple:単純復旧モデルでは、ログバックアップを実行できないため、午前8時に障害が発生し、午前6時のバックアップしか復元できないと仮定します。 2時間のデータ損失があることを意味します。したがって、あなたの質問に答えるために、特定の時点での復元機能はありませんが、データベースを復元することができます

完全復旧モデル:同じ障害が午前8時に発生すると想定します。5分ごとにログバックアップがあるため、その時点まですぐに復元できます。テールログのバックアップを取ることによる失敗の。

http://www.sqlskills.com/blogs/paul/disaster-recovery-101-backing-up-the-tail-of-the-log/

一括ログ復旧モデル:一括ログ復旧モデルは、完全復旧モデルと同じように機能しますが、一部のトランザクションは、データベースがレプリケーション用に構成されていません。さらに、バックアップに大量のログトランザクションが含まれている場合、特定の時点に復元することはできません。

http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day-2830-bulk_logged-recovery-model/

したがって、許容できるデータ損失の量を把握し、それに基づいて復旧モデルを選択してください。

たとえば、サービスを停止してファイルを削除し、同じ名前で新しいファイルを再作成してサービスを開始するだけでログファイルを削除すると、苦痛の全世界に陥るということを他の場所で読んだことがあります。だから私は何をしますか?
ログファイルを削除するだけで、SQLサーバーはログを使用してデータベースを一貫した状態に戻します。この極端な手順を実行するのではなく、単純な復旧モデルに切り替えて、データの損失に基づいてバックアップを取ることをお勧めします許容できる。

バックアップが正常に機能していると言っているので、これはTLOGバックアップでのみ発生します(別のディスクに書き込まれていると想定します。そうでない場合、バックアップでも同じ問題に直面している可能性があります)。問題が発生するまで、ログのパスをバックアップの場所に変更しないでください。整理されています。

ログのバックアップをネットワークパスに取得することもできます。ディスクの問題が解決されるまで試す価値があります。

バックアップログtestdb to disk = '\ testdb_tlogbackups\testdb.trn' with compression

0
TheGameiswar