关于这个特性让我想起来了我的好友SAP的陈清松给我讲一个案例,话说某钢铁厂的SAP系统的Oracle 10G,发现系统内存耗尽,而且存在大量的swap,应用特别慢,整个钢铁厂停工。这个悲剧是因为sga_target 应该设为50G,结果甲方DBA多写了一个0,变成500G,这里我为了方便写用G这个单位,而实际使用是byte单位,20C这个新特性很好的解决了这个问题,
sga_target=1024*1024*1024*50
就不会产生这个问题了。好了,切入正题吧。
您可以将表达式指定为初始化参数的值。
初始化参数的最佳值可能取决于环境特征,例如系统配置,运行时决策以及其他参数的值。在以前的版本中,要求您在设置初始化参数时指定一个绝对值,这意味着要维持其最佳值需要手动监督和调整。从Oracle Database 20c开始,您可以将表达式指定为某些初始化参数的值,这使数据库能够根据环境变化自动调整参数值。这在Oracle自治数据库环境中特别有用。
在Oracle Real Application Cluster(Oracle RAC)环境中,指定参数值的表达式也很有用。您可以在所有Oracle RAC实例中为参数值指定相同的表达式,但是将使用当前实例的环境特征按实例对表达式进行评估。这允许数据库微调每个Oracle RAC实例的参数值。
您只能为整数或大整数类型的初始化参数指定表达式。
初始化参数表达式可以包含以下构造:
-
整数值
OLAP_PAGE_POOL_SIZE = 1073741824 -
小数值,仅当它们是数字运算的一部分时
CPU_COUNT = 8 * 0.6如果运算解析为十进制值,则结果将被截断为整数值。此示例将设置
CPU_COUNT为4。 -
整数值,后跟指示符,表示整数以千字节(
k或K),兆字节(m或M),千兆字节(g或G),太字节(t或T),PB(p或P)或EB(e或E)表示OLAP_PAGE_POOL_SIZE = 900m MEMORY_TARGET = 2G -
其他参数名称
JOB_QUEUE_PROCESSES = PROCESSES -
用于乘法(
*),除法(/),模(%),加法(+)和减法(-) 的二进制运算符SHARED_SERVERS = MAX_SHARED_SERVERS / 2 DATA_GUARD_MAX_LONGIO_TIME = DATA_GUARD_MAX_IO_TIME + 10 * 3运算符优先级:首先从左至右评估乘法,除法和模运算符,然后从左至右评估加法和减法运算符。
如果表达式解析为十进制值,则结果将被截断为整数值。
-
括号,使您可以覆盖运算符优先级
SHARED_SERVERS = (MAX_SHARED_SERVERS - 1) / 2 DATA_GUARD_MAX_LONGIO_TIME = (DATA_GUARD_MAX_IO_TIME + 10) * 3 -
该
MIN和MAX功能。这些函数采用两个操作数并分别返回最小值和最大值。AQ_TM_PROCESSES = MIN(40, PROCESSES * .1) SESSIONS = MAX(200, PROCESSES * 1.5) -
环境变量值,必须在美元符号(
$)之前复制CPU_COUNT = $SYSTEM_CPU/5
使用以下任何一种方法来设置初始化参数时,都可以指定表达式:
-
在服务器参数文件(SPFILE)中
-
例如,在文本初始化参数文件中
init``ORACLE_SID``.ora。请注意,您不能在客户端文本初始化参数文件(PFILE)中使用表达式。
-
在SQL语句
ALTER SESSION SET和
ALTER SYSTEM SET在这种情况下,必须将表达式用单引号引起来。例如:
ALTER SESSION SET AQ_TM_PROCESSES = 'MIN(40, PROCESSES * .1)'; ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 'PROCESSES' SCOPE=BOTH;
在参数值中使用特殊字符
如果参数值包含特殊字符,则必须在特殊字符前加反斜杠,否则整个参数值必须用引号引起来。
例如,您可以使用以下任意一种来指定特殊字符:
复制DB_DOMAIN ='JAPAN.ACME#.COM'
DB_DOMAIN = JAPAN.ACME \#。COM
表1列出了可以在初始化参数文件中使用的特殊字符。
表1初始化参数文件中的特殊字符
| 字符 | 名称 | 描述 |
|---|---|---|
# |
数字符号 | 评论 |
( |
左括号 | 起始值列表 |
) |
右括号 | 结束值列表 |
" |
双引号 | 带引号的字符串的开头或结尾 |
' |
单引号 | 带引号的字符串的开头或结尾 |
= |
等号 | 关键字和值的分隔符 |
, |
逗号 | 元素分隔符 |
- |
减号 | UNIX样式关键字之前 |
\ |
反斜杠 | 转义符 |
如果必须在初始化参数文件中按字面意义对待特殊字符,则必须在其前加反斜杠字符,否则必须将包含特殊字符的整个字符串括在引号中。
使用转义符
在初始化参数文件中,反斜杠(\)也可以表示行继续。如果反斜杠后跟字母数字字符,则在输入中将反斜杠视为普通字符。
如果后面没有字母数字字符,则将反斜杠视为反斜杠或连续字符。
也可以看看:
“ 管理初始化参数文件的规则 ”
使用引号
引号可以两种方式嵌套在初始化参数文件中。
第一种方法是将嵌套字符串中的双引号引起来。例如:
NLS_DATE_FORMAT ='''今天是''MM / DD / YYYY'
第二种方法是交替使用单引号和双引号。例如:
NLS_DATE_FORMAT =’“今天是” MM / DD / YYYY’




