Oracle中常出现的错误信息及解决方案

错误信息一:ORA-00001 违反唯一约束条件

最常见的问题原因是:主键序列化问题,即ORACLE表主键ID突然从已经存在的ID值开始自动生成,导致违反主键唯一性约束;

解决方案,修改序列值,将序列最小值值设置的大一些。

如果在修改的时候出现违反唯一约束,说明你对主键值进行修改时出现重复,或者没加where条件。

错误信息二:oracle ORA-01745: 无效的主机/绑定变量名

最常见的原因:sql语句中语法错误太多,例:多写了一个冒号或逗号,或者变量名称使用了oracle关键字

解决方案:审查sql语句,更改为正确的sql语句。

错误信息三:ORA-01460: 转换请求无法实现或不合理

常见原因有一下几种:

1.读入到数据库中的字符过长无法实现。

解决方案:将字符串(只有4000)类型改为clob类型

2.客户端和服务端字符集不一致。

解决方案:

step1、通过执行select * from V$NLS_PARAMETERS查看服务端字符集

PARAMETER VALUE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET ZHS32GB18030
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET UTF8
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE

step2、通过regedit修改注册表(仅讨论windows版)进行客户端的字符集,位置\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG

修改为[NLS_LANGUAGE ]_[NLS_ISO_CURRENCY]_[NLS_CHARACTERSET]

如上面的的服务器,应该修改为:AMERICAN_AMERICA.ZHS32GB18030

错误信息四:ORA-01455: 转换列溢出整数数据类型

错误原因:

Export命令会将表的statistics值转成成整形。当这个statistics值超过2^31-1时,就会报这个错误。 

解决方案:

 当我们在exp命令加上参数:INDEXES=n STATISTICS=none 后就不会报这个错误。

或者:

1. 通过dba_tables  dba_indexes 来查看对应表的值。 num_rows值,看是否超过了2^31-1

如果表的numrows超过了,可以手工的修改表的这个值,如:
 SQL> execute sys.dbms_stats.set_table_stats( 'SCOTT', 'EMP', numrows => 1000000000000);

 

该命令格式:

 DBMS_STATS.SET_TABLE_STATS(<owner>, <table_name>, <statistic_field> => <new lower value>)

 

2. 删除对应的统计信息

表:

       SQL>ANALYZE TABLE <table_name> DELETE STATISTICS 

索引:

       SQL>ANALYZE INDEX <index_name> DELETE STATISTICS  
 
或者使用:

       execute sys.dbms_stats.delete_index_stats(ownname => 'scott', indname => 'my_indx_1');

       execute dbms_stats.delete_table_statsownname => 'scott', tabname=>'table_name'

错误信息五:ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄

错误原因:

oracle的会话数超出了限制,一般都是由于多次connect建立多个连接会话引起的,最后导致oracle无法响应新的请求,从而出现ora-12516错误。

解决方案:

1.查看当前连接进程数

SQL>select count(*) from v$process;

2.查看连接数上限

SQL>select value from v$parameter where name = 'processes';

 

3.查看当前数据库的processes设置

SQL> show parameter processes

NAME                                 TYPE        VALUE 
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
job_queue_processes                  integer     10
log_archive_max_processes            integer     2
processes                            integer     150 

 

SQL> show parameter sessions
NAME                                 TYPE        VALUE
java_soft_sessionspace_limit         integer     0l
icense_max_sessions                 integer     0
license_sessions_warning             integer     0
logmnr_max_persistent_sessions       integer     1
sessions                             integer     170
shared_server_sessions               integer

 

4.只要会话连接数超过上面的process数150或者sessions数170,再来一个的会话进程,就会产生12516错误。因此可以修改一下该值:

sessions=1.1*processes+5;//这个是sessions值和processes值的关系,最好按照这样做,

因此如果要将processes数设置为500,则sessions数必须为1.1*500+5=555

 

SQL> alter system set processes=500 scope=spfile;
系统已更改。
SQL> alter system set sessions=555 scope=spfile;
系统已更改。

 

5.重新启动数据库服务即可。

SQL>shutdown immediate

```

SQL>startup

 

错误信息六:ora-00907 缺失右括号

错误原因:出现的原因好多,归根结底来说就是sql语句不正确,例:关键字写错、字符串没加单引号,字段类型不一致等等,都会出现这种错误提示

解决方案:审查sql语句,书写正确的sql

 

转载于:https://my.oschina.net/u/1470832/blog/501739

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值