当前位置:首页 > 问答 > 正文

Oracle报错|远程修复 ORA-13788无效推荐类型故障处理与解决方法

Oracle报错远程修复:ORA-13788无效推荐类型故障处理指南

场景引入

"老王,咱们生产库突然报错了!应用那边说SQL执行全都卡住了,日志里全是ORA-13788的错误代码!"小李慌张地冲进办公室,作为团队里的Oracle老手,你放下咖啡杯,淡定地打开终端——这又是一个需要远程紧急处理的数据库故障。

故障现象解析

ORA-13788错误是Oracle数据库中与SQL计划管理(SPM)相关的常见问题,具体表现为"无效的推荐类型"(Invalid recommendation type),当系统尝试执行自动SQL优化任务或手动创建SQL计划基线时,如果使用了不被支持或已弃用的推荐类型参数,就会触发这个错误。

典型报错信息:

ORA-13788: Invalid recommendation type "xxx"

根本原因分析

根据2025年8月的最新Oracle文档,产生此错误的主要原因包括:

  1. 使用了过时的推荐类型参数:某些旧版本的推荐类型在新版Oracle中已被弃用
  2. 参数值拼写错误:手动执行DBMS_SPM相关过程时参数值输入错误
  3. 自动优化任务配置问题:自动SQL优化任务使用了不兼容的设置
  4. 权限问题:执行用户缺少必要的权限

详细解决方案

检查并修正推荐类型参数

首先连接到数据库,检查最近执行的DBMS_SPM操作:

-- 查看最近SPM相关操作
SELECT * FROM DBA_SQL_PLAN_BASELINES ORDER BY CREATED DESC;
-- 检查自动优化任务日志
SELECT * FROM DBA_AUTOTASK_TASK WHERE TASK_NAME LIKE '%SQL%';

如果发现使用了无效参数,正确的推荐类型包括:

Oracle报错|远程修复 ORA-13788无效推荐类型故障处理与解决方法

  • 'AUTO'(自动)
  • 'MANUAL'(手动)
  • 'PROFILE'(性能档案)

修正示例:

-- 错误示例(使用无效类型)
BEGIN
  DBMS_SPM.ACCEPT_SQL_PLAN_BASELINE(
    sql_handle => 'SYS_SQL_123456789',
    plan_name  => 'MY_PLAN',
    recommendation_type => 'OLD_TYPE'  -- 这里使用了无效类型
  );
END;
/
-- 正确示例
BEGIN
  DBMS_SPM.ACCEPT_SQL_PLAN_BASELINE(
    sql_handle => 'SYS_SQL_123456789',
    plan_name  => 'MY_PLAN',
    recommendation_type => 'AUTO'  -- 使用有效类型
  );
END;
/

重置自动优化任务配置

如果错误来自自动任务:

-- 禁用自动SQL优化任务
BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/
-- 清除错误配置
DELETE FROM WRI$_ADV_PARAMETERS WHERE NAME = 'RECOMMENDATION_TYPE';
-- 重新启用任务
BEGIN
  DBMS_AUTO_TASK_ADMIN.ENABLE(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

检查并修复损坏的SQL计划基线

-- 查找可能损坏的基线
SELECT SQL_HANDLE, PLAN_NAME, ENABLED, ACCEPTED 
FROM DBA_SQL_PLAN_BASELINES 
WHERE CREATED > SYSDATE-1;
-- 临时禁用问题基线
BEGIN
  DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
    sql_handle      => 'SYS_SQL_123456789',
    plan_name       => 'MY_PLAN',
    attribute_name  => 'ENABLED',
    attribute_value => 'NO');
END;
/

权限检查与修正

确保执行用户有以下权限:

GRANT ADMINISTER SQL MANAGEMENT OBJECT TO your_user;
GRANT EXECUTE ON DBMS_SPM TO your_user;
GRANT SELECT ON DBA_SQL_PLAN_BASELINES TO your_user;

预防措施

  1. 定期检查SPM配置

    -- 每月检查一次SPM配置
    SELECT PARAMETER_NAME, PARAMETER_VALUE 
    FROM DBA_SQL_MANAGEMENT_CONFIG;
  2. 更新维护计划

    • 在升级Oracle版本后,及时检查SPM相关参数的兼容性
    • 定期清理旧的SQL计划基线
  3. 文档标准化

    Oracle报错|远程修复 ORA-13788无效推荐类型故障处理与解决方法

    • 团队内部维护一份SPM操作手册
    • 记录所有手动执行的DBMS_SPM操作

远程修复注意事项

  1. 网络延迟问题

    • 在远程会话中执行长时间操作时使用nohup
    • 考虑使用screen或tmux保持会话
  2. 回滚方案

    -- 在执行任何修改前备份当前配置
    EXPDP SYSTEM/password DIRECTORY=DATA_PUMP_DIR DUMPFILE=spm_config.dmp SCHEMAS=SYSTEM INCLUDE=TABLE:"IN ('WRI$_ADV_PARAMETERS')"
  3. 验证步骤

    • 修改后至少观察两个自动任务周期
    • 检查alert日志中是否还有相关错误

处理ORA-13788错误的关键在于准确识别无效的推荐类型参数来源,通过系统性的检查和修正,大多数情况下可以在不影响业务的情况下远程解决问题,预防胜于治疗——规范的SPM管理流程能有效减少此类故障的发生。

"老王,错误消失了!"小李的声音从电话那头传来,你微微一笑,又拿起了那杯已经凉了的咖啡——这就是DBA的日常。

发表评论