使用闪回从人为错误中恢复

来源:互联网 发布:防p2p限速软件 编辑:程序博客网 时间:2024/05/22 02:00

Oracle 数据库 10g 已经扩展了闪回功能。现在可以闪回整个表并快速恢复意外删除的表。

什么是回收站?

在早期的 Oracle 服务器中,DROP 命令从数据库中永久删除对象。现在,当您删除表及其相关对象时,该表将被放置在回收站中。在您清空回收站之前,它不会从数据库中删除。在您清除对象之前,不会取消分配给段的范围。您可以随时从回收站中恢复这些已删除的对象。

返回主题列表

开始教程之前,您应该:

1.

完成了教程在 Windows 上安装 Oracle 数据库 10g。

闪回恢复区是为 Oracle 数据库中所有与恢复相关的文件和活动提供的一个统一的存储位置。将数据库从介质故障中完全恢复过来所需的全部文件都属于闪回恢复区。可以在闪回恢复区中创建的与恢复相关的文件包括:归档重做日志文件、控制文件、由恢复管理器 (RMAN) 创建的备份以及闪回日志。

通过分配一个存储位置并将相关的恢复文件统一在一个特定的区域内,Oracle 数据库服务器使数据库管理员不必再管理由这些组件创建的磁盘文件。

执行以下步骤配置闪回恢复区,将数据库置于 ARCHIVELOG 模式下,然后启用闪回数据库。

1.

打开浏览器并输入以下 URL,登录到企业管理器 Database Console:

http://<your host name>:1158/em

在 User Name 域中输入 sys,在 Password 域中输入 oracle。从 Connect As 下拉列表中选择 SYSDBA。单击 Login

将鼠标移到该图标上可以查看该图像

 

2.

Oracle Database Home 页面通过显示一系列描述数据库整体运行状况的度量为您展示该数据库的当前状态。Oracle Database Home 页面是数据库状态以及数据库环境管理和配置的入口。它包含四个按子选项卡划分的页面,每个页面显示各子部分。单击 Maintenance 选项卡。

将鼠标移到该图标上可以查看该图像

 

3.

在 Backup/Recovery Settings 下,单击 Recovery Settings

将鼠标移到该图标上可以查看该图像

 

4.

向下滚动至 Flash Recovery Area 部分。确认已启用 Flash Recovery Area,Flash Recovery Area Size 设置为 2 GB。

将鼠标移到该图标上可以查看该图像

 

5.

选中 Enable Flashback Database 复选框。

将鼠标移到该图标上可以查看该图像

 

6.

现在,您需要将数据库置于 ARCHIVELOG 模式下。向上滚动至 Media Recovery 部分。选中 ARCHIVELOG Mode 复选框。单击 Apply

将鼠标移到该图标上可以查看该图像

 

7.

单击 Yes 重新启动数据库。

将鼠标移到该图标上可以查看该图像

 

8.

SYSDBA 身份输入主机证书,输入 sys/oracle 作为数据库证书。单击 OK

将鼠标移到该图标上可以查看该图像

 

9.

单击 Yes,确认重启数据库。

将鼠标移到该图标上可以查看该图像

 

10.

数据库正在重新启动。等待几分钟,然后单击 Refresh

将鼠标移到该图标上可以查看该图像

 

通过执行以下步骤向回收站中添加对象:

1.

system/oracle 的身份登录 SQL*Plus。执行 create_job_hist.sql 脚本以创建一个新表:

@create_job_hist

 

2.

现在,输入以下 SQL 语句删除刚创建的表:

drop table hr.jobs_hist;

该表已被删除。您刚刚将该表添加到了回收站中。

 

您甚至可以在删除表之后查询这些表。可以使用回收站中的对象名称针对这些对象执行 SELECT 语句。只要满足查询所需的撤消信息可用,您还可以针对回收站中的对象执行闪回查询来查询过去的数据。仅当您是对象的最初所有者时才可以执行这些查询。使用企业管理器执行以下步骤:

1.

单击 Administration 选项卡。

 

2.

向下滚动至 Schema 部分。单击 Tables

 

3.

在 Schema 域中输入 HR,然后单击 Go

 

4.

滚动至该页面的底部,然后单击 Recycle Bin 按钮。

 

5.

在 Schema Name 域中输入 HR,然后单击 Go

 

6.

请注意,已经列出了您删除的表。单击 View Content

 

7.

您可以查看该删除的表内容。单击 OK

 

可以通过执行以下步骤从回收站中恢复表:

1.

在 Recycle Bin 页上,选中 JOBS_HIST 对象旁边的复选框,然后单击 Flashback Drop

 

2.

在 Perform Object Level Recovery:Rename 页面上,您可以为该表提供一个新名称,或者接受原来的名称。接受原来的表名称 JOBS_HIST,单击 Next

 

3.

在提交恢复该表的作业前,单击 Show SQL 查看企业管理器将执行的 SQL 命令。

 

4.

检查将要执行的 SQL 语句。完成时,单击 OK

 

5.

单击 Submit

 

6.

您将收到一条信息,表明已经成功从回收站闪回。单击 OK

 

7.

回收站中不再有 JOBS_HIST 表。您需要确保该表现在显示在表列表中。单击 Tables 路径式导航栏。

 

8.

在 Schema Name 域中输入 HR,然后单击 Go

 

9.

您现在可以看到,JOBS_HIST 表已经返回该表列表中。

 

有时,您可能需要从数据库中永久删除某个对象并在删除该对象后释放分配给它的空间。要从回收站中删除某个对象,执行以下步骤:

1.

在 Tables 页上,选择 JOBS_HIST 表,单击 Delete With Options

 

2.

单击 Yes 确认删除。

 

3.

滚动至该页面的底部,然后单击 Recycle Bin 按钮。

 

4.

在 Schema Name 域中输入 HR,然后单击 Go

 

5.

在 Recycle Bin 页上,选中 JOBS_HIST 对象旁边的复选框,然后单击 Purge

 

6.

单击 Yes 确认删除。

 

7.

该表已从回收站中清除。单击 Tables 路径式导航栏。

 

早在 Oracle9i 中就引入了闪回查询。使用此特性您可以查看和修复历史数据。您可以按照某个时钟时间或用户指定的系统更改号 (SCN) 对数据库执行查询。

Oracle 数据库 10g 已经扩展了闪回功能。可以使用 VERSIONS BETWEEN 子句检索执行查询时和之前的某个时间点之间存在或曾经存在的所有行版本。此类查询称作闪回版本查询。

闪回版本查询返回的行是跨事务行的更改历史记录。

闪回版本查询检索所有已提交的行匹配项。但不返回当前活动事务所做的更改。换言之,将不显示事务中未提交的行版本。

可以使用闪回版本查询检索行历史记录。闪回版本查询所提供的方法可以审核表的行并检索有关更改行的事务的信息。 可以使用从闪回版本查询中获取的事务 ID 通过 LogMiner 执行事务挖掘。还可以使用闪回事务查询获取事务的其他信息。

在本主题中,您将执行以下任务:

更新 JOBSJOBS 启用行移动

JOBS 表恢复到某个特定时间点

更新 JOBS

要演示闪回的工作方式,您需要对表进行更改。执行以下步骤:

1.

system 用户身份登录到 SQL*Plus,执行 updatejobs.sql 脚本:

@c:/wkdir/updatejobs.sql

updatejobs.sql 脚本更新 IT_PROG 作业的薪水。该脚本包含以下命令:

UPDATE hr.jobs
SET max_salary = max_salary + 2000
WHERE job_id = 'IT_PROG'
/
COMMIT
/

 

2.

要查看 IT_PROG 作业的 MAX_SALARY 的更新值,执行以下查询:

select * from hr.jobs where job_id='IT_PROG';

您将看到更新后的当前值为 12000。

 

对 JOBS 表启用行移动

您必须先对要对其执行闪回表操作的表启用行移动。通过启用行移动,您可以指定 Oracle 数据库是否可以移动一个表行。行可以移动,例如,在对分区数据执行表压缩或更新操作期间。执行以下步骤:

1.

切换到 Enterprise Manager 浏览器会话。选择 JOBS 表并单击 Edit

 

2.

选择 Options 选项卡。

 

3.

为 Enable Row Movement 选择 Yes,然后单击 Apply

 

4.

现在,可以对表执行闪回。单击 Tables 路径式导航栏。

 

JOBS 表恢复到某个特定时间点

现在,您准备将 JOBS 表恢复到某个特定时间点。执行以下步骤:

1.

选择 JOBS 表。从 Actions 列表中选择 Flashback Versions Query,然后单击 Go

 

2.

选择 JOB_IDMAX_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 语句确认 MAX_SALARY 值已恢复为原来的值:

select * from hr.jobs where job_id='IT_PROG';

您将看到,该值已经恢复为 10000。

原创粉丝点击