在2020年2月14日,Oracle 正式宣布在 Oracle Cloud 发布 Database 20c 的预览版,同时发布了所有的官方文档。
为了和大家及时分享关于 Oracle 20c 引人瞩目的新特性,我们特别邀请了 杨廷琨 老师,将于2月18日,进行关于 20c 新特性的在线直播,报名地址:
https://www.modb.pro/event/103
另外,我将20c的官方文档转存了一份到百度云,如果你下载官网缓慢,在公众号后台回复:20cDoc 你能找到下载链接。
此外,我们的 DBASK 小程序专栏也已经就绪,大量 20c 新特性文档都会定期聚集,欢迎关注学习。
早在 2019年,我曾经撰写过 『Oracle Database 20c 十大新特性一览』,现在 20c 发布了,我更新一下这篇文章,以飨读者!
历史回顾:
Oracle Database 20c 新特性:
1.原生的区块链支持 - Native Blockchain Tables
随着区块链技术的不断成熟和发展,Oracle 在其多模的数据库支持中,引入了原生的区块链表支持。
在 20c 中数据库中可以通过 blockchain 关键字来创建区块链表:
CREATE Blockchain TABLE <blockchain_table_name>;
很多客户希望在不涉及多个组织的情况下利用区块链的防篡改和不可否认属性,区块链表使客户可以在需要高度防篡改的数据管理,而又无需在多个组织中分布分类帐或依靠分散的信任模型时使用Oracle数据库。
为了遵循区块链的可信和安全机制,区块链表只能INSERT 记录,而不能修改,同时链可以被多方参与者验证。
区块链表中的行是防篡改的。每行包含一个密码哈希值,该值基于该行中的数据和链中上一行的哈希值。如果某行被篡改,则该行的哈希值会更改,这会导致链中下一行的哈希值发生更改。为了增强欺诈保护,可以将可选的用户签名添加到行中。如果您在区块链表行上签名,则必须使用数字证书。在验证区块链表中的链时,数据库需要证书来验证行签名。
下图是区块链表的示意图:
可以对区块链表进行索引和分区。您可以通过建表时的选项控制是否以及何时从区块链表中删除行。您还可以控制是否可以删除区块链表。区块链表可与事务和查询中的(常规)表一起使用。
区块链表用于实施集中式区块链应用程序,其中中央权限是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就已经开始修改程序以更好的配合持久化内存,提升数据库性能。
在20c中,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获得进一步的概括和抽象能力,允许开发者将复杂的处理逻辑通过宏进行定义,然后在后续程序处理中可以反复引用这一定义。
在 20c 中引入的 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;
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
14 rows selected.
总结一下 SQL Macro 的意义:
•SQL宏提供了一个基于SQL的简单框架,用于封装业务/技术逻辑
-无需在查询中调用自定义PL / SQL过程和函数
•可以在SQL语句内的任何地方使用;
•自动继承所有常用的数据库内查询优化;
•可以建立参数化视图;
•简化从非Oracle数据库迁移到Oracle数据库;
4.SQL新特性和函数扩展 - Extensions
在 Oracle 20c中,关于SQL的函数扩展很多,包括对于 ANSI 2011 标准的部分支持,进一步的提升了 SQL 的处理能力。
在分析计算中,20c 提供了两种新的分布聚类算法,偏态 - SKEWNESS、峰度 - KURTOSIS,通过这两个算法,可以对给定数据进行更丰富的分布计算,新特性支持物化视图,遵循和方差(VARIANCE)相同的语义。
在20c中,Oracle 还增加了 CHECKSUM 函数,用于检测数据的完整性,这个函数可以用于替代 DBMS_SQLHASH.GETHASH 函数,DBA不必再为此进行单独授权。
关于CHECKSUM函数,简单的形态如下,大家可以思考一下其有用的场景:
SQL> select checksum(all(ename)) from emp;
CHECKSUM(ALL(ENAME))
--------------------
60288
SQL> update emp set ename='EYGLE' where ename='FORD';
1 row updated.
SQL> select checksum(all(ename)) from emp;
CHECKSUM(ALL(ENAME))
--------------------
401727
SQL> rollback;
Rollback complete.
SQL> select checksum(all(ename)) from emp;
CHECKSUM(ALL(ENAME))
--------------------
60288
新的位运算符也被引入,20c 中支持的新的位运算包括:BIT_AND_AGG、BIT_OR_AGG、BIT_XOR_AGG 。
对于分析函数,Oracle 20c 扩展了窗口边界,通过 GROUPS 关键字可以进行特定分组数据的计数。
关键字GROUPS强调与分组查询的关系,使用GROUPS关键字,我们可以回答诸如,每个交易帐号执行“购买”的最后五个交易日中,花费的金额和 以及 购买的不同股票代码的数量等。
5.自动化的In-Memory 管理 - Self-Managing In-Memory
In-Memory 技术引入之后,为Oracle数据库带来了基于内存的列式存储能力,支持 OLTP 和 OLAP 混合的计算。
在 20c 中,Oracle 支持了自主的In-Memory 管理,通过一个简单的初始化参数 inmemory_automatic_level 设置,DBA将不再需要人工指定将哪些数据表放置在内存中,数据库将自动判断需要将哪些对象加入或驱逐出In-Memory的列式存储中。
内存对象的管理,是通过数据库内置的机器学习算法自动实现的,并且数据库可以进一步的自动压缩较少访问的内存列数据。
inmemory_automatic_level = HIGH 设置,可以用于指定高度的自动的内存管理级别。
6.广泛的机器学习算法和AutoML支持
在Oracle 20c中,更多的机器学习算法被加入进来,实现了更广泛的机器学习算法支持。
极限梯度助推树 - eXtreme Gradient Boosting Trees(XGBoost) 的数据库实现,以及各种算法,如分类(Classification)、回归(regression)、排行(ranking)、生存分析(survial analysitic)等;
MSET-SPRT 支持传感器、物联网数据源的异常检测等,非线性、非参数异常检测ML技术;
此外,Oracle机器学习算法支持各种语言,例如 OML4SQL、OML4Py、OML4R,其中AutoML 针对 Python 提供了全面支持。
7.多租户细粒度资源模型 - New Resource Modeling Scheme
在20c之前,多租户的数据库管理是服务驱动的,通过服务来决定PDB的资源放置,PDB的开启也是通过服务来进行隐式驱动的。
在集群环境中,这就存在一个问题,PDB 可能被放置在某个资源紧张的服务器上,服务驱动的模型并不完善。
在 20c 中,Oracle 引入了细粒度的资源模型,将负载和 PDB 的重要性等引入管理视角。例如,用户可以通过Cardinality 和 Rank 定义,改变 PDB 的优先级,在数据库启动时,优先打开优先级别高的PDB。
除此之外,在 PDB 打开之前,数据库会检查主机运行负载、可用性、CPU数量和CPU速度等信息,以科学判定应该在什么节点以什么顺序启动PDB。
关于多租户的另外一个改变是:在 20c 中,Non-CDB 模式将不再被支持,这将强制推动用户使用多租户特性。
在 Oracle 20c 的授权文件中,有这样的描述:你可以使用 3 个PDB的多租户环境而不需要License,超过 3个 PDB则需要额外的授权。
“For all offerings, if you are not licensed for Oracle Multitenant, then you may have up to 3 user-created PDBs in a given container database at any time.”
Oracle
8.零影响的计划停机维护 - Zero Downtime for Planned Outages
在 Oracle 不同版本的不断演进中,一直在加强数据库的可用性能力。在 20c 中,对于计划停机维护或者滚动升级等,Oracle 通过 Smart DRM 等特性以实现对应用的零影响。
对于维护操作,数据库可以在实例关闭前进行动态的资源重分配,这一特性被称为 Smart DRM,通过GRD的动态资源重组织,重新选出的Master节点不需要进行任何的恢复和维护,对于应用做到了完全无感知、无影响。
9.In-Memory 的 Spatial 和 Text 支持
针对 Oracle 数据库内置的多模特性,地理信息 -Spatial 和 全文检索 - Text 组件,在 20c 中,通过 In-Memory 的内存特性,获得了进一步的支持。
对于空间数据,Oracle 在内存中为空间列增加空间摘要信息(仅限于内存中,无需外部存储),通过 SIMD 矢量快速过滤、替换 R-Tree 索引等手段,以加速空间数据查询检索,可以将查询速度提升10倍。
针对全文检索(Text),在内存中将倒排索引添加到每个文本列,同时通过将单词映射到包含单词的文档,以内存替换原来的磁盘索引,从而加速全文检索的性能。通过结合关系数据和文本的混合查询,全文检索可以获得 3倍以上的性能提升。
10.备库的 Result Cache 支持 - Standby Result Cache
在 Oracle 12.2 和 18c 中,已经实现了 ADG 的 会话连接保持 和 Buffer Cache保持,在 20c 中,Result Cache 在备库上进一步得以保留,以确保这个细节特性的主备性能通过。
Result Cache 特性是指,对于特定查询(例如结果集不变化的),将查询结果保留在内存中,对于反复查询(尤其是大规模聚合)的语句,其成本几乎降低为 0 。
Oracle 20c 已经来了,让我们一起加速学习吧!
DBASK,DBA的即时问答平台
资源下载
关注公众号:数据和云(OraNews)回复关键字获取
help,30万+下载的完整菜单栏
2019DTCC,数据库大会PPT
2018DTCC , 数据库大会PPT
2018DTC,2018 DTC 大会 PPT
ENMOBK,《Oracle性能优化与诊断案例》
DBALIFE,“DBA 的一天”海报
DBA04,DBA 手记4 电子书
122ARCH,Oracle 12.2体系结构图
2018OOW,Oracle OpenWorld 资料
产品推荐
云和恩墨zData一体机现已发布超融合版本和精简版,支持各种简化场景部署,零数据丢失备份一体机ZDBM也已发布,欢迎关注。
云和恩墨大讲堂 | 一个分享交流的地方
长按,识别二维码,加入万人交流社群
请备注:云和恩墨大讲堂