题
我已经有了一个程序,定期更新其数据库架构。有时候,一发言的发言可能会失败,并且如果它不,我要回滚所有的变化。我包裹在一交易,像这样:
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;
因为我们正在执行,如果其中一个发言失败,我做一个回退而不是提交。这个伟大的作品就SQL服务器,但是没有预期的效果在Oracle。Oracle似乎做一个隐含的承诺之后每言声明:
- http://www.orafaq.com/wiki/SQL_FAQ#What_are_the_difference_between_DDL.2C_DML_and_DCL_commands.3F
- http://infolab.stanford.edu/~尔曼/fcdb/oracle/或非标准.html#交易
有没有 任何 方式,以关闭这种隐含的承诺?
解决方案
你不能把这个关闭。相当容易的工作,围绕通过设计你的脚本的下降表在该事件,他们已经存在等等。
你可以看一下在使用数据库闪回,我相信你可以做这个在架构/象的水平,但检查文档,确认这一点。你将需要于10G为,工作。
不隶属于 StackOverflow