Oracle 20c 新特性:表达式参数值 Expressions Parameter Values

导读:从Oracle数据库20c开始,您可以指定一个表达式作为某些初始化参数的值,这使得数据库能够根据环境变化自动调整参数值。这在 Oracle Autonomous 数据库环境中特别有用。

在 Oracle 20c 中,可以指定一个表达式作为初始化参数的值。

  1. 初始化参数的最佳值可能取决于环境特性,如系统配置、运行时的决定以及其他参数的值。

  2. 在以前的版本中,您在设置初始化参数时需要指定一个绝对值,这意味着维持其最佳值需要手动监督和调整。

  3. 从Oracle数据库20c开始,您可以指定一个表达式作为某些初始化参数的值,这使得数据库能够根据环境变化自动调整参数值。这在 Oracle Autonomous 数据库环境中特别有用。

  4. 在 Oracle Real Application Cluster (Oracle RAC) 环境中,为参数值指定表达式也很有用。

  5. 您可以在所有 Oracle RAC 实例中为参数值指定相同的表达式,但该表达式将在每个实例的基础上利用当前实例的环境特征进行评估。这允许数据库对每个 Oracle RAC 实例的参数值进行微调。


可以只为初始化参数类型为 integer 或 big integer 的参数指定表达式。



如下是一个测试范例:

SQL> show parameter aq


NAME             TYPE   VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes          integer   1
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES = 'MIN(40, PROCESSES * .1)';


System altered.


SQL> show parameter aq


NAME             TYPE   VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes          integer   30
SQL> show parameter spfile


NAME             TYPE   VALUE
------------------------------------ ----------- ------------------------------
spfile             string   /scratch/app/user/dbs/spfileenmotech.ora

检查一下参数文件中的记录信息:

[oracle@enmotech dbs]$ strings spfileenmotech.ora |grep aq*.aq_tm_processes=MIN(40, PROCESSES * .1)

按照文档描述,针对CPU数量,可以通过 CPU_COUNT 参数进行动态参数值设置。
例如:

CPU_COUNT = $SYSTEM_CPU/5

我们测试一下这个设置,注意当未设置 SYSTEM_CPU 环境变量时,系统提示 LRM-00119 错误,意思是无法活动系统参数。

SQL> alter system set cpu_count = '$SYSTEM_CPU *2';
alter system set cpu_count = '$SYSTEM_CPU *2'
*
ERROR at line 1:
ORA-13398: invalid expression parameter: $SYSTEM_CPU *2
LRM-00119: unable to obtain a valid value for '${SYSTEM_CPU}'
接下来设置 OS 环境变量参数:
[oracle@enmotech ~]$ export SYSTEM_CPU=10[oracle@enmotech ~]$ echo $SYSTEM_CPU10[oracle@enmotech ~]$ sqlplus / as sysdba
SQL*Plus: Release 20.0.0.0.0 - Production on Tue Apr 21 05:10:04 2020Version 20.2.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - ProductionVersion 20.2.0.0.0
SQL> alter system set cpu_count = '$SYSTEM_CPU *2';alter system set cpu_count = '$SYSTEM_CPU *2'*ERROR at line 1:ORA-02097: parameter cannot be modified because specified value is invalidORA-02097: parameter cannot be modified because specified value is invalid
SQL>

注意,此时提示是参数值 INVALID ,无效,检查告警日志文件,其中提示设置的 CPU 数量和操作系统获取值不同:

2020-04-21T05:10:11.221117+00:00
ORA-2097: CPU_COUNT cannot be set to 20 because it exceeds 1, the number of CPUs reported by the OS

设置参数文件,重启数据库检查变化,可以发现 cpu_count 设置未生效,这意味着 os 的真实值影响优先级更高:

SQL> alter system set cpu_count = '$SYSTEM_CPU *2' scope=spfile;
System altered.
SQL> startup force;ORACLE instance started.
Total System Global Area  788529032 bytesFixed Size        9572232 bytesVariable Size      662700032 bytesDatabase Buffers    113246208 bytesRedo Buffers        3010560 bytesDatabase mounted.Database opened.SQL> show parameter cpu
NAME             TYPE   VALUE------------------------------------ ----------- ------------------------------cpu_count           integer   1cpu_min_count           string   1parallel_threads_per_cpu       integer   1resource_manager_cpu_allocation      integer   1

但是可以看到参数设置已经生效(注意,设置参数后,需要在环境变量中添加变量,否则启动时将无法识别 SYSTEM_CPU 而出错):

[oracle@enmotech trace]$ cd /scratch/app/user/dbs/[oracle@enmotech dbs]$ strings spfileenmotech.ora |grep cpu_count*.cpu_count=(${SYSTEM_CPU} * 2)


可以看到参数文件中,记录了表达式,这使得数据库的设置更加灵活,智能。

参考:https://docs.oracle.com/en/database/oracle/oracle-database/20/refrn/parameter-files.html
墨天轮原文:https://www.modb.pro/db/24416(复制到浏览器中打开或者点击“阅读原文”)

推荐阅读:144页!分享珍藏已久的数据库技术年刊

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

原文地址:https://www.cnblogs.com/hzcya1995/p/13311719.html