AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 7087
Accepted
RPK
RPK
Asked: 2011-10-23 02:25:55 +0800 CST2011-10-23 02:25:55 +0800 CST 2011-10-23 02:25:55 +0800 CST

Confirmação automática no SQL Server e Oracle

  • 772

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.

sql-server oracle
  • 5 5 respostas
  • 14999 Views

5 respostas

  • Voted
  1. Best Answer
    Jack Douglas
    2011-10-23T02:40:12+08:002011-10-23T02:40:12+08:00

    Oráculo

    De AskTom em 2000:

    ...o único método em que a Oracle opera é "o cliente nos diz quando confirmar". Não temos um modo de confirmação automática. Várias FERRAMENTAS e APIs funcionam (por exemplo: posso dizer ao sqlplus para confirmar automaticamente, isso significa apenas que o sqlplus emitirá um commit após cada instrução).

    Isso ainda é verdade e provavelmente sempre será. Para obter uma descrição detalhada commit, consulte os documentos do Oracle

    SQLServer 2000+

    de SO (invertido):

    Você pode desativar o autocommit definindo implicit_transactions ON

    ou se preferir, nos documentos (ou no link mais direto de Mark )

    • 7
  2. Mark Storey-Smith
    2011-10-23T02:46:45+08:002011-10-23T02:46:45+08:00

    Para o SQL Server, você usaria SET IMPLICIT_TRANSACTIONS ON .

    No modo de transação implícita, qualquer DML ( SELECT, INSERT, DELETE, UPDATEetc) ou DDL ( CREATE, ALTER, DROPetc) iniciará uma transação e você deve explicitamente COMMITou ROLLBACK.

    Como alternativa, uma transação explícita pode ser iniciada com BEGIN TRANSACTION.

    • 5
  3. Mike Walsh
    2011-10-23T06:09:30+08:002011-10-23T06:09:30+08:00

    Como foi respondido acima, no SQL você pode definir transações implícitas para sua conexão com essa SET IMPLICIT_TRANSACTIONS ONconfiguraçã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:

    1. Faça um backup primeiro
    2. Faça backup da tabela primeiro selecionando todas as linhas em uma nova tabela (selecione * em tmpInCaseIMessUp_TableName_mw FROM TableName)
    3. Adquira o hábito de digitar BEGIN TRANSACTIONantes de escrever uma atualização/inserção/exclusão de um sistema...

    Às vezes, começo uma sessão e digito

    BEGIN TRAN
    
    -- COMMIT TRAN 
    

    (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.

    • 4
  4. Gaius
    2011-10-25T04:57:19+08:002011-10-25T04:57:19+08:00

    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_SUCCESSsinalizador para o qual você pode passar OCIStmtExecute(). 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_DEFAULTcomo sinalizador, sim, o autocommit está desativado, portanto, esse é o comportamento padrão.

    • 4
  5. StanleyJohns
    2011-10-26T12:21:23+08:002011-10-26T12:21:23+08:00

    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:

    1. Abra o SSMS e conecte-se ao seu servidor SQL.
    2. Na barra de menu, clique em Ferramentas > opções.
    3. Na janela de opções, expanda 'Query Execution' > 'SQL server'.
    4. Clique em 'ANSI'.
    5. Marque\Desmarque a caixa de seleção 'SET IMPLICIT_TRANSACTIONS'.

    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.

    • 3

relate perguntas

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve