DB2 - Exemplos simples - ROLLBACK


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES, Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

DB2 - Exemplos simples - ROLLBACK

A instrução ROLLBACK pode ser usada para encerrar uma unidade de recuperação e restaurar todas as alterações do banco de dados relacional que foram feitas por essa unidade de recuperação.
Se os bancos de dados relacionais forem os únicos recursos recuperáveis usados pelo processo do aplicativo, ROLLBACK também encerrará a unidade de trabalho.
ROLLBACK também pode ser usado para restaurar apenas as alterações feitas depois que um ponto de salvamento foi definido na unidade de recuperação, sem encerrar a unidade de recuperação.
Reverter para um ponto de salvamento permite que as alterações selecionadas sejam desfeitas.

Essa instrução pode ser incorporada em um programa de aplicativo ou emitida interativamente.
É uma instrução executável que pode ser preparada dinamicamente.
Ele pode ser usado no ambiente IMS ou CICS® apenas se a cláusula TO SAVEPOINT for especificada.

Sintaxe:

    EXEC SQL
         ROLLBACK [WORK]
    END-EXEC

Quando ROLLBACK é usado sem a cláusula SAVEPOINT, a unidade de recuperação na qual a instrução ROLLBACK é executada é encerrada e uma nova unidade de recuperação é iniciada.

Todas as alterações feitas pelas seguintes instruções durante a unidade de recuperação são restauradas:

  • ALTER
  • COMMENT
  • CREATE
  • DELETE
  • DROP
  • EXPLAIN
  • GRANT
  • INSERT
  • LABEL
  • MERGE
  • REFRESH TABLE
  • RENAME
  • REVOKE
  • SELECT INTO com uma instrução de alteração de dados SQL
  • select-statement com uma instrução de alteração de dados SQL
  • TRUNCATE quando a cláusula IMMEDIATE não é especificada
  • UPDATE

ROLLBACK sem a cláusula TO SAVEPOINT também faz com que as seguintes ações ocorram:

  • Todos os bloqueios adquiridos implicitamente durante a unidade de recuperação são liberados.
    Consulte LOCK TABLE para obter uma explicação sobre a duração dos bloqueios adquiridos explicitamente.

  • Todos os cursores são fechados, todas as instruções preparadas são destruídas e quaisquer cursores associados às instruções preparadas são invalidados.

  • Todas as linhas e todos os arquivos de trabalho lógico de cada tabela temporária criada do processo de aplicação são excluídos.
    (Todas as linhas de uma tabela temporária declarada não são excluídas implicitamente.
    Como ocorre com as tabelas base, todas as alterações feitas em uma tabela temporária declarada durante a unidade de recuperação são desfeitas para restaurar a tabela ao seu estado no último ponto de confirmação.)

  • Todos os localizadores LOB, incluindo aqueles que estão retidos, são liberados.

TO SAVEPOINT

Especifica que a unidade de recuperação não deve ser encerrada e que apenas uma reversão parcial (para um ponto de salvamento) deve ser executada.
Se um nome de ponto de salvamento não for especificado, a reversão é para o último ponto de salvamento ativo.
Por exemplo, se em uma unidade de recuperação, os pontos de salvamento A, B e C são definidos nessa ordem e, em seguida, C é liberado, ROLLBACK TO SAVEPOINT causa uma reversão para o ponto de salvamento B.

savepoint-name

Identifica o ponto de salvamento para o qual reverter.
O nome deve identificar um ponto de salvamento existente no servidor atual.

Todas as alterações do banco de dados (incluindo alterações feitas em tabelas temporárias declaradas, mas excluindo alterações feitas em tabelas temporárias criadas) que foram feitas depois que o ponto de salvamento foi definido são restauradas.
As alterações feitas nas tabelas temporárias criadas não são registradas e não são restauradas; em vez disso, é emitido um aviso.
(Um aviso também é emitido quando uma tabela temporária criada é alterada e há um ponto de salvamento ativo.)

Além disso, nenhum dos itens a seguir foi desfeito:

  • A abertura ou fechamento de cursores
  • Mudanças no posicionamento do cursor
  • A aquisição e liberação de bloqueios
  • O armazenamento em cache das instruções revertidas
  • Todos os pontos de salvamento definidos após aquele para o qual a reversão é executada são liberados.
    O ponto de salvamento para o qual a reversão é executada não é liberado.

    ROLLBACK com ou sem a cláusula TO SAVEPOINT não tem efeito nas conexões.

    As informações a seguir se aplicam apenas à reversão de todas as alterações na unidade de recuperação (a instrução ROLLBACK sem a cláusula TO SAVEPOINT):

    • Procedimentos armazenados. A instrução ROLLBACK não pode ser usada se o procedimento estiver na cadeia de chamada de uma função definida pelo usuário ou um gatilho ou se Db2 não for o coordenador de confirmação.

    • IMS ou CICS. O uso de uma instrução ROLLBACK para SAVEPOINT em um ambiente IMS ou CICS somente retrocede recursos Db2.
      Quaisquer outros recursos recuperáveis ??atualizados no ambiente não são revertidos.
      Para fazer uma operação de rollback nesses ambientes, os programas SQL devem usar a chamada prescrita por seu gerenciador de transações.
      O efeito dessas operações de reversão nos dados Db2 é o mesmo da instrução SQL ROLLBACK.

      Uma operação de reversão em um ambiente IMS ou CICS pode manipular o fechamento de cursores que foram declarados com a opção WITH hold de forma diferente da instrução SQL ROLLBACK.
      Se um aplicativo solicitar uma operação de rollback do CICS ou IMS, mas nenhum trabalho foi executado no Db2 desde o último ponto de confirmação, o pedido de rollback não será transmitido para o Db2.
      Se o aplicativo abriu cursores usando a opção WITH HOLD em uma unidade de trabalho anterior, os cursores não serão fechados e quaisquer instruções preparadas associadas a esses cursores não serão destruídas.

    • Operações de rollback implícitas: Em todos os ambientes Db2 , o abend de um processo é uma operação de rollback implícita.

    ROLLBACK e espaços de tabela não LOB que não são registrados:

    Se ROLLBACK for executado para uma unidade de trabalho que inclui alterações em um espaço de tabela não LOB que não está registrado (especifica o atributo NOT LOGGED), esse espaço de tabela é marcado como RECOVER-pendente e o espaço de tabela é colocado na lista de páginas lógicas.
    O espaço de tabela, portanto, não está disponível após a conclusão da operação de rollback.
    Para obter mais informações sobre o utilitário RECOVER, consulte RECOVER.

    Se a opção ON ROLLBACK DELETE ROWS foi especificada para a tabela, a atividade de inserção, atualização e exclusão não será registrada.
    Durante uma operação ROLLBACK ou ROLLBACK TO SAVEPOINT, se a tabela foi atualizada desde a última instrução COMMIT, todas as linhas serão excluídas da tabela.
    Quaisquer cursores abertos para a tabela não têm posições.
    Se a declaração da tabela temporária global declarada não foi confirmada, a declaração da tabela é revertida.

    Se a opção ON ROLLBACK PRESERVE ROWS foi especificada para a tabela, a atividade de inserção, atualização e exclusão não é registrada.
    Durante uma operação ROLLBACK ou ROLLBACK TO SAVEPOINT, todas as linhas da tabela são preservadas, independentemente de quaisquer atualizações na tabela desde a última instrução COMMIT.
    Quaisquer cursores abertos para a tabela não têm posições.
    Se a declaração da tabela temporária global declarada não foi confirmada, a declaração da tabela é revertida.

    Efeito do ROLLBACK nas variáveis globais:

    As variáveis globais não são controladas no nível da transação.
    A emissão de uma instrução ROLLBACK não afeta o conteúdo de uma variável global.

    Efeito de ROLLBACK nas operações de inserção:

    Se a execução de uma instrução INSERT resultar na criação de um conjunto de dados em um espaço de tabela e a operação INSERT for revertida, os dados inseridos serão excluídos, mas o conjunto de dados não será excluído.