Pergunta

Eu tenho um programa que atualiza periodicamente o seu esquema de banco de dados.Às vezes, as instruções de DDL pode falhar e se isso acontecer, eu quero reverter as alterações.Eu quebrar a atualização em uma transação, como por exemplo:

BEGIN TRAN;

CREATE TABLE A (PKey int NOT NULL IDENTITY, NewFieldKey int NULL, CONSTRAINT PK_A PRIMARY KEY (PKey));
CREATE INDEX A_2 ON A (NewFieldKey);
CREATE TABLE B (PKey int NOT NULL IDENTITY, CONSTRAINT PK_B PRIMARY KEY (PKey));
ALTER TABLE A ADD CONSTRAINT FK_B_A FOREIGN KEY (NewFieldKey) REFERENCES B (PKey);

COMMIT TRAN;

Como estamos a executar, se uma das instruções falha, eu faço um ROLLBACK em vez do COMMIT.Isso funciona muito bem no SQL Server, mas não tem o efeito desejado no Oracle.A Oracle parece fazer uma confirmação implícita depois de cada instrução DDL:

Existe qualquer forma para desactivar esta confirmação implícita?

Foi útil?

Solução

Você não pode desligar esta opção.Bastante fácil para contornar criação de scripts para mesas receptoras no evento que já existe, etc...

Você pode olhar no uso de FLASHBACK de banco de dados, eu acredito que você pode fazer isso no esquema/nível de objeto, mas de seleção os documentos para confirmar isso.Você precisa estar em 10G para que funcione.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top