问题描述
在11.2.0.2中读取AWR报告的过程在11.2.0.3中报错。
由于过程太长,将关键部分简化,分别在10.2和11.2.0.3中运行:
SQL> SELECT * FROM V$VERSION; BANNER ---------------------------------------------------------------- Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 - 64bi PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS FOR Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 – Production SQL> DECLARE 2 V_DBID NUMBER; 3 V_BEGIN NUMBER; 4 V_END NUMBER; 5 TYPE T_VARCHAR IS TABLE OF VARCHAR2(1500 CHAR) INDEX BY BINARY_INTEGER; 6 V_REPORT T_VARCHAR; 7 BEGIN 8 SELECT A.DBID, MAX(SNAP_ID - 1), MAX(SNAP_ID) 9 INTO V_DBID, V_BEGIN, V_END 10 FROM DBA_HIST_SNAPSHOT A, V$DATABASE B 11 WHERE A.DBID = B.DBID 12 GROUP BY A.DBID; 13 SELECT OUTPUT 14 BULK COLLECT INTO V_REPORT 15 FROM TABLE( 16 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML( 17 V_DBID, 18 1, 19 V_BEGIN, 20 V_END, 21 0)); 22 END; 23 / PL/SQL PROCEDURE successfully completed.复制
10204上运行没有任何问题,但是在11.2.0.3中:
SQL> SELECT * FROM V$VERSION; BANNER -------------------------------------------------------------------------------- Oracle DATABASE 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production PL/SQL Release 11.2.0.3.0 - Production CORE 11.2.0.3.0 Production TNS FOR Solaris: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 – Production SQL> DECLARE 2 V_DBID NUMBER; 3 V_BEGIN NUMBER; 4 V_END NUMBER; 5 TYPE T_VARCHAR IS TABLE OF VARCHAR2(1500 CHAR) INDEX BY BINARY_INTEGER; 6 V_REPORT T_VARCHAR; 7 BEGIN 8 SELECT A.DBID, MAX(SNAP_ID - 1), MAX(SNAP_ID) 9 INTO V_DBID, V_BEGIN, V_END 10 FROM DBA_HIST_SNAPSHOT A, V$DATABASE B 11 WHERE A.DBID = B.DBID 12 GROUP BY A.DBID; 13 SELECT OUTPUT 14 BULK COLLECT INTO V_REPORT 15 FROM TABLE( 16 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML( 17 V_DBID, 18 1, 19 V_BEGIN, 20 V_END, 21 0)); 22 END; 23 / DECLARE * ERROR at line 1: ORA-06502: PL/SQL: NUMERIC OR VALUE error: Bulk Bind: Truncated Bind ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 919 ORA-06512: at line 1 ORA-06512: at line 13复制
专家解答
同样的代码在不同的版本中表现不同,很显然是Oracle的实现发生的变化。
从错误信息看,报错出现在BULK COLLECT INTO上,那么导致问题的应该是函数的返回值。
SQL> DESC DBMS_WORKLOAD_REPOSITORY FUNCTION ASH_REPORT_HTML RETURNS AWRRPT_HTML_TYPE_TABLE Argument Name TYPE IN/OUT DEFAULT? ------------------------------ ----------------------- ------ -------- L_DBID NUMBER IN L_INST_NUM NUMBER IN L_BTIME DATE IN L_ETIME DATE IN L_OPTIONS NUMBER IN DEFAULT L_SLOT_WIDTH NUMBER IN DEFAULT L_SID NUMBER IN DEFAULT L_SQL_ID VARCHAR2 IN DEFAULT L_WAIT_CLASS VARCHAR2 IN DEFAULT L_SERVICE_HASH NUMBER IN DEFAULT L_MODULE VARCHAR2 IN DEFAULT L_ACTION VARCHAR2 IN DEFAULT L_CLIENT_ID VARCHAR2 IN DEFAULT L_PLSQL_ENTRY VARCHAR2 IN DEFAULT . . . FUNCTION AWR_REPORT_HTML RETURNS AWRRPT_HTML_TYPE_TABLE Argument Name TYPE IN/OUT DEFAULT? ------------------------------ ----------------------- ------ -------- L_DBID NUMBER IN L_INST_NUM NUMBER IN L_BID NUMBER IN L_EID NUMBER IN L_OPTIONS NUMBER IN DEFAULT . . . PROCEDURE MODIFY_SNAPSHOT_SETTINGS Argument Name TYPE IN/OUT DEFAULT? ------------------------------ ----------------------- ------ -------- RETENTION NUMBER IN DEFAULT INTERVAL NUMBER IN DEFAULT TOPNSQL VARCHAR2 IN DBID NUMBER IN DEFAULT复制
返回结果为AWRRPT_HTML_TYPE_TABLE类型,查询TYPE类型获取详细信息:
SQL> SET LONG 10000 SQL> SELECT DBMS_METADATA.GET_DDL('TYPE', 'AWRRPT_HTML_TYPE_TABLE') FROM DUAL; DBMS_METADATA.GET_DDL('TYPE','AWRRPT_HTML_TYPE_TABLE') -------------------------------------------------------------------------------- CREATE OR REPLACE TYPE "SYS"."AWRRPT_HTML_TYPE_TABLE" AS TABLE OF AWRRPT_HTML_TYPE SQL> SELECT DBMS_METADATA.GET_DDL('TYPE', 'AWRRPT_HTML_TYPE') FROM DUAL; DBMS_METADATA.GET_DDL('TYPE','AWRRPT_HTML_TYPE') -------------------------------------------------------------------------------- CREATE OR REPLACE TYPE "SYS"."AWRRPT_HTML_TYPE" AS object (output varchar2(1500 CHAR))复制
可以看到10.2.0.4中,或者说在11.2.0.3以前的版本,TYPE的定义长度是1500 CHAR,而在11.2.0.3中定义变成:
SQL> SET LONG 10000 SQL> SELECT DBMS_METADATA.GET_DDL('TYPE', 'AWRRPT_HTML_TYPE') FROM DUAL; DBMS_METADATA.GET_DDL('TYPE','AWRRPT_HTML_TYPE') -------------------------------------------------------------------------------- CREATE OR REPLACE TYPE "SYS"."AWRRPT_HTML_TYPE" AS object (output varchar2(8000 CHAR))复制
显然RETURN类型的长度变化导致了这个问题,根据Oracle定义的变化简单修改代码,可以避免11.2.0.3上错误的产生:
SQL> DECLARE 2 V_DBID NUMBER; 3 V_BEGIN NUMBER; 4 V_END NUMBER; 5 TYPE T_VARCHAR IS TABLE OF VARCHAR2(8000 CHAR) INDEX BY BINARY_INTEGER; 6 V_REPORT T_VARCHAR; 7 BEGIN 8 SELECT A.DBID, MAX(SNAP_ID - 1), MAX(SNAP_ID) 9 INTO V_DBID, V_BEGIN, V_END 10 FROM DBA_HIST_SNAPSHOT A, V$DATABASE B 11 WHERE A.DBID = B.DBID 12 GROUP BY A.DBID; 13 SELECT OUTPUT 14 BULK COLLECT INTO V_REPORT 15 FROM TABLE( 16 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML( 17 V_DBID, 18 1, 19 V_BEGIN, 20 V_END, 21 0)); 22 END; 23 / PL/SQL PROCEDURE successfully completed.复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
553次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
475次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
451次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
450次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
446次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
439次阅读
2025-04-22 00:20:37
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
415次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
414次阅读
2025-04-22 00:13:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
394次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
365次阅读
2025-04-17 17:02:24
TA的专栏
Java中间件
收录0篇内容
热门文章
一次Connection reset by peer的问题排查
2021-12-07 33992浏览
Java8-Stream: no instance(s) of type variable(s) R exist so that void conforms to R
2021-02-19 32364浏览
nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1
2022-02-15 24279浏览
ORA-00904: "POLTYP": invalid identifier
2019-06-19 12935浏览
PageHelper排坑,处理排序失败: net.sf.jsqlparser.JSQLParserException
2022-05-19 12779浏览