ORA-01843:无效的月份
问题描述:运行程序时报错,错误报告:ORA-01843:无效的月份
错误原因:月份格式不对,比如因为客户端是中文环境,格式为‘01-Jan-1999’中的Jan就不能用英文的月份写法
解决方法:使用alter session命令将nls_date_language修改为american,命令如下:
alter session set nls_date_language = 'american' --以英文显示日期
ORA-12560:协议适配器错误
问题描述:OAR-12560:TNS:协议适配器错误
错误原因:造成ORA-12560错误的原因有三个:
1、监听服务没有起起来。
解决方法:windows平台如下操作:开始---程序---管理工具---服务,打开服务面板,
启动Oraclehome92TNSlistener服务。
2、database instance(数据库实例)没有启动起来。
解决方法:Windows品台如下操作:开始---程序---管理工具---服database务,打开服务面板,启动OracleserviceXXXX,XXXX是你的database SID。
3、注册表问题。
解决方法:运行,输入regedit打开注册表编辑器,然后进入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME将该环境变量ORACLE_SID设置为XXXX,XXXX就是你的database SID。或者右击我的电脑,属性---高级---环境变量---系统变量---新建,变量名=Oracle_sid,变量值=XXXX,XXXX是你的database SID。或者进入SQLplus前,在command line下输set oracle_sid=XXXX,XXXX就是你的database SID。
ORA-12899:插入的数据长度超出字段的设置长度
问题描述:ORA-12899:插入的数据长度超出字段的设置长度
产生原因:数据导入时报ORA-12899错误,这是由于Oracle字符集不同,汉字占的长度不同造成的。中文在ZHS16GBK中占2个字节,在UTF-8中占3个字节,所以汉字导入UTF-8字符集的数据库就很容易出现字段长度不够。
解决办法:
一个是增加字段长度,还有就是修改字符集。如果系统中已经存在很多数据,建议修改字段长度,因为修改字符集候原来数据库表中的汉字全部变成乱码。如果一定要修改字符集,必须先导出数据,待到字符集修改后再重新导入这些数据。
查看字符集的方法可以用PL/SQL DEVELOP---Reports---DBA---NLS Database Parameters
数据库字符集在创建后原则上不能更改。不过有3种方法可行。
1、增加表字段的长度,比如:原来的表字段长度为varchar2(20),把它增加到varchar2(30)即可。如果还不行,就继续增大,直到成功为止。
2、如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。
3、通过Alter database character set语句修改字符集,但是创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用Alter database character set UTF8。
ORA-28547:连接服务器失败,可能是Oracle Net管理错误
sqlnet.ora 用在oracle client端,用于配置连接服务端oracle的相关参数,sqlnet.ora可以删除,这样在oracle客户端连接数据库的时候,默认采用tnsnames.ora中的配置。
tnsnames.ora 用在oracle client端,用户配置连接数据库的别名参数,就像系统中的hosts文件一样。listener.ora 用在oracle server端,配置oracle服务端程序的监听办法,比如限制某些ip等参数。
解决方法:
第一种解决方案:
listener.ora是服务器端的配置oracle的文件。
注释掉listener.ora中的(PROGRAM = extproc),将listener.ora修改为:
(SID_LIST =
(SID_DESC =
(SID_NAME = prod)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
# (PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.8)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
第二种解决方案如下:
客户端的配置文件sqlnet.ora中配置如下:
将#SQLNET.AUTHENTICATION_SERVICES= (NTS)注释掉,改成如下即可!
SQLNET.AUTHENTICATION_SERVICES= (NONE)
同时修改监听器配置文件,具体做法是: 在oracle安装目录下搜索listener.ora文件,一般在$/NETWORK/ADMIN目录下,把主机名用ip地址代替,例如(ADDRESS = (PROTOCOL = TCP)(HOST = HBONLINE1)(PORT = 1523))改为(ADDRESS = (PROTOCOL = TCP)(HOST = 168.168.168.42)(PORT = 1523))。