
Oracle 19c V$ALERT_TYPES 动态性能视图详解
核心作用
V$ALERT_TYPES 是 Oracle 数据库警报系统的核心目录视图,主要用于:
- 定义警报类型:展示数据库支持的所有内置警报类型
- 配置阈值参考:提供每种警报的可配置阈值参数
- 警报元数据管理:存储警报的详细属性和行为特征
- 监控框架基础:作为服务器生成警报(Server-Generated Alerts)的基础目录
- 自定义警报模板:为创建自定义警报提供参考模板
关键特性
- 只读目录:不可修改的系统定义视图
- 警报蓝图:描述所有可能的警报类型及其参数
- 阈值指南:显示每种警报的可配置阈值选项
- 多类别覆盖:包含性能、空间、配置等多类警报
- 警报行为定义:指定警报的触发条件和行为特征
字段详解(Oracle 19c)
基础标识字段
| 字段名 | 数据类型 | 描述 |
|---|---|---|
GROUP_NAME | VARCHAR2(64) | 警报分类组名(如:“Performance”,“Space”) |
TYPE | VARCHAR2(64) | 警报类型名称(如:“Tablespace Space Usage”) |
NAME | VARCHAR2(64) | 警报内部名称(系统标识符) |
METRIC_ID | NUMBER | 关联的性能指标ID(链接到V$METRICNAME) |
阈值配置字段
| 字段名 | 数据类型 | 描述 |
|---|---|---|
OPERATOR | VARCHAR2(30) | 阈值比较操作符: - GE(大于等于)- LE(小于等于) |
THRESHOLD | NUMBER | 默认阈值数值 |
OBSERVATION_PERIOD | NUMBER | 观察周期(秒)- 指标需持续超出阈值的时间 |
CONSECUTIVE_OCCURRENCES | NUMBER | 连续发生次数 - 触发警报需满足的连续超标次数 |
INSTANCE_IDENTIFIABLE | CHAR(1) | 是否实例级警报: - 1:实例级- 0:数据库级 |
行为特征字段
| 字段名 | 数据类型 | 描述 |
|---|---|---|
SCOPE | VARCHAR2(10) | 作用域: - SYSTEM:系统级- SESSION:会话级 |
TARGET_TYPE | VARCHAR2(30) | 目标对象类型(如:“TABLESPACE”,“SERVICE”) |
CONDITION | VARCHAR2(4000) | 触发条件表达式 |
MESSAGE_TEXT | VARCHAR2(2000) | 警报消息模板 |
ACTION_TYPE | VARCHAR2(30) | 建议操作类型(如:“Check free space”) |
系统控制字段
| 字段名 | 数据类型 | 描述 |
|---|---|---|
INTERNAL | CHAR(1) | 是否内部警报: - 1:内部使用- 0:用户可见 |
ENABLED | CHAR(1) | 默认启用状态: - 1:启用- 0:禁用 |
SYSTEM_DEFINED | CHAR(1) | 是否系统定义: - 1:系统内置- 0:自定义 |
基表与底层原理
底层结构:SYS.SCHEDULER$_ALERT_TYPE(警报类型系统表)
数据来源:
- 数据库内置警报定义
- 系统初始化脚本
- 数据字典元数据
工作原理:
- 数据库安装时加载预定义警报类型
- MMON进程监控性能指标并与阈值比较
- 当条件满足时触发警报
- 警报信息写入
DBA_OUTSTANDING_ALERTS V$ALERT_TYPES提供警报类型的元数据视图
警报生命周期:
核心使用场景
1. 警报类型浏览
SELECT group_name, type, message_text
FROM v$alert_types
WHERE internal = '0';
2. 阈值配置参考
SELECT type, operator, threshold
FROM v$alert_types
WHERE group_name = 'Space';
3. 自定义警报模板
SELECT *
FROM v$alert_types
WHERE type = 'Tablespace Space Usage';
4. 警报系统诊断
SELECT type, enabled, observation_period
FROM v$alert_types
WHERE enabled = '0';
5. 性能监控设计
SELECT type, condition
FROM v$alert_types
WHERE group_name = 'Performance';
常用查询 SQL 示例
1. 所有可用警报类型
SELECT group_name AS category,
type AS alert_name,
message_text AS description,
operator AS comparison,
threshold AS default_value
FROM v$alert_types
WHERE internal = '0'
ORDER BY group_name, type;
2. 空间相关警报详情
SELECT type,
target_type,
operator || ' ' || threshold AS threshold_condition,
observation_period || ' seconds' AS eval_period,
consecutive_occurrences AS required_occurrences
FROM v$alert_types
WHERE group_name = 'Space'
AND system_defined = '1';
3. 警报阈值配置参考
SELECT type,
operator,
threshold,
ROUND(observation_period/60) || ' mins' AS eval_window,
consecutive_occurrences
FROM v$alert_types
WHERE enabled = '1'
ORDER BY group_name;
4. 警报消息模板查询
SELECT type,
message_text AS alert_template,
action_type AS recommended_action
FROM v$alert_types
WHERE group_name = 'Performance';
5. 按目标类型分类警报
SELECT target_type,
COUNT(*) AS alert_count,
LISTAGG(type, ', ') WITHIN GROUP (ORDER BY type) AS alert_types
FROM v$alert_types
WHERE target_type IS NOT NULL
GROUP BY target_type;
6. 自定义警报创建参考
SELECT type,
condition AS trigger_logic,
observation_period,
consecutive_occurrences
FROM v$alert_types
WHERE target_type = 'TABLESPACE';
警报管理操作示例
1. 修改表空间警报阈值
BEGIN
DBMS_SERVER_ALERT.SET_THRESHOLD(
metrics_id => DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL,
warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
warning_value => '85',
critical_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
critical_value => '95',
observation_period => 5,
consecutive_occurrences => 3,
instance_name => NULL,
object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE,
object_name => 'USERS');
END;
/
2. 启用/禁用特定警报
-- 启用快照过旧警报
BEGIN
DBMS_SERVER_ALERT.ENABLE(
name => 'snapshot too old');
END;
/
-- 禁用不可用索引警报
BEGIN
DBMS_SERVER_ALERT.DISABLE(
name => 'unusable index');
END;
/
3. 创建自定义警报
BEGIN
DBMS_SERVER_ALERT.DEFINE_ALERT(
name => 'long_running_jobs',
condition => 'job_duration > 3600',
evaluation_period=> 300,
actions => 'Execute cleanup_procedure;');
END;
/
关键警报类型参考
1. 性能类警报
| 警报类型 | 默认阈值 | 描述 |
|---|---|---|
| SQL Response Time | > 10 sec | SQL响应时间过长 |
| User Wait Time | > 30% | 用户等待时间占比过高 |
| CPU Usage | > 90% | CPU利用率过高 |
2. 空间类警报
| 警报类型 | 默认阈值 | 描述 |
|---|---|---|
| Tablespace Space Usage | > 85% | 表空间使用率警告 |
| Tablespace Space Usage | > 97% | 表空间使用率严重警告 |
| Archive Area Used | > 80% | 归档区域使用率过高 |
3. 配置类警报
| 警报类型 | 默认阈值 | 描述 |
|---|---|---|
| Resumable Session | 1 occurrence | 可恢复会话挂起 |
| Snapshot Too Old | 1 occurrence | 快照过旧错误 |
| Unusable Index | 1 occurrence | 存在不可用索引 |
警报系统优化建议
1. 阈值调整指南
| 警报类型 | 生产环境建议 | 测试环境建议 |
|---|---|---|
| Tablespace Usage | 80/95% | 70/85% |
| CPU Usage | 85% | 95% |
| SQL Response Time | 5秒 | 10秒 |
2. 观察周期设置
-- 关键警报设置较短周期(5分钟)
UPDATE alert_thresholds
SET observation_period = 300
WHERE alert_type IN ('Tablespace Space Usage','CPU Usage');
-- 次要警报设置较长周期(30分钟)
UPDATE alert_thresholds
SET observation_period = 1800
WHERE alert_type IN ('Unused Index','Inactive Sessions');
3. 警报路由配置
BEGIN
DBMS_SERVER_ALERT.SET_ALERT_ROUTING(
name => 'Tablespace Space Usage',
recipients => 'dba_team@company.com; noc@company.com',
subject => 'CRITICAL: Tablespace Space Alert');
END;
/
重要注意事项
-
权限要求:
SELECT_CATALOG_ROLEMANAGE ANY ALERT(用于修改警报配置)ALTER SYSTEM(部分警报相关操作)
-
与DBA_ALERTS视图关系:
特性 V$ALERT_TYPES DBA_OUTSTANDING_ALERTS 内容类型 警报类型定义 活动警报实例 数据性质 元数据(静态) 运行时数据(动态) 更新频率 数据库升级时变化 实时更新 存储位置 数据字典 SYSAUX表空间 -
警报处理流程:
-
性能影响:
- 警报监控增加约1-3%系统开销
- 建议禁用非关键警报
- 延长低优先级警报的观察周期
-
多租户环境:
- CDB级别:查看容器级警报类型
- PDB级别:查看PDB特定警报类型
-- CDB中查看PDB警报 SELECT con_id, type, threshold FROM cdb_alert_types WHERE con_id > 2;
故障排除
-- 检查警报系统状态
SELECT * FROM V$ALERT_SYSTEM;
-- 查看警报处理错误
SELECT * FROM V$ALERT_DIAG;
-- 重置警报系统
ALTER SYSTEM FLUSH ALERT_QUEUE;
通过 V$ALERT_TYPES,DBA 可以全面了解 Oracle 数据库的警报框架,合理配置监控阈值,创建自定义警报,并建立有效的数据库健康监控体系,确保及时响应潜在问题。
欢迎关注我的公众号《IT小Chen》
890

被折叠的 条评论
为什么被折叠?



