如果实现oracle中DDL语句的回滚

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果实现oracle中DDL语句的回滚相关的知识,希望对你有一定的参考价值。

如题,大家都知道DDL是自动提交的语句,那么有没有办法实现撤消已经成功执行的DDL或相应组件能实现这样的功能?比如我要修改表T的结构,其中分别要删除字段A,执行成功了,然后再修改字段B的类型由字符类型改变为数字类型,但因为该表中字段B不为空而导致修改字段B的类型将失败,我想回归到未做任何修改之前,但又不能使用数据库还原,因为这一还原会影响其它用户正在进行的操作,应该只影响我当前用户对这个表的操作,虽然有flashback功能,但这个只是10g以上版本才有的功能,而我想要的实现不应该依赖于此功能,要不然不同数据库版本就不通用了,而这个操作也不能有过日志还原功能,因为不应该人为干预,因为我要做的是一个可以修改表结构的工具,应该是程序自动实现的,虽然采用临时表来保留修改之前的数据行,还原结构后再把数据行重新替换回去可以达到效果,不过这样做势必要耗费很大的开消,特别是在数据量大的时候特别明显,请问大侠们有没有更好的实现思路或现成的组件能达到这个功能要求的?谢谢!!!
谢谢大家,大家都知道DDL语句不能回滚,请不要再回答“DDL语句不能回滚”之内的回答了,浪费表情!我这里提问的目的是想征求新的思路!请认真阅读前面的提问内容后再回答!谢谢!

参考技术A ddl语句的回滚不可以回滚 参考技术B DDL语句无法回滚,因为DDL语句执行前和执行后各提交一次.
FLASHBACK TABLE 语句说明:
Also, Oracle Database cannot restore a table to an earlier state across any DDL operations that change the structure of the table.

参考资料:Oracle SQL Language Reference

以上是关于如果实现oracle中DDL语句的回滚的主要内容,如果未能解决你的问题,请参考以下文章

oracle中DDL和DML能在同一事务并一同回滚吗

Oracle 事务操作(事务的回滚与提交)

自治事务中的 Oracle DDL

oracle中DDL DML指啥?

oracle中DDL DML指啥?

PostgreSQL中的DDL支持回滚