摘要:Oracle 考虑到 2020 年我们的客户将面临前所未有的经济和业务中断。我们决定不将 Database 20c Preview 版本升级为 General Availability。 相反,我们将所有 20c 功能都合并到 21c 版本中,并使 21c 在我们的 “自制数据库免费层” 中可用,以便所有人都可以免费试用驱动新功能和增强功能。
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 ;
很多客户希望在不涉及多个组织的情况下, 利用区块链的防篡改和不可否认属性,区块链表使客户可以在需要高度防篡改的数据管理,而又无需在多个组织中分布分类帐或依靠分散的信任模型时使用 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 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;
Macro 函数被查询改写为如下执行:
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
总结一下 SQL Macro 的意义:
?SQL 宏提供了一个基于 SQL 的简单框架,用于封装业务 / 技术逻辑
- 无需在查询中调用自定义 PL SQL 过程和函数
? 可以在 SQL 语句内的任何地方使用;
? 自动继承所有常用的数据库内查询优化;
? 可以建立参数化视图;
? 简化从非 Oracle 数据库迁移到 Oracle 数据库;
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 中支持的新的位运算包括:BITANDAGG、BITORAGG、BITXORAGG 。
对于分析函数,Oracle 21c 扩展了窗口边界,通过 GROUPS 关键字可以进行特定分组数据的计数。
关键字 GROUPS 强调与分组查询的关系,使用 GROUPS 关键字,我们可以回答诸如,每个交易帐号执行 "购买" 的最后五个交易日中,花费的金额和 以及 购买的不同股票代码的数量等。
6. 自动化的 In-Memory 管理 - Self-Managing In-Memory
In-Memory 技术引入之后,为 Oracle 数据库带来了基于内存的列式存储能力,支持 OLTP 和 OLAP 混合的计算。
在 21c 中,Oracle 支持了自主的 In-Memory 管理,通过一个简单的初始化参数 inmemoryautomaticlevel 设置,DBA 将不再需要人工指定将哪些数据表放置在内存中,数据库将自动判断需要将哪些对象加入或驱逐出 In-Memory 的列式存储中。
内存对象的管理,是通过数据库内置的机器学习算法自动实现的,并且数据库可以进一步的自动压缩较少访问的内存列数据。
inmemoryautomaticlevel = HIGH 设置,可以用于指定高度的自动的内存管理级别。
7. 广泛的机器学习算法和 AutoML 支持
...
? 接下来内容请访问原文(https://www.modb.pro/db/41888)进行查看~
更多数据库相关内容,可访问墨天轮(https://www.modb.pro/)进行浏览。