ID do artigo: 187289 - Última revisão: quinta-feira, 1 de julho de 2004 - Revisão: 1.2

Como implementar transaçõ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 | Recolher tudo

Sumário

ADO e ODBC não oferecem suporte transações aninhadas. No entanto, nativo SQL Oracle oferece suporte a palavra-chave SAVEPOINT que pode ser usada para simular as transações aninhadas.

Mais Informações

A base de Conhecimento artigo 177138  (http://support.microsoft.com/kb/177138/EN-US/ ) , intitulado "INFO: aninhado transações não disponíveis no ODBC/OLE DB/ADO" diz isso sobre transações aninhadas:
"Nenhuma Open Database Connectivity (ODBC, nem qualquer suporta Microsoft OLE DB Provider lançadas transações Nested. ActiveX Data Objects (ADO) suporta a funcionalidade, mas somente se o provedor subjacente expõe. No momento nenhum dos provedores de BD OLE da Microsoft oferece suporte à Nested transações. "

Isso é verdadeiro para o Microsoft ODBC para driver Oracle. No entanto, usando a palavra-chave ponto de SALVAMENTO, você pode simular transações aninhadas. Para obter mais informações sobre o suporte nativo do ODBC ou ADO para transações aninhadas, consulte o artigo mencionado acima.

A palavra-chave SAVEPOINT basicamente define um indicador para instruções não confirmados em uma sessão do Oracle. Você pode reverter essas instruções usando a opção para com a instrução ROLLBACK. Tudo isso deve ser feito por meio de instruções de execução (como em forma de <connection>.Execute) porque o analisador ODBC não é possível analisar a palavra-chave ponto de SALVAMENTO corretamente.

O código a seguir mostra como isso 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
				
Observação : Isso pressupõe que uma tabela "Trantest" existe no servidor Oracle.

Esse código irá confirmar as duas primeiras instruções INSERT e reversão dois segundo. Você irá notar que o conjunto completo de instruções está envolvido com BeginTrans nível CONNECTION e CommitTrans. Isso é necessário para que, no nível da API do ODBC, SQL_AUTOCOMMIT SQLSetConnectOption é definido como SQL_AUTOCOMMIT_OFF. Depois que terminar sua transação é uma boa idéia para redefinir SQL_AUTOCOMMIT para SQL_AUTOCOMMIT_ON (o padrão), executando um CommitTrans ou um RollbackTrans. Porque você tem confirmada ou revertida dos quais foi feito suas transações com suas instruções de execução, não importa se você chamar CommitTrans ou RollbackTrans; qualquer forma, eles têm nada a confirmação ou reversão. Você está chamando apenas essas funções para redefinir SQL_AUTOCOMMIT SQL_AUTOCOMMIT_ON, que os dois.

Referências

Para obter informações sobre como adquirir a pilha Microsoft Data Access Components (MDAC) (que inclui o Microsoft ODBC para driver Oracle), consulte o seguinte artigo:
175018  (http://support.microsoft.com/kb/175018/EN-US/ ) Como obter e instalar o driver ODBC do Microsoft Oracle
Para obter mais informações sobre transações com ODBC aninhados e consulte o seguinte artigo da Base de dados de Conhecimento da Microsoft:
177138  (http://support.microsoft.com/kb/177138/EN-US/ ) INFO: Aninhadas transações não está disponíveis no ODBC/OLE DB/ADO
Para informações sobre como usar o ADO com Oracle, consulte o seguinte artigo:
176936  (http://support.microsoft.com/kb/176936/EN-US/ ) INFO: Visual Basic 5.0 acessando um banco de dados Oracle usando 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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/ )