本教程介绍了支持自助式错误修正的 Oracle数据库 10g 闪回特性。
大约 30 分钟
本教程介绍了以下主题:
| 概述 | ||
| 前提条件 | ||
| 填充回收站 | ||
| 总结 | ||
| 相关信息 | ||
将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注意:此外,还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。
Oracle 数据库 10g 已经扩展了闪回功能。现在可以闪回整个表并快速恢复意外删除的表。
在早期的 Oracle 服务器中,DROP 命令从数据库中永久删除对象。现在,当您删除表及其相关对象时,该表将被放置在回收站中。在您清空回收站之前,它不会从数据库中删除。在您清除对象之前,不会取消分配给段的范围。您可以随时从回收站中恢复这些已删除的对象。
开始学习本教程之前,您应已经:
| 1. |
完成了教程:使用真正应用集群 (RAC) 和自动存储管理 (ASM) 在 Windows 上安装 Oracle 数据库 10g。 或者 完成教程:在 Linux 上安装 Oracle 数据库 10g。
|
| 2. |
下载 flashback.zip 并将其解压缩到工作目录(即 /home/oracle/wkdir)
|
首先,向回收站中添加一个对象。执行以下步骤:
| 1. |
打开一个终端窗口并输入以下命令创建一个新表: cd /home/oracle/wkdir sqlplus system/<password> @create_job_hist
|
|
| 2. |
现在,输入以下 SQL 语句删除刚创建的表: drop table hr.jobs_hist; 该表已被删除。您刚刚将该表添加到了回收站中。
|
|
您甚至可以在删除表之后查询这些表。可以使用回收站中的对象名称针对这些对象执行 SELECT 语句。只要满足查询所需的撤消信息可用,您就还可以针对回收站中的对象执行闪回查询来查询过去的数据。仅当您是对象的最初所有者时才可以执行这些查询。执行以下步骤:
| 1. |
此时,您可以查询回收站以获取刚刚删除的表。打开另一个浏览器窗口,并输入以下 URL: http://<hostname>:5500/em 输入 sys/<password> 作为 SYSDBA,单击 Login。
|
|
| 2. |
单击 Administration 选项卡。
|
|
| 3. |
单击 Schema 区域下的 Tables。
|
|
| 4. |
在 Schema 域中输入 HR,然后单击 Go。
|
|
| 5. |
单击 Recycle Bin 按钮。
|
|
| 6. |
输入 HR 模式,然后单击 Go。
|
|
| 7. |
请注意,已经列出了您删除的表。单击 View Content。
|
|
| 8. |
您可以查看该删除的表内容。单击 OK。
|
|
可以通过执行以下步骤从回收站中恢复表:
| 1. |
在回收站中,选中 JOBS_HIST 对象旁边的复选框,然后单击 Flashback Drop。
|
|
| 2. |
单击 Next。
|
|
| 3. |
在提交恢复该表的作业前,单击 Show SQL 查看将执行的代码。
|
|
| 4. |
检查将要运行的 SQL 语句。完成时,单击 OK。
|
|
| 5. |
单击 Submit。
|
|
| 6. |
您收到一个表明闪回删除成功的消息。单击 OK。
|
|
| 7. |
回收站中不再有 JOBS_HIST 表。您需要确保该表现在显示在列表中。单击 Tables 定位器链接。
|
|
| 8. |
您现在可以看到,JOBS_HIST 已经返回该列表中。
|
|
有时,您可能需要从数据库中永久删除某个对象并在删除该对象后释放分配给它的空间。要从回收站中删除某个对象,执行以下步骤:
| 1. |
选择 JOBS_HIST 表的选项按钮,然后单击 Delete。
|
|
| 2. |
单击 Yes 确认删除。
|
|
| 3. |
单击 Recycle Bin 按钮。
|
|
| 4. |
输入 HR 模式,然后单击 Go。
|
|
| 5. |
在回收站中,选中 JOBS_HIST 对象旁边的复选框,然后单击 Purge。
|
|
| 6. |
单击 Yes 确认删除。
|
|
| 7. |
该表已从回收站中清除。单击 Tables 定位器链接。
|
|
早在 Oracle9i 中就引入了闪回查询。使用此特性您可以查看和修复历史数据。您可以按照某个时钟时间或用户指定的系统更改号 (SCN) 对数据库执行查询。
Oracle 数据库 10g 已经扩展了闪回功能。可以使用 VERSIONS BETWEEN 子句检索执行查询时和之前的某个时间点之间存在或曾经存在的所有行版本。此类查询称作闪回版本查询。
闪回版本查询返回的行是跨事务的行的更改历史记录。
闪回版本查询检索所有已提交的行匹配项。但不返回当前活动事务所做的更改。换言之,将不显示事务中未提交的行版本。
可以使用闪回版本查询检索行历史记录。闪回版本查询提供了审核表的行和检索有关更改行的事务的信息的方法。 可以使用从闪回版本查询中获取的事务 ID 通过 LogMiner 执行事务挖掘。还可以使用闪回事务查询获取事务的其他信息。
在本主题中,您将执行以下任务:
| 更新 JOBS 表 | ||
| 对 JOBS 表启用行移动 | ||
要演示闪回的工作方式,您需要对表进行更改。执行以下步骤:
| 1. |
从 SQL*Plus 会话中,以 system 用户身份登录并执行以下脚本: @updatejobs.sql updatejobs.sql 包含以下代码: UPDATE hr.jobs
|
| 2. |
要查看当前值,输入以下 SQL 语句: connect hr/hr select * from jobs where job_id='IT_PROG'; 您将看到更新后的当前值为 12000。
|
您必须先对要对其执行闪回表操作的表启用行移动。通过启用行移动,您可以指定 Oracle 数据库是否可以移动一个表行。行可以移动,例如,在对分区数据执行表压缩或更新操作期间。执行以下步骤:
| 1. |
切换到 Enterprise Manager 浏览器会话,选择 JOBS 表。
|
| 2. |
选择 Options 选项卡。
|
| 3. |
为 Enable Row Movement 选择 Yes,然后单击 Apply。
|
| 4. |
现在,可以对表执行闪回。单击 Tables 定位器链接。
|
现在,您准备将 JOBS 表恢复到某个特定时间点。执行以下步骤:
| 1. |
选择 JOBS 表的选项按钮,然后从 Actions 列表中选择 Flashback by Row Versions 并单击 Go。
|
| 2. |
选择 JOB_ID 和 MAX_SALARY 并单击 Move。然后,在 Bind the Row Value 域中输入 WHERE job_id = 'IT_PROG' 并单击 Next。
|
| 3. |
该列表中列出了您以前所做的更新。单击 Next。
|
| 4. |
单击 Next。
|
| 5. |
您可能要查看将要更改的内容。单击 Show Row Changes。
|
| 6. |
您将看到由于闪回操作而将更改的对象。单击 OK。
|
| 7. |
您现在准备执行闪回操作。单击 Submit。
|
| 8. |
闪回操作已经成功完成。单击 OK。
|
| 9. |
再次切换到 SQL*Plus 会话,然后输入以下 SQL 语句检查薪水值是否已经恢复: select * from jobs where job_id='IT_PROG'; 您将看到该值已经恢复为 10000。
|
在本教程中,您学习了如何执行下列任务:
| 填充回收站 | ||
| 查询回收站中的表 | ||
| 从回收站恢复表 | ||
| 从回收站清空表 | ||
| 使用闪回表恢复表 | ||
| 要了解关于 Oracle 数据库 10g 的更多信息,请参考 OTN 网站上的其他 OBE。 | ||
| 有关本 OBE 教程的问题,请在 OBE Discussion Forum 上发布查询。 | ||