本教程的介绍了如何使用信息生命周期管理策略,利用 Oracle 数据库 10g 在数据的生命周期内管理数据。
所需时间大约 1 个小时
主题本教程包括下列主题:




将数据类别分配给存储层



查询历史数据


尝试更新历史数据







将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注意:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。您可以单击单个屏幕截图将其隐藏。
概述信息生命周期管理 (ILM) 用于管理在数据生存周期期间所有涉及该数据的活动。
虽然大多数企业长期以来都将它们所存储的数据视为最有价值的公司资产之一,但它们管理和维护数据的方式千差万别。最初,数据用来帮助实现营运目标,经营企业,确定公司未来的发展方向和成功目标。然而,新的政府法规和准则(例如,美国的 Sarbanes-Oxley、HIPAA、DOD5015.2-STD 和欧盟的 European Data Privacy Directive)要求机构要在非常长的时间内保留和控制它们的信息,这迫使机构采取措施保留其数据。
今天的信息类型多样,如电子邮件、照片或在线交易处理系统的订单。现在所有机构面临的挑战是要了解它们的数据发展情况,确定数据增长方式,监视数据使用率随时间推移的变化情况,以及决定数据的保留时间。
今天,IT 经理试图满足其他两个目标:以尽可能低的成本存储海量数据;满足新推出的涉及数据保留和保护的法规要求。
Oracle 数据库 10g 可用于实施企业信息生命周期管理
Oracle 数据库 10g 可用于实施企业信息生命周期管理。它能够存储不同类型的数据,将您的所有数据存储在一个 Oracle 数据库中,这意味着它更易于管理,因为数据不是在不同地方使用许多不同格式进行存储,面是集中存储。Oracle 数据库是实施信息生命周期管理策略的理想平台,因为它有许多独特的特性,这使得实施 ILM 解决方案非常容易:




采用四个简单步骤实施 ILM
可以通过执行以下四个简单步骤使用 Oracle 数据库 10g 实施 ILM:
1. 定义数据类别。 2. 为数据类别创建存储层。 3. 按类别管理数据的访问和移植 4. 定义和实施合规性策略可以按各种方式(例如,使用频率)对数据分类,然后可以为已确定的数据类别创建存储层。在其生命周期内,数据可能在不同的数据类别之间移植,并且对数据的访问受到不同方法的控制。
Oracle 数据库 10g 非常适合于实施 ILM。它使用起来比较简单(无需管理专门的数据存储器),并且它独立于任何硬件运行。它的快速性能已经得到验证,可以快速检索信息。Oracle 数据库 10g 提供了一个智能的中央位置来存储数据并实施合规性策略。数据库中的安全特性确保了数据不受未授权访问的破坏,并且数据始终保持事务一致性。Oracle 数据库提供了全面的灵活性,并且可以快速地适应任何变化的要求,由于新法规不断推出,这一点极为重要。使用 Oracle 数据库 10g,可以以尽可能低的成本实施一个全面的 ILM 解决方案。
返回主题列表
情景本教程介绍了如何使用 Oracle 数据库中的众多特性来实施信息生命周期管理策略。在本教程中,您将为定义的每个数据类别创建存储层。在存储层之间移植数据、保护数据不受篡改的并控制查看数据的用户。
在本教程中,您将为一家虚拟公司实施 ILM,它必须保留自 1995 年以来的所有销售订单。只允许用户查看自 2000 年以来的数据,并且只允许一类特别的用户查看历史数据。
返回主题列表
指定数据类别定义数据类别的第一步是分析数据,确定最适合于该数据的数据类别。执行以下步骤,查看当前销售数据的分类情况:
1.打开一个浏览器窗口,并输入以下 URL:
:1158/em
以 system/oracl 的身份登录,然后单击 Login。
如果显示 Oracle Database 10g Licensing Information 页面,则向下滚动到该页面底部并单击 I agree。
https://www.bitpieert.com2.
向下滚动至页面底部。
3.
选择数据库实例 RACDB_RACDB1。
4.
单击 Administration 选项卡。
5.
向下滚动至 Schema 区域。
6.
在 Database Objects 下,单击 Tables。
7.
为 schema 输入 SH 并为 Object Name 输入 SALES,然后单击 Go。
8.
确保选中 SALES,并单击 Edit。
9.
选择 Partitions 选项卡。
10.
分区方法表明,数据已经使用 TIME_ID 列按日期进行了分类。分区名称和范围表明数据已经按照年、半年或季度根据其存在时间长短进行了分组。按时间分类数据是一种非常常见的方法,并且在这种情况下是最适合的方法。单击 Database Instance 路径式导航栏。
返回主题列表
将数据类别分配给存储层接下来,您需要指定将所有数据的存储位置。一般而言,这将涉及到使用不同类型的存储设备(例如,将高性能磁盘用于被频繁访问的数据,将低成本设备用于不常使用的数据和历史数据)。在本教程中,您将创建三个存储层:高性能、低成本和联机归档。因为您没有三种类型的存储设备,因此您将创建与这些层映射的表空间来替代它们。在本部分中,您将执行以下任务:


返回主题列表
为每个存储层创建表空间
1.在 Administration 页面的 Storage 下,选择 Tablespaces。
2.
单击 Create 创建一个新表空间。
3.
在 Name 域中输入 HIGH_PERFORMANCE。在 Datafiles 部分中,单击 Add。
注意:对于 High_Performance 层,数据文件通常位于高性能存储设备上或 ASM 中。由于没有单独的高性能存储设备,因此数据文件将存储在 ASM 中。
4.
数据文件存储器默认为 MY_DG2 磁盘组。在 Template 下拉列表中,选择 DATAFILE。为 Alias Name 输入 high_perf,并为 File Size 指定 3 MB。然后,单击 Continue。
5.
单击 OK 完成表空间的创建。
6.
现在,您可以创建下一个存储层表空间。单击 Create。重复创建 Low_Cost 存储层的过程。
7.
在 Name 域中输入 LOW_COST。在 Datafiles 部分中,单击 Add。
注意:对于 LOW_COST 存储层,数据文件通常将位于低成本的 ATA 存储设备上。由于本示例没有这些设备,因此本教程使用 ASM 存储数据文件。
8.
为 Template 选择 DATAFILE,为 Alias Name 输入 low_cost 并为 File Size 指定 10 MB。在 Storage 下,单击 Automatically extend datafile when full (AUTOEXTEND) 并在 increment 项中输入 10KB。然后,单击 Continue。
9.
单击 OK 完成表空间的创建。
10.
最后一层是联机归档层,用于保存 2000 年以前的所有订单。单击 Create 为此存储层创建表空间。
11.
在 Name 域中输入 ONLINE_ARCHIVE。在 Datafiles 部分中,单击 Add。
注意:对于联机归档层,数据文件通常将位于低成本的 ATA 存储设备上。由于在本示例中没有这些设备,因此本教程使用 ASM 存储数据文件。
12.
为 Template 选择 DATAFILE,为 Alias Name 输入 online_arch 并为 File Size 指定 10 MB。然后,单击 Continue。
13.
单击 OK 完成表空间的创建。
14.
您将看到三个与 Tablespaces 页面上列出的每个存储层相对应的表空间。注意,表空间当前为空。在实际的 ILM 实施中,表空间的名称不一定要对应所需的存储层。由于未提供三种不同类型的实际存储设备,因此本教程使用了表空间方法来演示该过程。单击 Database Instance 路径式导航栏。
返回列表
将分区分配给存储层表空间
创建存储层后,TrustWallet钱包安卓下载下一步是将保存数据的分区分配给相应的存储层。
1.在 Schema 区域的 Database Objects 下, Trust安卓版下载选择 Tables。
2.
为 Schema 输入 SH,并为 Object Name 输入 SALES。然后,单击 Go。
3.
选择 SALES,然后单击 Edit。
4.
选择 Partitions 选项卡。
5.
首先分配 HIGH_PERFORMANCE 分区。High Performance 存储层应只包含 2003 年第三季度到第四季度的订单。在下拉列表框中选择最后一组页面。
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.
现在,您可以将 Q4 2000 到 Q2 2003 的分区分配给 LOW_COST 表空间。首先选择 SALES_Q1_2002 分区。然后,选择操作 Move 并单击 Go。
14.
在 Tablespace 域中输入 LOW_COST,然后单击 OK。
15.
为下列分区执行前面的步骤,并分配 LOW_COST 表空间。
SALES_Q2_2003 SALES_Q1_2003 SALES_Q4_2002 SALES_Q3_2002 SALES_Q2_2002 SALES_Q4_2001 SALES_Q3_2001 SALES_Q2_2001 SALES_Q1_2001 SALES_Q4_2000 SALES_Q3_2000 SALES_Q2_2000 SALES_Q1_2000
16.
为以下分区执行相同步骤,并将它们分配给 ONLINE_ARCHIVE 表空间。
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
17.
当完成时,单击 Apply。
您的所有分区都已被分配给了不同的存储层。单击 Database Instance 路径式导航栏。
19.
在 Administration 页面的 Storage 下,单击 Tablespaces。
20.
注意您的表空间现在已充满了数据。单击 Database Instance 路径式导航栏。
返回列表
管理访问和移植实施 ILM 策略的第三步是确定访问数据的人员以及他们的操作。可以使用各种不同的技巧来限制对历史数据的访问,这样它便不会始终出现在例行报表中。此外,您可以防止对历史数据进行篡改,并演示如何利用最小的存储容量存储所有这些数据。执行下列任务:


查询历史数据


尝试更新历史数据


返回主题列表
控制对历史数据的访问
由于所有数据存储在数据库中,因此必须确保仅在实际需要时才查看它们。这减少了查询执行次数并节省系统资源。
有两种可以用来限制对历史数据的访问的技巧:


本部分主要介绍如何使用视图。稍后部分将演示如何使用 VPD 策略。
在本部分中,您将创建两个视图,一个视图使标准用户可以访问 2000 年 1 月 1 日的数据,另一个视图使用户可以访问历史数据。执行以下步骤:
1.从 Administration 选项卡的 Schema 区域中的 Databsae Objects 下,单击 Views。
2.
首先,您将创建一个名为 SALES_HISTORICAL 的视图,它只允许访问 1999 年 12 月 31 日之前下的订单。
单击 Create。
3.
在 Name 域中输入 SALES_HISTORICAL,在 Schema 域中输入 SH 并在 Query Text 域中输入以下文本:
SELECT FROM sales WHERE time_id单击 OK。
4.
现在,创建第二个名为 SALES_CURRENT 的视图,它允许访问 2000 年 1 月 1 日以后的所有销售数据。
单击 Create。
5.
在 Name 域中输入 SALES_CURRENT,在 Schema 域中输入 SH,然后在 Query Text 域中输入以下文本:
SELECT FROM sales WHERE time_id > '31-Dec-1999'单击 OK。
6.
视图创建完毕并显示在 Views 页面的底部。SALES_CURRENT 视图用于最近的数据,SALES_HISTORICAL 视图用于旧订单。现在,您需要创建将使用这些视图的 SH_USER 用户。单击 Database Instance 路径式导航栏。
返回列表
查询历史数据
现在您可以查询历史数据了。执行以下步骤:
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 年之前购买的产品数量最多。在 SQLPlus 中执行以下命令:
@ilm_query02
@ilm_query02.sql 脚本包含以下内容:
COLUMN max_sales FORMAT $999999.99 SELECT cust_last_name, SUM(amount_sold) MAX_SALES FROM sh.sales_historical h, sh.customers c WHERE c.cust_id = h.cust_id GROUP BY cust_last_name ORDER BY max_sales DESC;
返回列表
限制对销售数据的更新访问
为了符合一些新的法规,您需要显示只有授权用户可以更新销售数据。因此,需要创建一个名为 SH_USER 的新用户,所有应用程序将使用该用户名访问销售数据。只允许 SH_USER 用户读取销售数据。执行以下步骤:
1.从 Administration 选项卡中,向下滚动到 Schema 区域。
2.
在 Users & Privileges 下,单击 Users。
3.
第一步是创建一个新用户 SH_USER。单击 Create。
4.
为 Name 和 Password 输入 SH_USER。再次输入 SH_USER 确认该口令。为 Default Tablespace 输入 EXAMPLE,为 Temporary Tablespace 输入 TEMP,然后单击 Roles 选项卡。
5.
默认情况下,只将很少的资源授予新用户。单击 Edit List 将其他权限授予 SH_USER。
6.
从 Available Roles 列表中选择 RESOURCE,并单击 Move。
7.
单击 OK。
8.
为了确保该用户只能读取销售数据和客户数据,必须向它们显式地授予这些对象的 SELECT 权限。单击 Object Privileges 选项卡。
9.
在 Object Type 下拉列表中选择 Table,然后单击 Add。
10.
在 Select Table Objects 域中,输入 SH.SALES, SH.SALES_HISTORICAL, SH.CUSTOMERS。在 Available Privileges 列表中,单击 Select,然后单击 Move。然后单击 OK。
11.
Create User 页面现在显示将授予用户的对象权限。单击 OK,创建用户。
12.
单击 Database Instance 路径式导航栏。
返回列表
尝试更新历史数据
某些新法规要求数据不能进行更改,或者可能有企业要求在某个特定的日期之后不能更改记录。使用 Oracle 数据库内部的安全特性,SH_USER 用户将没有足够的权限来更新历史数据。执行以下步骤测试此功能:
1.在运行 SQLPlus 的终端窗口中,执行以下 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';
返回列表
将历史数据设为只读
在数据的生命周期中将有一个时间点,在那时将不再允许对数据进行更新。在上一部分中,您看到了如何能够使用数据库安全性来防止更改,但更好的方法是将表空间设为只读。将表空间设为只读后,任何人都无法更新数据,即使具有销售表的 UPDATE 或 DELETE 权限的用户也无法更新。执行以下步骤:
1.转回 Enterprise Manager Database Control。在 Administration 选项卡的 Storage 下,单击 Tablespaces。
2.
选择 ONLINE_ARCHIVE 表空间,选择操作 Make Readonly,然后单击 Go。
3.
状态列中的剪贴板图标指示该表空间现在设置为只读。单击 ONLINE_ARCHIVE。
4.
在 View Tablespace 页面上,Status 值确认表空间为只读。单击 Database Instance 路径式导航栏。
返回列表
归档数据
数据生命周期中的某个时间可能不再需要数据。某些企业可能倾向于归档数据而不是实际删除该数据。您已经决定提取 XML 中的数据,因此如果曾需要将数据重新加载回数据库中,则数据本身描述了提取时使用的格式。Oracle 数据库 10g 提供了一些 XML 函数,可以将这些函数嵌套在 SQL 语句中以提取 XML 格式的数据。
执行以下步骤:
1.从 SQLPlus 窗口中,执行以下脚本:
@ilm_archive_sales
connect sh/shSELECT XMLELEMENT("Sales", XMLElement ("timeid", time_id ), XMLElement ("prodid", prod_id ), XMLElement ("Customer", cust_id ), XMLElement ("Channelid", channel_id ), XMLElement ("Promotion", promo_id ), XMLElement ("amount", amount_sold) , XMLElement ("quantity", quantity_sold) ) AS "RESULT" FROM sales WHERE time_id > '1-Dec-01' AND time_id
返回列表
返回主题列表
定义并实施合规性策略Oracle 提供了一个智能的中央位置来存储数据并实施合规性策略。合规性策略有五个元素:保留、不变性、私密性、审计和过期。在本部分中,您将看到如何实施这些元素中的某些元素。执行下列任务:
指定关于销售的 VPD 策略
加密数据
审计数据访问
指定关于销售的 VPD 策略
由于在数据库中保留了如此多的数据,因此确保用户只查看允许他们查看的数据非常重要。尽管视图限制了用户可以在数据库中查看的内容,但如果用户不使用指定的应用程序查询数据而是使用 SQLPlus 这样的工具,则用户可以绕过视图并直接查询表。可以使用虚拟专用数据库 (VPD) 定义安全性策略以避免这种可能的安全性漏洞。此安全性策略准确定义了执行查询的用户可以看到的数据,而不管采用什么方法访问数据。在本部分中,您将看到如何使用 VPD 来禁止对历史数据的访问。
执行以下步骤:
1.首先,以用户 SH 的身份计算 SALES 表中可见的行数。记录返回的行数。SH 用户当前可以访问 SALES 表中的所有数据。从 SQLPlus 会话中,运行以下 SQL 脚本:
@ilm_count_sales@ilm_count_sales.sql 包含以下内容:
connect sh/shSELECT COUNT() FROM sales;
2.
接下来,以 SYSTEM 用户的身份添加以下 VPD 策略,该策略将声明用户只能看到自从 2000 年 1 月 1 日以来的数据。从 SQLPlus 会话中,运行以下 SQL 脚本:
@ilm_add_policy@ilm_add_policy.sql 包含以下内容:
connect system/oracleCREATE OR REPLACE FUNCTION ilm_pf1 (oowner IN VARCHAR2, ojname IN VARCHAR2) RETURN VARCHAR2 AScon 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 exit@ilm_count_sales.sql 包含以下内容:
connect sh/shSELECT COUNT() FROM sales;
返回列表
加密数据
要遵守某些新的安全性规则,必须将某些数据加密。Oracle 数据库 10g 第 2 版能够加密表中的单个列。在本部分中,您将添加一个新表来存储客户的信用卡详细信息。但实际的信用卡号将以加密格式存储在数据库操作系统文件中。
使用透明数据加密之前,必须创建一个钱夹。列加密使用 Oracle 钱夹安全地存储主加密密钥。为了实现更大的安全性,将创建一个单独的钱夹来存储数据加密主密钥而不是使用默认的数据库钱夹。执行以下步骤
1.首先,您需要更新 sqlnet.ora 文件以包含一个 ENCRYPTED_WALLET_LOCATION 条目。打开一个终端窗口,然后输入以下命令:
cd $ORACLE_HOME/network/admin gedit sqlnet.ora输入以下文本。如果该文件为空,则将以下条目添加到该文件的末尾:
ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/u01/app/oracle/product/10.2.0/db_1/)))
保存更改并退出该应用程序。
2.
需要确保监听器已经启动。从终端窗口中,执行以下命令:
lsnrctl status
监听器应已经启动。如果未启动,则执行以下命令:
lsnrctl start
3.
然后,您需要打开钱夹并生成万能加密密钥。由于该数据库不存在钱夹,因此设置万能密匙时将自动在 sqlnet.ora 文件的指定位置处创建一个新钱夹。打开一个终端窗口,执行以下命令:
cd /home/oracle/wkdir sqlplus /nolog @ilm_encrypt_setup The ilm_encrypt_setup.sql script generates the database server master encryption key and sets the Oracle wallet password using the following commands: connect / as sysdba ALTER SYSTEM SET KEY IDENTIFIED BY "welcome1";由于每个表都有各自的加密密钥,因此万能加密密钥是必需的。这些列密钥存储在数据库中。由于钱夹只能存储有限数目的密钥,因此使用万能密钥加密列秘钥。这样,可以拥有所需数量的列密钥,并将少量万能密钥存储在钱夹中。默认情况下,以上所示的命令使用 192 位的高级加密标准 (AES192) 生成一个密钥。
只需生成万能密钥一次。如果现有万能密钥已被破坏,则应只生成一个新的万能密钥。
打开钱夹后,只要数据库实例处于打开状态,该钱夹便保持打开状态。关闭并重新启动数据库实例时,请使用以下命令重新打开 Oracle 钱夹以访问存储的万能密钥,而不是生成一个新的万能密钥:
ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY "welcome1"; 注意:Only users with the ALTER SYSTEM privilege can open the wallet; users without proper privileges will not be able to use the key, because it is not available to them.4.
下面,创建一个表,其中包含一个用于存储加密信用卡信息的列。从 SQLPlus 会话中,执行以下脚本:
@ilm_crtabl connect system/oracleCREATE TABLE credit_cards (cust_id NUMBER, cc_name VARCHAR2(30), cc_no VARCHAR2(20) ENCRYPT);
5.
现在,向刚刚创建的表中添加一些数据。从 SQLPlus 会话中,执行以下脚本:
@ilm_poptabl INSERT INTO credit_cards VALUES (49671, 'R Abigail', '123456789012'); COMMIT;
有关 Oracle 数据库 10g 第 2 版中的加密的更多信息,请查看透明数据加密 OBE 教程。
返回列表
审计数据访问
某些规则还要求您审计对数据进行的所有更改。细粒度访问控制能够在非常精细的细节级别审计数据访问并在出现安全性违规时调用过程。执行以下步骤:
1.首先,创建一个对信用卡号码所做的更改进行审计的策略。在运行 SQLPlus 的终端窗口中,运行以下脚本:
@ilm_add_audit_policyconnect system/oracleBEGIN DBMS_FGA.ADD_POLICY ( object_schema => 'SYSTEM', object_name => 'CREDIT_CARDS', policy_name => 'CC_NOACCESS', audit_column => 'cc_no', statement_type => 'INSERT,UPDATE,DELETE');END;/
2.
启用策略后,现在可以向信用卡表中插入一行。审计记录将自动写入目录视图 DBA_FGA_AUDIT_TRAIL 中。从 SQLPlus 窗口中运行以下脚本:
@ilm_audit_insert connect system/oracleINSERT INTO credit_cards VALUES (3256, 'G Brown', '123456789012'); COMMIT;
3.
现在,可以查看审计跟踪表中包含的内容。从 SQLPlus 会话中,执行以下脚本:
@ilm_view_audit_trail connect system/oracle COLUMN db_user FORMAT a25COLUMN object FORMAT a40SELECT timestamp, db_user, object_schema