Oracle常见错误和处理方法(二)

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语句修改字符集,但是创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8US7ASCII的超集,修改数据库字符集可使用Alter database character set UTF8。

ORA-28547:连接服务器失败,可能是Oracle Net管理错误

问题描述:ORA-28547:连接服务器失败,可能是Oracle Net管理错误
错误原因:oracle>product>10.2.0>server>network>ADMIN文件夹下的三个配置文件没有配置正确。
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_LISTENER =
  (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))。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

keven2840

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值