使用 Oracle 数据库 10g 实施信息生命周期信息管理
使用 Oracle 数据库 10g 实施信息生命周期信息管理
本教程的目的是向您介绍如何将 Oracle 数据库 10g 与信息生命周期管理策略结合使用,以管理处于生命周期内的数据。
大约 1 小时。
本教程包括下列主题:
将光标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注意:此外,还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。
信息生命周期管理 (ILM) 用于管理数据在其生命周期内所发生的所有活动。
虽然大多数机构始终认为它们的数据存储是最有价值的公司资产之一,但管理和维护数据的方式差异非常大。最初,数据用来帮助实现经营目标,运行业务并帮助指出公司未来的发展方向和成功目标。然而,新的政府法规和准则(例如,美国的 Sarbanes-Oxley、HIPAA、DOD5015.2-STD 和欧盟的 European Data Privacy Directive)是如何以及为什么保留数据的一个关键推动力,因为它们现在要求机构在非常长的时间内保留和控制信息。
今天的信息涉及类型广泛,例如,电子邮件、照片或在线交易处理系统的订单。现在所有机构面临的挑战是要了解它们的数据将如何发展,确定数据将如何增长,监控数据的使用率随时间的变化,以及决定数据应保留多长时间。
今天,IT 经理试图满足两个额外的目标:以最低的可能成本存储海量数据;满足针对数据保留和保护的新法规要求。
Oracle 数据库 10g 可用于商务 ILM
Oracle 数据库 10g 当前可用于商务 ILM。它能够存储不同类型的数据,将您的所有数据存储在一个 Oracle 数据库中,这意味着更易于管理,原因是数据都在一个位置,而不是使用许多不同的格式进行存储。因此,Oracle 数据库是实施信息生命周期管理策略的理想平台,它具有许多独特的特性,这使得实施 ILM 解决方案非常容易:
 |
细粒度:在单个行级管理数据 |
 |
应用程序透明度;数据分类是透明的 |
 |
低成本:使用低成本存储降低成本 |
以三个简单的步骤实施 ILM
可以通过执行以下三个简单步骤来使用 Oracle 数据库 10g 实施 ILM:
| 1. |
定义数据类别 |
| 2. |
为数据类别创建存储层
|
| 3. |
按类别管理数据的访问和移植
|
可以按各种方式(例如使用频率)对数据分类,然后可以为已指定的数据类别创建存储层。在数据的生命周期内,数据将在数据类别之间移植,对其的访问将受到控制。最终数据可能被存档或可能永久保留在数据库中。
Oracle 数据库 10g 适合于实施 ILM,因为它使用起来非常简单(无需管理专门的数据存储),并且它独立于任何硬件运行。它拥有已被证明的快速性能,因此可以快速地检索所有信息。数据库中的安全特性确保了数据不受未授权访问的损害,并且数据始终保持事务一致性。Oracle 数据库提供了总体的灵活性,因此它可以快速地适应任意的需求变化,由于新兴法规的不断发展,这一点极为重要。使用 Oracle 数据库 10g,可以在成本尽可能最低的情况下实施一个全面的 ILM 解决方案。
返回主题列表
本教程介绍了如何使用 Oracle 数据库中的某些特性来实施信息生命周期管理策略。在本教程中,您将在存储层之间进行移植数据,保护它不受变化的影响,并控制用户可以看到的数据。
其中,您将保留自 1995 年以来的所有销售订单。只允许用户看到自 2000 年以来的数据,并且只允许特殊类别的用户查看历史数据。
返回主题列表
开始学习本教程之前,您应已经:
返回主题列表
指定数据类别需要分析数据以确定最合适的类别。执行以下步骤来看看目前数据是如何分类的:
| 1. |
打开一个浏览器窗口,并输入以下 URL:
http://<hostname>:5500/em
以 system/<password> 的身份登录,然后单击 Login。

|
| 2. |
单击 Administration 选项卡。

|
| 3. |
在 Schema 下,单击 Tables。

|
| 4. |
为模式 schema 输入 SH 并为 Object Name 输入 SALES,然后单击 Go。

|
| 6. |
确保选中 SALES,并单击 Edit。

|
| 7. |
选择 Partitions 选项卡。

|
| 8. |
数据使用 TIME_ID 列按日期进行了分类,并且数据按照年或季度根据其时间长短进行了分组。每一个日期范围的所有数据都被保存在一个分区中。按时间分类是一种非常常见的方法,并且在这种情况下是最适合的方法。单击 Database 导航项。

|
返回主题列表
接下来,您需要指定存储所有数据的位置。一般而言,这将涉及到使用不同类型的存储设备(例如,将高性能磁盘用于被频繁访问的数据,将低成本设备用于不常使用的数据和历史数据)。在本教程中,您将创建三个存储层:高性能、低成本和历史。由于您没有三种类型的存储设备,因此您将创建映射为这些层的表空间。在本部分中,您将执行以下任务:
为每个存储层创建表空间
| 1. |
在 Storage 下,选择 Tablespaces。

|
| 2. |
单击 Create。

|
| 3. |
输入 HIGH_PERFORMANCE 作为 Name。在 Datafiles 部分中,单击 Add。请注意,对于 High_Performance 层,数据文件通常放在高性能存储设备中或通过使用 ASM 来存放。由于没有提供这些设备,因此数据文件将不得不放在一个单一的设备上,以完成这个步骤。

|
| 4. |
为 File Name 输入 high_perf,并将 File Size 指定为 3 MB。然后,单击 Continue。

|
| 5. |
单击 OK。

|
| 6. |
现在,您可以创建下一个表空间。单击 Create。重复该过程来创建低成本存储层。

|
| 7. |
输入 LOW_COST 作为 Name。在 Datafiles 部分中,单击 Add。请注意,对于 LOW_COST 层,数据文件将一般放在低成本的 ATA 存储设备上。由于没有提供这些设备,因此数据文件将不得不放在一个单一的设备上,以完成这个步骤。

|
| 8. |
为 File Name 输入 low_cost,并将 File Size 指定为 10 MB。在 Storage 下,单击 Automatically extend datafile when full (AUTOEXTEND) 并为 increment 输入 10KB。然后,单击 Continue。

|
| 9. |
单击 OK。

|
| 10. |
单击 Create。最后一层是历史层,其中保存了 2000 年之前的所有订单。

|
| 11. |
输入 HISTORICAL 作为 Name。在 Datafiles 部分中,单击 Add。请注意,对于历史层,数据文件通常放在低成本的 ATA 存储设备上。由于没有提供这些设备,因此数据文件将不得不放在一个单一的设备上,以完成这个步骤。

|
| 12. |
为 File Name 输入 historical 并将 File Size 指定为 10 MB。然后,单击 Continue。

|
| 13. |
单击 OK。

|
| 14. |
向下滚动将看到您刚刚创建的表空间列表。

|
| 15. |
您将看到三个与每个存储层相对应的表空间。请注意,表空间当前为空。注意在实际的 ILM 实施中,表空间的名称不一定要对应所需的存储层。由于未提供三种不同类型的实际存储设备,因此本教程使用了表空间方法来演示该过程。

|
| 16. |
向上滚动至顶端。单击 Database 导航项。

|
| |
|
返回列表
将分区分配给存储层表空间
创建存储层后,下一个步骤是将存放数据的分区分配给相应的存储层。
| 1. |
在 Schema 下,选择 Tables。

|
| 2. |
为 Schema 输入 SH,并为 Object Name 输入 SALES。然后,单击 Go。

|
| 3. |
选择 SALES。

|
| 4. |
选择 Partitions 选项卡。

|
| 5. |
首先分配 HIGH_PERFORMANCE 分区。在下拉列表框中选择最后一个页面集。高性能存储层应仅包含 2003 年从第 3 季度到第 4 季度的订单。

|
| 6. |
选择 SALES_Q3_2003 分区,为 Action 选择 Move,然后单击 Go。

|
| 7. |
选中 Tablespaces 域的探照灯图标。

|
| 8. |
选择 HIGH_PERFORMANCE 表空间,并单击 Select。

|
| 9. |
单击 OK,将分区分配给 HIGH_PERFORMANCE 表空间。

|
| 10. |
选择 SALES_Q4_2003 分区,为 Action 选择 Move,然后单击 Go。

|
| 11. |
在 Tablespace 域中输入 HIGH_PERFORMANCE,然后单击 OK。

|
| 12. |
单击 Apply,提交修改。

|
| 13. |
现在您可以将 LOW_COST 表空间分配给从 Q4 2000 到 Q2 2003 的分区。选择该时间范围(例如,SALES Q1 2002)中的任何分区,选择 Action Move,然后单击 Go。

|
| 14. |
在 Tablespace 域中输入 LOW_COST,然后单击 OK。

|
| 17. |
为下列分区执行之前的步骤,并分配 LOW COST 表空间。当完成时,单击 Apply。
SALES_Q1_2000
SALES_Q2_2000
SALES_Q3_2000
SALES_Q4_2000
SALES_Q1_2001
SALES_Q2_2001
SALES_Q3_2001
SALES_Q4_2001
SALES_Q1_2002
SALES_Q2_2002
SALES_Q3_2002
SALES_Q4_2002
SALES_Q1_2003
SALES_Q2_2003

|
| 18. |
为下列分区执行之前的步骤,并分配 LOW COST 表空间。当完成时,单击 Apply。
SALES_1995
SALES_1995
SALES_H1_1997
SALES_H2_1997
SALES_Q1_1998
SALES_Q2_1998
SALES_Q3_1998
SALES_Q4_1998
SALES_Q1_1999
SALES_Q2_1999
SALES_Q3_1999
SALES_Q4_1999

|
| 19. |
您的所有分区都已被分配给了不同的存储层。单击 Database 导航项。

|
| 20. |
单击 Tablespaces。

|
| 21. |
注意您的表空间现在已充满了数据。

|
| 22. |
向上滚动到顶部,并单击 Database 导航项。

|
返回列表
返回主题列表
实施 ILM 策略的最后一步是决定谁可以访问数据以及他们可以执行的操作。有各种不同的技巧可用来限制对历史数据的访问,以便它始终不会出现在日常的报表中。此外,您可以防止对历史数据进行修改,并演示如何利用最小的存储容量存储所有这些数据。执行下列任务:
控制对历史数据的访问
由于所有数据现在都保存在数据库中,因此必须确保仅在实际需要时才查看它们。这样,便可以通过只访问实际需要的数据来节省查询执行时间和系统资源。
有两种可以用来限制对历史数据进行访问的技巧:
 |
使用视图 |
 |
使用虚拟专有数据库 (VPD) 策略 |
在本部分中,您将创建两个视图,一个视图允许标准用户访问自 2000 年 1 月 1 日以来记录的数据,另个一个视图允许访问历史数据。执行以下步骤:
| 1. |
在 Administration 选项卡的 Schema 下,单击 Views。

|
| 2. |
创建一个名为 SALES_HISTORICAL 的视图,该视图只允许访问历史数据,即 1999 年 12 月 31 日之前的历史数据。单击 Create。

|
| 3. |
输入 SALES_HISTORICAL 作为 Name,输入 SH 作为 Schema,并输入以下查询文本,然后单击 OK。
SELECT * FROM sales WHERE time_id < '1-Jan-2000'

|
| 4. |
现在,创建第二个视图 SALES_CURRENT,该视图允许访问自 2000 年 1 月 1 日以来记录的所有当前数据。单击 Create。

|
| 5. |
输入 SALES_CURRENT 作为 Name,输入 SH 作为 Schema,并输入以下查询文本,然后单击 OK。
SELECT * from sales where time_id > '31-Dec-1999'

|
| 6. |
注意您刚才创建的视图。可以看到,您已经创建了两个视图,一个是用于查看当前数据的 SALES_CURRENT,另一个是用于查看所有旧订单的 SALES_HISTORICAL。现在,您需要创建将使用这两个视图的用户 SH_USER。向上滚动并单击 Database 导航项。

|
返回列表
查询历史数据
现在您可以查询历史数据了。执行以下步骤:
| 1. |
为演示起见,SALES_HISTORICAL 视图只显示 2000 年之前的数据。查询 SALES_HISTORICAL 视图以报告其保存的最新数据。可以通过查询 time_id 列来找出这些数据。打开一个终端窗口,然后输入以下命令:
cd /home/oracle/wkdir
sqlplus sh/sh
@ilm_query01
@ilm_query01.sql 包含以下内容:
select max(time_id)from sh.sales_historical;

|
| 2. |
由于该视图只包含直到 1999 年底的数据,因此您现在可以报告到 2000 年为止哪些客户购买了最多的商品。执行以下命令:
@ilm_query02
@ilm_query02.sql 包含以下内容:
SELECT cust_last_name, sum(amount_sold)
FROM sh.sales_historical h, sh.customers c
WHERE c.cust_id=h.cust_id
GROUP BY cust_last_name
ORDER BY sum(amount_sold) desc;

|
返回列表
指定关于销售的 VPD 策略
由于在数据库中保留了如此多的数据,因此确保用户只查看允许他们查看的数据非常重要。虽然视图限制了用户可以在数据库中查看的内容,但用户可以通过直接查询表来绕过视图。为避免这种潜在的安全漏洞(可能在某人未使用指定的应用程序查询数据时发生),请改用类似 sql*plus 这样的工具。可以使用虚拟专用数据库 (VPD)(用于准确定义可见数据)定义安全策略。在本部分中,您将看到如何使用 VPD 来防止对历史数据的访问。执行以下步骤:
| 1. |
首先以 SH 用户的身份计算在 Sales 表中可见的行数。请注意这个数字。这时,您能够访问 Sales 表中的所有数据。从 sqlplus 会话中,运行以下 SQL 脚本:
@ilm_count_sales
@ilm_count_sales.sql 包含以下内容:
connect sh/sh select count(*) from sales;

|
| 2. |
然后,以 SYSTEM 用户的身份添加以下 VPD 策略,该策略声明用户只能看到自 2000 年 1 月 1 日以来记录的数据。从 sqlplus 会话中,运行以下 SQL 脚本:
@ilm_add_policy
@ilm_add_policy.sql 包含以下内容:
connect system/oracle CREATE OR REPLACE FUNCTION ilm_pf1 (oowner IN VARCHAR2, ojname IN VARCHAR2)
RETURN VARCHAR2 AS con VARCHAR2(200); BEGIN con :='time_id > ''31-DEC-1999'''; RETURN (con); END ilm_pf1; / BEGIN DBMS_RLS.ADD_POLICY (object_schema=>'SH',object_name=>'Sales', policy_name=>'ilm_current_data',function_schema=>'system', policy_function=>'ilm_pf1', sec_relevant_cols=>'time_id'); END; /

|
| 3. |
现在,以用户 SH 的身份重复查询 Sales 表,这时可见的行将更少,这是因为用户只能访问自 2000 年 1 月 1 日以来记录的数据。从 sqlplus 会话中,运行以下 SQL 脚本:
@ilm_count_sales
@ilm_count_sales.sql 包含以下内容:
connect sh/sh select count(*) from sales;

|
返回列表
限制对 Sales 数据的更新访问
为了符合一些新的法规,您需要显示只有授权用户可以更新销售数据。因此,需要创建一个称作 SH_USER 的新用户,该用户只被允许读取 Sales 数据。执行以下步骤:
| 1. |
在 Administration 选项卡的 Security 下,单击 Users。

|
| 2. |
第一步是创建一个新用户 SH_USER。单击 Create。

|
| 3. |
输入 SH_USER 作为名称和口令。输入 EXAMPLE 作为 Default Tablespace(默认命名空间),并输入 TEMP 作为 Temporary Tablespace(临时表空间),然后单击 Role 选项卡。

|
| 4. |
由于它不是具备权限的用户,因此仅授权该用户访问有限的资源。单击 Modify。

|
| 5. |
从 Available Roles(可用角色)列表中选择 RESOURCE 并单击 Move,然后单击 OK。

|
| 6. |
为了确保该用户只能读取销售数据和客户数据,必须向他们显式授予 SELECT 权限。单击 Object Privileges 选项卡。

|
| 7. |
选择对象类型为 Table 并单击 Add。

|
| 8. |
在 Select Table Objects 域中,输入 SH.SALES, SH.SALES_HISTORICAL, SH.CUSTOMERS。从 Available Privileges(可用权限)列表中选择 Select,并单击 Move。然后单击 OK。

|
| 9. |
单击 OK,创建用户。

|
| 10. |
选择 Database 导航项。

|
返回列表
尝试更新历史数据
一些新的法规要求数据不能被修改,或者可能有在某个特定的日期之后不能修改记录的业务要求。使用 Oracle 数据库内部的安全特性,SH_USER 用户将没有足够的权限来更新历史数据。执行以下步骤:
| 1. |
执行以下 SQL 命令:
connect sh_user/sh_user
@ilm_update01
@ilm_update01.sql 包含以下内容:
update sh.sales set prod_id=12 where prod_id=13 and time_id='10-Jan-98';

|
返回列表
使历史数据只读
数据的生命周期中将有一个时间点,在该时刻将不再允许对数据进行更新。在上一部分中,您看到了如何使用数据库安全性来防止更改,但有一种更好的方法是将表空间设置为只读。一旦表空间设为只读后,任何人都无法更新数据。执行以下步骤:
| 1. |
切换回 Enterprise Manager Database Control。在 Administration 选项卡的 Storage 下,单击 Tablespaces。

|
| 2. |
选择表空间 HISTORICAL,选择操作 Make Readonly,然后单击 Go。

|
| 3. |
请注意,表空间现在设置为只读。

|
返回列表
返回主题列表
在本教程中,您学习了如何执行以下任务:
 |
指定数据类别 |
 |
将数据类别分配给存储层 |
 |
管理访问和移植 |
返回主题列表
 |
要了解有关 Oracle 数据库 10g 的详细信息,请参阅 OTN 网站上的其他 OBE。 |
 |
有关本 OBE 教程的问题,请在 OBE 论坛上提问。 |
返回主题列表
将光标置于该图标上,以隐藏所有屏幕截图。
|