Quando trabalhei no Oracle 8 muitos anos antes, costumava executar o comando COMMIT manualmente após cada INSERT em massa. No SQL Server, o Auto-Commit está ativado por padrão, o que tem vantagens e também riscos.
Eu quero saber se as versões mais recentes do Oracle ainda têm o Auto-Commit OFF por padrão? Também quero saber como desativar o Auto-Commit no SQL Server 2005.
Oráculo
De AskTom em 2000:
Isso ainda é verdade e provavelmente sempre será. Para obter uma descrição detalhada
commit
, consulte os documentos do OracleSQLServer 2000+
de SO (invertido):
ou se preferir, nos documentos (ou no link mais direto de Mark )
Para o SQL Server, você usaria SET IMPLICIT_TRANSACTIONS ON .
No modo de transação implícita, qualquer DML (
SELECT, INSERT, DELETE, UPDATE
etc) ou DDL (CREATE, ALTER, DROP
etc) iniciará uma transação e você deve explicitamenteCOMMIT
ouROLLBACK
.Como alternativa, uma transação explícita pode ser iniciada com
BEGIN TRANSACTION
.Como foi respondido acima, no SQL você pode definir transações implícitas para sua conexão com essa
SET IMPLICIT_TRANSACTIONS ON
configuração e usar os links fornecidos por Mark e Jack.Eu alertaria contra olhar para fazer isso em geral e até mesmo fazê-lo com frequência em suas próprias conexões. O outro lado de fazer essa alteração é que agora você tem uma transação para todas as suas ações. Se você não gerenciar ou limpar adequadamente, agora você pode ter transações abertas bloqueando o DML em seu sistema.
Se você está preocupado em excluir/atualizar acidentalmente as linhas erradas ao fazer a limpeza manual, existem algumas opções melhores:
BEGIN TRANSACTION
antes de escrever uma atualização/inserção/exclusão de um sistema...Às vezes, começo uma sessão e digito
(comentei para não acontecer mas digitando para não me ocupar e esquecer)
Em seguida, farei meu trabalho após o start tran, escreverei uma instrução select na mesma sessão que mostre a imagem posterior para garantir que não errei (ou apenas confio no número de linhas afetadas, etc.) e, em seguida, cometer se tudo parece bem.
Bem... Não é estritamente verdade que o Oracle não tem modo autocommit. Se você olhar no OCI subjacente, verá que há um
OCI_COMMIT_ON_SUCCESS
sinalizador para o qual você pode passarOCIStmtExecute()
. Por que você faria isso? Bem, se você estiver usando o padrão muito comum de INSERT→COMMIT→INSERT→... (por exemplo, ao registrar dados de séries temporais), isso reduz pela metade o número de viagens de ida e volta da rede que você precisa fazer, pode ser uma melhoria de desempenho muito significativa usar este sinalizador, especialmente em links WAN.Se você passar
OCI_DEFAULT
como sinalizador, sim, o autocommit está desativado, portanto, esse é o comportamento padrão.No servidor SQL (testado com SQL2005), para definir a confirmação automática no nível do servidor, você pode usar o TSQL conforme explicado por outros acima ou pode usar a GUI do SSMS. Para usar SSMS:
Se a caixa estiver desmarcada, significa que a confirmação automática está ativada. Se a caixa estiver marcada, significa que a confirmação automática está desativada.