Fórum Controle de transação... #28742
09/03/2007
0
Oi...
Gostaria de saber como funciona o controle de transações no Banco de Dados Oracle, pois conheco a fundo no SQL Server..
Exemplo no SQL Server temos ´Commit´ e ´Commit Tran´, Commit da comite em todas as transações abertas e Commit Tran ele respeita quem chamou ela, existe alguma coisa assim tb em Oracle....
Obrigado pela atenção...
Gostaria de saber como funciona o controle de transações no Banco de Dados Oracle, pois conheco a fundo no SQL Server..
Exemplo no SQL Server temos ´Commit´ e ´Commit Tran´, Commit da comite em todas as transações abertas e Commit Tran ele respeita quem chamou ela, existe alguma coisa assim tb em Oracle....
Obrigado pela atenção...
Rodrigo_koga
Curtir tópico
+ 0
Responder
Posts
13/03/2007
Arf
Não conheço um comando que permita ao Oracle escolher entre commitar a transação do usuário corrente ou de todas as pendentes (inclusive de outros usuários, q imagino ser a sua dúvida).
Via commit explícito, penso que não tem como fazer isso.
Mas, vamos exemplificar pra vc entender. Suponhamos que os passos abaixo estejam em ordem cronológica:
1 - Digamos que o usuário A tenha feito um insert na tabela T.
2 - Aí, o usuário B faz um insert na tabela A.T.
3 - O usuário A faz um select e vê apenas a sua informação.
4 - O usuário B faz um select e tb vê apenas a sua informação.
5 - Agora o usuário A faz um commit. Se ele fizer um select, ele vai ver apenas a sua informação, q foi commitada.
6 - Mas se o usuário B fizer um select, ele vai ver a sua informação e a do usuário A, q foi commitada.
7 - Se o usuário A fizer um rollback, não retornará nada e a sua informação continuará sendo vista pelos dois usuários, pois foi feito o commit.
8 - Agora, se o usuário B fizer um rollback, será retornada a sua informação e ele passará a ver apenas a informação do usuário A, q foi commitada.
Detalhe: se após o passo 4, um dos dois usuários executar um comando DDL, como estes tipos de comandos fazem commit implícito, as duas sessões serão commitadas automaticamente, e a partir daí, os dois usuários passarão a ver as duas informações, não sendo mais possível fazer um rollback.
É isso.
Espero que tenha esclarecido a sua dúvida.
ARF.
Via commit explícito, penso que não tem como fazer isso.
Mas, vamos exemplificar pra vc entender. Suponhamos que os passos abaixo estejam em ordem cronológica:
1 - Digamos que o usuário A tenha feito um insert na tabela T.
2 - Aí, o usuário B faz um insert na tabela A.T.
3 - O usuário A faz um select e vê apenas a sua informação.
4 - O usuário B faz um select e tb vê apenas a sua informação.
5 - Agora o usuário A faz um commit. Se ele fizer um select, ele vai ver apenas a sua informação, q foi commitada.
6 - Mas se o usuário B fizer um select, ele vai ver a sua informação e a do usuário A, q foi commitada.
7 - Se o usuário A fizer um rollback, não retornará nada e a sua informação continuará sendo vista pelos dois usuários, pois foi feito o commit.
8 - Agora, se o usuário B fizer um rollback, será retornada a sua informação e ele passará a ver apenas a informação do usuário A, q foi commitada.
Detalhe: se após o passo 4, um dos dois usuários executar um comando DDL, como estes tipos de comandos fazem commit implícito, as duas sessões serão commitadas automaticamente, e a partir daí, os dois usuários passarão a ver as duas informações, não sendo mais possível fazer um rollback.
É isso.
Espero que tenha esclarecido a sua dúvida.
ARF.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)