本教程描述了如何使用闪回事务撤消数据库中的事务。
大约 20 分钟
本教程包括下列主题:
| 概述 | |
| 前提条件 | |
| 创建测试环境 | |
| 撤消具有 WAW 相关性的事务 | |
| 清理 | |
| 总结 |
将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。
(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。
什么是闪回事务撤消?
闪回事务撤消是一个逻辑恢复选项,可以在数据库在线时回滚目标事务及其相关事务。相关事务通过写后写 (WAW) 关系(其中,事务会修改目标事务更改的同一数据)或主键约束关系(其中,事务会重新插入目标事务删除的同一主键值)联系在一起。闪回事务利用撤消和为撤消块生成的重做来创建并执行补偿事务,以便将受影响的数据恢复到原始状态。
开始本教程之前,您应该:
| 1. | 通过完成在 Linux 上安装 Oracle 数据库 11g 教程来安装数据库。 |
|
| 2. | 下载 flatxn.zip 文件并将其解压缩到您的工作目录(即 wkdir)中。 |
|
要设置测试环境并为该 OBE 创建事务,执行以下步骤:
| 1. |
导航到工作目录,并以 SYS 用户身份执行 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 登录企业管理器数据库控制(将 <hostname> 更改为本地主机或指定的主机名)。 https://<hostname>:1158/em |
|
| 2. | 要登录企业管理器,输入以下详细信息,然后单击 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 相关性的事务。