☰
Oracle AWR报告生成步骤及说明:用 awrrpt.sql 从快照到 TaoToken 配置骨架
2026/9/30 20:23:37 网站建设 项目流程

1. Oracle AWR 报告生成步骤:从 awrrpt.sql 到快照区间选择

AWR 报告是 Oracle 数据库性能排查里最常用的一份“体检报告”,全称 Automatic Workload Repository,它把一段时间内数据库的负载、等待事件、Top SQL、内存使用等指标采样并汇总成一份 HTML 文件。而生成它的入口脚本就是awrrpt.sql,配合快照(snapshot)区间选择,能快速定位某段时间的性能问题。这套流程适合 Oracle DBA、运维工程师,以及需要排查数据库慢查询、CPU 飙高、I/O 等待的后端开发者。

我平时排查线上库,第一步几乎都是先拉一份 AWR 报告,看 DB Time、Top 等待事件和 Top SQL,再决定往哪个方向深挖。这篇就把awrrpt.sql的完整交互过程、快照查询 SQL、常见报错定位,以及后续用 TaoToken 统一 Key/API 通道做配置骨架的连通性验证,一次讲清楚,让你照着敲就能跑通。

先说清楚 AWR 报告能做什么:它按快照间隔(默认 1 小时)采集一次性能数据,保留时间由AWR_RETENTION控制。你选两个快照之间的区间,Oracle 就把这段时间的统计差异算出来,生成报告。所以“选对快照区间”比“生成报告”本身更关键——你要分析 16:00 的 SQL CPU 占用,就别选一整天的区间,那样噪声太大。

生成前需要确认几件事:当前用户有DBA权限(通常用sys或具有SELECT_CATALOG_ROLE的账号),数据库处于OPEN状态,STATISTICS_LEVEL参数不是BASIC(否则很多指标采集不到)。可以用下面这条 SQL 快速确认:

-- 确认 AWR 是否启用及保留策略 SELECT snap_interval, retention FROM dba_hist_wr_control; -- 确认统计级别,必须是 TYPICAL 或 ALL SHOW PARAMETER statistics_level;

如果statistics_level是BASIC,AWR 里很多等待事件和 SQL 统计会是空的,报告参考价值大打折扣。改回TYPICAL需要重启实例或动态调整(部分版本支持ALTER SYSTEM SET statistics_level=TYPICAL;,但建议在维护窗口操作)。

接下来是快照查询。生成报告前,我习惯先查一下有哪些快照可用,避免在交互里盲选:

-- 查询最近 2 天的快照,按时间倒序 SELECT snap_id, TO_CHAR(begin_interval_time, 'YYYY-MM-DD HH24:MI') AS begin_time, TO_CHAR(end_interval_time, 'YYYY-MM-DD HH24:MI') AS end_time FROM dba_hist_snapshot WHERE begin_interval_time > SYSDATE - 2 ORDER BY snap_id DESC;

这条 SQL 会列出snap_id和对应的时间窗口。记住你要分析的区间起止snap_id,后面在awrrpt.sql交互里直接输入数字即可,比按时间猜要准得多。比如你要看 15:00 到 17:00,就找begin_time接近 15:00 的那个snap_id作为起点,end_time接近 17:00 的作为终点。

这里有个容易踩的坑:快照是按整点采集的,但实际采集时间可能因为系统负载略有偏移。如果你要精确定位某个时刻,建议区间稍微放宽一点,比如 14:00–18:00,先看整体趋势,再缩小范围。AWR 报告本身也支持在 HTML 里按时间段筛选,所以不必一次就选得特别窄。

另外,如果数据库刚重启过,快照可能不连续,dba_hist_snapshot里会出现断层。这时候选区间要避开断层,否则报告里会出现“snapshot not found”或数据缺失。查快照时留意snap_id是否连续,不连续就分段生成。

最后提醒一点:生成 AWR 报告会对数据库产生一定开销,尤其是大区间、高负载的库。生产环境尽量避开业务高峰,或者用awrrpt.sql的SQL_ID过滤功能只导出关心的 SQL。报告文件默认生成在当前工作目录,用sys登录时通常是$ORACLE_HOME/dbs或你cd到的目录,记得生成后确认路径,别找不到文件。

2. TaoToken 前置准备:统一 Key 与 API 通道配置骨架

排查完数据库,很多时候还要把分析结论、SQL 优化建议同步给团队,或者用大模型辅助解读 AWR 报告里的等待事件和 Top SQL。这时候如果每个工具都单独配 Key、单独记 Base URL,维护起来很乱。TaoToken 的思路是提供一个统一的 API 通道,把模型调用收敛到一套 Key 和 Base URL 上,配置一次,多个工具复用。

TaoToken 是什么?简单说,它是一个统一的大模型 API 接入层,你拿到一个 Key,配好 Base URL,就能在支持 OpenAI 兼容协议的工具里调用不同模型。适合谁?适合需要长期做数据库巡检、写分析脚本、跑 Agent 任务的 DBA 和开发者——你不用在每个工具里重复填 Key,改一处就全局生效。

前置准备分三步:拿 Key、确认 Base URL、选模型 ID。这三件套是后面所有配置的基础,缺一不可。

第一步,拿 Key。访问 API Keys 管理页:

https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite

登录后创建一个新 Key,复制保存。注意 Key 只在创建时完整显示一次,关掉页面就看不到了,建议直接存到密码管理器或环境变量里,别硬编码进脚本。

第二步,确认 Base URL。TaoToken 的 API 入口是:

https://taotoken.net/api

这个地址不加 UTM 参数,直接作为base_url使用。注意结尾不要多加/v1或斜杠,具体以你所用工具的文档为准,大多数 OpenAI 兼容客户端会自动拼接路径。

第三步,选模型 ID。模型 ID 是调用时指定的model字段,比如claude-sonnet-4-5、gpt-4o这类。不同工具对模型 ID 的写法要求不同,有的要求全小写,有的支持别名。建议先在模型对话页确认可用模型列表:

https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite

在对话页里选一个模型发条消息,确认能通,再把这个模型 ID 抄到配置文件里。这一步能帮你排除“Key 没问题但模型 ID 写错”的低级错误。

三件套齐了之后,就可以写配置骨架了。下面是一个通用的config.toml骨架,适用于支持 TOML 配置的工具(比如某些 CLI 客户端、Agent 框架):

# TaoToken 统一接入配置骨架 # 路径:~/.config/taotoken/config.toml(按你所用工具的实际路径调整) [provider] name = "taotoken" base_url = "https://taotoken.net/api" api_key = "sk-你的Key粘贴到这里" model = "claude-sonnet-4-5" timeout = 60 max_retries = 2 [logging] level = "info"

如果你用的是 Claude Code 这类工具,配置通常写在settings.json里,结构类似:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key粘贴到这里", "ANTHROPIC_MODEL": "claude-sonnet-4-5" } }

注意ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY这两个环境变量名是 Claude Code 约定的,别写错。模型 ID 用ANTHROPIC_MODEL指定。配好后重启工具,让它重新读取配置。

如果你用的是 Codex 类的工具,配置可能落在auth.json里:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的Key粘贴到这里", "model": "gpt-4o" }

auth.json的路径通常在工具的用户目录下,比如~/.codex/auth.json。改完记得检查文件权限,别让 Key 被其他用户读到。

这里强调一下三件套的完整性:Base URL、Key、Model ID 必须同时正确,缺任何一个都会报错。只填 Key 不填 Base URL,工具会走默认官方地址,可能连不上;只填 Base URL 不填 Model ID,调用时不知道用哪个模型,会返回 400。所以配置完先别急着跑任务,下一步做连通性验证。

3. 可复制配置:awrrpt.sql 交互命令与 config.toml 完整片段

这一节把两边的可复制内容都放齐:Oracle 侧的awrrpt.sql交互命令,以及 TaoToken 侧的config.toml完整片段。你直接复制改改就能用。

先看 Oracle 侧。用sys登录数据库:

# 以 sysdba 身份登录,不输密码(本地认证) [oracle@mytesthost ~]$ sqlplus / as sysdba

登录成功后,执行awrrpt.sql:

SQL> @?/rdbms/admin/awrrpt.sql

?是$ORACLE_HOME的简写,Oracle 会自动展开。执行后进入交互,按提示一步步输入:

Enter value for report_type: html

报告类型选html,方便浏览器打开。接着会问返回几天的快照:

Enter value for num_days: 1

输入1表示列出最近 1 天的快照。然后会列出快照列表,让你选起止snap_id:

Enter value for begin_snap: 1024 Enter value for end_snap: 1026

这里填你前面用dba_hist_snapshot查到的snap_id。比如要分析 15:00–17:00,就选对应区间的起止 ID。最后输入报告文件名:

Enter value for report_name: yxl.html

回车后等待生成,看到Report written to yxl.html就成功了。退出数据库:

SQL> exit

然后在当前目录找到yxl.html,用sz下载到本地:

[oracle@mytesthost ~]$ sz yxl.html

浏览器打开就能看报告了。如果你在服务器上没有sz,也可以用scp:

scp oracle@mytesthost:/path/to/yxl.html ./

完整交互流程串起来就是:

SQL> @?/rdbms/admin/awrrpt.sql Enter value for report_type: html Enter value for num_days: 1 Enter value for begin_snap: 1024 Enter value for end_snap: 1026 Enter value for report_name: yxl.html

注意begin_snap和end_snap必须是有效的快照 ID,且begin_snap < end_snap。如果输入了不存在的 ID,会报ORA-20200: Invalid snapshot ID之类的错误,回到快照列表重选即可。

再看 TaoToken 侧的config.toml完整片段。这个骨架可以直接复制,改 Key 和模型 ID:

# ~/.config/taotoken/config.toml # TaoToken 统一接入配置,适用于支持 TOML 的 CLI/Agent 工具 [provider] name = "taotoken" base_url = "https://taotoken.net/api" api_key = "sk-替换成你的Key" model = "claude-sonnet-4-5" timeout = 60 max_retries = 2 [provider.headers] "Content-Type" = "application/json" [logging] level = "info" output = "stdout"

如果你用的是 Claude Code,对应的settings.json完整片段:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-替换成你的Key", "ANTHROPIC_MODEL": "claude-sonnet-4-5" }, "permissions": { "allow": [] } }

Codex 的auth.json完整片段:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-替换成你的Key", "model": "gpt-4o" }

三件套对照表,方便你检查有没有漏:

配置项值说明
Base URLhttps://taotoken.net/api不加 UTM,不加尾部斜杠
API Keysk-...从 API Keys 页创建,只显示一次
Model IDclaude-sonnet-4-5等以模型对话页确认的为准

配置路径按你所用工具的实际约定来,别照搬。比如 Claude Code 的settings.json通常在~/.claude/settings.json,Codex 的auth.json在~/.codex/auth.json。改完文件后,重启工具或重新加载配置,让改动生效。

如果你需要长期跑编码或 Agent 任务,可以考虑 Coding Plan,配置方式类似,但额度策略不同:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite

配置骨架就这些,重点是三件套齐全、路径正确、Key 别泄露。下一步做连通性验证,确认真的能通。

4. 验证请求与成功结果:连通性检查与 AWR 报告确认

配置写完不算完,得验证。这一节分两部分:TaoToken 侧的连通性检查,以及 Oracle 侧 AWR 报告生成成功的确认。

先看 TaoToken 侧。最直接的验证方式是发一个最小请求,看返回是否正常。如果你有curl,可以用下面这条命令测:

curl -s -X POST "https://taotoken.net/api/v1/messages" \ -H "Content-Type: application/json" \ -H "x-api-key: sk-你的Key" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4-5", "max_tokens": 32, "messages": [{"role": "user", "content": "ping"}] }'

如果返回里有content字段和文本内容,说明 Key、Base URL、模型 ID 三件套都通了。如果返回 401,说明 Key 有问题;返回 404,说明 Base URL 或路径不对;返回 400 且提示 model 相关,说明模型 ID 写错了。

注意上面的路径是/api/v1/messages,这是 Anthropic 兼容格式。如果你用的是 OpenAI 兼容格式,路径换成/api/v1/chat/completions,请求体也相应调整:

curl -s -X POST "https://taotoken.net/api/v1/chat/completions" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的Key" \ -d '{ "model": "gpt-4o", "max_tokens": 32, "messages": [{"role": "user", "content": "ping"}] }'

两种格式的鉴权头不同:Anthropic 用x-api-key,OpenAI 用Authorization: Bearer。别混用,混用会 401。

如果你用的是 Claude Code,验证更简单,直接在终端里跑:

claude -p "回复 ok"

如果输出ok或类似内容,说明配置生效。如果报OAuth error或local proxy failed,往下看第 5 节的排查。

再看 Oracle 侧。awrrpt.sql生成成功后,终端会输出类似:

Report written to yxl.html

同时当前目录会出现yxl.html文件。用ls -lh yxl.html确认文件大小,正常报告几百 KB 到几 MB 不等,太小可能是区间选得太窄或快照数据缺失。

[oracle@mytesthost ~]$ ls -lh yxl.html -rw-r--r-- 1 oracle oinstall 1.2M Nov 20 16:30 yxl.html

下载到本地后,浏览器打开,重点看这几个部分:

第一,数据库详细信息。确认 DB Name、Instance、Host、Release 版本和你排查的库一致,别拿错库的报告。

第二,快照详细信息。确认起止时间和snap_id是你选的区间,Elapsed时长合理。

第三,负载信息。看DB Time、DB CPU、Redo size、Logical reads等,判断整体负载水平。

第四,Top 10 前台等待事件。按Total Wait Time (sec)倒序,先看wait class。如果是User I/O或System I/O,可能是正常 I/O 压力;如果是Concurrency,要警惕,可能是锁竞争或 latch 争用。再看Total Wait Time和Avg Wait,总等待大但平均等待小,通常不是大问题。

第五,共享池统计信息。Memory Usage %长期在 70% 左右比较健康,低于 50% 说明内存浪费,高于 90% 要检查是否有 PL/SQL、cursor 占用过多,考虑扩内存或排查泄漏。

第六,Time Model Statistics。按% of DB Time排序,关注占比高的事件。注意总百分比可能大于 100%,因为sql_execute_elapsed_time可能包含hard_parse和parse时间,这是正常的。

第七,Top SQL。重点看SQL Ordered by Elapsed Time和SQL Ordered by CPU Time。解析时间长、执行次数少的 SQL,优先优化;Executions为 0 的,说明 SQL 正在执行时生成了快照,可以忽略或重新生成。

验证通过后,你就有了完整的排查链路:AWR 报告定位问题,TaoToken 通道辅助分析。下一步看常见报错怎么处理。

5. 本篇常见错排查:401、local proxy failed、reading choices 与 OAuth

这一节把 Oracle 侧和 TaoToken 侧的高频报错放一起,对照真实错误信息给排查路径。

先看 TaoToken 侧。

401 Unauthorized。最常见的原因是 Key 写错、Key 过期、或者鉴权头用错。排查步骤:确认 Key 是从 API Keys 页复制的完整字符串,没有多余空格;确认 Anthropic 格式用x-api-key,OpenAI 格式用Authorization: Bearer;确认 Base URL 是https://taotoken.net/api,没有多加/v1导致路径重复。如果还不行,重新创建一个 Key 试试。

local proxy failed。这个报错通常出现在 Claude Code 或类似工具里,意思是本地代理层没起来或配置没生效。排查:确认settings.json里的ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY都填了;确认工具重启过,读到了新配置;确认没有其他环境变量(比如系统级的ANTHROPIC_BASE_URL)覆盖了你的配置。可以用env | grep ANTHROPIC检查当前生效的环境变量。

reading choices 报错。这个通常出现在 OpenAI 兼容客户端里,报错信息类似reading 'choices'或cannot read property 'choices' of undefined。原因是返回体结构不符合预期,可能是 Base URL 路径不对,或者模型 ID 不被支持。排查:确认请求路径是/api/v1/chat/completions;确认模型 ID 在模型对话页里能正常使用;用curl直接测一次,看原始返回体是什么。

OAuth error。Claude Code 有时会走 OAuth 流程,如果你用的是 API Key 模式,需要确认没有触发 OAuth。排查:检查settings.json里是否同时存在 OAuth 相关配置和 API Key 配置,两者冲突时优先走 OAuth,导致 Key 不生效。清掉 OAuth 相关字段,只保留ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY、ANTHROPIC_MODEL三件套。

再看 Oracle 侧。

ORA-20200: Invalid snapshot ID。输入的snap_id不存在或已被清理。回到dba_hist_snapshot查询,确认 ID 有效且未被AWR_RETENTION清理。

ORA-13509: Error encountered during AWR report generation。通常是快照区间内有断层,或者STATISTICS_LEVEL是BASIC。检查快照连续性,确认统计级别。

SP2-0552: Bind variable "X" not declared。在awrrpt.sql交互里输入了非法字符,比如中文标点或空格。重新执行,输入纯数字。

报告文件找不到。awrrpt.sql生成的文件在当前工作目录,不是$ORACLE_HOME。用pwd确认当前目录,或者用find / -name "yxl.html" 2>/dev/null找。

排查完这些,基本能覆盖 90% 的报错场景。如果遇到没列出的错误,先看报错原文,再对照配置三件套和快照区间,逐项排除。

6. 语义一致 CTA:接入文档、模型对话与 Coding Plan

报告生成链路跑通后,如果你想把 TaoToken 接入到日常的数据库巡检脚本、AWR 报告解读工具,或者长期跑的 Agent 任务里,可以从下面几个入口继续。

需要查接入细节、参数说明、错误码,看接入文档:

https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite

想先验证模型能不能用、返回格式对不对,去模型对话页发条消息:

https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite

要管理 Key、创建新 Key、查看额度,去 API Keys 页:

https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite

如果你要长期跑编码任务、Agent 工作流,或者需要更稳定的额度策略,看 Coding Plan:

https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite

Claude Code 用户如果遇到 Anthropic 相关配置问题,可以看专门的接入说明:

https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite

最后分享一个我踩过的坑:awrrpt.sql生成的报告文件名如果带路径,比如/tmp/yxl.html,Oracle 会写到指定路径,但如果你没写路径只写文件名,它写在当前工作目录。有次我在$ORACLE_HOME/dbs下执行,生成的文件就在那儿,找了半天。所以生成后先pwd确认目录,再用ls找文件,别急着sz。另外,TaoToken 的 Key 建议用环境变量注入,别写死在config.toml里,尤其是多人共用的服务器,避免 Key 泄露。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询