Transações adiadas (SQL Server)Deferred Transactions (SQL Server)

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

No SQL ServerSQL Server Enterprise, uma transação corrompida poderá ser adiada se os dados necessários na reversão (desfazer) estiverem offline durante a inicialização do banco de dados.In SQL ServerSQL Server Enterprise, a corrupted transaction can become deferred if data required by rollback (undo) is offline during database startup. Uma transação adiada é uma transação que não está confirmada no término da fase de roll forward e que encontrou um erro que impede a reversão.A deferred transaction is a transaction that is uncommitted when the roll forward phase finishes and that has encountered an error that prevents it from being rolled back. Como a transação não pode ser revertida, é adiada.Because the transaction cannot be rolled back, it is deferred.

Observação

Transações corrompidas só são adiadas no SQL ServerSQL Server Enterprise.Corrupted transactions are deferred only in SQL ServerSQL Server Enterprise. Em outras edições do SQL ServerSQL Server, uma transação corrompida causa falha na inicialização.In other editions of SQL ServerSQL Server, a corrupted transaction causes startup to fail.

Geralmente, uma transação adiada ocorre porque, enquanto o roll forward do banco de dados estava sendo efetuado, um erro de E/S impediu a leitura de uma página exigida pela transação.Generally, a deferred transaction occurs because, while the database was being rolled forward, an I/O error prevented reading a page that was required by the transaction. Porém, um erro no arquivo também pode causar transações adiadas.However, an error at the file level can also cause deferred transactions. Uma transação adiada também pode ocorrer quando uma sequência de restauração parcial para em um ponto em que a reversão de transação é necessária e uma transação requer dados que estão offline.A deferred transaction can also occur when a partial restore sequence stops at a point at which transaction rollback is necessary and a transaction requires data that is offline.

Transações de usuário que estão sendo revertidas e encontram um erro de E/S fazem com que todo o banco de dados fique offline.User transactions that are rolling back and hit an I/O error cause the whole database to go offline. Quando o banco de dados volta a ficar online, essa ação faz com que ele readquira todos os bloqueios que tinha e tente reverter todas as transações não confirmadas.When the database is brought back online, the redo reacquires all the locks it had and tries to roll back all the uncommitted transactions. Todos os dados modificados por uma transação permanecem adequadamente bloqueados até que a transação possa ser revertida.All data modified by a transaction remains appropriately locked until the transaction can roll back. Transações que não podem ser revertidas perderão seus bloqueios quando o dano for reparado e o banco de dados reinicializado ou, após uma restauração online, quando as transações adiadas são resolvidas enquanto o banco de dados permanece online.Transactions that cannot be rolled back will give up their locks when the corruption is fixed and the database restarted or, after an online restore, when the deferred transactions are resolved while the database remains online. Até esse ponto, uma transação adiada pode manter bloqueios que impedem certas operações no banco de dados como um todo.Until that point, a deferred transaction can hold locks that prevent certain operations on the database as a whole. Por exemplo, se uma transação adiada contiver uma instrução CREATE TABLE, nenhum usuário poderá criar uma tabela até que a transação adiada tenha sido resolvida.For example, if a deferred transaction contains a CREATE TABLE instruction, no user can create a table until the deferred transaction has been resolved.

Uma transação adiada também pode ocorrer quando uma restauração por etapas recupera um banco de dados em um ponto no qual uma ou mais transações ativas estejam afetando um grupo de arquivos que ainda não tenha sido restaurado e está offline.Deferred transaction can also occur because a piecemeal restore recovers a database to a point at which one or more active transactions are affecting a filegroup that has not yet been restored and is offline. Como as transações não podem ser revertidas, são adiadas.Because the transactions cannot be rolled back, they become deferred.

A tabela a seguir lista as ações que fazem com que um banco de dados execute uma recuperação e o resultado da ocorrência de um problema de E/S.The following table lists the actions that cause a database to perform recovery and the outcome if an I/O problem occurs.

AçãoAction Resolução (se ocorrerem problemas de E/S ou se os dados exigidos estiverem offline)Resolution (if I/O problems occur or required data is offline)
Inicialização do servidorServer start transação adiadaDeferred transaction
RestaurarRestore transação adiadaDeferred transaction
AnexarAttach Falha ao anexarAttach fails
Reinicialização automáticaAutorestart transação adiadaDeferred transaction
Criar banco de dados ou instantâneo do banco de dadosCreate database or database snapshot Falha ao criarCreation fails
Refazer espelhamento de banco de dadosRedo on database mirroring transação adiadaDeferred transaction
O grupo de arquivos está offlineFilegroup is offline transação adiadaDeferred transaction

Removendo uma transação do estado DEFERREDMoving a Transaction Out of the DEFERRED State

Importante

As transações adiadas mantêm o log de transações ativo.Deferred transactions keep the transaction log active. Um arquivo de log virtual que contém qualquer transação adiada não pode ser truncado até que essas transações sejam removidas do estado adiado.A virtual log file that contains any deferred transactions cannot be truncated until those transactions are moved out of the deferred state. Para obter mais informações sobre o truncamento de log, veja O log de transações (SQL Server).For more information about log truncation, see The Transaction Log (SQL Server).

Para remover a transação do estado adiado, o banco de dados deve ser inicializado de forma limpa sem qualquer erro de E/S.To move the transaction out of the deferred state, the database must start cleanly without any I/O errors. Se houver transações adiadas, será necessário reparar a origem dos erros de E/S.If deferred transactions exist, you must fix the source of the I/O errors. As soluções disponíveis, listadas na ordem em que são geralmente usadas, são as seguintes:The available solutions, listed in the order in which they are typically tried, are as follows:

  • Reinicialize o banco de dados.Restart the database. Se o problema foi temporário, o banco de dados deverá reinicializar sem transações adiadas.If the problem was transient, the database should start without deferred transactions.

  • Se as transações foram adiadas porque um grupo de arquivos estava offline, coloque o grupo de arquivos online.If the transactions were deferred because a filegroup was offline, bring the filegroup back online.

    Para colocar um grupo de arquivos offline online, use a seguinte instrução Transact-SQLTransact-SQL :To bring an offline filegroup back online, use the following Transact-SQLTransact-SQL statement:

    RESTORE DATABASE database_name FILEGROUP=<filegroup_name>  
    
  • Restaure o banco de dados.Restore the database. Após a restauração online, qualquer transação adiada estará resolvida.After an online restore, any deferred transactions are resolved.

    No modelo de recuperação completa ou bulk-logged, se as transações adiadas foram causadas somente por algumas páginas corrompidas, uma restauração de página online poderá resolver os erros (onde houver suporte).Under the full or bulk-logged recovery model, if the deferred transactions were caused by only a few corrupted pages, an online page restore might resolve the errors (where supported).

  • Se você não precisar mais de um grupo de arquivos cujo status offline esteja causando transações adiadas, exclua o grupo de arquivos offline.If you are no longer require a filegroup whose offline status is causing deferred transactions, make the offline filegroup defunct. Transações que foram adiadas porque o grupo de arquivos estava offline são removidas desse estado depois que o grupo de arquivos é considerado extinto.Transactions that were deferred because the filegroup was offline are moved out of the deferred state after the filegroup becomes defunct.

    Importante

    Um grupo de arquivos extinto nunca pode ser recuperado.A defunct filegroup can never be recovered.

    Para obter mais informações, veja Remover grupos de arquivos expirados (SQL Server).For more information, see Remove Defunct Filegroups (SQL Server).

  • Se as transações foram adiadas por causa de uma página corrompida e se não existir um bom backup do banco de dados, use o processo a seguir para reparar o banco de dados:If transactions were deferred because of a bad page and if a good backup of the database does not exist, use the following process to repair the database:

    • Primeiro, coloque o banco de dados em modo de emergência executando a seguinte instrução Transact-SQLTransact-SQL :First put the database into emergency mode by executing the following Transact-SQLTransact-SQL statement:

      ALTER DATABASE <database_name> SET EMERGENCY  
      

      Para obter informações sobre o modo de emergência, consulte Database States.For information about emergency mode, see Database States.

    • Em seguida, repare o banco de dados usando a opção DBCC REPAIR_ALLOW_DATA_LOSS em uma das seguintes instruções DBCC: DBCC CHECKDB, DBCC CHECKALLOC ou DBCC CHECKTABLE.Then, repair the database by using the DBCC REPAIR_ALLOW_DATA_LOSS option in one of the following DBCC statements: DBCC CHECKDB, DBCC CHECKALLOC, or DBCC CHECKTABLE.

      Quando a DBCC encontra a página corrompida, anula sua alocação e repara qualquer erro relacionado.When DBCC encounters the bad page, DBCC deallocates it and repairs any related errors. Essa abordagem permite que o banco de dados seja colocado novamente online, em um estado fisicamente consistente.This approach enables the database to be brought back online in a physically consistent state. Porém, dados adicionais também podem ser perdidos; portanto essa abordagem deve ser usada como último recurso.However, additional data might also be lost; therefore, this approach should be used as a last resort.

Consulte TambémSee Also

Visão geral de restauração e recuperação (SQL Server) Restore and Recovery Overview (SQL Server)
Remover grupos de arquivos expirados (SQL Server) Remove Defunct Filegroups (SQL Server)
Restaurações de arquivo (Modelo de recuperação completa) File Restores (Full Recovery Model)
Restaurações de arquivos (Modelo de recuperação simples) File Restores (Simple Recovery Model)
Restaurar páginas (SQL Server) Restore Pages (SQL Server)
Restaurações por etapas (SQL Server) Piecemeal Restores (SQL Server)
ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
RESTORE (Transact-SQL)RESTORE (Transact-SQL)