INF: Recoverability and Transaction Log DumpsLast reviewed: April 25, 1997Article ID: Q72783 |
The information in this article applies to:
- Microsoft SQL Server version 4.2 for OS/2 - Microsoft SQL Server version 4.2
SUMMARYThe following information describes how to preserve recoverability while using the DUMP TRANSACTION command to shrink the transaction log.
MORE INFORMATIONIn the past, some Microsoft documentation has advised that after each full database dump, a transaction dump with truncate only should be executed to remove all inactive transactions from the log, thereby reducing its size. The following is a brief explanation of why this could cause problems during database recovery. Whenever a dump is created, a checkpoint location is established in the transaction log along with a pointer to the last active transaction. Transactions that are currently executing at the time of a database dump will not be preserved, but will only be applied to the database after the dump of the affected data pages has occurred. During recovery, any active transaction that was not completely recorded in the transaction log will be rolled back, removing it from the database. Subsequently dumping the transaction log with truncate only will remove all inactive transactions from the log, including any that completed after the last database dump was initiated. If you later created a normal transaction dump, all inactive transactions recorded prior to the last active transaction would again be truncated to reduce the size of the log. Below is an illustration of what can happen if the following is created:
During the recovery process, each dump must be applied in a linear order and transactions are then rolled forward into the database. Because the transaction dump with truncate only (2) does not save the truncated transactions, there can be a logical gap of transactions that were completed between the time the entire database dump was initiated (1) and the time the transaction dump with truncate only (2) occurred. These transactions would never be applied during recovery and could, therefore, lead to data corruption.
Last
Active Checkpoint
---|--------|-------- 1. Database Dump
Last
Deleted Active Checkpoint
xxxxxxxxxxxxxxxxxx|--------|-------- 2. Transaction
Dump
(truncate
only)
Saved/ Last
Deleted Active Checkpoint
xxxxxxxxxxxxxxxxxx|xxxxxxxxxxxx|---------|-------- 3. Transaction
Dump
Last Last
Active Checkpoint Active Checkpoint
---|--------|xxxxx|------------|---------|-------- 4. Reapplied
Database
^^^^^ Dump (1) and
Missing Transactions Transaction
could lead to data Dump (3)
corruption during
recovery
After a dump transaction with truncate only, SQL Server will still
allow subsequent normal transaction dumps to continue to shrink the
log. However, to avoid the problem of potential data corruption, SQL
Server records when a transaction dump with the truncate only option
has taken place in a database, and will not allow a subsequently
saved transaction log to be used to recover the database. This will
remain true until a new dump of the database has been produced.
To shrink your transaction log so that recovery will restore all of the database transactions, use either of the following two methods:
TRANSACTION |
Additional query words:
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |