什么是回滚段?
在这篇文章中,我们将详细讨论回滚段。在回滚段之前,我们需要了解事务处理。
事务只不过是在数据库内部进行更改的逻辑工作单元。事务执行完成后,我们有两个选择,要么使用 commit 命令对数据库进行更改,要么使用 rollback 命令回滚以恢复数据库的先前值。
事务示例:假设我们正在执行将员工的名字更新为 id 为 100 的“John”的任务。那么执行此操作的 SQL 命令将是
UPDATE employee
SET firstname="John"
WHERE id=100;
在这里,我们可以使用 commit 将更改反映到数据库中,或者在任何失败的情况下使用 rollback。这意味着出了点问题,我们不想在数据库中进行更改。
什么是回滚段?
在 ORACLE 数据库中,回滚段是一种存储事务期间以前数据的结构。为了支持回滚功能,我们在 ORACLE 数据库中有一个回滚段。
让我们再次考虑更新语句。将员工的名字更新为 id 为 100 的“John”。假设员工的早期名字是“henry”
询问:
UPDATE employee
SET firstname="John"
WHERE id=100;
现在我们将员工的姓名从“Henry”更改为“John”。
当我们这样做时,ORACLE 会在回滚段中存储先前的值,即“Henry”。现在我们有两个条件来提交或回滚。
假设我们输入了提交命令,那么只要我们发出提交命令,ORACLE 就知道已经不再需要存储在回滚段中的任何信息,因为我们不想再存储以前的值。所以 ORACLE 从回滚段中清空事务历史,并将更改标记为最终确定到实际表中。
如果我们发出了回滚命令,那么之前存储在回滚段中的所有值都将被应用回表中。
注意:在 10g 之前,DBA 可以创建自己的回滚段。在 11g 中,回滚段只能存在于 SYSTEM 表空间中
回滚段的用途:
以下是回滚段的用途:
- 如果在事务期间发生任何故障,则它确保更改不会反映回我们的原始数据库。
- 它可以帮助我们在发生任何故障时将数据库恢复到一致的状态。保证数据的一致性和隔离性。
- 回滚段用于在数据库发生故障时恢复我们的数据。
- 借助 Rollback 命令,我们可以将之前存储在回滚段中的数据恢复到原始数据库中。
如何创建/更改/删除回滚段?
正如我们所知,Oracle 数据库使用回滚段来恢复我们的一致数据,以防任何数据库故障,无论是硬件故障还是软件故障。
创建:我们可以通过以下方式创建回滚段:
ALTER ROLLBACK SEGMENT name_of_the_segment
[STORAGE Storage_Clause]
[ONLINE | OFFLINE]
[SHRINK]
丢弃:丢弃回滚段,然后我们可以通过以下方式进行:
DROP ROLLBACK SEGMENT name_of_the_segment
所以我们可以说回滚段存储了更改的历史。如果用户使用“回滚”,则使用回滚段。回滚段用于呈现“之前”的数据映像,直到用户执行提交命令。