Artigo: 187289 - Última revisão: quinta-feira, 1 de Julho de 2004 - Revisão: 1.2

Como implementar transacções aninhadas com Oracle

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sumário

ADO e ODBC não suportam transacções aninhadas. No entanto, SQL nativo da Oracle suporta a palavra-chave ponto de SALVAGUARDA pode ser utilizada para simular transacções aninhadas.

Mais Informação

A base de dados de Conhecimento Microsoft artigo 177138  (http://support.microsoft.com/kb/177138/EN-US/ ) , intitulado "INFO: aninhado transacções não disponíveis no ODBC/OLE DB/ADO" indica esta sobre transacções aninhadas:
"Nenhum Open Database Connectivity (ODBC, nem qualquer suporta fornecedor Microsoft OLE DB disponibilizadas Nested transacções. ActiveX Data Objects (ADO) suporta a funcionalidade, mas apenas se o fornecedor subjacente expõe-lo. Actualmente nenhum dos fornecedores de OLE DB da Microsoft suporta Nested transacções. "

Isto acontece para o Microsoft ODBC para Oracle controlador. No entanto, utilizando a palavra-chave do ponto de SALVAGUARDA, pode simular transacções aninhado. Para obter mais informações sobre suporte nativo de ODBC ou ADO para transacções aninhado, consulte o artigo mencionado acima.

A palavra-chave do ponto de SALVAGUARDA basicamente define um marcador para declarações não consolidados numa sessão de Oracle. Pode anular estas instruções utilizando a opção para com a instrução de ROLLBACK. Este tudo tem de ser efectuado através de instruções de execução (tal como na forma de <connection>.Execute) porque o analisador ODBC não é possível analisar correctamente a palavra-chave do ponto de SALVAGUARDA.

O seguinte código mostra como este tudo funciona:
    Conn = "UID=****;PWD=****;DRIVER={Microsoft ODBC for Oracle};" _
            & "SERVER=SamOracle;"

    Set Cn = New ADODB.Connection

    With Cn
        .ConnectionString = Conn
        .CursorLocation = adUseClient
        .Open
    End With

    Cn.BeginTrans
    Cn.Execute "SAVEPOINT ALPHA"
    Cn.Execute "INSERT INTO trantest VALUES(1,10)"
    Cn.Execute "INSERT INTO trantest VALUES(2,10)"
    Cn.Execute "SAVEPOINT BETA"
    Cn.Execute "INSERT INTO trantest VALUES(3,10)"
    Cn.Execute "INSERT INTO trantest VALUES(4,10)"
    Cn.Execute "ROLLBACK TO SAVEPOINT BETA"
    Cn.Execute "COMMIT"
    Cn.RollbackTrans
				
Nota : Isto assume uma tabela "Trantest" existe no servidor Oracle.

Este código irá consolidar as duas primeiras instruções INSERT e anulação duas segunda. Irá reparar que o conjunto completo de instruções é apresentado com um CONNECTION nível BeginTrans e CommitTrans. Isto é necessário para que, ao nível da API de ODBC, SQL_AUTOCOMMIT SQLSetConnectOption estiver definido como SQL_AUTOCOMMIT_OFF. Depois de concluir a transacção é uma boa ideia para re-set SQL_AUTOCOMMIT para SQL_AUTOCOMMIT_ON (a predefinição) ao executar um CommitTrans ou um RollbackTrans. Uma vez que tem consolidada ou distribuído segurança suas transações com instruções a executar, não interessa se chamar CommitTrans ou RollbackTrans; qualquer forma, têm nada para confirmação ou anulação. Apenas estiver a chamar estas funções para repor SQL_AUTOCOMMIT SQL_AUTOCOMMIT_ON ambos fazem.

Referências

Para obter informações sobre como adquirir a pilha de Microsoft Data Access Components (MDAC) (que inclui o Microsoft ODBC para Oracle controlador), consulte o seguinte artigo da base de dados de conhecimento da Microsoft:
175018  (http://support.microsoft.com/kb/175018/EN-US/ ) Como adquirir e instalar o controlador de ODBC Microsoft Oracle
Para obter mais informações sobre aninhada transacções com ODBC e consulte o seguinte artigo da base de dados de conhecimento da Microsoft:
177138  (http://support.microsoft.com/kb/177138/EN-US/ ) INFO: Transacções aninhadas não está disponíveis na base de dados de ODBC/OLE/ADO
Para informações sobre como utilizar ADO com Oracle, consulte o seguinte artigo da base de dados de conhecimento da Microsoft:
176936  (http://support.microsoft.com/kb/176936/EN-US/ ) INFO: Visual Basic 5.0 aceder a uma base de dados Oracle utilizando ADO

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.0
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.5
  • Microsoft Open Database Connectivity 2.0
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
Palavras-chave: 
kbmt kbdatabase kbdriver kbhowto kboracle KB187289 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 187289  (http://support.microsoft.com/kb/187289/en-us/ )