作者 | 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 23ai。Oracle 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 分钟左右的分享时间,就大概聊了聊,也可能是第一次参加,难免过于激动和紧张,很多干货没来得及讲,这里将分享本次演讲的脑图,感兴趣的朋友可以来看看。
微信公众号有压缩,可能不是很清晰,可在本公众号后台回复【23ai新特性】获取本图高清大图。
目前本地化 free 安装方式有三种,前面一篇文章已经详细介绍过了,这里就不在多说了。
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 "的新内存区域。
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.
参考链接
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
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
分享几个数据库备份脚本
一文搞懂 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
————————————————————————————