oracle 21c新特性简析

oracle 21c新特性简析,第1张

21c简介

因为20年疫情的影响,20c并未发布线下版本,只在云上发布了版本;21年线下发布了21c, Oracle 21c 其实就相当于 Oracle 20c,因为 20c从未进入公众可用的版本发布。在官方的版本计划中,20c 已经被移出;且官方指出,23c将是长期稳定的版本,即23c可以取代19c,作为下一个稳定版本使用。而21c和22c只是过渡版本,学习了解其新特性即可。

安装了oracle 21c的单机版,以下是我对21c简单测试之后的发现:

1、软件安装方式

跟19c的安装一样,将21c软件包直接解压到ORACLE_HOME下,可以图形化执行./runInstaller,然后执行root.sh

或者解压之后静默安装

./runInstaller -silent -noconfig -ignorePrereq -responseFile /home/oracle/db.rsp

最后执行root.sh

整个过程5分钟左右

2、实例创建方式

众所周知,20c之后oracle不再支持非CDB,在dbca创建的过程发现【Create as Container database】已不能取消勾选,默认创建了CDB;可选是否使用独立的undo表空间

或者静默安装dbca -silent -createDatabase -responseFile dbca.rsp -ignorePreReqs

注:如果指定responsefile静默安装而不用图形化,是否可以将createAsContainerDatabase设为false,创建非CDB的21c实例?测试发现oracle果然不只是将【Create as Container database】取消勾选那么简单,dbca层面也做了限制。

responsefile改成如下配置:

dbca -silent -createDatabase -responseFile rb.rsp -ignorePreReqs

[FATAL] [DBT-10333] Container database (CDB) creation option is not selected.

CAUSE: Non-CDB creation is not supported.

ACTION: Make sure container database (CDB) option is selected.

果然无法创建非CDB,从而不再纠结

最多免费支持3个用户创建的pdb(除root容器外)

3、目录结构

与之前所有的版本不同,21c将dbs和network目录从ORACLE_HOME中剥离到ORACLE_BASE下,此举可以将实例独立出来,无疑属于一种优化

从截图可以看出,dbs在$ORACLE_BASE下,而network则在$ORACLE_BASE/homes/OraDB21Home1下

查询文档发现此变化叫做--只读Oracle主⽬录特性(ROOH),是18c开始引入的,但21c之前默认关闭此特性,需要手动开启,但为21c的唯一默认配置,ROOH的具体介绍可参考:

详解Oracle 21c 中的只读Oracle主⽬录特性 (ROOH) - 墨天轮

使用orabaseconfig和orabasehome可以分别查看dbs和network所在目录

4、新特性

(1)区块链表

区块链表提出的背景:

当今大多数应用程序都具有中央权限(银行,代管公司,交易交易所,政府办公室等),并且借助Oracle数据库中的区块链表,可以使这些应用程序更安全,而无需增加更改为托管服务器的复杂性去中心化模型

使用的基本原则:

1.空的区块链表,可以删除(drop);

2.区块链表不能建立在Root容器中;

3.NO DROP/DELETE 选项定义了区块链表的删除特性和保留期;

4.在保留期内,有数据的区块链表不能被删除(drop);

5.包含保护期内都区块链表的用户不能递归删除;

6.可以通过删除数据库,清除区块链表;

7.INSERT *** 作不会彼此阻塞,HASH 值是提交时计算的;

8.仅插入 *** 作,不允许进行任何更新和其他修改

创建和查询:

create blockchain table TEST_BLOCK_CHAIN(id int,name varchar2(10)) no drop until 31 days idle no delete locked hashing using "SHA2_512" version "v1";

select name,substr(ORABCTAB_HASH$,1,10) from TEST_BLOCK_CHAIN;

使用限制:

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)原生的 JSON 数据类型支持

12.1.0.2 引入JSON支持,允许将JSON存储在varchar2或LOB(CLOB或BLOB)中, 在21c中,Native 数据类型 “JSON ”改进了对JSON的支持。在读取或更新 *** 作时不必对JSON进行解析,而只在插入时才进行解析,JSON以内部二进制格式保存,这使得访问速度更快。读取和更新速度提高了4-5倍,对非常大的JSON文档的更新速度提高了20-30倍

(3)自动化的In-Memory 管理

In-Memory 技术引入之后,为Oracle数据库带来了基于内存的列式存储能力,支持 OLTP 和 OLAP 混合的计算。

在 21c 中,Oracle 支持了自主的In-Memory 管理,通过一个简单的初始化参数 inmemory_automatic_level 设置,DBA将不再需要人工指定将哪些数据表放置在内存中,数据库将自动判断需要将哪些对象加入或驱逐出In-Memory的列式存储中

inmemory_automatic_level默认还是off的,这种自动管理的特性,还是尽量不要轻易尝试,这个特性是19c开始引入的,取值包括:

(4)16G以下in_memory免费

21c之前in_memory是作为独立选件收费的,21c后通过参数 INMEMORY_SIZE 设置,对 16GB以下的使用免费

(5)sharding的增强

(6)active dataguard备库结果集缓存支持

具体可参考eygle文档:

Oracle Database 21c 十大新特性一览 - New Features - Oracle Life - MogDB 成为国产数据库第一品牌!

Oracle Database 21c 十小新特性一览 - New Features - Oracle Life - MogDB 成为国产数据库第一品牌!

5、升级RU方式

本来以为使用了ROOH之后,升级RU会不一样,测了下与19c一样,需要将最新的OPatch(p6880880_210000_Linux-x86-64.zip)解压到ORACLE_HOME下,所以官方说的ROOH的优势并无法实现

升级RU与非CDB唯一的区别是升级sqlpatch时,需要将所有pdb打开再执行datapatch

6、19c使用XTTS迁移到21c测试

根据XTTS的支持矩阵,Doc ID 207303.1,11g是无法通过XTTS升级到21c的,最小版本是12.1.0

因为CDB$ROOT容器的用户名必须是c##开头,与源库无法保持一致,我们需要使用XTTS迁移到21c自建的PDB中。

经测试,大部分步骤按照集成传统的XTTS迁移方案即可,但因为PDB和21c新特性的原因,有少许需要改动的地方,这里记录下:

(1)数据泵导出方式

数据泵无法使用network_link参数直接在目标库导入role和tablepspace,需要将【目标端impdp+network_link】的方式分离成【源库expdp+目标库impdp】,报错如下:

impdp system/***@crmpdb1 directory=DIR_DP logfile=xtts_tab_cc.log network_link=cc transport_full_check=no STATISTICS=none transport_tablespaces=TAB_CC transport_datafiles='/oracle/oradata/CRM/crmpdb1/TAB_CC_53.dbf','/oracle/oradata/CRM/crmpdb1/TAB_CC_101.dbf','/oracle/oradata/CRM/crmpdb1/TAB_CC_108.dbf'

Import: Release 21.0.0.0.0 - Production on Tue Apr 26 21:10:14 2022

Version 21.6.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production

ORA-39006: internal error

ORA-39068: invalid master table data in row with PROCESS_ORDER=-2

ORA-00904: "SYS"."KUPU$UTILITIES"."GET_PLATFORM_NAME": invalid identifier

ORA-39097: Data Pump job encountered unexpected error -904

改成如下:

源端:

expdp system/***@cc directory=DIR_DP dumpfile=expdat.dmp logfile=exp_xtts_tab_cc.log transport_full_check=no transport_tablespaces=TAB_CC

目标端:

impdp system/***@crmpdb1 directory=DIR_DP logfile=imp_xtts_tab_cc.log dumpfile=expdat.dmp exclude=statistics transport_datafiles='/oracle/oradata/CRM/crmpdb1/TAB_CC_53.dbf','/oracle/oradata/CRM/crmpdb1/TAB_CC_101.dbf','/oracle/oradata/CRM/crmpdb1/TAB_CC_108.dbf'

(2)PDB的tnsname的配置

由于PDB一般都有单独的service_name,所以在为PDB配置tnsnames.ora时需要将SERVICE_NAME改成PDB的名字,而SERVICE_NAME=实例名,默认连接的CDB$ROOT容器, 如

CRM =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = mgr0)(PORT = 1523))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = crm)

)

)

CRMPDB1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = mgr0)(PORT = 1523))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = crmpdb1)

)

)

(3)测试XTTS增量过程中新增数据文件

xtts增量过程中允许源端对迁移表空间增加数据文件,但是处理要复杂些,需要按以下步骤把新增的数据文件恢复到目标端,再进行增量的部分

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/942253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存