Oracle常见错误
=============================================================================================
错误: ORA-28040: No matching authentication protocol
原因:客户端版本与服务器端版本不一致导致,比如客户端是11g,而服务器端是12c
解决方案:
最根本的解决办法是安装与服务器端版本一致的客户端
网上也有其他的办法,如修改sqlnet.ora文件追加下列配置,但修改后并没有解决该问题
错误:ORA-12704: character set mismatch
原因:字符集不匹配,在使用Union all合并时,若A集合中某列为nvarchar2或nvarchar类型,
而B集合中对应字段为varchar2,或使用了to_char(),或用''来代替时,会导致该问题
解决方案:
方案1:都统一使用函数cast('字段' as nvarchar2(10))转换为nvarchar2或nvarchar类型
方案2:都统一使用函数to_char('字段')转换为varchar2或varchar类型
方案3:如果是用''来代替时,在''前加一个N,,N''表示将''转换为Unicode编码
=============================================================================================
错误:ORA-32034: unsupported use of WITH clause
原因:With子句使用错误,主要有以下几点原因:
1 with子句内还嵌套一个with,一个查询脚本内只能有一个with,并且是在开头的位置,其他子查询则不需要显式的用with
2 对于set query, with子句不能用在分支里
3 with被用在了圆括号里
解决方案: 根据原因对脚本一一进行排查
=============================================================================================
错误:ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT
原因:初始化参数pga_aggregate_limit是用于指定实例在运行时该实例专用内存的上限值
如果实例在运行时超过了这个上限,就会通过中断Session的最大Program Global Area (PGA)内存让实例专有内存达到上限值以下
解决方案:增加pga_aggregate_limit初始化参数值或减少内存使用
=============================================================================================
错误:ORA-00918: column ambiguously defined
原因:select 查询的字段在from的两张表中都存在,导致数据库无法区别需要查询的字段来自于哪张表
最终执行的select语句中如果有重复的字段,结果显示时会在重复字段后追加_1,但如果是在嵌套临时表有重复字段,然后select * from 嵌套临时表,则会报该错误
=============================================================================================
错误:ORA-12537: TNS:connection closed
原因:原因可能是processes和session值设置太小或者dispatcher使用率过高
执行如下语句查看process和session的数量是否超过预设值,如果超过则要关闭不使用的会话
select count(1) from v$session
select count(1) from v$process
ORA-02429: cannot drop index used for enforcement of unique /primary key