本教程描述了如何使用闪回事务撤销数据库中的事务。
大约 20 分钟
本教程包括下列主题:
| 概述 | |
| 创建测试环境 | |
| 撤销具有 WAW 相关性的事务 | |
| 清理 | |
| 总结 |
将光标置于此图标上可以加载和查看本教程的所有屏幕截图。
(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。
闪回事务撤销是什么?
闪回事务撤销是一个逻辑恢复选项,可以在数据库联机时回滚目标事务及其相关事务。相关事务通过写后写 (WAW) 关系(其中,事务会修改目标事务更改的同一数据)或主键约束关系(其中,事务会重新插入目标事务删除的同一主键值)联系在一起。闪回事务利用撤销和为撤销块生成的重做来创建并执行补偿事务,以便将受影响的数据恢复到原始状态。
要设置测试环境并为本 OBE 创建事务,执行以下步骤:
| 1. |
转到您的工作目录中,执行 flatxn_archivelog.sh 脚本。 ./flatxn_archivelog.sh 该脚本会解除对 HR 用户的锁定,并启用 ARCHIVELOG 模式。
|
|
| 2. |
使用 SQL*Plus,以 SYS 用户身份连接到数据库,并运行 flatxn_setup1.sql 脚本。 sqlplus / as sysdba
按 [Enter] 继续执行脚本的下一步。
|
|
| 3. |
该脚本将以 HR 用户身份连接到数据库,并创建第一个测试事务,该事务的内容是插入五行。
按 [Enter] 继续执行脚本的下一步。 |
|
| 4. |
该脚本将继续创建第二个测试事务,该事务的内容是更新您刚才插入的两行。这将创建一个写后写 (WAW) 相关性。如果事务更新或删除的行已经由相关事务插入或更新,则说明存在 WAW 相关性。
按 [Enter] 继续执行脚本的下一步。 |
|
| 5. |
该脚本将继续创建第三个事务,该事务的内容是更新三行,其中一行已经在前一个事务中更新。此操作将创建另一个 WAW 相关性。
按 [Enter] 继续执行脚本的下一步。 |
|
| 5. | 该脚本将继续创建第四个事务,该事务的内容是更新一个在事务 1 中插入的行。此操作将创建另一个 WAW 相关性。
按 [Enter] 继续执行脚本的下一步。 |
|
| 6. |
最后,脚本将以 SYS 用户身份连接到数据库,并切换存档日志。闪回事务至少需要一个存档日志来分析重做。
按 [Enter] 退出脚本。 |
|
事务可以具有写后写 (WAW) 相关性,这意味着,事务更新或删除的行数据已经由前一个事务插入或更新。在本部分中,您希望撤销一个问题事务及其导致错误更改的 WAW 相关事务。执行以下步骤:
| 1. | 输入以下 URL 登录 Enterprise Manager Database Control(将 <hostname> 更改为本地主机或指定的主机名)。 https://<hostname>:1158/em |
|
| 2. | 要登录 Enterprise Manager,输入以下详细信息,然后单击 Login。
|
|
| 3. | 您怀疑 HR.REGIONS 表包含问题事务的更改,希望查看完整的表数据。单击 Schema 选项卡页面,
然后单击 Tables。
|
|
| 4. | 要查看所有属于 HR 模式用户的表,在 Schema 域中输入 HR,然后单击 Go 按钮。
|
|
| 5. | HR 表将显示。首先,选择 HR.REGIONS 表,然后从 Actions 下拉列表中选择 View Data。单击 Actions 下拉列表后面的 Go 按钮,查看 HR.REGIONS 表中的数据。
|
|
| 6. | 查看表的内容时,您意识到有些记录是无效的。单击 OK。
|
|
| 7. | 返回到表列表。选择 HR.REGIONS 表,然后从 Actions 下拉列表中选择 Flashback Transaction,并单击 Actions 的 Go 按钮。
|
|
| 8. | 检查您的查询条件。您可以指定您认为错误更改所发生的时间段。对于本例,保留默认的时间段(最后一小时)。然后单击 Next。
将显示 Processing:Mining Transactions 窗口,同时为给定时间段处理重做日志。
|
|
| 9. | 在 Flashback Transaction:Select Transaction 页面上,选择更新了 2 个区域的事务的 Transaction ID 链接。
|
|
| 10. | 在 Select Transaction:Show Details 页面上,查看错误的 UPDATE 命令,然后单击 OK。
|
|
| 11. | 单击 Next 识别所有相关事务,并撤销所有需要的更改。
将显示 Processing:Flashback Transaction 窗口。
|
|
| 12. | 在 Flashback Transaction:Show Dependencies 页面上,单击第一个 Transaction ID 链接。
|
|
| 13. | 在 Show Dependencies:Details 页面上,查看补偿事务。注意,没有执行任何补偿事务。注意,区域 #10 的更新被标记为“[exec=no]”,这意味着不会执行该更新,因为它具有相关事务。您将在下一步中修正这个错误,方法是请求同时撤销所有相关事务。单击 OK。
|
|
| 14. | 在 Flashback Transaction:Show Dependencies 页面上,单击 Change Recovery Option。
|
|
| 15. | 在 Show Dependencies:Change Recovery Option 页面上,选择 Cascade,这也会撤销错误的相关事务更改,然后单击 OK。
将显示 Processing:Flashback Transaction 窗口。
|
|
| 16. | 在 Flashback Transaction:Show Dependencies 窗口中,单击 Next。
|
|
| 17. | 仔细查看信息,然后单击 Finish。
|
|
| 18. | 闪回事务已成功执行。单击 OK。
|
|
| 19. | 您可以查看 HR.REGIONS 表目前包含的内容。选择 HR.REGIONS 表,然后从 Actions 下拉列表中选择 View Data,并单击 Go。
|
|
| 20. | 事务 2、3 被撤销,但事务 4 保留(区域名仍然设置为“Still called Venus”),这是因为事务 2 和 4 之间没有 WAW 相关性。
|
|
您可以执行以下步骤清理环境:
| 1. | 从 SQL*Plus 会话中,执行 flatxn_cleanup1.sql 脚本:
|
|
| 2. | 现在,您希望运行 flatxn_cleanup.sh 关闭存档日志。执行以下命令: ./flatxn_cleanup.sh
|
|
在本教程中,您学习了如何撤销具有 WAW 相关性的事务。