使用 Total Recall

使用 Total Recall

注:闪回数据存档特性是 Total Recall 选件的一部分。

本教程将描述如何创建、监视和维护闪回数据存档,该存档用于跟踪并存储对表中行的所有事务变更。您将创建一些“错误的事务”,然后使用 UPDATE 命令恢复原始的行。

大约 20 分钟

主题

本教程包括下列主题:

将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。 (警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

概述

闪回数据存档能够自动跟踪和存储一条记录在其生命周期内的所有事务变更。此特性还可利用“as of”查询无缝地访问历史数据,可为超出撤消数据的时间段提供闪回功能。您可以使用闪回数据存档生成合规性报表和审计报表,并进行数据分析与决策支持。

返回主题列表

开始本教程之前,您应该:

1.

通过完成在 Linux 上安装 Oracle 数据库 11g 教程来安装数据库。

2.

下载 flada.zip 文件,并将其解压缩到您的工作目录(即 wkdir)中。

注:该 OBE 中的文件适用于 Linux 环境。两个文件:flada_setup.sql 与 flada_tbs2.sql 必须经过修改才能在 Windows 环境中运行。在这两个文件中,使用 CREATE TABLESPACE 命令将数据文件规范更改为 Windows 文件名格式。

返回主题列表

创建和使用闪回数据存档

在这一部分中,您将扮演两个不同的角色:

  • 作为 SYSDBA,您将为该 OBE 设置一个工作环境,并为 HR 用户赋予权限,使其成为闪回数据存档管理员。
  • 作为闪回数据存档管理员,您将:
    • 创建一个闪回数据存档。
    • HR.EMPLOYEES 表启用历史跟踪。
    • 生成错误的 DML。
    • 使用与闪回数据存档相关的 SELECTUPDATE 命令子句,以查看并更正错误的 DML 事务。

要跟踪和存储对 HR.EMPLOYEES 表的所有事务变更,您需要创建、配置和使用闪回数据存档。执行以下步骤:

1.

使用 SQL*Plus,以 SYS 用户身份连接到数据库,并从文件所在的目录中运行 flada_setup.sql 脚本。

sqlplus / as sysdba
@flada_setup.sql


该设置脚本会创建一个小型表空间,并使用口令 HR 解除对 HR 用户的锁定。默认情况下,此口令区分大小写。

2.

要为 HR 用户赋予创建、维护和删除闪回数据存档的管理权限,请以 SYS 用户身份执行以下命令:

GRANT FLASHBACK ARCHIVE ADMINISTER TO hr;

3.

在 SQL*Plus 中,使用口令 HR、以 hr 用户身份连接。注:需要以大写方式输入口令。

connect hr/HR

4.

要创建闪回数据存档,执行以下命令:

CREATE FLASHBACK ARCHIVE fla1
TABLESPACE fla_tbs1
QUOTA 10M
RETENTION 1 YEAR
/

空间需求取决于所选的保留期限以及所跟踪的表的活动。

5.

要为 EMPLOYEES 表启用该闪回数据存档,执行以下命令:

ALTER TABLE hr.employees
FLASHBACK ARCHIVE fla1
/

6.

要查看 Fox 先生的工资,并将其工资增加 3000 元,请执行 flada_dml.sql 脚本。这将在闪回数据存档中生成活动。

@flada_dml.sql

[Enter] 继续

在上一个屏幕截图中,您可以看到原始工资。按 [Enter] 继续执行脚本的下一步。

在上一个屏幕截图中,您可以看到提交的更新。按 [Enter] 继续执行脚本的下一步。

[Enter] 继续

在上一个屏幕截图中,您可以看到 Fox 先生的当前错误工资。按 [Enter] 退出脚本。

7.

由于创建了闪回数据存档,您可以查看截至任意时间点的记录。浏览“查看关于闪回数据存档的数据字典信息”课程,获得关于如何查询“创建”时间的示例。

选择一个时间,该时间在创建闪回数据存档之后,但在执行错误的 DML 之前。要查看 Fox 先生截至该时间的员工记录,执行以下查询(使用您选择的历史日期代替 '10' MINUTE,格式示例为:'50' SECOND, '10' DAY, '5' MONTH):

SELECT employee_id, last_name, salary
FROM hr.employees
AS OF TIMESTAMP
(SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE last_name = 'Fox'
/

注:如果您指定的时间在创建闪回数据存档之前,可能会收到如下所示的错误消息。将时间间隔缩短,再试一次。

ORA-01466:unable to read data - table definition has changed

8.

通过查看解释计划,您可以确认是否正在使用闪回存档。执行以下脚本:

@flada_explainplan 

flada_explainplan.sql 脚本包含以下内容:

set echo on
explain plan for
SELECT employee_id, last_name, salary
FROM hr.employees
AS OF TIMESTAMP
(SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE last_name = 'Fox'
/
set echo off
@$ORACLE_HOME/rdbms/admin/utlxpls

9.

您认识到最近的更新是错误的。要将所选的历史日期(例如,10 分钟前)恢复到原始值,执行以下命令(使用您选择的历史日期代替 '10' MINUTE):

UPDATE hr.employees
SET salary =
(SELECT salary FROM hr.employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE last_name = 'Fox')

WHERE last_name = 'Fox'
/

在上一个屏幕截图中,您可以看到 UPDATE 命令,该命令将使用一个历史数据行恢复十分钟前的值。(在此测试环境中,您最可能使用的是分钟。但在生产环境中,您可能需要使用 DAY、MONTHYEAR。)

返回主题列表

在这一部分中,您将再次扮演两个不同的角色:

  • 作为 SYSDBA,列出可供使用的数据字典视图,并查询闪回数据存档(一个或多个)的创建时间。然后,列出用于闪回数据存档的表空间(一个或多个)。最后,查询闪回数据存档的表名称和内部“历史”表名称(一个或多个)。
  • 作为 HR 闪回数据存档管理员,列出可供使用的数据字典视图。

要查看关于闪回数据存档的元数据,执行以下步骤:

1.

从 SQL*Plus 会话中,以 SYS 用户身份连接到数据库。

connect / as sysdba

2.

要列出可供使用的数据字典视图,执行 flada_list1.sql 文件:

@flada_list1.sql

[Enter] 继续

[Enter] 继续执行脚本的下一步。

3.

使用 DBA_FLASHBACK_ARCHIVE 数据字典视图查询闪回数据存档的创建时间。[Enter] 继续执行脚本的下一步。

[Enter] 继续

4.

[Enter] 描述 DBA_FLASHBACK_ARCHIVE_TS 数据字典视图。

[Enter] 列出用于闪回数据存档的表空间(一个或多个)。

[Enter] 继续

5.

[Enter] 描述 DBA_FLASHBACK_ARCHIVE 数据字典视图。

[Enter] 查询闪回数据存档的表名称(一个或多个)、所有者名称(一个或多个)和内部“历史”表名称(一个或多个)。

[Enter] 继续

6.

[Enter],以 HR 用户身份连接到数据库,并列出可供该用户使用的数据字典视图。

[Enter] 继续

[Enter] 退出脚本

返回主题列表

要练习其他闪回数据存档维护任务,执行以下步骤:

1.

使用 SQL*Plus,以 HR 用户身份连接到数据库。

sqlplus hr/HR

2.

保留时间过期后,闪回数据存档中的数据将被自动清除。然而,您也可以使用以下命令显式清除数据:

ALTER FLASHBACK ARCHIVE fla1
PURGE BEFORE TIMESTAMP
(SYSTIMESTAMP - INTERVAL '2' MINUTE)
/

这将清除两分钟之前的数据。

3.

执行 flada_tbs2.sql 脚本,创建一个 10 MB 的附加表空间。

@flada_tbs2.sql

4.

HR 用户身份为 FLA1 闪回数据存档添加 5 MBFLA_TBS2 表空间。执行以下命令:

connect hr/HR

ALTER FLASHBACK ARCHIVE fla1
ADD TABLESPACE fla_tbs2
QUOTA 5M
/

5.

一个特定的闪回数据存档中的所有表都具有相同的保留时间。要将 FLA1 闪回数据存档的保留时间更改为两年,执行以下命令:

ALTER FLASHBACK ARCHIVE fla1
MODIFY RETENTION 2 YEAR
/

6.

要禁用 HR.EMPLOYEES 表的闪回数据存档,执行以下命令:

ALTER TABLE hr.employees NO FLASHBACK ARCHIVE
/

7.

要删除 FLA1 闪回数据存档,执行以下命令:

DROP FLASHBACK ARCHIVE fla1
/

删除闪回数据存档的同时也会删除内部的防篡改历史表。出于审计和安全性要求,您不能直接删除该内部表。

在删除闪回数据存档时不会删除用于存储它的表空间,因为这些表空间可能包含其他数据。

返回主题列表

在完成该 OBE 后,或者希望重新创建和使用闪回数据存档时,执行以下步骤:

1.

从 SQL*Plus 会话中,以 SYS 用户身份连接到数据库。

connect / as sysdba

2.

要删除表空间并锁定 HR 用户,执行 flada_cleanup.sql 脚本。

@flada_cleanup.sql

返回主题列表

在本教程中,您学习了如何:

创建和使用闪回数据存档
查看关于闪回数据存档的数据字典信息
修改闪回数据存档

返回主题列表

将鼠标置于该图标上可以隐藏所有的屏幕截图。

 

 

 

寄送此页面
Printer View 打印机视图