面试宝典:介绍下Oracle数据库动态性能视图 V$SYSTEM_PARAMETER2

在这里插入图片描述
我来为你详细解释 Oracle 19C 数据库中的 V$SYSTEM_PARAMETER2 动态性能视图。这个视图对于精确查看和管理系统级初始化参数非常有用,特别是那些包含多个值的参数。

📊 1. 视图概述与核心作用

V$SYSTEM_PARAMETER2 视图用于显示当前数据库实例级别生效的初始化参数信息。它与 V$SYSTEM_PARAMETER 的关键区别在于:对于包含多个值的参数(如 control_files),V$SYSTEM_PARAMETER2 会将每个值拆分为单独的行显示,而不是像 V$SYSTEM_PARAMETER 那样将所有值合并为一个用逗号分隔的字符串。这种呈现方式使得获取和管理多值参数变得更加清晰和方便。

其主要作用包括:

  • 清晰查看多值参数:避免逗号分隔带来的混淆,直接查看参数的每个独立值。
  • 系统参数管理:提供系统级别参数的详细信息,包括是否可修改、当前值、默认值等属性。
  • 继承参考:新会话(Session)会从该视图显示的实例级参数值继承其初始参数值。

🏗️ 2. 底层原理与数据流转

V$SYSTEM_PARAMETER2 视图的数据来源于 Oracle 实例的内存结构,其底层架构和数据处理流程如下图所示:

实例启动
读取参数文件
(SPFILE或PFILE)
参数设置加载至内存
(X$KSPPI, X$KSPPCV2)
构建V$SYSTEM_PARAMETER2视图
用户查询
V$SYSTEM_PARAMETER2
ALTER SYSTEM 修改参数
更新内存中的参数值
(X$KSPPCV2)
ALTER SYSTEM SCOPE=SPFILE
更新服务器参数文件(SPFILE)

关键点解析

  • 数据来源与基表V$SYSTEM_PARAMETER2 的数据来源于 SGA 中的内部内存结构,其底层基表主要是 X$KSPPI(存储参数信息)和 X$KSPPCV2(存储参数的当前值,特别是多值参数)。这些 X$ 表是 Oracle 内部使用的虚拟内存表,其结构对用户不透明,通常不建议直接查询。
  • 多值参数处理X$KSPPCV2 基表的设计专门用于处理多值参数,每个值及其位置(ORDINAL)都会被单独记录,这是 V$SYSTEM_PARAMETER2 能够将多值参数分行显示的根本原因。
  • 数据持久化:对参数的修改(如使用 ALTER SYSTEM SET ... SCOPE=SPFILE)会持久化到服务器参数文件(SPFILE),确保实例重启后修改依然有效。V$SYSTEM_PARAMETER2 主要反映当前内存中的参数值。

📋 3. 字段详解

V$SYSTEM_PARAMETER2 包含的字段及其含义、数据类型如下表所示:

字段名称 (Field Name)数据类型描述
NUMNUMBER参数的内部编号。
NAMEVARCHAR2(80)参数的名称(例如 control_files, db_domain)。
TYPENUMBER参数的数据类型
1: Boolean
2: String
3: Integer
4: Parameter file
5: Reserved
6: Big integer
VALUEVARCHAR2(4000)参数的当前值。对于多值参数,此字段仅包含单个值
DISPLAY_VALUEVARCHAR2(4000)格式化后的参数显示值,更易读。
ISDEFAULTVARCHAR2(9)指示当前值是否为默认值(TRUE / FALSE)。
ISSES_MODIFIABLEVARCHAR2(5)指示参数是否可在会话级别修改(ALTER SESSION)。
TRUE: 可以修改
FALSE: 不可修改
ISSYS_MODIFIABLEVARCHAR2(9)指示参数是否可在系统级别修改(ALTER SYSTEM),以及修改何时生效:
IMMEDIATE: 立即生效
DEFERRED: 延迟生效(仅对新会话有效)
FALSE: 不可动态修改,需重启实例
ISINSTANCE_MODIFIABLEVARCHAR2(5)在RAC环境中,指示参数是否可在不同实例间设置不同值(TRUE / FALSE)。
ISMODIFIEDVARCHAR2(10)指示参数自实例启动后是否已被修改
MODIFIED: 被 ALTER SESSION 修改
SYSTEM_MOD: 被 ALTER SYSTEM 修改
FALSE: 未修改
ISADJUSTEDVARCHAR2(5)指示参数值是否已被Oracle自动调整(TRUE / FALSE)。
ISDEPRECATEDVARCHAR2(5)指示该参数是否已被Oracle弃用(TRUE / FALSE)。弃用的参数应避免使用。
DESCRIPTIONVARCHAR2(255)参数的简要描述文本
UPDATE_COMMENTVARCHAR2(255)参数最近一次修改的注释
ORDINALNUMBER多值参数中每个值的序号位置。这是区分 V$SYSTEM_PARAMETER 的关键字段,对于单值参数,此值通常为1。
CON_IDNUMBER容器ID。在多租户环境(CDB)中,标识该参数属于哪个容器(PDB)。值为 0 表示属于 CDB$ROOT(根容器)。

关键字段解读

  • ORDINAL这是 V$SYSTEM_PARAMETER2V$SYSTEM_PARAMETER 最直接的区别。它明确指示了多值参数中每个值的顺序,例如控制文件列表中的第一个、第二个文件。
  • ISSYS_MODIFIABLE这是动态性能调优的关键字段。它告诉你一个参数能否在线修改以及修改的生效范围。
  • ISDEFAULTISMODIFIED用于参数审计。可以快速识别出哪些参数脱离了默认设置,以及是否在实例运行后被修改过。
  • VALUE:注意这里存储的是单个值。对于多值参数,需要结合 NAMEORDINAL 字段来理解完整的参数设置。

🔗 4. 相关视图

视图名称描述
V$SYSTEM_PARAMETER显示系统级参数信息,但多值参数会以逗号分隔的字符串形式显示在单行中。
V$PARAMETER显示当前会话的参数值。新会话从系统参数继承初始值,但可用 ALTER SESSION 修改。
V$PARAMETER2类似于 V$PARAMETER,但将会话级别的多值参数分多行显示。
V$SPPARAMETER显示服务器参数文件(SPFILE) 中存储的参数值。如果未使用 SPFILE,则 ISSPECIFIED 列为 FALSE。

⚙️ 5. 主要使用场景

  1. 精确管理多值参数:当需要精确查看、添加或删除control_filesdiagnostic_dest 这类多值参数中的某一个特定值时,V$SYSTEM_PARAMETER2 的分行显示比逗号分隔的字符串更方便、更不易出错。
  2. 系统参数审计与诊断:检查当前系统参数的设置,确认哪些参数已被修改(ISMODIFIED)、哪些参数非默认值(ISDEFAULT),以及参数是否已被弃用(ISDEPRECATED),这对于数据库健康检查和合规性审计非常有用。
  3. 性能调优准备:在动态修改系统参数(ALTER SYSTEM)前,先通过该视图确认参数的修改属性(ISSYS_MODIFIABLE),判断是立即生效、延迟生效还是需要重启生效。
  4. 生成参数报告:在生成数据库配置报告时,使用此视图可以确保多值参数以清晰、可读的格式呈现。

📊 6. 常用SQL查询示例

查询 1:查看特定的多值参数(如控制文件)
SELECT name, value, ordinal
FROM v$system_parameter2
WHERE name = 'control_files'
ORDER BY ordinal;

结果示例

NAMEVALUEORDINAL
control_files/u01/app/oracle/oradata/ORCL/control01.ctl1
control_files/u01/app/oracle/fast_recovery_area/ORCL/control02.ctl2
查询 2:检查所有已被修改的非默认参数
SELECT name, value, isdefault, ismodified, description
FROM v$system_parameter2
WHERE isdefault = 'FALSE' OR ismodified != 'FALSE'
ORDER BY name;
查询 3:查找所有可在系统级别立即修改的参数
SELECT name, value, description
FROM v$system_parameter2
WHERE issys_modifiable = 'IMMEDIATE'
ORDER BY name;
查询 4:查询某一类参数(如所有与内存相关的参数)
SELECT name, value, ordinal, description
FROM v$system_parameter2
WHERE name LIKE '%sga%' 
   OR name LIKE '%pga%'
   OR name LIKE '%memory%'
ORDER BY name, ordinal;
查询 5:比较系统级别和会话级别的参数值
-- 例如,检查当前会话是否修改了某些参数
SELECT sys.name, 
       sys.value AS system_value, 
       ses.value AS session_value,
       sys.isses_modifiable
FROM v$system_parameter2 sys
JOIN v$parameter2 ses ON sys.name = ses.name AND sys.ordinal = ses.ordinal
WHERE sys.value != ses.value;

💎 7. 重要知识点总结

  1. V$SYSTEM_PARAMETER 的区别:核心区别在于多值参数的显示方式。V$SYSTEM_PARAMETER2 为多值参数的每个值提供单独的行,并包含 ORDINAL 字段指示顺序,而 V$SYSTEM_PARAMETER 将所有值合并为一个逗号分隔的字符串。
  2. 数据时效性V$SYSTEM_PARAMETER2 显示的是当前实例内存中的系统参数值。要查看参数文件中设置的值,应查询 V$SPPARAMETER
  3. 修改参数:修改系统参数应使用 ALTER SYSTEM 命令,并注意 SCOPE 子句的选择:
    • SCOPE=MEMORY:仅内存生效,重启后失效。
    • SCOPE=SPFILE:仅修改参数文件,重启实例后生效。
    • SCOPE=BOTH:内存和参数文件同时修改,立即且持久化。
      是否支持动态修改取决于 ISSYS_MODIFIABLE 的值。
  4. 多租户环境:在 CDB 中,V$SYSTEM_PARAMETER2 默认显示根容器(CDB$ROOT)的参数。要查询特定 PDB 的参数,需要切换到该 PDB 中再查询,或使用 CON_ID 字段进行过滤。

V$SYSTEM_PARAMETER2 视图是管理和诊断 Oracle 数据库系统参数的重要工具,特别在处理多值参数时,提供了比 V$SYSTEM_PARAMETER 更清晰、更精确的视角。

欢迎关注我的公众号《IT小Chen

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值