478c969f4122637dbe418257ff7fe984.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,江湖人称“强哥”,荣获 Oracle ACE 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle 11g OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来聊聊 Oracle 23 ai 新特性、相关更改和停用功能,欢迎点击最上方蓝字“JiekeXu DBA之路”关注我的微信公众号,然后点击右上方三个点“设为星标”顶,更多干货文章才能第一时间推送,谢谢!

前  言

北京时间 2024年 5 月 3 日凌晨,Oracle Database 23c 更名为 Oracle Database 23aiOracle Database 23ai 是 Oracle Database 的下一个长期支持版本,它包括300 多项新功能,重点关注人工智能(AI)和开发人员的工作效率。人工智能矢量搜索等功能使您能够利用新一代人工智能模型来生成和存储文档、图像、声音等矢量;对它们进行索引并快速查找相似性,同时利用 Oracle 数据库的现有分析功能。这与已经广泛使用的机器学习算法集相结合,使您能够快速创建复杂的人工智能应用。Oracle Database 23ai 还使用人工智能来优化许多关键数据库功能,以便对时间安排和资源成本做出更准确的估计。

现在,以开发人员为重点的新功能使构建使用JSON或关系开发方法或两者交替使用的下一代应用变得更加简单。新的微服务和消息传递功能改进了Oracle数据库对这一关键设计方法的广泛支持。如果您由于法规或性能要求而需要对数据库进行分发或分片,Oracle Database 23ai 添加了新的 RAFT 协议支持,使其比以往更加轻松。

Oracle Database 23ai 还对 SQL 和 PL/SQL 进行了重大改进,引入了新的数据类型和语言增强功能,以创建新的或改进现有的 OLTP 或分析应用程序。Oracle 数据库被广泛认为是业界最安全的数据库,SQL Firewall 等许多新功能使您能够准确控制针对数据库执行的 SQL。

为了帮助 DBA,Oracle Database 23ai 进一步完善了许多关键管理任务,降低了复杂性,提高了性能,并引入了新功能来简化任务,如回收表空间中的可用空间。Oracle 数据库还在基础架构层面(采用 True Cache 等技术)和 SQL 层面增加了新的性能改进,确保某些语句的执行速度提高数倍。

正  文

5 月 10 日晚,应墨天轮相邀,第一次参加“墨天轮数据库沙龙-Oracle 23c to 23ai 专题直播活动”,也是第一次与 Roger、总监、姚老师三位大佬同台参与直播活动,更是我个人在公共平台的第一次露脸,这里参与讨论 Oracle 23ai 相关的技术话题,主要介绍新特性能与开发者体验上的更新、AI相关功能、Oracle 产品路线等话题展开分享,我也参与了本次分享,主题有如下四点:

  • Oracle 23ai 新特性技术解读

  • Oracle 23ai 新特性应用实践

  • Oracle 23ai 新特性总结展望

  • Oracle 23ai 有哪些AI相关的功能或特性

由于时间的关系,我这里只有 20 分钟左右的分享时间,就大概聊了聊,也可能是第一次参加,难免过于激动和紧张,很多干货没来得及讲,这里将分享本次演讲的脑图,感兴趣的朋友可以来看看。

b0f79da13634eb4659ef9d4a75828be7.png

微信公众号有压缩,可能不是很清晰,可在本公众号后台回复【23ai新特性】获取本图高清大图。

目前本地化 free 安装方式有三种,前面一篇文章已经详细介绍过了,这里就不在多说了。

fb91108fff88ea0ff8ddc0a84b4181ee.png

Ai 向量新特性演示

CREATE TABLE test.docs (doc_id INT,doc_text CLOB,doc_vector VECTOR);
INSERT INTO test.docs VALUES (1,'Here is a simple example:Insert Vectors in a Database Table Using the INSERT Statement.', '[0,2,2,0,0]');
INSERT INTO test.docs VALUES (1,'Here is a simple example:Insert Vectors in a Database Table Using the INSERT Statement 2.', '[1,1,1,0,0]');
commit;

要允许创建向量索引,必须启用 SGA 中存储的名为 "vector pool "的新内存区域。

868a28417bb8af71fbcc4be3a07161a9.png

Vector Pool 是 SGA 中分配的内存,用于存储分层导航小世界 Hierarchical Navigable Small World(HNSW)矢量索引和所有相关元数据。它还用于加快反转平面文件(IVF)索引的创建速度,以及对带有 IVF 索引的基础表进行 DML 操作的速度。

ALTER SYSTEM SET vector_memory_size=500M SCOPE=spfile;
CREATE VECTOR INDEX test.vector_index_docvector ON test.docs (DOC_VECTOR)
ORGANIZATION INMEMORY NEIGHBOR GRAPH;

要调整向量池的大小,请使用 initialization 参数。您可以动态修改此参数内容:

  • 在 CDB 级别指定 矢量池的当前大小。如果存在当前,则减小参数值将失败 矢量用法。

  • 在 PDB 级别指定 PDB 允许的最大矢量池使用量。允许减小参数值 即使当前向量使用量超过新配额。

您可以通过以下方式更改参数文件中的参数值:

  • 通过编辑初始化参数文件。在大多数情况下,新值将在下次启动数据库实例时生效。

  • 通过发出语句来更新服务器参数文件。ALTER SYSTEM SET ... SCOPE=SPFILE

  • 通过发出语句来清除初始化参数值并将其设置回默认值。ALTER SYSTEM RESET

向量索引是一类专门的索引数据结构,用于高效地存储和搜索高维向量数据。向量索引组织向量数据的方式是将相似项(相似性由两个向量之间的距离来定义)分组在一起,从而使搜索过程极其高效。与传统数据库索引不同,向量索引通常用于大型数据集,以执行近似相似性搜索,并根据应用需求在查询准确性和查询性能之间进行权衡。

这一功能可为人工智能驱动的应用提供高效的相似性搜索和更快的查询性能。此外,向量索引的可扩展性和对高维数据的支持提高了分析洞察力,并能带来明智的决策和商业竞争优势。

schema 级别新特性演示

export ORACLE_PDB_SID=FREEPDB1
sqlplus / as sysdba
select sysdate;
alter session set container=freepdb1;
set line 345 pages 345
col name for a50
select file#,status,name,bytes/1024/1024 MB from v$datafile;
create user JiekeXu identified by Oracle23Ai default tablespace JiekeXu;
grant connect,resource,unlimited tablespace to JiekeXu;


--创建只读用户
create user JiekeXu_sel identified by Oracle23Ai default tablespace users;
grant connect to JiekeXu_sel;
--创建表
CREATE TABLE IF NOT EXISTS JiekeXu.Customers (ID NUMBER(10), Name VARCHAR2(100)); 
insert into  JiekeXu.Customers values(1,'jiekexu'),(2,'modb'),(3,'DBA'); 
commit;
drop table IF EXISTS JiekeXu.Customers;
drop table IF EXISTS JiekeXu.Customers; 


--赋权 schema 级别
grant select any table on schema JIEKEXU to JIEKEXU_SEL;

开发者角色

DB_DEVELOPER_ROLE 角色提供了应用程序开发人员所需的大部分系统权限、对象权限、预定义角色、PL/SQL 包权限和跟踪权限。

应用程序开发人员需要大量这些权限来设计、开发和部署应用程序。Oracle 建议授予应用程序开发人员 DB_DEVELOPER_ROLE 角色,而不是单独授予这些权限或授予用户 DBA 角色。授予应用程序用户 DB_DEVELOPER_ROLE 角色不仅符合最小权限原则并确保开发环境的更高安全性,而且还便于管理应用程序用户的角色授予和撤销。DB_DEVELOPER_ROLE 角色可在 CDB 或 PDB 中使用。请勿修改 DB_DEVELOPER_ROLE。

示例:

GRANT DB_DEVELOPER_ROLE TO test;
SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE='TEST';
REVOKE DB_DEVELOPER_ROLE FROM TEST;

查看 DB_DEVELOPER_ROLE 角色都有哪些权限。

set serveroutput on format wrapped;
DECLARE
    procedure printRolePrivileges(
      p_role             in varchar2,
      p_spaces_to_indent in number) IS
      v_child_roles   DBMS_SQL.VARCHAR2_TABLE;
      v_system_privs  DBMS_SQL.VARCHAR2_TABLE;
      v_table_privs   DBMS_SQL.VARCHAR2_TABLE;
      v_indent_spaces varchar2(2048);
    BEGIN
      -- Indentation for nested privileges via granted roles.
      for space in 1..p_spaces_to_indent LOOP
        v_indent_spaces := v_indent_spaces || ' ';
      end LOOP;
      -- Get the system privileges granted to p_role
      select PRIVILEGE bulk collect into v_system_privs
      from DBA_SYS_PRIVS
      where GRANTEE = p_role
      order by PRIVILEGE;


      -- Print the system privileges granted to p_role
      for privind in 1..v_system_privs.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(
          v_indent_spaces || 'System priv: ' || v_system_privs(privind));
      END LOOP;


      -- Get the object privileges granted to p_role
      select PRIVILEGE || ' ' || OWNER || '.' || TABLE_NAME
        bulk collect into v_table_privs
      from DBA_TAB_PRIVS
      where GRANTEE = p_role
      order by TABLE_NAME asc;


      -- Print the object privileges granted to p_role
      for tabprivind in 1..v_table_privs.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(
          v_indent_spaces || 'Object priv: ' || v_table_privs(tabprivind));
      END LOOP;


      -- get all roles granted to p_role
      select GRANTED_ROLE bulk collect into v_child_roles
      from DBA_ROLE_PRIVS
      where GRANTEE = p_role
      order by GRANTED_ROLE asc;


      -- Print all roles granted to p_role and handle child roles recursively.
      for roleind in 1..v_child_roles.COUNT LOOP
        -- Print child role
        DBMS_OUTPUT.PUT_LINE(
         v_indent_spaces || 'Role priv: ' || v_child_roles(roleind));


        -- Print privileges for the child role recursively. Pass 2 additional
        -- spaces to illustrate these privileges belong to a child role.
        printRolePrivileges(v_child_roles(roleind), p_spaces_to_indent + 2);
      END LOOP;


      EXCEPTION
        when OTHERS then
          DBMS_OUTPUT.PUT_LINE('Got exception: ' || SQLERRM );


    END printRolePrivileges;


BEGIN
    printRolePrivileges('DB_DEVELOPER_ROLE', 0);
END;
/


System priv: CREATE CUBE
System priv: CREATE CUBE BUILD PROCESS
System priv: CREATE CUBE DIMENSION
System priv: CREATE DIMENSION
System priv: CREATE DOMAIN
System priv: CREATE JOB
System priv: CREATE MINING MODEL
System priv: CREATE MLE
System priv: CREATE SESSION
System priv: DEBUG CONNECT SESSION
System priv: EXECUTE DYNAMIC MLE
System priv: FORCE TRANSACTION
System priv: ON COMMIT REFRESH
Object priv: SELECT SYS.DBA_PENDING_TRANSACTIONS
Object priv: EXECUTE SYS.DBMS_REDACT
Object priv: EXECUTE SYS.DBMS_RLS
Object priv: EXECUTE SYS.DBMS_TSDP_MANAGE
Object priv: EXECUTE SYS.DBMS_TSDP_PROTECT
Object priv: EXECUTE SYS.JAVASCRIPT
Object priv: READ SYS.V_$PARAMETER
Object priv: READ SYS.V_$STATNAME
Role priv: CTXAPP
  System priv: CREATE SEQUENCE
  Object priv: EXECUTE CTXSYS.CTX_ANL
  Object priv: EXECUTE CTXSYS.CTX_DDL
  Object priv: EXECUTE CTXSYS.CTX_ENTITY
  Object priv: EXECUTE CTXSYS.CTX_OUTPUT
  Object priv: EXECUTE CTXSYS.CTX_THES
  Object priv: EXECUTE CTXSYS.CTX_ULEXER
  Object priv: INSERT CTXSYS.DR$DICTIONARY
  Object priv: DELETE CTXSYS.DR$DICTIONARY
  Object priv: SELECT CTXSYS.DR$DICTIONARY
  Object priv: UPDATE CTXSYS.DR$DICTIONARY
  Object priv: INSERT CTXSYS.DR$THS
  Object priv: INSERT CTXSYS.DR$THS_BT
  Object priv: INSERT CTXSYS.DR$THS_FPHRASE
  Object priv: UPDATE CTXSYS.DR$THS_PHRASE
  Object priv: INSERT CTXSYS.DR$THS_PHRASE
  Object priv: EXECUTE CTXSYS.DRIENTL
  Object priv: EXECUTE CTXSYS.DRITHSL
Role priv: RESOURCE
  System priv: CREATE ANALYTIC VIEW
  System priv: CREATE ATTRIBUTE DIMENSION
  System priv: CREATE CLUSTER
  System priv: CREATE HIERARCHY
  System priv: CREATE INDEXTYPE
  System priv: CREATE MATERIALIZED VIEW
  System priv: CREATE OPERATOR
  System priv: CREATE PROCEDURE
  System priv: CREATE PROPERTY GRAPH
  System priv: CREATE SEQUENCE
  System priv: CREATE SYNONYM
  System priv: CREATE TABLE
  System priv: CREATE TRIGGER
  System priv: CREATE TYPE
  System priv: CREATE VIEW
  Role priv: SODA_APP
    Object priv: EXECUTE XDB.DBMS_SODA_ADMIN
    Object priv: EXECUTE XDB.DBMS_SODA_USER_ADMIN
    Object priv: READ XDB.JSON$USER_COLLECTION_METADATA


PL/SQL procedure successfully completed.

SQL*Plus 新特性

本次也发现了 SQL*Plus 有几个新特性,比如 config、ping、oerr、set errordetails、show connection 等命令,也都非常的简洁,不过可能 free 版本和云上企业版有所差别,或者有 bug,当我在 SQL*Plus 中执行 oerr 命令时,命令结束后无法终止,各种办法都尝试了也不行,只能关闭 CRT 窗口,感觉有可能是 bug,具体特性我这里也不介绍了,上篇安装篇中有提及,感兴趣的可以去看看,或者直接阅读下面官方英文获得第一手资料。

SQL*Plus CONFIG Command  
SQL*Plus OERR Command and Improved HELP Syntax  
SQL*Plus PING Command and Command Line Option  
SQL*Plus SET ERRORDETAILS Command  
SQL*Plus SHOW CONNECTION Command
SQL*Plus ARGUMENT Command  
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/ping.html#GUID-60C4A1C5-535A-4C9B-88F7-DDE2C198FD6E
SQL> SHOW CONNECTION 
SP2-0306: Invalid option.
Help: https://docs.oracle.com/error-help/db/sp2-0306/
Usage: SHOW CONN[ECTION] NETS[ERVICENAMES] [<net_service_name 1> <net_service_name 2> ..]
SQL> 
SQL> SHOW CONNECTION NETS
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
EXTPROC_CONNECTION_DATA
FREE
LISTENER_FREE
FREEPDB1
SQL> 
SQL> ping 
Ok (0.902 msec)
SQL> ping freepdb1
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREEPDB1)))
Ok (0.725 msec)
SQL> CONFIG EXPORT TNS FILE
Generating config store JSON for Local Net Naming configuration file /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Config store JSON file generated successfully (/home/oracle/oraconfig.json)




--Oracle 23ai 版本的 SQL*Plus 显示很多错误消息的帮助 URL。
--这些链接提供了错误消息的完整描述以及应对方法。
--URL 的显示由 ERRORDETAILS 设置控制,设定范围值为 OFF、ON 和 VERBOSE,其中 ON 为默认值。
SQL> show errordetails
errordetails ON
SQL> set errordetails off


SQL> set errordetails VERBOSE


--当然也可以通过环境变量 ORA_SUPPRESS_ERROR_URL 来实现 ERRORDETAILS 的值设置,设置为ON或OFF。
--只是这个 free 版本应该不生效,可能是云上企业版才行。
export ORA_SUPPRESS_ERROR_URL=TRUE


SQL> show errordetails
errordetails OFF
SQL>
export ORA_SUPPRESS_ERROR_URL=FALSE


SQL> show errordetails
errordetails ON


SQL> oerr ORA-00600
Message: "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]"
Help: https://docs.oracle.com/error-help/db/ora-00600/
Cause: This is the generic internal error number for Oracle program
       exceptions. It indicates that a process has encountered a low-level,
       unexpected condition. The first argument is the internal message
       number. This argument and the database version number are critical in
       identifying the root cause and the potential impact to your system.
SP2-0642: SQL*Plus internal error state 2590, context 45378:32768:0
Help: https://docs.oracle.com/error-help/db/sp2-0642/
Unable to proceed


help 00600
help ora 00600
help ora-00600


废弃参数

SQL> SELECT name from v$parameter  WHERE isdeprecated = 'TRUE' ORDER BY name;


NAME
--------------------------------------------------------------------------------
active_instance_count
asm_preferred_read_failure_groups
audit_file_dest
audit_sys_operations
audit_syslog_level
audit_trail
background_dump_dest
buffer_pool_keep
buffer_pool_recycle
commit_write
cursor_space_for_time
db_block_buffers
encrypt_new_tablespaces
fast_start_io_target
instance_groups
lock_name_space
optimizer_secure_view_merging
parallel_adaptive_multi_user
plsql_debug
plsql_v2_compatibility
pre_page_sga
rdbms_server_dn
resource_manager_cpu_allocation
serial_reuse
sql_trace
txn_auto_rollback_high_priority_wait_target
txn_auto_rollback_medium_priority_wait_target
txn_auto_rollback_mode
user_dump_dest


29 rows selected.

d2db42e584150c726037a96a6a2a0564.png

40c84cb4451153f65746bb4408a63efe.png

参考链接

https://www.oracle.com/database/23ai/
https://docs.oracle.com/en/database/oracle/oracle-database/23/xeinl/index.html
https://docs.oracle.com/en/database/oracle/oracle-database/23/nfcoa/toc.htm
https://docs.oracle.com/en/database/oracle/oracle-database/23/nfcoa/application_development.html#GUID-87019-4

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

0ab2e35ac4df081f6812a26ee016d516.gif

分享几个数据库备份脚本

一文搞懂 Oracle 统计信息
 
 

我的 Oracle ACE 心路历程

MOP 系列|MOP 三种主流数据库索引简介

Oracle 主流版本不同架构下的静默安装指南
 
 

关机重启导致 ASM 磁盘丢失数据库无法启动

Oracle SQL 性能分析(SPA)原理与实战演练
 
 

Oracle 11g 升级到 19c 需要关注的几个问题

Windows 10 环境下 MySQL 8.0.33 安装指南

SQL 大全(四)|数据库迁移升级时常用 SQL 语句

OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)

Oracle 大数据量导出工具——sqluldr2 的安装与使用

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践

在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

df86a0f6bde62705f9d18110d3762fa1.jpeg

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐