Oracle 已经在官网上线了关于 Oracle Database 21c 的在线文档,这让所有关于 Oracle 数据库的用户心中一惊,转眼 2020年已经接近尾声,Oracle 数据库又将进入下一个版本周期。然而我们必须和大家进一步梳理一下,Oracle的版本变化,并且明确:Oracle 21c 其实就相当于 Oracle 20c,因为 20c从未进入公众可用的版本发布。在官方的版本计划中,20c 已经被移出,并做出如下声明:
Oracle考虑到2020年我们的客户将面临前所未有的经济和业务中断。我们决定不将Database 20c Preview版本升级为General Availability。相反,我们将所有20c功能都合并到21c版本中,并使21c在我们的“自制数据库免费层”中可用,以便所有人都可以免费试用驱动新功能和增强功能。
Oracle 21c 在 Oracle CLoud上,在2020年12月8日可用,在企业级公众版本将于 2021年上半年发布。现在的年度版本被称为『创新版本』,仅作有限的支持,有别于长期支持版本。21c 的支持期仅仅为2023年6月,没有扩展支持。
结合 Oracle 20c 和 21c 的革新,我们再次整理这两个版本中,引人瞩目的十大新特性,与客户和读者朋友分享。
1. 原生的区块链支持 - Native Blockchain Tables
随着区块链技术的不断成熟和发展,Oracle 在其多模的数据库支持中,引入了原生的区块链表支持。在 21c 中数据库中可以通过 blockchain 关键字来创建区块链表:
CREATE Blockchain TABLE <blockchain_table_name>;
很多客户希望在不涉及多个组织的情况下,利用区块链的防篡改和不可否认属性,区块链表使客户可以在需要高度防篡改的数据管理,而又无需在多个组织中分布分类帐或依靠分散的信任模型时使用Oracle数据库。为了遵循区块链的可信和安全机制,区块链表只能INSERT 记录,记录之间通过 Hash 算法进行链接,不能修改,同时链可以被多方参与者验证。区块链表,可以和其他常规表进行关联,进行事务处理或者查询。
区块链表,在创建时可以指定保护的周期属性,例如3年内不可删除等,以建立数据生命周期管理。区块链表中的行是防篡改的。每行包含一个密码哈希值,该值基于该行中的数据和链中上一行的哈希值。如果某行被篡改,则该行的哈希值会更改,这会导致链中下一行的哈希值发生更改。为了增强欺诈保护,可以将可选的用户签名添加到行中。如果您在区块链表行上签名,则必须使用数字证书。在验证区块链表中的链时,数据库需要证书来验证行签名。下图是区块链表的示意图:
可以对区块链表进行索引和分区。您可以通过建表时的选项控制是否以及何时从区块链表中删除行。您还可以控制是否可以删除区块链表。区块链表可与事务和查询中的(常规)表一起使用。
区块链表用于实施集中式区块链应用程序,其中中央权限是Oracle数据库。集中式区块链为组织提供了更大的可定制性和控制力,因为他们可以决定谁可以加入网络。参与者是不同的数据库用户,他们信任Oracle数据库来维护交易的防篡改区块链。所有参与者都必须具有将数据插入到区块链表中的特权。区块链的内容由应用程序定义和管理。与分散式区块链相比,集中式区块链与基于共识的分布式区块链相比,首选应用在更高吞吐量和更低交易延迟的场景。区块链表,可以和其他常规表进行关联,进行事务处理或者查询。
Updating and merging rows
Adding, dropping, and renaming columns
Truncating the blockchain table
Dropping partitions
Defining BEFORE ROW - triggers that fire for update operations (other triggers are allowed)
Direct-path loading
Inserting data using parallel DML
Converting a regular table to a blockchain table or vice versa
XA transactions
2. 持久化内存存储支持 - Persistent Memory Store
自 Oracle 19c 开始,Oracle就已经开始修改程序以更好的配合持久化内存,提升数据库性能。在21c中,Oracle 明确支持了持久化内存 - Persistent Memory,虽然目前发布的信息是在Exadata中支持,但是软件的提升是通过的,在各类一体机中,或者是传统架构中使用持久化内存是毫无障碍的。持久化内存的引入,让 Oracle 的存储多达 6 级:SATA、SAS、SSD、Flash、PMEM、RAM,冷热数据分离,分层存储,可以进行更加精细化的架构设计。整体架构提供小于 19个微秒的IO延时。在Oracle新发布的 Exadata X8M 一体机中,100Gb的以太网和RoCE获得支持,这是第一次在Oracle一体机中引入了基于RoCE的架构;存储服务器上,通过PMEM在Flash之前进行加速,RoCE和PMEM提供了极速性能;
3. SQL的宏支持 - SQL Macro
宏的作用在于让SQL获得进一步的概括和抽象能力,允许开发者将复杂的处理逻辑通过宏进行定义,然后在后续程序处理中可以反复引用这一定义。在 21c 中引入的 SQL Macro 支持两种宏类型,Scalar 和 Table 类型。
SCALR 表达式可以用于 SELECT 列表、WHERE/HAVING、GROUP BY/ORDER BY子句;
TABLE 表达式可以用于 FROM 语句。
看一个简单的示例,例如需要一个函数,返回数据的下限和上限,举例而言,如果 x < lower (特定小值) 则返回 lower(作为下限);如果 x > upper (特定大值)则返回 upper(作为上限),否则返回 x 本身。
例如,如下创建一个 Clip 函数,返回一个 SCALAR 值:create function clip(lo number, x number, hi number)
return varchar2 SQL_MACRO(SCALAR) is
begin
return 'least(greatest(x, lo), hi)';
end;
/
SELECT
ename,
CLIP (:lower, sal, :upper)
FROM emp;
SELECT
ename,
least(greatest(sal, :lower), :upper)
FROM emp;
这个查询返回的结果如下,可以看到 CLIP 的效果:SQL> SELECT ename,clip(1000,sal,2000) FROM emp;
ENAME CLIP(1000,SAL,2000)
---------- -------------------
SMITH 1000
ALLEN 1600
WARD 1250
JONES 2000
MARTIN 1250
BLAKE 2000
CLARK 2000
SCOTT 2000
KING 2000
TURNER 1500
ADAMS 1100
JAMES 1000
FORD 2000
MILLER 1300
4. 原生的 JSON 数据类型支持
12.1.0.2 引入JSON支持,允许将JSON存储在varchar2或LOB(CLOB或BLOB)中,可以利用 Schemaless 设计模型所提供的灵活性来构建应用程序,但又能从Oracle数据库的功能中受益。可以使用标准SQL查询JSON文档,利用高级分析功能,对单个属性或整个文档进行索引,并行处理数十亿个JSON文档。还可以通过使用Java、Node.js、Python、C语言和REST的SODA API来访问Oracle数据库,将其视为NoSQL数据库。在21c中,Native 数据类型 “JSON ”改进了对JSON的支持。在读取或更新操作时不必对JSON进行解析,而只在插入时才进行解析,JSON以内部二进制格式保存,这使得访问速度更快。读取和更新速度提高了45倍,对非常大的JSON文档的更新速度提高了2030倍。
新的函数JSON_TRANSFORM,使得在一次操作中更新和删除文档中的多个属性变得更加简单。
5. SQL新特性和函数扩展 - Extensions
在 Oracle 21c中,关于SQL的函数扩展很多,包括对于 ANSI 2011 标准的部分支持,进一步的提升了 SQL 的处理能力。在分析计算中,21c 提供了两种新的分布聚类算法,偏态 - SKEWNESS、峰度 - KURTOSIS,通过这两个算法,可以对给定数据进行更丰富的分布计算,新特性支持物化视图,遵循和方差(VARIANCE)相同的语义。在21c中,Oracle 还增加了 CHECKSUM 函数,用于检测数据的完整性,这个函数可以用于替代 DBMS_SQLHASH.GETHASH 函数,DBA不必再为此进行单独授权。新的位运算符也被引入,21c 中支持的新的位运算包括:BIT_AND_AGG、BIT_OR_AGG、BIT_XOR_AGG 。对于分析函数,Oracle 21c 扩展了窗口边界,通过 GROUPS 关键字可以进行特定分组数据的计数。关键字GROUPS强调与分组查询的关系,使用GROUPS关键字,我们可以回答诸如,每个交易账号执行"购买"的最后五个交易日中,花费的金额和 以及 购买的不同股票代码的数量等。
6. 自动化的In-Memory 管理 - Self-Managing In-Memory
In-Memory 技术引入之后,为Oracle数据库带来了基于内存的列式存储能力,支持 OLTP 和 OLAP 混合的计算。在 21c 中,Oracle 支持了自主的In-Memory 管理,通过一个简单的初始化参数 inmemory_automatic_level 设置,DBA将不再需要人工指定将哪些数据表放置在内存中,数据库将自动判断需要将哪些对象加入或驱逐出In-Memory的列式存储中。内存对象的管理,是通过数据库内置的机器学习算法自动实现的,并且数据库可以进一步的自动压缩较少访问的内存列数据。inmemory_automatic_level = HIGH 设置,可以用于指定高度的自动的内存管理级别。
7. 广泛的机器学习算法和AutoML支持
在Oracle 21c中,更多的机器学习算法被加入进来,实现了更广泛的机器学习算法支持。极限梯度助推树 - eXtreme Gradient Boosting Trees(XGBoost) 的数据库实现,以及各种算法,如分类(Classification)、回归(regression)、排行(ranking)、生存分析(survial analysitic)等;MSET-SPRT 支持传感器、物联网数据源的异常检测等,非线性、非参数异常检测ML技术;
此外,Oracle机器学习算法支持各种语言,例如 OML4SQL、OML4Py、OML4R,其中AutoML 针对 Python 提供了全面支持。
8. 多租户细粒度资源模型 - New Resource Modeling Scheme
在21c之前,多租户的数据库管理是服务驱动的,通过服务来决定PDB的资源放置,PDB的开启也是通过服务来进行隐式驱动的。在集群环境中,这就存在一个问题,PDB 可能被放置在某个资源紧张的服务器上,服务驱动的模型并不完善。在 21c 中,Oracle 引入了细粒度的资源模型,将负载和 PDB 的重要性等引入管理视角。例如,用户可以通过Cardinality 和 Rank 定义,改变 PDB 的优先级,在数据库启动时,优先打开优先级别高的PDB。除此之外,在 PDB 打开之前,数据库会检查主机运行负载、可用性、CPU数量和CPU速度等信息,以科学判定应该在什么节点以什么顺序启动PDB。关于多租户的另外一个改变是:在 21c 中,Non-CDB 模式将不再被支持(可以使用非多租户环境,但是没有官方支持),这将强制推动用户使用多租户特性。
在 Oracle 19c 的授权文件中,有这样的描述:你可以使用 3 个PDB的多租户环境而不需要License,超过 3个 PDB则需要额外的授权。“For all offerings, if you are not licensed for Oracle Multitenant, then you may have up to 3 PDBs in a given container database at any time.”
9. 零影响的计划停机维护 - Zero Downtime for Planned Outages
在 Oracle 不同版本的不断演进中,一直在加强数据库的可用性能力。在 21c 中,对于计划停机维护或者滚动升级等,Oracle 通过 Smart DRM 等特性以实现对应用的零影响。对于维护操作,数据库可以在实例关闭前进行动态的资源重分配,这一特性被称为 Smart DRM,通过GRD的动态资源重组织,重新选出的Master节点不需要进行任何的恢复和维护,对于应用做到了完全无感知、无影响。
10. In-Memory 的 Spatial 和 Text 支持
针对 Oracle 数据库内置的多模特性,地理信息 -Spatial 和 全文检索 - Text 组件,在 21c 中,通过 In-Memory 的内存特性,获得了进一步的支持。对于空间数据,Oracle 在内存中为空间列增加空间摘要信息(仅限于内存中,无需外部存储),通过 SIMD 矢量快速过滤、替换 R-Tree 索引等手段,以加速空间数据查询检索,可以将查询速度提升10倍。针对全文检索(Text),在内存中将倒排索引添加到每个文本列,同时通过将单词映射到包含单词的文档,以内存替换原来的磁盘索引,从而加速全文检索的性能。通过结合关系数据和文本的混合查询,全文检索可以获得 3倍以上的性能提升。
总结
Oracle 数据库仍然在持续创新,沿着 多模、软硬结合、智能化 等方向深入演化,在 2021年发布的年度创新版本 Oracle Database 21c 相信还会引发大家的广泛关注。墨天轮原文链接:https://www.modb.pro/db/41888(复制到浏览器中打开或者点击“阅读原文”立即查看)