Обернуть обновление схемы Oracle в транзакцию - PullRequest
4 голосов
/ 12 сентября 2008

У меня есть программа, которая периодически обновляет схему своей базы данных. Иногда может произойти сбой одного из операторов 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:

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

1 Ответ

6 голосов
/ 12 сентября 2008

Вы не можете отключить это. Довольно легко обойти, разработав свои сценарии для удаления таблиц, если они уже существуют и т. Д. *

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

...