Вы можете посмотреть на использование базы данных FLASHBACK, я думаю, что вы можете сделать это на уровне схемы / объекта, но проверьте документы, чтобы подтвердить это. Вы должны быть на 10G, чтобы это работало.

я есть программа, которая периодически обновляет свою схему базы данных. Иногда может произойти сбой одного из операторов DDL, и если это произойдет, я хочу откатить все изменения. Я обертываю обновление в транзакции следующим образом:

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;

По мере выполнения, если один из операторов не выполняется, я выполняю ROLLBACK вместо COMMIT. Это прекрасно работает на SQL Server, но не оказывает желаемого эффекта на Oracle. Oracle, кажется, делает неявный COMMIT после каждого оператора DDL:

http://www.orafaq.com/wiki/SQL_FAQ#What_are_the_difference_between_DDL.2C_DML_and_DCL_commands.3Fhttp://infolab.stanford.edu/~ullman/fcdb/oracle/or-nonstandard.html#transactions

ЕстьЛюбые способ отключить этот неявный коммит?

Ответы на вопрос(1)

Ваш ответ на вопрос