You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么在ADB-S中执行dbms_stats.gather_table_stats统计SSB表时报ORA-20000

报错根因

ADB-S(Oracle自治数据库共享版)中的SSB是Oracle官方预置的只读示例Schema,默认ADMIN用户没有该Schema下对象的分析权限,因此直接调用dbms_stats.gather_table_stats针对SSB下的表操作会触发权限不足报错。


方案1:复制SSB表到自定义Schema后执行统计信息收集

该方案可以完全匹配你原本的操作逻辑,成功触发统计信息收集任务生成CPU负载,操作步骤如下:

  1. 创建自定义业务Schema并授权
-- 替换<自定义密码>为你设置的符合ADB-S密码规则的密码
CREATE USER MY_SSB IDENTIFIED BY "<自定义密码>";
GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO MY_SSB;
  1. 复制SSB下需要用到的表到自定义Schema
-- 复制CUSTOMER表,其他SSB表可按需复制
CREATE TABLE MY_SSB.CUSTOMER AS SELECT * FROM SSB.CUSTOMER;
-- 示例:复制其他SSB表
-- CREATE TABLE MY_SSB.LINEORDER AS SELECT * FROM SSB.LINEORDER;
-- CREATE TABLE MY_SSB.DATES AS SELECT * FROM SSB.DATES;
  1. 执行统计信息收集操作
-- 收集单表统计信息
EXEC dbms_stats.gather_table_stats('MY_SSB','CUSTOMER');
-- 如需更高CPU负载,可收集整个Schema的统计信息
-- EXEC dbms_stats.gather_schema_stats('MY_SSB');

方案2:直接运行CPU密集型SQL生成负载

如果你不需要依赖SSB的表结构,可以直接运行运算类SQL快速生成CPU负载,示例语句如下:

-- 循环执行密集运算,可调整循环次数控制负载大小和持续时间
DECLARE
    v_num NUMBER := 0;
BEGIN
    FOR i IN 1..10000000 LOOP
        v_num := v_num + SQRT(i) * MOD(i,1000);
    END LOOP;
END;
/

内容的提问来源于stack exchange,提问作者Thomas Baby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:57:01