
1. Oracle AWR 報告生成步驟從 awrrpt.sql 到快照區(qū)間選擇AWR 報告是 Oracle 數(shù)據(jù)庫性能排查里最常用的一份“體檢報告”全稱 Automatic Workload Repository它把一段時間內(nèi)數(shù)據(jù)庫的負載、等待事件、Top SQL、內(nèi)存使用等指標采樣并匯總成一份 HTML 文件。而生成它的入口腳本就是awrrpt.sql配合快照snapshot區(qū)間選擇能快速定位某段時間的性能問題。這套流程適合 Oracle DBA、運維工程師以及需要排查數(shù)據(jù)庫慢查詢、CPU 飆高、I/O 等待的后端開發(fā)者。我平時排查線上庫第一步幾乎都是先拉一份 AWR 報告看 DB Time、Top 等待事件和 Top SQL再決定往哪個方向深挖。這篇就把awrrpt.sql的完整交互過程、快照查詢 SQL、常見報錯定位以及后續(xù)用 TaoToken 統(tǒng)一 Key/API 通道做配置骨架的連通性驗證一次講清楚讓你照著敲就能跑通。先說清楚 AWR 報告能做什么它按快照間隔默認 1 小時采集一次性能數(shù)據(jù)保留時間由AWR_RETENTION控制。你選兩個快照之間的區(qū)間Oracle 就把這段時間的統(tǒng)計差異算出來生成報告。所以“選對快照區(qū)間”比“生成報告”本身更關鍵——你要分析 16:00 的 SQL CPU 占用就別選一整天的區(qū)間那樣噪聲太大。生成前需要確認幾件事當前用戶有DBA權限通常用sys或具有SELECT_CATALOG_ROLE的賬號數(shù)據(jù)庫處于OPEN狀態(tài)STATISTICS_LEVEL參數(shù)不是BASIC否則很多指標采集不到??梢杂孟旅孢@條 SQL 快速確認-- 確認 AWR 是否啟用及保留策略 SELECT snap_interval, retention FROM dba_hist_wr_control; -- 確認統(tǒng)計級別必須是 TYPICAL 或 ALL SHOW PARAMETER statistics_level;如果statistics_level是BASICAWR 里很多等待事件和 SQL 統(tǒng)計會是空的報告參考價值大打折扣。改回TYPICAL需要重啟實例或動態(tài)調(diào)整部分版本支持ALTER SYSTEM SET statistics_levelTYPICAL;但建議在維護窗口操作。接下來是快照查詢。生成報告前我習慣先查一下有哪些快照可用避免在交互里盲選-- 查詢最近 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和對應的時間窗口。記住你要分析的區(qū)間起止snap_id后面在awrrpt.sql交互里直接輸入數(shù)字即可比按時間猜要準得多。比如你要看 15:00 到 17:00就找begin_time接近 15:00 的那個snap_id作為起點end_time接近 17:00 的作為終點。這里有個容易踩的坑快照是按整點采集的但實際采集時間可能因為系統(tǒng)負載略有偏移。如果你要精確定位某個時刻建議區(qū)間稍微放寬一點比如 14:00–18:00先看整體趨勢再縮小范圍。AWR 報告本身也支持在 HTML 里按時間段篩選所以不必一次就選得特別窄。另外如果數(shù)據(jù)庫剛重啟過快照可能不連續(xù)dba_hist_snapshot里會出現(xiàn)斷層。這時候選區(qū)間要避開斷層否則報告里會出現(xiàn)“snapshot not found”或數(shù)據(jù)缺失。查快照時留意snap_id是否連續(xù)不連續(xù)就分段生成。最后提醒一點生成 AWR 報告會對數(shù)據(jù)庫產(chǎn)生一定開銷尤其是大區(qū)間、高負載的庫。生產(chǎn)環(huán)境盡量避開業(yè)務高峰或者用awrrpt.sql的SQL_ID過濾功能只導出關心的 SQL。報告文件默認生成在當前工作目錄用sys登錄時通常是$ORACLE_HOME/dbs或你cd到的目錄記得生成后確認路徑別找不到文件。2. TaoToken 前置準備統(tǒng)一 Key 與 API 通道配置骨架排查完數(shù)據(jù)庫很多時候還要把分析結論、SQL 優(yōu)化建議同步給團隊或者用大模型輔助解讀 AWR 報告里的等待事件和 Top SQL。這時候如果每個工具都單獨配 Key、單獨記 Base URL維護起來很亂。TaoToken 的思路是提供一個統(tǒng)一的 API 通道把模型調(diào)用收斂到一套 Key 和 Base URL 上配置一次多個工具復用。TaoToken 是什么簡單說它是一個統(tǒng)一的大模型 API 接入層你拿到一個 Key配好 Base URL就能在支持 OpenAI 兼容協(xié)議的工具里調(diào)用不同模型。適合誰適合需要長期做數(shù)據(jù)庫巡檢、寫分析腳本、跑 Agent 任務的 DBA 和開發(fā)者——你不用在每個工具里重復填 Key改一處就全局生效。前置準備分三步拿 Key、確認 Base URL、選模型 ID。這三件套是后面所有配置的基礎缺一不可。第一步拿 Key。訪問 API Keys 管理頁https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite登錄后創(chuàng)建一個新 Key復制保存。注意 Key 只在創(chuàng)建時完整顯示一次關掉頁面就看不到了建議直接存到密碼管理器或環(huán)境變量里別硬編碼進腳本。第二步確認 Base URL。TaoToken 的 API 入口是https://taotoken.net/api這個地址不加 UTM 參數(shù)直接作為base_url使用。注意結尾不要多加/v1或斜杠具體以你所用工具的文檔為準大多數(shù) OpenAI 兼容客戶端會自動拼接路徑。第三步選模型 ID。模型 ID 是調(diào)用時指定的model字段比如claude-sonnet-4-5、gpt-4o這類。不同工具對模型 ID 的寫法要求不同有的要求全小寫有的支持別名。建議先在模型對話頁確認可用模型列表https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite在對話頁里選一個模型發(fā)條消息確認能通再把這個模型 ID 抄到配置文件里。這一步能幫你排除“Key 沒問題但模型 ID 寫錯”的低級錯誤。三件套齊了之后就可以寫配置骨架了。下面是一個通用的config.toml骨架適用于支持 TOML 配置的工具比如某些 CLI 客戶端、Agent 框架# TaoToken 統(tǒng)一接入配置骨架 # 路徑~/.config/taotoken/config.toml按你所用工具的實際路徑調(diào)整 [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這兩個環(huán)境變量名是 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 被其他用戶讀到。這里強調(diào)一下三件套的完整性Base URL、Key、Model ID 必須同時正確缺任何一個都會報錯。只填 Key 不填 Base URL工具會走默認官方地址可能連不上只填 Base URL 不填 Model ID調(diào)用時不知道用哪個模型會返回 400。所以配置完先別急著跑任務下一步做連通性驗證。3. 可復制配置awrrpt.sql 交互命令與 config.toml 完整片段這一節(jié)把兩邊的可復制內(nèi)容都放齊Oracle 側的awrrpt.sql交互命令以及 TaoToken 側的config.toml完整片段。你直接復制改改就能用。先看 Oracle 側。用sys登錄數(shù)據(jù)庫# 以 sysdba 身份登錄不輸密碼本地認證 [oraclemytesthost ~]$ sqlplus / as sysdba登錄成功后執(zhí)行awrrpt.sqlSQL ?/rdbms/admin/awrrpt.sql?是$ORACLE_HOME的簡寫Oracle 會自動展開。執(zhí)行后進入交互按提示一步步輸入Enter value for report_type: html報告類型選html方便瀏覽器打開。接著會問返回幾天的快照Enter value for num_days: 1輸入1表示列出最近 1 天的快照。然后會列出快照列表讓你選起止snap_idEnter value for begin_snap: 1024 Enter value for end_snap: 1026這里填你前面用dba_hist_snapshot查到的snap_id。比如要分析 15:00–17:00就選對應區(qū)間的起止 ID。最后輸入報告文件名Enter value for report_name: yxl.html回車后等待生成看到Report written to yxl.html就成功了。退出數(shù)據(jù)庫SQL exit然后在當前目錄找到y(tǒng)xl.html用sz下載到本地[oraclemytesthost ~]$ sz yxl.html瀏覽器打開就能看報告了。如果你在服務器上沒有sz也可以用scpscp oraclemytesthost:/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 統(tǒng)一接入配置適用于支持 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 頁創(chuàng)建只顯示一次Model IDclaude-sonnet-4-5等以模型對話頁確認的為準配置路徑按你所用工具的實際約定來別照搬。比如 Claude Code 的settings.json通常在~/.claude/settings.jsonCodex 的auth.json在~/.codex/auth.json。改完文件后重啟工具或重新加載配置讓改動生效。如果你需要長期跑編碼或 Agent 任務可以考慮 Coding Plan配置方式類似但額度策略不同https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite配置骨架就這些重點是三件套齊全、路徑正確、Key 別泄露。下一步做連通性驗證確認真的能通。4. 驗證請求與成功結果連通性檢查與 AWR 報告確認配置寫完不算完得驗證。這一節(jié)分兩部分TaoToken 側的連通性檢查以及 Oracle 側 AWR 報告生成成功的確認。先看 TaoToken 側。最直接的驗證方式是發(fā)一個最小請求看返回是否正常。如果你有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字段和文本內(nèi)容說明 Key、Base URL、模型 ID 三件套都通了。如果返回 401說明 Key 有問題返回 404說明 Base URL 或路徑不對返回 400 且提示 model 相關說明模型 ID 寫錯了。注意上面的路徑是/api/v1/messages這是 Anthropic 兼容格式。如果你用的是 OpenAI 兼容格式路徑換成/api/v1/chat/completions請求體也相應調(diào)整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-keyOpenAI 用Authorization: Bearer。別混用混用會 401。如果你用的是 Claude Code驗證更簡單直接在終端里跑claude -p 回復 ok如果輸出ok或類似內(nèi)容說明配置生效。如果報OAuth error或local proxy failed往下看第 5 節(jié)的排查。再看 Oracle 側。awrrpt.sql生成成功后終端會輸出類似Report written to yxl.html同時當前目錄會出現(xiàn)yxl.html文件。用ls -lh yxl.html確認文件大小正常報告幾百 KB 到幾 MB 不等太小可能是區(qū)間選得太窄或快照數(shù)據(jù)缺失。[oraclemytesthost ~]$ ls -lh yxl.html -rw-r--r-- 1 oracle oinstall 1.2M Nov 20 16:30 yxl.html下載到本地后瀏覽器打開重點看這幾個部分第一數(shù)據(jù)庫詳細信息。確認 DB Name、Instance、Host、Release 版本和你排查的庫一致別拿錯庫的報告。第二快照詳細信息。確認起止時間和snap_id是你選的區(qū)間Elapsed時長合理。第三負載信息??碊B 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總等待大但平均等待小通常不是大問題。第五共享池統(tǒng)計信息。Memory Usage %長期在 70% 左右比較健康低于 50% 說明內(nèi)存浪費高于 90% 要檢查是否有 PL/SQL、cursor 占用過多考慮擴內(nèi)存或排查泄漏。第六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。解析時間長、執(zhí)行次數(shù)少的 SQL優(yōu)先優(yōu)化Executions為 0 的說明 SQL 正在執(zhí)行時生成了快照可以忽略或重新生成。驗證通過后你就有了完整的排查鏈路AWR 報告定位問題TaoToken 通道輔助分析。下一步看常見報錯怎么處理。5. 本篇常見錯排查401、local proxy failed、reading choices 與 OAuth這一節(jié)把 Oracle 側和 TaoToken 側的高頻報錯放一起對照真實錯誤信息給排查路徑。先看 TaoToken 側。401 Unauthorized。最常見的原因是 Key 寫錯、Key 過期、或者鑒權頭用錯。排查步驟確認 Key 是從 API Keys 頁復制的完整字符串沒有多余空格確認 Anthropic 格式用x-api-keyOpenAI 格式用Authorization: Bearer確認 Base URL 是https://taotoken.net/api沒有多加/v1導致路徑重復。如果還不行重新創(chuàng)建一個 Key 試試。local proxy failed。這個報錯通常出現(xiàn)在 Claude Code 或類似工具里意思是本地代理層沒起來或配置沒生效。排查確認settings.json里的ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY都填了確認工具重啟過讀到了新配置確認沒有其他環(huán)境變量比如系統(tǒng)級的ANTHROPIC_BASE_URL覆蓋了你的配置??梢杂胑nv | grep ANTHROPIC檢查當前生效的環(huán)境變量。reading choices 報錯。這個通常出現(xiàn)在 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 模式需要確認沒有觸發(fā) OAuth。排查檢查settings.json里是否同時存在 OAuth 相關配置和 API Key 配置兩者沖突時優(yōu)先走 OAuth導致 Key 不生效。清掉 OAuth 相關字段只保留ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY、ANTHROPIC_MODEL三件套。再看 Oracle 側。ORA-20200: Invalid snapshot ID。輸入的snap_id不存在或已被清理?;氐絛ba_hist_snapshot查詢確認 ID 有效且未被AWR_RETENTION清理。ORA-13509: Error encountered during AWR report generation。通常是快照區(qū)間內(nèi)有斷層或者STATISTICS_LEVEL是BASIC。檢查快照連續(xù)性確認統(tǒng)計級別。SP2-0552: Bind variable X not declared。在awrrpt.sql交互里輸入了非法字符比如中文標點或空格。重新執(zhí)行輸入純數(shù)字。報告文件找不到。awrrpt.sql生成的文件在當前工作目錄不是$ORACLE_HOME。用pwd確認當前目錄或者用find / -name yxl.html 2/dev/null找。排查完這些基本能覆蓋 90% 的報錯場景。如果遇到?jīng)]列出的錯誤先看報錯原文再對照配置三件套和快照區(qū)間逐項排除。6. 語義一致 CTA接入文檔、模型對話與 Coding Plan報告生成鏈路跑通后如果你想把 TaoToken 接入到日常的數(shù)據(jù)庫巡檢腳本、AWR 報告解讀工具或者長期跑的 Agent 任務里可以從下面幾個入口繼續(xù)。需要查接入細節(jié)、參數(shù)說明、錯誤碼看接入文檔https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite想先驗證模型能不能用、返回格式對不對去模型對話頁發(fā)條消息https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite要管理 Key、創(chuàng)建新 Key、查看額度去 API Keys 頁https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite如果你要長期跑編碼任務、Agent 工作流或者需要更穩(wěn)定的額度策略看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewriteClaude Code 用戶如果遇到 Anthropic 相關配置問題可以看專門的接入說明https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite最后分享一個我踩過的坑awrrpt.sql生成的報告文件名如果帶路徑比如/tmp/yxl.htmlOracle 會寫到指定路徑但如果你沒寫路徑只寫文件名它寫在當前工作目錄。有次我在$ORACLE_HOME/dbs下執(zhí)行生成的文件就在那兒找了半天。所以生成后先pwd確認目錄再用ls找文件別急著sz。另外TaoToken 的 Key 建議用環(huán)境變量注入別寫死在config.toml里尤其是多人共用的服務器避免 Key 泄露。