Oracle Database 18c支持将外部表中的数据填充到内存列存储(IM列存储)中。这个功能充许用户将外部文件中的数据加载到IM列存储中。只是这个填充过程必须通过执行DBMS_INMEMORY.POPULATE来手动完成。
在Exadata上运行的Oracle Database 19c环境中,对外部表使用IM列存储进行了增强,如果启用了内存的外部表功能,就会自动将外部数据填充到IM列存储中。在实际的项目中利用Oracle Database In-Memory的功能极大加速对外部数据的查询和数据聚合,这个功能可以很好的帮助在某些数据仓库或报表项目中需要将存储在外部表的历史冷数据纳入统计分析,从而帮助应用加速运行。
接下来我们就通过例子来看看这项功能是如何使用的吧。
一、环境准备
1、Oracle 19c数据库
2、一个CDB和一个PDB
3、一个外部源文件d0219.txt,放在/opt/txt下,内容是以逗号进行分隔的文本数据,如下图所示:
二、配置In-Memory Column Store Size
要使用内存列格式存储数据,我们首先要分配一部分内存区域用来存储列格式数据,我们只需要配置一个参数INMEMORY_SIZE既可启用列格式内存。如下图:
重启数据库并打开我们的目标数据库orclpdb1。
三、创建数据库目录对象
创建数据库目录对象,用于访问处于文件系统上的外部数据。
四、创建In-Memory外部表
在orclpdb1里面创建一个用户,此用户拥有In-Memory外部表对象,同时将数据库目录对象授权给此用户。
创建内存外部表,使用INMEMORY MEMCOMPRESS FOR CAPACITY HIGH子句。
检查此外部表的In-Memory是否开启,如下图所示,可以看到此外部表已经启用In-Memory了。
五、查询In-Memory外部表
内存中外部表的查询必须先将QUERY_REWRITE_INTEGRITY参数设置为stale_tolerated。
检查一下此外部表数据是否被加载到In-Memory内存中,如下图所示可以看到此外部表已成功加载到In-Memory内,从而验证了19c可以自动装载外部表的数据到In-Memory中,无需手动装载。
六、确认查询In-Memory外部表是否使用In-Memory数据访问
我们使用执行计划检查是否使用了In-Memory访问外部表的数据。如下图所示:外部表的访问使用了In-Memory内存中的数据。
七、总结
上面的例子验证了Oracle database 19c In-Memory在外部表中的增强,可以自动装载外部表的数据到In-Memory,中无需手动装载,从而加快了数仓、报表用到外部表数据的应用,简单、直接、自动化。
手把手系列文章:
扫描下方QR Code即刻预约ADW演示
编辑:殷海英