我有一个场景,其中验证数据,并插入有效的数据到一些表和更新状态到审计表在Oracle包。当存在验证失败时,则希望恢复除审计表信息之外的所有其他表数据。是否可以跳过一个表的回滚。在每个表之后,将状态添加到审计表。提前感谢您的帮助。
ct3nt3jp1#
通常,它是由一个单独的自治事务过程完成的,该过程修改审计表并提交正在进行的更改。因为它是一个自治事务,所以commit不会影响主事务,所以一旦你rollback,你在所有其他表中所做的更改将被回滚,但存储在审计表中的信息将保持原样。
commit
rollback
pkln4tw62#
是否可以跳过一个表的回滚。不可以。当您ROLLBACK一个事务处理时,整个事务处理都将回滚,您无法挑选和选择要回滚或不回滚的事务处理部分。如果验证失败,则希望还原除审计表信息之外的所有其他表数据。您需要:1.使用多个事务处理,在一个事务处理中执行(已验证的)数据修改,在另一个事务处理中执行审计数据修改,然后对第一个事务处理执行ROLLBACK,对第二个事务处理执行COMMIT。这通常是使用AUTONOMOUS TRANSACTION来完成的。1.使用单个事务并首先执行审核数据修改,创建SAVEPOINT,然后仅执行(经验证的)数据修改,如果修改失败,则使用ROLLBACK TO SAVEPOINT撤消该保存点之后的所有更改。然后,您可以选择COMMIT,也可以选择ROLLBACK到SAVEPOINT之前的前一个COMMIT。1.使用单个事务处理,首先执行审计数据修改,然后执行COMMIT,然后才执行(已验证的)数据修改,如果修改失败,则执行ROLLBACK以撤消对最后一个COMMIT所做的所有更改。
ROLLBACK
COMMIT
AUTONOMOUS TRANSACTION
SAVEPOINT
ROLLBACK TO SAVEPOINT
2条答案
按热度按时间ct3nt3jp1#
通常,它是由一个单独的自治事务过程完成的,该过程修改审计表并提交正在进行的更改。
因为它是一个自治事务,所以
commit
不会影响主事务,所以一旦你rollback
,你在所有其他表中所做的更改将被回滚,但存储在审计表中的信息将保持原样。pkln4tw62#
是否可以跳过一个表的回滚。
不可以。当您
ROLLBACK
一个事务处理时,整个事务处理都将回滚,您无法挑选和选择要回滚或不回滚的事务处理部分。如果验证失败,则希望还原除审计表信息之外的所有其他表数据。
您需要:
1.使用多个事务处理,在一个事务处理中执行(已验证的)数据修改,在另一个事务处理中执行审计数据修改,然后对第一个事务处理执行
ROLLBACK
,对第二个事务处理执行COMMIT
。这通常是使用AUTONOMOUS TRANSACTION
来完成的。1.使用单个事务并首先执行审核数据修改,创建
SAVEPOINT
,然后仅执行(经验证的)数据修改,如果修改失败,则使用ROLLBACK TO SAVEPOINT
撤消该保存点之后的所有更改。然后,您可以选择COMMIT
,也可以选择ROLLBACK
到SAVEPOINT
之前的前一个COMMIT
。1.使用单个事务处理,首先执行审计数据修改,然后执行
COMMIT
,然后才执行(已验证的)数据修改,如果修改失败,则执行ROLLBACK
以撤消对最后一个COMMIT
所做的所有更改。