Oracle报错汇总

随笔2个月前发布 优雅野蛮人
10 0 0

(1)ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column

解决方法:在实际的 LONG 或 LOB 列之后提供了扩展的非 LONG 绑定数据错误,这个错误是因为在绑定参数时把数据库中字段类型为LONG的字段放置在其他字段前设置了,只要将类型为LONG的字段绑定参数时放在最后设置即可解决。

错误分析:这是oracle 10g在clob字段中的一个bug,oracle在insert语句时,会默认将所有私有属性按照首字母排序,clob字段如果恰好被排在varchar2或其他非clob字段前,就可能会出现此异常。

解决的方法是:给实体model中clob字段属性前加zz,使其到最后即可。

(2)ORA-00918: 未明确定义列

    解决方法:1)、当在复合查询语句中的时候,查询查询列中重复列,给重复列重命名即可。

(3)java.sql.SQLRecoverableException: 无法从套接字读取更多的数据

解决办法:1)、重启了数据库服务器,但是应用服务没有重启。重启应用服务即可。

                 2)、可能是网络原因。

                 3)、表或索引上有数据坏块,扫描表及索引,查看是否有坏块,如果有,进行坏块修复,或表及索引的重建。

 

(4)查看Oracle日志。Oracle数据库的日志文件alert_$ORACLE_SID.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息。路径为:

ORACLE_BASE/admin/ORACLE_SID/bdump/alert_ORACLE_SID.log
新建的Oracle数据库日志文件,Alert log XML文件位置:

SQL> select value from v$diag_info where name ='Diag Alert';
Alert log文本文件位置:

SQL> select value from v$diag_info where name ='Diag Trace';

(5)ORA-28001:口令已失效  (the password has expired解决办法)

原因:Oracle11G创建用户时缺省密码过期限制是180天(即6个月), 如果超过180天用户密码未做修改则该用户无法登录

    一、解决方式:

方式一: 在密码将要过期或已经过期时进行修改密码,密码修改后该用户可正常连接数据库
方式二: 将口令有效期默认值180天修改为“无限制”。但是出于数据库安全性考虑,不建议将PASSWORD_LIFE_TIME值设置成UNLIMITED

     二、查看数据库密码默认有效期

登录Oracle:sqlplus scott/tiger@orcl as sysdba;

查看用户的proifle是哪个,一般是default:select username,PROFILE FROM dba users;

查看对应的概要文件(如default)的密码有效期设置:SELECT * FROM dba profiles s WHERE S.profile='DEFAULT' AND resource name='PASSWORD LIFE TIME';

解决方式一:修改用户密码

   alter user 用户名 identified by 新密码:

解决方式二:修改默认有效期

将概要文件(如default)的密码有效期由默认的180天修改成”无限制”,修改之后不需要重启动数据库,会立即生效
alter PROFILE DEFAULT LIMIT PASSWORD LIFE TIME UNLIMITED;

修改后,还没有被提示ORA-28002警告的用户账号不会再碰到同样的提示;而已经被提示的用户账号必须再改一次密码
alter user 用户名 identified by<原来的密码>account unlock;//可以不用换密码

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...