Database 23c

Oracle Database 23c 提供全面、简单易用的融合数据库,能够帮助开发人员轻松构建全新的微服务、图形、文档和关系型应用。

我们将每周分享一个 Oracle Database 23c 新特性,通过详细示例带您快速入门。请收藏本页面,每周第一时间查看 Oracle Database 23c 精选特性。

精选特性

数据库驱动程序异步编程和管道

Oracle Database 23c 中的管道功能使 .NET、Java 和 C/C++ 应用无需等待服务器响应即可向数据库发送多个请求。Oracle Database 将对这些请求进行排队并逐个处理,以便客户端应用可以继续工作,直到收到请求完成通知。这些增强功能可改善最终用户体验、提高数据驱动的应用的响应能力,提供端到端可扩展性,避免性能瓶颈,并提高服务器和客户端的资源利用效率。

对于需要立即返回的客户端请求,Oracle Database 管道要求 .NET、Java 和 C/C++ 驱动程序中具备异步或响应式 API。这些机制可用于 Oracle Database,无论是否使用数据库管道。

对于 Java,Oracle Database 23c 在 Java Database Connectivity (JDBC)、Universal Connection Pool (UCP) 和 Oracle R2DBC Driver 中提供响应式扩展。它还支持驱动程序 (Project Loom) 中的 Java 虚拟线程以及 Reactive Streams 库,例如 Reactor、RxJava、Akka Streams、Vert.x 等。

区块链表

区块链和不可变表(自 Oracle Database 19c 起可用)可使用加密安全方法保护数据,防止数据被外部黑客和内部恶意/泄露账户篡改或删除。它能够通过仅插入限制来防止非授权更新或删除(即使是 DBA 操作),利用加密哈希链实施身份验证,基于签名表摘要检测任何大规模回滚,支持最终用户使用私钥对插入的行进行签名。时至今日,Oracle Database 23c 带来了丰富的增强功能,包括逻辑复制(基于 Oracle GoldenGate)和滚动升级(基于 Oracle Active Data Guard)支持;分布式事务(涉及区块链表)支持;高效、基于分区的批量删除(适用于过期的行);以及插入/提交性能优化。

Oracle Database 23c 还支持添加/删除列(不影响加密哈希链、用户特定链和关于筛选行的表摘要)、委托签名功能和数据库反签名;还使用 Oracle Flashback 和区块链历史表审计非区块链表历史变更,将加密安全数据管理扩展到了常规表。

这些功能尤其适合内置审计迹或日志使用场景,能够有效满足财务分类账、付款历史、监管合规性跟踪、法律日志和所有表示资产的数据的保护需求,防止非授权篡改和删除操作导致重大法律、商誉或财务损失。



布尔数据类型

Oracle Database 现支持符合 ISO SQL 标准的布尔数据类型,您可以在表中存储 True(真)和 False(假)值,在 SQL 语句中使用布尔表达式。布尔数据类型能够以标准化方式存储 Yes 和 No 值,且可以轻松迁移至 Oracle Database。



在 UPDATE 和 DELETE 语句中直接连接数据库表

Oracle Database 现支持您在 UPDATE 和 DELETE 语句中使用 FROM 子句将目标表连接到其它表。这些其它表可以限定可更改哪些行或为哪些行赋予新值。利用这一直接连接特性,您可以更轻松地编写 SQL 语句来更改和删除数据。



DB_DEVELOPER_ROLE

Oracle Database 23c 新推出了一个新角色 DB_DEVELOPER_ROLE,它能够为应用开发人员提供在 Oracle Database 上设计、实施、调试和部署应用所需的所有权限,无需管理员再主观猜测应用开发需要哪些权限。





快速摄取增强功能

我们在 Memoptimized Rowstore Fast Ingest 中引入增强功能,支持分区、压缩表、使用直接写入快速刷新以及直接内存中列存储填充。这些增强功能使 Fast Ingest 功能适用于更多需要快速摄取数据的情况。现在,Oracle Database 可以更好地支持需要快速数据摄取功能的应用。数据摄取后,您可以在同一数据库中处理所有数据。这将减少对特殊加载环境的需求,从而降低复杂性和数据冗余。



GROUP BY 列别名

现在您可以在 GROUP BY、GROUP BY CUBE、GROUP BY ROLLUP 和 GROUP BY GROUPING SETS 子句中使用列别名或指定 SELECT 项位置。此外,HAVING 子句也支持列别名。这些新的 Database 23c 增强功能可帮助您更轻松地编写 GROUP BY 和 HAVING 子句,从而提高 SQL 查询的可读性和可维护性,并提高 SQL 代码的可移植性。



IF [NOT] EXISTS

Oracle Database 中的 DDL 对象创建、修改和删除现已支持 IF EXISTS 和 IF NOT EXISTS 语法修饰符。由此,您可以控制当一个给定对象存在或不存在时是否报错,在脚本中按应用简化错误处理。



JavaScript 存储过程

多语言引擎 (MLE) 模块调用功能支持开发人员在 SQL 和 PL/SQL 中调用模块中存储的 JavaScript 函数。基于 PL/SQL 编写的调用规范能够将 JavaScript 链接到 PL/SQL 代码单元。这意味着开发人员可以在任何调用了 PL/SQL 函数的位置使用 JavaScript 函数。



JSON 二进制数据类型

JSON 数据类型是经过 Oracle 优化的二进制 JSON 格式,称为 OSON。它旨在提高数据库和数据库客户端(21c 及更高版本)的查询速度和 DML 性能。



JSON Relational Duality 视图

JSON Relational Duality 是 Oracle Database 23c 引入的一个创新特性,它能够统一关系和文档数据模型,将两者优势结合在一起。这意味着,开发人员可以基于单一信息源构建关系模式或 JSON 模式应用,同时获得这两种模型的优势。他们只需进行一次数据存储,即可使用任一方法访问、写入和修改数据。此外,开发人员还能够充分利用符合 ACID 规则的事务处理和并发控制,不再需要在复杂的对象关系映射或数据不一致问题之间进行取舍。



JSON Schema

Oracle Database 支持使用 JSON 来存储和处理弹性模式的数据。在新版本的 Oracle Database 23c 中,Oracle Database 现已支持使用 JSON Schema 来验证 JSON 数据的结构和值。SQL 运算符 IS JSON 经过增强,可以接受 JSON Schema,并且添加了各种 PL/SQL 函数来验证 JSON 并将数据库对象(如表、视图和类型)描述为 JSON Schema 文档。

默认情况下,JSON 数据是无模式的,这带来了极大的灵活性。但是,如果您需要确保 JSON 数据具有特定的结构和类型,可以通过行业标准的 JSON Schema 验证来完成。

为 JSON Schema 开发做出贡献
Oracle 积极推动 JSON Schema 开发,这是一款开发工具,它将基于 JSON 的声明式语言实现标准化,支持您批注和验证 JSON 文档。JSON Schema 目前正处于请求注解 (RFC) 阶段。



Kafka API

Oracle Database 23c 提供更精细的 Oracle Database 与 Apache Kafka 应用兼容性,支持轻松将 Kafka Java 应用迁移至 Transactional Event Queues (TxEventQ)。这意味着 Kafka Java API 现在可以连接 Oracle Database 服务器,使用 TxEventQ 作为消息传递平台。

开发人员可以使用 JDBC 瘦驱动程序,轻松将现有的使用 Kafka 的 Java 应用迁移至 Oracle Database。同时,利用 Oracle Database 23c 的客户端库功能,Kafka 应用可以连接 Oracle Database(而非 Kafka 集群),并透明地使用 TxEventQ 作为消息传递平台。



无锁列值保留

Lock-Free Reservations 特性可确保并发事务在频繁更新行时继续无阻滞运行。顾名思义,Lock-Free Reservations 支持对行进行无锁保留(而不是锁定行),能够验证更新能否成功,延迟更新直到事务提交时间。Lock-Free Reservations 可有效改善用户体验,提高事务并发性能。



可操作属性图

Oracle Database 原生支持属性图数据结构和图形查询。如果您希望灵活地基于事务数据、JSON、Spatial 和其它类型数据构建图形,Oracle Database 是您的理想之选。现在,开发人员可以在 Oracle Database 中使用现有 SQL 开发工具和框架轻松构建图形应用。



PL/SQL JSON 构造函数支持聚合类型

PL/SQL JSON 构造函数经过增强,可以接受对应的 PL/SQL 聚合类型实例,返回填充了聚合类型数据的 JSON 对象或数组类型。

PL/SQL JSON_VALUE 运算符经过增强,它的返回子句可以接受类型名称,后者用于定义运算符要返回的实例的类型。JSON 构造函数支持聚合数据类型,这简化了 PL/SQL 应用与支持 JSON 的语言之间的数据交换。



RETURNING INTO 子句

INSERT、UPDATE 和 DELETE 语句的 RETURNING INTO 子句经过增强,可以返回受相应语句影响的旧值和新值。开发人员可以对每个 DML 类型使用相同的逻辑来获取语句执行前和执行后的值。旧值和新值仅对 UPDATE 语句有效。INSERT 语句不返回旧值,DELETE 语句不返回新值。

作为 SQL 命令执行的一部分,该子句能够获取受 INSERT、UPDATE 和 DELETE 语句影响的旧值和新值,这为开发人员提供了读取这些值的统一方法,并减少了数据库必须执行的工作量。



模式权限

除了现有的对象、系统和管理权限外,Oracle Database 如今还支持模式权限。模式权限特性可以简化数据库对象授权,有助于更好地实施最小权限原则,消除关于访问权限的主观猜测,进而提高安全性。



SELECT 语句不带 FROM 子句

您现在可以运行只有 SELECT 表达式(不带 FROM 子句)的查询。这个新特性可提高 SQL 代码可移植性并便于开发人员使用。



SQL 宏

通过创建 SQL 宏,您可以将常见 SQL 表达式和语句分解为可在其它 SQL 语句中重用的参数化构造。SQL 宏既可以是标量表达式(常用于 SELECT 列表以及 WHERE、GROUP BY 和 HAVING 子句),也可以是表表达式(常用于 FROM 子句),还可以用于封装计算和业务逻辑。相比 PL/SQL 结构,SQL 宏可以显著提升性能,还可以提高开发人员效率,简化协作开发和优化代码质量。



SQL Firewall

使用 SQL Firewall 检测异常并防止 SQL 注入攻击。SQL Firewall 会检查所有 SQL,包括 IP 地址和操作系统用户等会话上下文信息。它嵌入到数据库内核中,将记录和(如果启用)阻止未经授权的 SQL,确保自身无法被绕过。通过实施 SQL 和经过批准的会话上下文允许列表,SQL Firewall 可以预防许多零日攻击,并降低凭证被盗用或滥用的风险。



表值构造函数

Oracle Database SQL 引擎现支持对多种语句类型使用 VALUES 子句,帮助您在不依赖现有表的情况下使用新语法指定数据行,从而动态地实现数据行实体化。Oracle Database 23c 支持对 SELECT、INSERT 和 MERGE 语句使用 VALUES 子句。利用新引入的 VALUES 子句,开发人员无需再编写大量代码来执行即席 SQL 指令,因此这在提高可读性的同时也减少了开发人员工作量。



使用注解

注解可帮助您更好地存储和检索数据库对象元数据。作为一种自由格式文本字段,它们支持您自定义业务逻辑或用户界面。利用注解(名值对或仅仅一个名称),您可以在所有应用中一致地使用数据库对象,简化开发工作并提高数据质量。



注:为免疑义,本网页所用以下术语专指以下含义:

  1. Oracle专指Oracle境外公司而非甲骨文中国。
  2. 相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。