Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
回滚命令不工作-Oracle_Oracle_Oracle11g_Sqlplus_Rollback_Dml - Fatal编程技术网

回滚命令不工作-Oracle

回滚命令不工作-Oracle,oracle,oracle11g,sqlplus,rollback,dml,Oracle,Oracle11g,Sqlplus,Rollback,Dml,我掉了一张桌子,想往后滚,但没用。它会像这样工作吗?还是我在这里做错了 从大多数评论中,我很清楚DDL语句不能通过回滚而只能通过闪回来撤消 我试着解开 从学生中删除 它仍然无法撤消: 我的处决令是 插入 删除 回滚 我认为回滚不会撤消模式更改。删除表会使用诸如CREATE、DROP等语句更改数据库的结构 COMMIT和ROLLBACK仅对使用INSERT、UPDATE等语句与数据库交换的数据起作用 因此,不,它永远不会这样工作。回滚将永远不会撤消数据定义命令,如drop table alter

我掉了一张桌子,想往后滚,但没用。它会像这样工作吗?还是我在这里做错了

从大多数评论中,我很清楚DDL语句不能通过回滚而只能通过闪回来撤消

我试着解开 从学生中删除

它仍然无法撤消:

我的处决令是

插入

删除

回滚


我认为回滚不会撤消模式更改。

删除表会使用诸如CREATE、DROP等语句更改数据库的结构

COMMIT和ROLLBACK仅对使用INSERT、UPDATE等语句与数据库交换的数据起作用


因此,不,它永远不会这样工作。

回滚将永远不会撤消数据定义命令,如drop table alter table等。

回滚不会撤消架构更改,但要撤消drop table操作,您可以检查:

从:

Oracle数据库在每个DDL语句之前和之后隐式提交当前事务

这意味着您无法回滚DDL语句,即架构更改。

如果没有保存点限定符,回滚将回滚整个当前事务

对于DDL语句,没有要回滚的当前事务。DDL语句在语句开始之前和完成之后隐式生成提交。因此,如果您在删除后发出回滚,则当前事务中没有完成任何工作,因此没有要回滚的内容

对于DML语句,您将回滚整个当前事务。如果你这样做

插入 删去 回降 当执行插入操作时,事务开始。因此,当您发出回滚时,您正在回滚INSERT和DELETE,因此假设您开始时没有数据,那么您将返回到表中没有数据的状态。如果在插入之后提交,那么下一个事务将以DELETE开始,回滚操作将只回滚DELETE操作。或者,您可以在插入后声明保存点并回滚到该保存点

SQL> create table foo( col1 number );

Table created.

SQL> insert into foo values( 1 );

1 row created.

SQL> savepoint after_insert;

Savepoint created.

SQL> delete from foo;

1 row deleted.

SQL> rollback to savepoint after_insert;

Rollback complete.

SQL> select * from foo;

      COL1
----------
         1

要回滚ddl更改,您需要使用Flashback。

回滚:

使用ROLLBACK语句放弃所有挂起的更改。在ROLLBACK语句之后:

数据更改被撤消。 将恢复数据的以前状态。 受影响行上的锁将被释放。 范例

尝试从测试表中删除记录时,可能会意外清空该表。您可以更正错误,重新发出正确的语句,并使数据更改永久化

DELETE FROM test;
25,000 rows deleted.

ROLLBACK;
Rollback complete.

DELETE FROM test
WHERE id = 100;

1 row deleted.

SELECT *
FROM test
WHERE id = 100;
No rows selected.

COMMIT;
Commit complete

提交后,我们无法回滚。

正确。无法在中回滚DDL语句Oracle@climbage它能从表中撤消删除的行吗?能否提供您使用的语句以及执行它们的确切顺序?只要不执行提交或执行结构更改(如在数据库中删除表),就可以回滚数据操作(如删除行)。“回滚”只在遇到此类事件之一之前起作用,不再继续。@Kosi2801。我已经更新了我的问题,但我没有提交任何内容。您的数据库客户端是否启用了自动提交?检查它是否不会在每个成功语句后自动执行提交!请不要把解决方案塞进盒子里question@Sathya我没有足够的声誉来回答我自己的问题。所以我更新了这里,让我的评论者知道问题已经解决了,否则他们将不得不等待8个小时,而他们中的一些人肯定在解决同一个问题时浪费了他们的时间。在投票否决和编辑我的答案之前,你一定考虑过这个事实。对我来说,我做了正确的事情,你猜怎么着!!现在,我必须从头再写一遍我的答案。我想我应该谢谢你@库沙尔1。上面的部分是用来提问的,而不是回答的。2.downvote是因为糟糕的格式和一个蹩脚的问题,在开始3时没有任何细节。你可以留言说你已经修好了/将在8小时内或任何时间更新4。您的答案不会丢失,始终可以从以前的修订列表中找到@萨提亚。。。你真的必须阅读下面的评论流。起初,我甚至没有意识到,如果我们可以回滚已删除的表!感谢评论让我明白。对于这一点,我可以首先提供什么样的细节。萨提亚?上帝保佑你聪明的头脑。主持人。我不确定这个答案是否对具体问题有帮助,因为它需要更多关于结构和交易概念的知识,而这显然对提问者来说还不清楚@Kosi2801@ajx是 啊这不是一个合适的答案,但信息是有帮助的。嘿,伙计,我还有一个关于被丢弃的表的问题,我也发布了它,但到目前为止还没有找到解决方案。你能看看吗。这是提交后的链接,我们可以回滚。==>你 这意味着我们不能回滚,因为事务已经关闭,所以回滚毫无意义。