2016-07-29 4 views
-1

SQL Serverでは、トランザクションログは最終的にDBファイル(またはMDF)に入る前にトランザクションをログできる場所です。なぜ我々は、DBファイルにトランザクションを直接アトミックに書き込むことができないのですか?停電の場合、最後の既知の整合状態にロールバックできます。データベースに書き込む前にトランザクションログをステージングとして使用する理由

+1

TLogs上のまともなウェブ記事は説明します.... –

+0

あなたはまともなWeb記事plsに私を指摘できますか? –

+0

検索できませんか? –

答えて

0

すべてのSQL Serverデータベースには、すべてのトランザクションと、各トランザクションによって行われたデータベースの変更が記録されたトランザクションログがあります。 トランザクションログはデータベースの重要なコンポーネントです。

は、を犯し ロールバックが、彼らはMDFに格納されていない場合は、MDFファイルに着いたとき、本当に、その後、しかし、最初のトランザクション・ログに起こるされ
Why cant we directly atomically write transactions to the DB file where 
in case of a power failure we can rollback to the last known consistent state. 

コミット/ロールバックは、データベースに接続されたアプリケーションによって制御されます。

システム障害が発生した場合は、データベースを一貫性のある状態に戻すためにログが必要です。

トランザクションログには、SQL Serverデータベースに対して行われたすべてのトランザクションが格納されます。ただし、BULK IMPORTまたはSELECT INTOのようにログに記録されるトランザクションはほとんどありません。

トランザクションログなしでSQL Serverデータベースを使用することはできますか? いいえ、これはSQL Serverの設計上不可能です。

SQL Serverのバックアップと復元の操作は、データベースの回復モデルのコンテキスト内で行われます。

シンプル、フル、およびバルクログの3つのリカバリモデルがあります。

通常、データベースは完全復旧モデルを使用します。 いつでも別の復旧モデルに切り替えることができます。

フル・リカバリ・モデルを選択しても安全です。これは、システムがダウンする前の最後の分まで復元できます。詳細は

:SQL Serverに固有ではありません

Recovery Models

The Transaction Log

-1

、先行書き込みログは、パフォーマンス上の理由から、主に使用されています。

第1に、トランザクションログは追加専用であるため、変更を書き込んでもデータファイル内の特定のブロックを見つける必要はなく、大きなテーブルではコストがかかる可能性があります。

第2に、トランザクションログレコードには、変更されたブロック全体が含まれるとは限りません。古いレコードと新しいレコードの違いがあります。データファイルI/Oは、ブロック全体またはブロック(エクステント)単位で実行されるため、レコード内の1バイトであってもブロック全体(エクステント)をデータファイルに書き込む必要があり、転送されるデータ量が大幅に増加します各取引

第3に、トランザクションログを使用して前回のバックアップ以降のデータベースに対する変更を再生することができます。これにより、以前のバックアップ時またはそれ以降の任意の時点にデータベースを復元できます。データファイルに直接変更を書き込んだり、突然それらのファイルを失った場合(たとえば、ディスク障害など)、唯一の選択肢はデータベースの状態を以前のバックアップの時点に復元することです。これはもちろん、トランザクションログが別のデバイスに存在し、理想的には多重化されていることを意味します。

+1

TLogsの使用は確かに「パフォーマンス上の理由から主に使用される」ものではありません。一貫性を保証するメカニズムです。 –

+0

@MitchWheat - すべての変更をただちにディスクに書き込むだけで、余分なログを使わなくても一貫性を保つことができますが、パフォーマンスが低下します。 – mustaccio

+0

すべての変更はすぐにTLogに書き込まれます。どのように動作するのか分かりません。 –

関連する問題