闪回事务撤消是一个逻辑恢复选项,可以在数据库在线时回滚目标事务及其相关事务。相关事务通过写后写 (WAW) 关系(其中,事务会修改目标事务更改的同一数据)或主键约束关系(其中,事务会重新插入目标事务删除的同一主键值)联系在一起。闪回事务利用撤消和为撤消块生成的重做来创建并执行补偿事务,以便将受影响的数据恢复到原始状态。
| 1. |
导航到工作目录,并以 SYS 用户身份执行 flatxn_archivelog.sh 脚本。
./flatxn_archivelog.sh
该脚本会将 HR 用户解除锁定,并启用 ARCHIVELOG 模式。

|
| 2. |
使用 SQL*Plus,以 SYS 用户身份连接到数据库,并运行 flatxn_setup1.sql 脚本。
sqlplus / as sysdba @flatxn_setup1.sql 该设置脚本将数据库和 HR 用户设置为利用闪回撤消事务。注意 ALTER DATABASE 和 GRANT 命令。

按 [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。
User Name:sys Password:oracle 以:SYSDBA 连接
|
| 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 相关性。

|