暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

20C 新特性 初始化参数值支持表达式

原创 由迪 2020-06-19
973

关于这个特性让我想起来了我的好友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实例的参数值。

您只能为整数或大整数类型的初始化参数指定表达式。

初始化参数表达式可以包含以下构造:

  1. 整数值

    OLAP_PAGE_POOL_SIZE = 1073741824
    
  2. 小数值,仅当它们是数字运算的一部分时

    CPU_COUNT = 8 * 0.6
    

    如果运算解析为十进制值,则结果将被截断为整数值。此示例将设置CPU_COUNT4

  3. 整数值,后跟指示符,表示整数以千字节(kK),兆字节(mM),千兆字节(gG),太字节(tT),PB(pP)或EB(eE)表示

    OLAP_PAGE_POOL_SIZE = 900m
    MEMORY_TARGET = 2G
    
  4. 其他参数名称

    JOB_QUEUE_PROCESSES = PROCESSES
    
  5. 用于乘法(*),除法(/),模(%),加法(+)和减法(-) 的二进制运算符

    SHARED_SERVERS = MAX_SHARED_SERVERS / 2
    DATA_GUARD_MAX_LONGIO_TIME = DATA_GUARD_MAX_IO_TIME + 10 * 3
    

    运算符优先级:首先从左至右评估乘法,除法和模运算符,然后从左至右评估加法和减法运算符。

    如果表达式解析为十进制值,则结果将被截断为整数值。

  6. 括号,使您可以覆盖运算符优先级

    SHARED_SERVERS = (MAX_SHARED_SERVERS - 1) / 2
    DATA_GUARD_MAX_LONGIO_TIME = (DATA_GUARD_MAX_IO_TIME + 10) * 3
    
  7. MINMAX功能。这些函数采用两个操作数并分别返回最小值和最大值。

    AQ_TM_PROCESSES = MIN(40, PROCESSES * .1)
    SESSIONS = MAX(200, PROCESSES * 1.5)
    
  8. 环境变量值,必须在美元符号($)之前

    复制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’

最后修改时间:2020-06-19 11:25:08
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论