ORA-06502: PL/SQL: 数字或值错误_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2588 | 回复: 0   主题: ORA-06502: PL/SQL: 数字或值错误        下一篇 
nini
注册用户
等级:新兵
经验:56
发帖:63
精华:0
注册:2011-12-16
状态:离线
发送短消息息给nini 加好友    发送短消息息给nini 发消息
发表于: IP:您无权察看 2015-6-16 17:28:36 | [全部帖] [楼主帖] 楼主

最近在生产库上生成AWR报表时,出现如下错误

ERROR: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小 ORA-06512: 在 "SYS.DBMS_WORKLOAD_REPOSITORY", line 919 ORA-06512: 在 line 1

数据库版本为WIN64,11.2.0.3

在oracle support中查询如下,确认为bug

经过大规模的搜索和排查资料,发现有如下两种解决方法:

1、生成awr报告时不采用html格式,采用txt格式的话就可避免该错误

2、可以利用管道表间接获取awr的内容

第一种方法虽然可以避免报错,但是txt格式的awr报告阅读极其不方便,因此不是解决之道,通过结合生成外部文件,可以通过方法2实现html格式的awr报告,脚本如下:

DECLARE
V_DBID  NUMBER;
V_BEGIN NUMBER;
V_END   NUMBER;
TYPE T_VARCHAR IS TABLE OF VARCHAR2(8000 CHAR) INDEX BY BINARY_INTEGER;
V_REPORT T_VARCHAR;
FILE_HANDLE    UTL_FILE.FILE_TYPE;
V_FILE_NAME    VARCHAR2(1000);
V_DIR          VARCHAR2(30);
V_STR          VARCHAR2(32766);
BEGIN
V_BEGIN:=5273;
V_END:=5275;
SELECT DBID INTO V_DBID FROM V$DATABASE;
V_DIR:='DATA_PUMP_DIR';
V_FILE_NAME:='AWRRPT_'||TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')||'.HTML';
FILE_HANDLE:=UTL_FILE.FOPEN(V_DIR,V_FILE_NAME,'W',32766);
SELECT OUTPUT BULK COLLECT
INTO V_REPORT
FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(V_DBID,
1,
V_BEGIN,
V_END,
0));
for c in 1..v_report.count
loop
V_STR:=v_report(c);
UTL_FILE.PUT_LINE(FILE_HANDLE,V_STR,true);
end loop;
UTL_FILE.FCLOSE(FILE_HANDLE);
EXCEPTION WHEN OTHERS
THEN
IF(UTL_FILE.is_open(FILE_HANDLE)) THEN
UTL_FILE.fclose(FILE_HANDLE);
END IF;
RAISE;
END;


通过执行脚本,可在服务器的'DATA_PUMP_DIR'目录下生成名为AWRRPT_YYYYMMDDHH24MISS.HTML的awr报告文件,然后可以心满意足地查看各种需要的报告信息了。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论