在事务中包装Oracle模式更新

在事务中包装Oracle模式更新

Wrap an Oracle schema update in a transaction

我有一个程序会定期更新其数据库架构。 有时,其中一个DDL语句可能会失败,如果失败了,我想回滚所有更改。 我将更新包装在这样的事务中:

1
2
3
4
5
6
7
8
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似乎在每个DDL语句之后执行一个隐式COMMIT:

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

有什么办法可以关闭此隐式提交吗?


您无法关闭此功能。 通过设计脚本来在表已经存在的情况下删除表,可以轻松解决该问题。

您可以查看使用FLASHBACK数据库,我相信您可以在模式/对象级别执行此操作,但是请检查文档以确认这一点。 您需要使用10G才能正常工作。


推荐阅读

    linux命令行模式清页?

    linux命令行模式清页?,工作,系统,命令,信息,地址,目录,内容,文件,操作,功能,l

    linux进入命令行模式?

    linux进入命令行模式?,系统,地址,情况,工作,命令,终端,首页,信息,目录,界面,l

    linux命令大全数据库?

    linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

    linux上数据库的命令?

    linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,

    linux命令dm数据库?

    linux命令dm数据库?,地址,软件,时间,设备,名字,服务,位置,名称,公司,命令,lin

    linux底线模式命令?

    linux底线模式命令?,系统,档案,密码,状态,工作,命令,模式,文件,明文,界面,lin

    linux用命令更新软件?

    linux用命令更新软件?,软件,系统,工作,管理,信息,地址,命令,检测,官网,设备,

    写5条linux命令语句?

    写5条linux命令语句?,工作,地址,系统,信息,目录,命令,管理,标准,功能,文件,li

    linux回滚行数的命令?

    linux回滚行数的命令?,地址,工具,系统,时间,信息,环境,工作,对比,情况,单位,l

    linux命令语句规律?

    linux命令语句规律?,系统,管理,基础,网络,信息,命令,服务,简介,工具,标准,lin

    linux启用命令模式?

    linux启用命令模式?,系统,密码,数字,首页,电脑,情况,终端,界面,模式,命令,安

    linux命令行模式联网?

    linux命令行模式联网?,系统,网络,地址,密码,软件,检测,信息,工具,终端,界面,l

    linux回到命令行模式?

    linux回到命令行模式?,系统,密码,状态,工具,电脑,终端,界面,环境,地方,命令,

    linux命令模式联网?

    linux命令模式联网?,网络,系统,工具,软件,密码,地址,最新,信息,工作,数据,lin

    linux安装更新命令?

    linux安装更新命令?,软件,系统,项目,名称,管理,数据,网站,工作,官方网站,命

    linux进去命令模式?

    linux进去命令模式?,系统,密码,首页,终端,命令,界面,窗口,选项,桌面,用户,lin

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux命令模式全屏?

    linux命令模式全屏?,系统,工具,电脑,数据,位置,命令,虚拟机,分辨率,字符串,

    linux网卡更新命令?

    linux网卡更新命令?,网络,服务,信息,状态,系统,网卡,下来,地址,材料,异常,如