本教程的目的是向您显示如何通过使用信息生命周期管理战略利用 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. |
完成了教程:使用真正应用集群 (RAC) 和自动存储管理 (ASM) 在 Windows 上安装 Oracle 数据库 10g。 或者 完成了教程:在 Linux 上安装 Oracle 数据库 10g。 |
| 2. |
下载并将 ilm.zip 解压缩到工作目录中 (/home/oracle/wkdir) |
指定数据类别需要分析数据以确定最合适的类别。 执行以下步骤来看看目前数据是如何分类的:
| 1. |
打开一个浏览器窗口,并输入以下 URL: http:// 作为 system/ |
|
| 2. |
单击 Administration 选项卡。 |
|
| 3. |
在 Schema 下,单击 Tables。 |
|
| 4. |
在 Schema 域中输入 SH,在 Object Name 域中输入 SALES。单击 Go。 |
|
| 6. |
确保选中 SALES,并单击 Edit。 |
|
| 7. |
单击 Partitions 选项卡。 |
|
| 8. |
数据使用 TIME_ID 列按日期进行了分类,并且数据按照年或季度根据其时间长短进行了分组。 每一个日期范围的所有数据都被保存在一个分区中。 按时间分类是一种非常常见的方法,并且在这种情况下是最适合的方法。 单击 Cluster Database: O10G 定位器链接。 |
|
接下来,您需要指定将所有数据存储在哪里。 一般而言,这将涉及到使用不同类型的存储设备(例如,将高性能磁盘用于被频繁访问的数据,将低成本设备用于不常使用的数据和历史数据)。 在本教程中,您将创建三个存储层: 高性能、低成本和历史。 因为您没有三种类型的存储设备,因此您将创建与这些层映射的表空间来替代它们。在本部分中,您将执行以下任务:
| 为每个存储层创建表空间 | ||
| 将分区分配给存储层表空间 | ||
| 1. |
在 Storage 下面单击 Tablespaces。 |
|
| 2. |
单击 Create。 |
|
| 3. |
在 Name 域中输入 HIGH_PERFORMANCE,并向下滚动。 |
|
| 4. |
在 Datafiles 部分中,单击 Add。 注意,对于高性能层,数据文件一般将放在高性能存储设备中或通过使用 ASM 来存放。 因为没有提供这些设备,因此数据文件将不得不放在一个单一的设备上,以完成这个步骤。 |
|
| 5. |
在 File Name 域中,输入 high_perf,并指定 3 MB 作为文件大小。单击 Continue。 |
|
| 6. |
单击 OK。 |
|
| 7. |
现在您可以创建下一个表空间。单击 Create。 重复该过程来创建低成本存储层。 |
|
| 8. |
在 Name 域中输入 LOW_COST,并向下滚动。 |
|
| 9. |
在 Datafiles 部分中,单击 Add。 注意,对于 LOW_COST 层,数据文件将一般放在低成本的 ATA 存储设备上。 因为没有提供这些设备,因此数据文件将不得不放在一个单一的设备上,以完成这个步骤。 |
|
| 10. |
在 File Name 域中,输入 low_cost,并指定 10 MB 作为文件大小。 在 Storage 部分中,选择 Automatically extend datafile when full 复选框,并输入 10 KB 作为增量。单击 Continue。 |
|
| 11. |
单击 OK。 |
|
| 12. |
单击 Create。 |
|
| 13. |
在 Name 域中输入 HISTORICAL,并向下滚动。 最后一层是历史层,其中保存了所有在 2000 年之前的订单。 |
|
| 14. |
在 Datafiles 部分中,单击 Add。 注意,对于历史层,数据文件将一般放在低成本的 ATA 存储设备上。 因为没有提供这些设备,因此数据文件将不得不放在一个单一的设备上,以完成这个步骤。 |
|
| 15. |
在 File Name 域中,输入 historical,并指定 10 MB 作为文件大小。单击 Continue。 |
|
| 16. |
单击 OK。 |
|
| 17. |
向下滚动将看到您刚刚创建的表空间的列表。 |
|
| 18. |
注意,表空间目前是空的。 向上滚动至顶端。 现在您将看到对应各个存储层的三个表空间。 注意在实际的 ILM 实施中,表空间的名称不一定要对应所需的存储层。 在本教程中使用了表空间方法来演示该过程,因为没有提供三种实际的存储设备。 |
|
| 19. |
单击 Cluster Database: O10G 定位器链接。 |
|
在创建存储层之后,下一个步骤是将存放数据的分区分配给相应的存储层。
| 1. |
在 Schema 下,选择 Tables。 |
|
| 2. |
在 Schema 字段中输入 SH,在 Object Name 字段中输入 SALES。单击 Go。 |
|
| 3. |
单击 SALES。 |
|
| 4. |
单击 Partitions 选项卡。 |
|
| 5. |
首先分配 HIGH_PERFORMANCE 分区。 在下拉列表中选择最后的页面集。 高性能存储层将仅包含 2003 年从第 3 季度到第 4 季度的订单。 |
|
| 6. |
选择 SALES_Q3_2003 分区,并在 Actions 下拉列表中选择 Move。单击 Go。 |
|
| 7. |
单击 Tablespaces 字段的探照灯图标。 |
|
| 8. |
选择 HIGH_PERFORMANCE 表空间,并单击 Select。 |
|
| 9. |
单击 OK,将分区分配给 HIGH_PERFORMANCE 表空间。 |
|
| 10. |
选择 SALES_Q4_2003 分区,并在 Actions 下拉列表中选择 Move。单击 Go。 |
|
| 11. |
在 Tablespace 域中输入 HIGH_PERFORMANCE,然后单击 OK。 |
|
| 12. |
单击 Apply,提交修改。 |
|
| 13. |
现在您可以将 LOW_COST 表空间分配给从 Q4 2000 到 Q2 2003 的分区。 选择这个时间段 (SALES Q1 2002) 内的任意分区。 在 Actions 下拉列表中选择 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. |
为下列分区执行之前的步骤,并分配 HISTORICAL 表空间。 当完成时,单击 Apply。 SALES_1995 SALES_1996 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. |
您的所有分区都已被分配给了不同的存储层。 单击 Cluster Database: O10G 定位器链接。 |
|
| 20. |
单击 Tablespaces。 |
|
| 21. |
向下滚动将看到表空间现在充满了数据。 |
|
| 22. |
注意您的表空间现在已充满了数据。 向上滚动至顶端,并单击 Cluster Database: O10G 定位器链接。 |
|
实施 ILM 战略的最后一步是决定谁可以访问数据以及他们可以做什么。存在不同的技巧,您可以用它们来限制对历史数据的访问,以便它始终不会出现在日常的报表中。 此外,您可以防止对历史数据进行修改,并演示如何利用最小的存储容量存储所有这些数据。执行下列任务:
| 控制对历史数据的访问 | ||
| 指定关于销售的 VPD 策略 | ||
| 限制对销售数据的更新访问 | ||
| 使历史数据只读 | ||
因为所有的数据现在都被保存在数据库中,因此必须确保只有在真正需要数据时才查看它,从而通过仅访问真正需要的数据来节省查询执行时间和系统资源。
存在两种可以用来限制对历史数据的访问的技巧:
| 使用视图 | ||
| 使用虚拟专有数据库 (VPD) 策略 | ||
在这一部分中,您将创建两个视图: 一个视图允许标准用户访问自 2000 年 1 月 1 日以来的数据,另一个视图允许访问历史数据。执行以下步骤:
| 1. |
在 Administration 页面上,单击 Schema 下的 Views。 |
|
| 2. |
创建一个名称为 SALES_HISTORICAL 的视图,该视图仅允许访问历史数据,也就是说,一直到 1999 年 12 月 31 日的数据。单击 Create。 |
|
| 3. |
在 Name 域中输入 SALES_HISTORICAL,在 Schema 域中输入 SH。 输入下面的查询文本,然后单击 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 用于所有旧的订单。 |
|
| 7. |
注意您刚才创建的视图。 现在您需要创建使用它们的用户 SH_USER。向上滚动,并单击 Cluster Database: O10G 定位器链接。 |
|
现在您可以查询历史数据了。 要查询历史数据,请执行以下步骤:
| 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; |
|
由于在数据库中保留了如此多的数据,因此确保用户仅查看允许他们查看的数据非常重要。 虽然视图限制了用户可以在数据库中看到什么,但用户可以通过直接查询表来绕过视图。 为了避免这种潜在的安全漏洞 — 它可能在有人不使用指定的应用程序而使用工具(例如 SQL*Plus)来查询数据时出现,可以通过使用虚拟专有数据库 (VPD) 来定义一种安全策略,该策略将准确定义什么数据是可见的。 在这一部分中,您将看到您如何能够使用 VPD 来防止对历史数据的访问。 为了防止访问,请执行以下步骤:
| 1. |
作为 SH 用户,计算在 Sales 表中可见的行的数目。 注意这个数字。 这时,您能够访问 Sales 表中的所有数据。 从 SQL*Plus 会话中,运行以下 SQL 脚本: @ilm_count_sales @ilm_count_sales.sql 包含以下内容: connect sh/sh |
|
| 2. |
接下来作为 SYSTEM 用户,添加以下 VPD 策略,该策略将声明用户只能看到自从 2000 年 1 月 1 日以来的数据。从 SQL*Plus 会话中,运行以下 SQL 脚本: @ilm_add_policy @ilm_add_policy.sql 包含以下内容: connect system/oracle |
|
| 3. |
现在作为 SH 用户重复查询 Sales 表,这时可见的行将更少,这是因为用户只能访问从 2000 年 1 月 1 日以来的数据。 从 SQL*Plus 会话中,运行以下 SQL 脚本: @ilm_count_sales @ilm_count_sales.sql 包含以下内容: connect sh/sh |
|
为了符合一些新的法规,您需要显示只有授权用户可以更新销售数据。 因此,您需要创建一个名称为 SH_USER 的新用户,该用户只被允许读销售数据。执行以下步骤:
| 1. |
在 Administration 页面上,单击 Security 下的 Users。 |
|
| 2. |
第一步是创建一个新用户 SH_USER。单击 Create。 |
|
| 3. |
输入 SH_USER 作为名称和密码。 在 Default Tablespace 域中输入 EXAMPLE,在 Temporary Tablespace 域中输入 TEMP。单击 Roles 选项卡。 |
|
| 4. |
因为它不是具备权限的用户,因此仅授权该用户访问有限的资源。单击 Modify。 |
|
| 5. |
从 Available Roles 的列表中选择 RESOURCE,并单击 Move。然后单击 OK。 |
|
| 6. |
为了确保这种用户只能读销售数据和客户数据,它们必须被显式地授予 SELECT 权限。 单击 Object Privileges 选项卡。 |
|
| 7. |
从 Select Object Type 下拉列表中选择 Table,并单击 Add。 |
|
| 8. |
在 Select Table Objects 域中,输入 SH.SALES, SH.SALES_HISTORICAL, SH.CUSTOMERS。 从 Available Privileges 列表中选择 Select,并单击 Move。然后单击 OK。 |
|
| 9. |
单击 OK,创建用户。 |
|
| 10. |
选择 Cluster Database: O10G 定位器链接。 |
|
一些新的法规要求数据不能被修改,或者可能有在某个特定的日期之后不能修改记录的业务要求。 使用 Oracle 数据库内部的安全特性,SH_USER 用户将没有足够的权限来更新历史数据。执行以下步骤:
| 1. |
执行下面的 SQL 脚本: @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. |
在 Search 域中,输入 HISTORICAL,并单击 Go。 |
|
| 3. |
然后从 Actions 下拉列表中选择 Make Readonly,并单击 Go。 |
|
| 4. |
注意表空间现在被设为只读。 单击 Cluster Database: O10G 定位器链接。 |
|
在本教程中,您学习了如何执行下列任务:
| 指定数据类别 | ||
| 将数据类别分配给存储层 | ||
| 管理访问和移植 | ||
| 要了解关于 Oracle 数据库 10g 的更多信息,请参考 OTN 网站上的其他 OBE。 | ||
| 要询问关于本 OBE 教程的问题,请在 OBE 论坛中发布帖子。 | ||