ITPub博客

首页 > 数据库 > Oracle > ORA-06502报错导致数据库所有视图无法修改。

ORA-06502报错导致数据库所有视图无法修改。

原创 Oracle 作者:datapeng 时间:2014-03-10 11:55:07 0 删除 编辑
ORA-06502报错导致数据库所有视图无法修改。
今天有客户反映数据库所有视图和包重新编译都会报这个错
1.日志信息
Mon Mar  3 09:54:48 2014
Errors in file /oracle/oracle/admin/xxx/bdump/xxx_j000_21390.trc:
ORA-12012: 自动执行作业 1541 出错
ORA-04045: 在重新编译/重新验证 user.table_UPDATE_ST 时出错
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在line 14
Mon Mar  3 09:58:49 2014
Errors in file /oracle/oracle/admin/xxx/bdump/xxx_j001_21208.trc:
ORA-12012: 自动执行作业 1541 出错
ORA-04045: 在重新编译/重新验证 user.table_UPDATE_ST 时出错
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在line 14
Mon Mar  3 10:06:52 2014
Errors in file /oracle/oracle/admin/xxx/bdump/xxx_j000_21390.trc:
ORA-12012: 自动执行作业 1541 出错
ORA-04045: 在重新编译/重新验证 user.table_UPDATE_ST 时出错
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在line 14
2.
sqlplus 执行修改视图内容:
报:
ORA-00604
ORA-06502
ORA-06512
3.查看参数设置
执行 select dummy from dual; 没问题
执行
  SELECT KSPFTCTXPN PARAMETER_NUMBER,
KSPPINM PARAMETER_NAME,
KSPPITY PARAMETER_TYPE,
KSPFTCTXVL PARAMETER_VALUE,
KSPFTCTXDF IS_DEFAULT,
KSPPIFLG MODIFICATION_FLAG,
KSPFTCTXVF VALUE_FLAG
FROM X$KSPPI X, X$KSPPCV2 Y
WHERE (X.INDX + 1) = KSPFTCTXPN
AND KSPPINM LIKE '_system_trig_enabled';
结果为true\

4.编译视图没问题
Connected.
SQL> alter procedure table_update_st compile;
Procedure altered.
SQL> show errors;
No errors.
5.
执行视图内容修改的语句报错ORA-00604 ,ORA-06502,ORA-06512
SQL> exec table_to_custom_v;
BEGIN table_to_custom_v; END;
      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'table_TO_CUSTOM_V' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
5.解决
alter system set "_system_trig_enabled"=false;
6. 
官方文档上的解释:
ORA-06502: PL/SQL: numeric or value errorstring
Cause: An arithmetic, numeric, string, conversion, or constraint error occurred. For example, this error occurs if an attempt is made to assign the value NULL to a variable declared NOT NULL, or if an attempt is made to assign an integer larger than 99 to a variable declared NUMBER(2).
Action: Change the data, how it is manipulated, or how it is declared so that values do not violate constraints.
官方解释是:  想存入数据库的数据(包含数据,字符串等等)不符合该字段的定义(比如长度,约束等), 举个例子,就是说你想存一个空值到非空字段,如存入3位以上的数字到NUMBER(2)字段中,等等
官方解决方法是: 改变数据的类型,或长度,等等。
7.
oracle隐含参数“_system_trig_enabled”用来控制系统触发器的,用来存储系统的一些触发事件,但这个表(目前不知道是哪个表)本身有问题,导致数据无法插入。
解决思路: 把这个参数关掉,让系统的日志不保存在那张有问题的表中,就好了(当然有隐含风险,目前未知):
8.
一.如果是用户数据,则更改用户表,或者数据
二.如果是oracle系统表,则使用如下语句关系统系统触发器:
alter system set "_system_trig_enabled"=false;
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29371470/viewspace-1104458/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-12-06

  • 博文量
    228
  • 访问量
    2684254