OBE主页10gR2单实例商务智能使用面向数据仓库的基本数据库功能目的在本教程中,您将使用Oracle数据库10g的基本功能查询数据仓库并改善其性能。所需时间大约1个小时主题本教程包括下列主题:查看屏幕截图将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)概述前提条件为销售历史模式实施模式更改比较Oracle的星形查询转换与其他访问计划使用位图连接索引了解数据仓库B树索引和位图索引之间的区别使用Oracle高级分区功能改善查询性能使用分区修剪使用智能化分区连接使用统计数据自动收集清理总结注意:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。您可以单击单个屏幕截图将其隐藏。概述Oracle数据库10g是面向据仓库的领先关系数据库,也是第一个完整的商务智能平台。它不但满足了性能、可伸缩性和可管理性等基本核心要求,而且还满足了围绕ETL处理、数据分析(OLAP)和数据挖掘的其他数据相关的后端功能。Oracle数据库10gRelease2是一个功能丰富并具有性能增强的后续版本,它在Oracle关系功能的每个层面都提供了显著的性能增强,并在提供最完整的商务智能平台方面充分发挥了Oracle的领先性。返回主题列表前提条件开始本教程之前,您应该:返回主题列表为销售历史模式实施模式更改开始执行本教程的任务之前,您需要对现有的SalesHistory模式实施些许改动。需要增加一些必要的附加对象,并向用户SH予额外的系统权限。用于应用这些更改的SQL文件是modifySH_10gR2.sql。1.完成了教程在Windows上安装Oracle数据库10g。2.下载bdf.zip并将其解压缩到您的工作目录(即c:\wkdir)中。1.启动一个SQL*Plus会话。选择开始程序Oracle-OraDB10g_homeApplicationDevelopmentSQLPlus。(请注意:本教程假设您拥有c:\wkdir文件夹。如果没有,则需要创建一个,并将bdf.zip的内容解压缩到此文件夹中。在执行脚本时,可指定路径。)2.以SH用户的身份登录。输入SH作为UserName,并输入SH作为Password。然后单击OK。返回主题列表比较Oracle的星形查询转换与其他访问计划在这一主题中,您将体验到Oracle面向数据仓库的卓越查询执行能力,即星形转换。该功能最初在Oracle8.0中引入。本文将比较星形/雪花形环境中典型查询的各种执行计划,并探讨星形转换相对于其他计划(不太适合处理大量数据)的优势,出现的顺序以性能的降序排列。注意:因为在本上机操作中使用的数据较少,所以星形转换的优势并不明显。这3.从SQL*Plus会话运行modifySH_10gR2.sql脚本。@c:\wkdir\modifySH_10gR2.sql获得的输出的底部应与以下图像匹配。是由于数据基本不会超出数据库或文件系统缓存的容量,因此在很大程度上消除了其他机制的I/O劣势。另外,由于init.ora设置可能与统计数据有所不同,您计划输出中的执行计划和开销也许会与示例有一些差别。了解Oracle星形查询转换的基本机制1.在登录到SH模式的SQL*Plus会话中,运行show_star1.sqlshow_star1.sqlshow_star1.sqlshow_star1.sql,或将以下SQL语句复制到SQL*Plus会话中。下面显示的ALTERSESSION命令能够实现Oracle的基本星形查询转换功能,而无需使用临时表。从Oracle8i开始,优化器可能会在一些情况下使用临时表来进一步改善星形转换的性能。下面的示例演示了一个真正的星形转换(在Oracle8i中引入)与此处所显示行为间的区别。注意:NOREWRITE提示用于避免与可能存在的现有物化视图间的冲突。另外,您也可以禁用此特定会话或整个实例的query_rewrite。这种情况适用于所有后续语句。STAR_TRANSFORMATION提示用于强制在Oracle中使用星形转换的功能,即使对于更适用于使用其他计划的小型数据集也是如此。@c:\wkdir\show_star1.sql@c:\wkdir\show_star1.sql@c:\wkdir\show_star1.sql@c:\wkdir\show_star1.sqlPROMPTlet'sdisabletheusageofTEMPTABLEStoshowsimplestarfirstALTERSESSIONSETstar_transformation_enabled=TEMP_DISABLE;showparametersstar_transformationDELETEFROMplan_table;COMMIT;EXPLAINPLANFORSELECT/*+norewrite*/t.calendar_month_desc,p.prod_subcategory,c.cust_city,sum(s.amount_sold)ASdollarsFROMsaless,timest,productsp,customerscWHEREs.time_id=t.time_idANDs.prod_id=p.prod_idANDs.cust_id=c.cust_idANDc.cust_city='Ravensburg'ANDp.prod_categoryin('Hardware','Photo')ANDt.fiscal_yearin(2000,1999)GROUPBYp.prod_subcategory,calendar_month_desc,c.cust_city;PROMPTshowplansetlinesize150setpagesize100select*fromtable(dbms_xplan.display);注意:此时,您可以不考虑输出中的PSTART和PSTOP列。(它们位于Time列的右侧。)我们将在后面讨论这两列。上面的计划显示了一个典型的星形查询转换。通过扫描位图索引结构,即可找到事实表中满足WHERE查询条件的记录,而不用扫描整个大型sales事实表。在第一个内部递归步骤中,Oracle数据库会选择三个维表(products、times和channels)中满足WHERE条件的所有记录。您可以在“Operation”列中BITMAPKEYITERATION这行源代码下方看到此表对这些维表的访问。然后,Oracle数据库将这些记录的键值作为谓词使用,它们将探测sales事实表本身的位图索引结构。您会看到查询(针对customers、products和times维表)的这些谓词利用位图索引结构sales_prod_bix、sales_cust_bix和sales_time_bix.对sales表的相关记录进行高选择性预选。在第二步中,为获取最终的查询结果,结果集将与所有维表重新连接。这些是在“Operation”列中显示的PARTITIONRANGESUBQUERY之后的所有操作。2.在此步骤中,您会看到使用TEMP表转换的Oracle星形查询转换的基本机制。在登录到SH模式的SQL*Plus会话中,运行show_star2.sql,或将以下SQL语句复制到SQL*Plus会话中:@c:\wkdir\show_star2.sql@c:\wkdir\show_star2.sql@c:\wkdir\show_star2.sql@c:\wkdir\show_star2.sqlALTERSESSIONSETstar_transformation_enabled=TRUE;showparametersstar_transformationDELETEFROMplan_table;COMMIT;EXPLAINPLANFORSELECT/*+norewrite*/t.calendar_month_desc,p.prod_subcategory,c.cust_city,sum(s.amount_sold)ASdollarsFROMsaless,timest,productsp,customerscWHEREs.time_id=t.time_idANDs.prod_id=p.prod_idANDs.cust_id=c.cust_idANDc.cust_city='Ravensburg'ANDp.prod_categoryin('Hardware','Photo')--ANDp.prod_categoryin('Hardware')ANDt.fiscal_yearin(2000,1999)GROUPBYp.prod_subcategory,calendar_month_desc,c.cust_city;setlinesize140select*fromtable(dbms_xplan.display);此计划与前面显示的计划类似,但并不完全相同。这两个计划之间的区别在于,Oracle数据库现在使用了一个名为sys_temp_xxx(不属于该查询)的表来满足该SQL语句。请注意,由于临时表名称是系统生成的,各个临时表的名称可能会有所不同。优化器评估了WHERE条件的选择性以及维表的大小。通过检测,它发现customers表的选择性较高,并且因为此表足够“大”,创建临时表(其中包括customers表中谓词的结果集)的开销小于第一个计划。由于第一个计划没有使用临时表,它访问了两次customers表。因此,系统使用该临时表代替了customers表本身。如该计划所示,此临时表的创建和数据插入都是自动进行的。3.接下来,您将使用STAR提示来强制Oracle7的行为。在登录到SH模式的SQL*Plus会话中运行show_star3.sql,或将以下SQL语句复制到SQL*Plus会话中。@c:\wkdir\show_star3.sql@c:\wkdir\show_star3.sql@c:\wkdir\show_star3.sql@c:\wkdir\show_star3.sqlPROMPTSTARJOINTRANSFORMATION-7.3BEHAVIORRemshowplanwithstarjointransformationanddiscussitDELETEFROMplan_table;COMMIT;EXPLAINPLANFORSELECT/*+norewriteSTAR*/t.calendar_month_desc,p.prod_subcategory,c.cust_city,sum(s.amount_sold)ASdollarsFROMsaless,timest,productsp,customerscWHEREs.time_id=t.time_idANDs.prod_id=p.prod_idANDs.cust_id=c.cust_idANDc.cust_city='Ravensburg'--ANDp.prod_categoryin('Hardware')ANDp.prod_categoryin('Hardware','Photo')ANDt.fiscal_yearin(2000,1999)GROUPBYp.prod_subcategory,calendar_month_desc,c.cust_city;Remshowplansetlinesize140select*fromtable(dbms_xplan.display);上面的计划输出显示了所谓的星形查询优化,该功能是在Oracle7中引入的。为避免与大型事实表之间进行多次连接,优化器构建了times、products和customers维表的笛卡尔积,并对该笛卡尔结果与sales事实表进行一次连接操作。注意:此星形优化技术与当前的星形查询转换无关,并且它的使用与star_t