本教程将介绍如何实现新的 Database 11g 大对象 (LOB) 存储格式(称为 SecureFiles)。您将学习如何将 Database 11g 之前的 LOB 存储格式(称为 BasicFile LOB 格式)迁移到 SecureFiles LOB 格式,并在创建表时启用重复消除(存储共享)和压缩功能。您还将比较以 BasicFile 格式存储与以 SecureFiles 格式存储的 LOB 的性能。最后,您将启用 SecureFiles LOB 加密。
大约 20 分钟
本教程包括下列主题:
| 概述 | |
| 前提条件 | |
| 为 OBE 搭建数据库和环境 | |
| BasicFile LOB 性能采样 | |
| 检验 BasicFile LOB 的空间使用率 | |
| 将 BasicFile LOB 迁移到 SecureFiles LOB | |
| 检验 SecureFiles LOB 的空间使用率 | |
| SecureFiles LOB 性能采样 | |
| 启用加密 | |
| 清理 | |
| 总结 |
将光标置于此图标上可以加载和查看本教程的所有屏幕截图。
(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注意:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。
SecureFiles 是什么?
SecureFiles 是 Database 11g 的一个特性,它为大对象 (LOB) 数据类型引入了一个全新的存储格式,以提高性能、减少空间使用并增强安全性,所有这些都不会影响应用程序开发的易用性。这个新的实现提供了下一代高级功能,例如重复消除(也称为 LOB 共享)、智能压缩和透明加密。SecureFiles 显著增强了 Oracle 数据库的原生内容管理功能。
开始本教程之前,您应该:
| 1. | 安装 Oracle Database 11g。 |
|
| 2. | 将 sf.zip 文件下载并解压缩到包含执行该教程示例所需文件的工作目录中。 |
|
要为 OBE 搭建数据库和环境,执行以下步骤:
| 1. |
打开一个终端窗口。 创建一个目录,用于存储透明数据加密 (TDE) 钱夹。SecureFiles LOB 加密需要执行这一步。 mkdir $ORACLE_HOME/wallet |
|
| 2. |
编辑 $ORACLE_HOME/network/admin/sqlnet.ora 文件,指明 TDE 钱夹的位置。
|
|
| 3. |
使用 SQL*Plus,以 SYS 用户身份连接到数据库,并运行 obe_setup.sql 脚本。 在您的命令终端提示符处,输入: cd wkdir/sf<或者在其中解压缩 obe.zip 文件内容的路径> 键入以下命令启动 SQL*Plus: sqlplus 为 user-name 输入 /as sysdba:
按 [Enter] 继续执行脚本的下一步。 |
|
| 4. | 脚本的下一步是为该 OBE 创建数据库模式。该模式名为 SF_DEMO,并被授予 CONNECT 和 RESOURCE 角色。该模式还需要 EXECUTE ANY PROCEDURE 和 CREATE ANY DIRECTORY 系统权限。
按 [Enter] 继续执行脚本的下一步。 |
|
| 5. | 接下来,脚本将创建两个 150MB 的表空间。OBE_TBS1 表空间将用来以 BasicFile 格式存储 LOB,OBE_TBS2 表空间将用来以新的 SecureFiles 格式存储 LOB。 还需要为表空间启用自动段空间管理 (ASSM) 以支持 SecureFiles。
按 [Enter] 继续执行脚本的下一步。 |
|
| 6. | 脚本的其余部分是以 SF_DEMO 模式创建对象。首先,创建一个名为 RESUMES 的表。该表包含一个以 BasicFile 格式存储的 BLOB 列 (RESUME)。 按 [Enter] 继续执行脚本的下一步。 |
|
| 7. | 需要使用 DIRECTORY 对象来存储将检索并存储在 LOB 列中的 MS Word 文件的路径名。 当系统提示您输入 directory_name 时,请输入在其中解压缩 obe.zip 内容的完整路径。例如,路径名可能是 /home/oracle/wkdir/sf。 按 [Enter] 继续执行脚本的下一步。 |
|
| 8. | 要读取文件系统上的 MS Word 文件,并将其存储到 LOB 列中,需要创建一个名为 LOADLOBFROMBFILE_PROC 的过程。该过程将调用 DBMS_LOB 程序包。注意,将针对 BasicFile 和 SecureFiles LOB 存储格式使用同一个过程。 按 [Enter] 继续执行脚本的下一步。 |
|
| 9. | 要将记录插入 RESUMES 表(包括 LOB 值),需要创建一个名为 WRITE_LOB 的过程。该过程将调用上一步中创建的 LOADLOBFROMBFILE_PROC 过程。 按 [Enter] 继续执行脚本的下一步。 |
|
| 10. | 要从 RESUMES 表中检索记录(包括 LOB 值),需要创建一个名为 READ_LOB 的过程。 按 [Enter] 继续执行脚本的下一步。 |
|
| 11. | 创建一个名为 CHECK_SPACE_BF 的过程,以显示分配给 RESUMES 表的 BasicFile LOB 区段的磁盘块空间使用率。该过程将调用 DBMS_SPACE 程序包。 注意:DBMS_SPACE.SPACE_USAGE 过程已经在 Oracle Database 11g 中过载。现在有两个 DBMS_SPACE.SPACE_USAGE 过程。这两个过程不能交换使用。对 CHECK_SPACE_BF 中的 DBMS_SPACE.SPACE_USAGE 过程的调用只能用于 BasicFile LOB。
|
|
| 12. | 创建一个名为 CHECK_SPACE_SF 的过程,以显示分配给 RESUMES 表的 SecureFiles LOB 区段的磁盘块空间使用率。该过程将调用 DBMS_SPACE 程序包。 注意:DBMS_SPACE.SPACE_USAGE 过程已经在 Oracle Database 11g 中过载。现在有两个 DBMS_SPACE.SPACE_USAGE 过程。这两个过程不能交换使用。对 CHECK_SPACE_SF 中的 DBMS_SPACE.SPACE_USAGE 过程的调用只能用于 SecureFiles LOB。
|
|
要捕获 BasicFile LOB 存储的读写性能统计信息,执行以下步骤:
| 1. |
使用 SQL*Plus 连接到数据库 sf_demo/oracle。运行 write_data.sql 脚本。 $ORACLE_HOME/bin/sqlplus sf_demo/oracle 该脚本会将 90 条记录插入 RESUMES 表中。每条记录都包含一个 35KB - 65KB 大小的 LOB。SQL*Plus 计时器会启动,捕获插入的总花费时间。
在脚本完成后,记下以 BasicFile 格式加载 LOB 所花费的时间。
注意:您观察到的花费时间可能有所不同,这取决于您的硬件配置(例如,CPU 速度、内存量等)。 |
|
| 2. | 现在,检索在上一步中插入的记录。运行 read_data.sql 脚本。 @read_data.sql 该脚本将从 RESUMES 表中读回这 90 条记录。对于每条记录,屏幕上将显示 LOB 值的大小和 LOB 的前 200 个字符。SQL*Plus 计时器会启动,捕获检索的总花费时间。
在脚本完成后,记下以 BasicFile 格式读取 LOB 所花费的时间。
注意:您观察到的花费时间可能有所不同,这取决于您的硬件配置(例如,CPU 速度、内存量等)。 |
|
要检验 BasicFile LOB 的空间使用率,执行以下步骤:
| 1. |
使用 SQL*Plus 连接到数据库 sf_demo/oracle。运行 space_usage.sql 脚本。 $ORACLE_HOME/bin/sqlplus sf_demo/oracle 在系统提示您输入 LOB 类型时,输入 BF。在脚本完成后,记下 Full Blocks 的数量和 Full Blocks Bytes。
|
|
要将 BasicFile LOB 存储迁移到 SecureFiles LOB 存储,执行以下步骤:
| 1. |
使用 SQL*Plus,以 SYS 用户身份连接到数据库。 从终端窗口启动 SQL*Plus: sqlplus 为 user-name 输入 /as sysdba:
运行 mig_bf_to_sf.sql 脚本。 首先,查询 DBA_SEGMENTS 视图,以查看 BasicFile LOB 存储的 LOB 区段子类型名称。注意,该名称为 ASSM。
按 [Enter] 继续执行脚本的下一步。 |
|
| 2. | 从 BasicFile 到 SecureFiles LOB 存储格式的迁移联机完成。这意味着,在迁移期间,可以继续访问 RESUMES 表。这种类型的操作称为联机重定义。 联机重定义需要使用临时表进行数据存储。 在脚本的这一步中,将使用 SecureFiles LOB 存储格式定义临时表,并将 LOB 存储在 OBE_TBS2 表空间中。当迁移完成后,RESUME LOB 将存储在 OBE_TBS2 表空间中。 注意:建议您在创建表时启用压缩和重复消除功能。此外,在该版本的 Oracle 数据库中,SecureFiles LOB 尚不支持 ALTER TABLE SHRINK 操作。 按 [Enter] 继续执行脚本的下一步。 |
|
| 3. | 脚本的下一步将调用 DBMS_REDEFINITION 程序包,以执行联机重定义操作。 按 [Enter] 继续执行脚本的下一步。 |
|
| 4. | 联机重定义操作完成后,就可以删除临时表了。 按 [Enter] 继续执行脚本的下一步。 |
|
| 5. | 迁移的 LOB 数据现在驻留在 obe_tbs2 表空间中。脚本的这一步将查询 DBA_SEGMENTS 视图,以查看 SecureFiles LOB 存储的 LOB 区段子类型名称。注意,该名称为 SECUREFILE。 |
|
| 6. | 脚本的最后一步将查询 DBA_LOBS 视图,以查看 SecureFiles LOB 区段的压缩和重复消除设置。 |
|
要检验 SecureFiles LOB 的空间使用率,执行以下步骤:
| 1. |
使用 SQL*Plus 连接到数据库 sf_demo/oracle。运行 space_usage.sql 脚本。 @space_usage.sql 在系统提示您输入 LOB 类型时,输入 SF。在脚本完成后,记下 Used Blocks 的数量和 Used Blocks Bytes。
|
|
| 2. | 将 BasicFile LOB Full Blocks 的数量和字节数与 SecureFiles LOB Used Blocks 的数量和字节数进行比较。 注意,启用了压缩和重复消除功能之后,SecureFiles LOB 的空间使用率已显著降低。 |
|
要捕获 SecureFiles LOB 存储的读写性能统计信息,执行以下步骤:
| 1. |
与前面的 BasicFile LOB 存储性能采样部分不同,您首先从 SecureFiles LOB 存储的读性能测试开始。这需要确保 BasicFile 与 SecureFiles 之间的读性能比较有效 — 将记录从 BasicFile 迁移到 SecureFiles 之后,您需要立即对同一组记录执行读测试。 使用 SQL*Plus,连接到数据库 sf_demo/oracle。运行 read_data.sql 脚本。 @read_data.sql 该脚本将从 RESUMES 表中读回这 90 个记录。对于每个记录,屏幕上将显示 LOB 值的大小和 LOB 的前 200 个字符。SQL*Plus 计时器会启动,以捕获检索的总花费时间。
在脚本完成后,记下以 SecureFiles 格式读取 LOB 所花费的时间。
注意:您观察到的花费时间可能有所不同,这取决于您的硬件配置(例如,CPU 速度、内存量等)。 |
|
| 2. | 现在,插入其他记录。运行 write_data.sql 脚本。 @write_data.sql 该脚本会将 90 条记录插入 RESUMES 表中。每条记录都包含一个 35KB - 65KB 大小的 LOB。SQL*Plus 计时器会启动,以捕获插入的总花费时间。
在脚本完成后,记下以 SecureFiles 格式写入 LOB 所花费的时间。
注意:您观察到的花费时间可能有所不同,这取决于您的硬件配置(例如,CPU 速度、内存量等)。 |
|
要加密以 SecureFiles 格式存储的 LOB,执行以下步骤:
| 1. |
使用 SQL*Plus 连接到数据库 sf_demo/oracle。运行 encrypt_lob.sql 脚本。 @encrypt_lob.sql
|
|
| 2. | 验证 LOB 现在已加密。运行 check_encrypt.sql 脚本。 @check_encrypt.sql
注意:列加密操作实质上会更新所有现有的 LOB 值。但是,如果数据块中有可用空间,则 LOB 值的原始未加密形式可能仍然存在。要确保磁盘上没有未加密的值,最好在创建表时(即,在插入任何值之前)启用加密。 |
|
要清理为本 OBE 创建的数据库帐户和对象,执行以下步骤:
| 1. |
使用 SQL*Plus,以 SYS 用户身份连接到数据库。 从终端窗口启动 SQL*Plus: sqlplus 为 user-name 输入 /as sysdba:
删除 SF_DEMO 模式。 DROP USER sf_demo CASCADE;
|
|
| 2. | 删除 OBE_TBS1 和 OBE_TBS2 表空间。 DROP TABLESPACE obe_tbs1 INCLUDING CONTENTS; DROP TABLESPACE obe_tbs2 INCLUDING CONTENTS; |
|
在本教程中,您学习了如何:
| 度量 BasicFile 与 SecureFiles LOB 存储格式的读写性能。 | ||
| 比较 BasicFile 与 SecureFiles LOB 存储格式的空间使用率。 | ||
| 将 BasicFile LOB 存储格式迁移到 SecureFiles LOB 存储格式。 | ||
| 验证用于 BasicFile LOB 存储格式(即,11g 之前的格式)的同一 DBMS_LOB API 也可以用于 SecureFiles LOB 存储格式。 | ||
| 为 SecureFiles LOB 存储启用加密。 | ||