2月16日,正是中国的农历春节,神州大地正在喜迎戊戍新年。而大洋彼岸, Oracle公司正式发布了Oracle数据库18c。在大年初一发布新产品,真是一点防备都没有啊。
Oracle Database 18c的到来,标志着这个世界上最流行的数据库发布方式发生了变化。对于经常关注Oracle发展的小伙伴来说, 18c这个版本可能并不陌生。至少,Oracle在2017年的Open World已经有了前瞻介绍。但对某些小伙伴来说,依然是很迷惑:Oracle数据库18c和Oracle数据库12c是什么关系?它跟Oracle自治数据库是不是一样?
实际上,Oracle Database 18c是Oracle数据库产品发布新模式下,遵循年度发布的第一个版本。18是指2018年,c指的是Cloud(云),18c就是说2018年发布的支持云的数据库版本。Oracle数据库之前最新的版本是“Oracle Database 12c 12.2.0.1”。按以往惯例,下一个发布的应该是“Oracle Database 12c 12.2.0.2“,但规则改了,“Oracle Database 12.2.0.x”,它们将不会再出现了。最简单的就是,将“OracleDatabase 18c”看作“Oracle Database 12c 12.2.0.2” , “Oracle Database 19c” 看作“Oracle Database 12.2.0.3”。
至于“Oracle自治数据库”,它是一项“云服务”,不仅仅是数据库,它包括着Oracle数据库18c,Oracle云基础架构和Oracle云工具。Oracle Database 18c是“Oracle自治数据库”的基础,包含着自动化新功能,但没有云架构提供的机器学习,它就不会自动执行,跟传统的数据库没什么两样,它仍然可以在本地运行。
Oracle Database 18c是在12.2.0.1升级成12.2.0.2的版本,它是小版本的升级,所以不会有太大的变化。这个版本的增强改进,我们分六个方面来讨论:性能,高可用性,多租户,安全性,数据仓库和开发。
性能:
⭕️ Exadata上RAC优化:新的RDMA算法,减少消息,延迟和CPU时间
使用Oracle Real Application Clusters(RAC)的用户都知道,连接哪个节点来说,对RAC是透明的。但出于性能的考虑,会考虑应用分区,连到固定的节点实例,减少节点间的数据交换。但是,有些系统必要的交换数据,是没办法减免的。例如,为了实现一致性读Undo数据块,必须在实例间传输。Oracle Database 18c带来的变化,是减少互连传输的Undo量。在Oracle的登云一体机Exadata上,Grid Infrastructure(群集软件)可以直接通过Infiniband交换机(硬件)连接,使用RDMA(远程直接内存访问)访问对方实例中的Undo块。同时18c提供了Commit Cache(本地提交缓存),每个实例上都有一个内存表,记录事务提交时间,远程节点可以直接读取缓存获得提交时间。这两个功能相结合,可显著提高在RAC之上运行OLTP的性能。
⭕️ OLTP内存访问优化(Memoptimized Rowstore)
在Oracle数据库运行中,如果有些表通过主键(primary key)的访问异常频繁,可以使用Oracle Database 18c的内存访问优化改善性能。在Oracle的内存(SGA)分配一个池(memoptimize pool),然后确定哪些表放进去。数据库运行SQL语句的时候,将会绕过SQL层,利用内存中的哈希索引直接访问所需的数据。减少了数据访问量,抓取的速度明显加快。
⭕️ In-Memory动态扫描:加速列扫描性能。
Oracle Database In-Memory在新版本中采用了IM动态扫描,它可以自动使用空闲CPU,用轻量级线程并行扫描IMCU,读取数据的速度将加倍,应用程序可以自动获得更快的分析查询结果。由于扫描是动态的,因此可以在不影响现有系统下,使用剩余的CPU,增加性能。
高可用性:
Grid Infrastructure打补丁最小影响:修补Grid Infrastructure不需要停数据库
企业关心服务器的高可用性,数据库作为核心,更加是一秒都不能停。为了实现这个目标,Oracle数据库18c已经在精益求精。
Oracle Grid Infrastructure(Oracle Real Application Clusters的核心),现在提供“零影响补丁”。也就是说,现在你可以以滚动的方式修补每个节点的GridInfrastructure软件,同时在该节点上运行的数据库,仍可正常使用。
⭕️ 分片RAC(Sharded RAC):RAC应用程序的性能更高
Oracle RAC Sharding (分片)技术可以将表分区与Oracle RAC实例关联,例如表his有三个分区P1,P2和P3,运行的时候,P1的数据指定分到实例1,P2的数据指定分到实例2,P3的数据指定分到实例3,读取数据的时候可以按指定的分区键值路由到相应分区的实例,这样显著减少了跨实例的块访问。不指定键值的请求则如常运行,可以路由到任何实例。Oracle Database 18c更加增加了用户自定义Sharding (分片)方式,除了使用系统管理方法,还可以自己指定用RANGE(范围)或 LIST (列表)方式来分布数据。将数据分布到特定的位置,一则可以减少应用程序和数据库之间的延迟。二则可以满足合规性的问题,
多租户:
⭕️ Snapshot Carousel(快照转盘):克隆研发数据库或时间点恢复数据
使用SnapshotCarousel(快照转盘),你可以用固定间隔为PDB做一个快照,通常为24小时,快照保留8份。例如周一,周二,周三,周四,周五,周六,周日,每天凌晨1点做一个Snapshot(快照)。然后,你可以将这些快照,用作来做各个时间点的研发数据库,或者恢复某个时间点误删的数据。例如,如需要恢复周四早上十点的数据,那么把周四凌晨一点快照克隆出来,应用归档日志向前滚到十点,数据出来了。
⭕️ 可刷新PDB的切换:
Oracle 12C已经提供了Refreshable PDB (可刷新PDB)。可刷新PDB是一个克隆出来的,只读的,可以定期与其源PDB同步的PDB。Oracle 18c更增加了RefreshablePDB Switchover(可刷新PDB切换)。用一个例子演示一下它的作用:
1) 如上图所示,这里有两个容器数据数据库CDB1和CDB2。
2) 留意CDB1上的Grey,它是可刷新的PDB,用create语句从CDB2上克隆出来的。
3) CDB1上的Grey上的数据已经可以定期从源数据上刷新,保持两边的数据是一致的。
4) 用户连接可以使用读写分离,在源库CDB2上Grey更新数据,在目标端CDB1上的Grey上运行分析报表,避免对主库的性能影响。有必要的时候,这两个PDB的角色可以互相切换,
5) 在CDB2敲上switchover的命令,源库和目标库的角色将对换(请将箭头反过来)。这时候原本是目标端的CDB1上的Grey做源,对方CDB2上的Grey做目标了。
如果熟悉Oracle的Active Dataguard的话,感觉这个就是主从功能在CDB上PDB上的实现。
安全性:
⭕️ Oracle数据库与Active Directory的集成。
Oracle数据库18c允许Active Directory 直接对用户进行身份验证和授权,AD的用户和组跟Oracle数据库的用户和角色映射,不再需要安装Oracle Internet Directory来做为中间桥梁。未来我们有望扩展此项功能,以支持其他符合LDAP v3协议的目录服务。与AD的集成降低了用户验证的复杂性,用户总体安全系数更高了。
数据仓库:
⭕️ 联机合并分区( Online Merging of Partitions and Subpartitions)
如果你的表分区太多不方便,而数据又不太频繁地更新,可以将分区合并为更大的分区,简化管理。这在数据库的以前版本中也可以做到,但是不能联机操作,合并的同时数据无法访问。在Oracle数据库18c中,你可以在线合并分区并维护索引。这个版本里,对表的所有在线操作都齐全了,功能算是完整了。
⭕️ Top-N近似聚合计算:减少准确性换取性能。
对于某些大型统计,我们可能不需要太准确的数据,得到一个差不多的近似值就可以了,最关键就是要快。例如:
1. 上周前五大博客文章,有大致多少次浏览量?
2. 每个地区的前50名客户,他们的大概消费是多少?
在Oracle Database 12c中,我们已经引入了函数APPROX_COUNT_DISTINCT,结果准确率为97%以上,一般情况下都可以接受。而Oracle Database 18c提供了更多的聚合函数,如APPROX_COUNT,APPROX_SUM和APPROX_RANK。
有了这几个新函数,对于之前提到的两个问题,我们可以改写成如下查询,速度立马提高几个数量级。
开发:
⭕️ JSON支持的增强:增加更多SQL和SODA功能
JSON正在迅速成为当红数据交换格式。在Oracle数据库12c中,我们引入了对它的支持,JSON格式数据能够保存到Oracle数据库中,并使用点符号进行查询。在Oracle数据库18c中,SQL/JSON 查询和生成支持返回LOB 类型,C和PL SQL语言添加了新的SODA (Simple Oracle Document Access) API, JSON索引长度从64 bytes 扩展到255 bytes。
⭕️ 私有临时表
在Oracle数据库18c中,我们为临时表提供了更灵活的使用:私有临时表,一个在内存中用完即弃的临时对象。如果开发人员需要为不同的事务创建不同的临时表,或在只读数据库使用临时表时,都可以使用私有临时表。这种方法为开发人员提供了更大的灵活性。
属性 | 全局临时表 | 私有临时表 |
命名规则 | 跟普通表一样 | 必须以 ORA$PTT_为前缀 |
表定义可见 | 所有会话可见 | 仅仅建立该表的会话可见 |
表定义存储 | 硬盘 | 仅在内存 |
试用:
如果你想试用Oracle数据库18c,点击下面链接,用LiveSQL来完成:
https://livesql.oracle.com/apex/livesql/file/index.html
下载:
Oracle Database(Exadata Only) 18.0.0.0.0 for Linux x86-64
https://edelivery.oracle.com
更多内容:
Oracle Database 18c发布:
https://blogs.oracle.com/database/oracle-database-18c-:-now-available-on-the-oracle-cloud-and-oracle-engineered-systems
(或者点击阅读原文,查看18c发布的新闻)
Oracle标准文档:
https://docs.oracle.com/en/database/oracle/oracle-database/18/newft/new-features.html
应用程序开发工具的信息
http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html
http://www.oracle.com/technetwork/developer-tools/rest-data-services/overview/index.html
http://www.oracle.com/technetwork/developer-tools/sqlcl/overview/sqlcl-index-2994757.html
http://www.oracle.com/technetwork/developer-tools/apex/overview/index.html
关于新版本发布周期,支持平台:
可以查阅Oracle支持网站 support.oracle.com
文档ID2285040.1 ,文档ID 742060.1