Oracle数据库常见错误总结(一)

实际项目实践过程中,经常会遇到一些形如“ORA-XXXX”的Oracle错误提示,此时,我们便会打开百度、Google,搜索相关技术解决方案。本系列博文的目的就在于,对常见的Oracle错误提示进行总结,不断完善。


ORA-12560

Oracle数据库常见错误总结(一)_第1张图片

ORA-12560: TNS: protocol adapter error(SQLPLUS)
ORA-27101: shared memory realm does not exist(PL/SQL Developer)

(1)原因分析
在path环境变量中Oracle_home设置在client之后、且PL/SQL Developer设置正确的ORACLE_HOME和OCI DLL,使用sqlplus出现ORA-12560错误,PL/SQL Developer出现ORA-27101错误。

(2)解决方法(之一): 将ORACLE_HOME/bin放在CLIENT_HOME/bin之前,sqlplus命令和PL/SQL Developer均可正常使用。

(3)解决方法(之二): 数据库链接字符串有误,修改连接字符串。


ORA-28001

Oracle数据库常见错误总结(一)_第2张图片

解决方法(之一):
这个问题是由于Oracle 11G的新特性所致, Oracle 11G创建用户时缺省密码过期限制是180天, 如果超过180天用户密码未做修改则该用户无法登录。可通过:
SELECT * FROM dba_profiles WHERE profile=’DEFAULT’ AND resource_name=’PASSWORD_LIFE_TIME‘;
语句查询密码的有效期设置,LIMIT字段是密码有效天数。

在密码将要过期或已经过期时可通过ALTER USER 用户名 IDENTIFIED BY 密码;语句进行修改密码,密码修改后该用户可正常连接数据库。长久对应可通过ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED语句将口令有效期默认值180天修改成“无限制”。出于数据库安全性考虑,不建议将PASSWORD_LIFE_TIME值设置成UNLIMITED,建议客户定期修改数据库用户口令。


ORA-01659

ORA-01659 无法分配超出5(或者其他数字)的MINEXTENTS** 

(1)原因:表空间已满

(2)解决方法:使用SQLPLUS登陆命令修改,或进入Oracle Enterprise Manager Console手工修改ALTER DATABASE DATAFILE ‘C:\SDE.dbf’ AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED 或ALTER TABLESPACE SDE AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED


客户端连接Oracle报错

Oracle数据库常见错误总结(一)_第3张图片

Oracle数据库常见错误总结(一)_第4张图片

(1)问题分析

   关于这个问题,其出现的机会还是比较大。
   而且网上关于这个问题的回答也基本上有两种不同的解决方式。

   **http://www.cnblogs.com/shunyao8210/archive/2011/11/16/2251302.html
   http://heisetoufa.iteye.com/blog/287714**

看完后,发现解决的方式有些混乱,竟然授权用户有NETWORK SERVICE或Authenticated Users,而授权的目录有ORACLE_CLIENT,也有ORACLE_HOME,即,其实网络上有4种解决方式(2种授权用户与2种目录授权的组合),让人不知所措。

(2)问题探索
为此,我在我的电脑上进行了验证,过程如下:

(一)、软件环境:
(1) 操作系统:Windows 7 64位;
(2) Oracle环境:Oracle Server 64位,Oracle Client 64位。

(二)、实验步骤:

1. 对ORACLE_CLIENT授权

(1) 设置NETWORK SERVICE用户拥有oracle client目录的读取和执行、列出文件内容、读取、写入权限后,重启IIS。
结果:错误提示依旧存在。
(2)使用Authenticated Users用户赋予其上述权限后,重启IIS,错误消失。

此时,ORACLE_HOME没有对NETWORK_SERVICE和Authenticated Users用户赋予上述权限。

2 对ORACLE_HOME授权

(1) 设置NETWORK SERVICE用户拥有oracle HOME目录的读取和执行、列出文件内容、读取、写入权限后,重启IIS,错误提示“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”,去掉ORACLE_HOME目录对NETWORK SERVICE用户的授权;
(2)使用Authenticated Users用户赋予其上述权限后,重启IIS,出现如下新的错误提示:

Oracle数据库常见错误总结(一)_第5张图片

3. 重新添加ORACLE_CLIENT对Authenticated Users用户的授权,保留ORACLE_HOME目录的权限配置,
测试结果:错误消失,访问正常!

4.  去掉ORACLE_HOME目录的权限配置,保留ORACLE_CLIENT对Authenticated Users用户的授权,
测试结果:错误消失,访问正常!

结论:
1. 只需对ORACLE_CLIENT对Authenticated Users用户的授权,与ORACLE_HOME及其用户权限是否配置无关!
2. 对于网络上提供的:“将ORACLE_HOME目录赋予NETWORK_SEVICE用户相应权限、并将NETWORK_SEVICE用户加到用户组Administrator里” 的做法,在我的电脑上测试未通过。

Oracle数据库常见错误总结(一)_第6张图片


ORA-08002

ORA-08002:序列XXXX尚未在此进程中定义

(1)现象分析:
select sequence.currval from dual 时报“ORA-08002: 序列XXXX尚未在此进程中定义”。

(2)原因分析:未定义该序列;未初始化新定义的序列。

(3)解决方案:
在已经正确定义该序列前提下,使用sequence.nextval进行序列初始化

Oracle数据库常见错误总结(一)_第7张图片

PS:在序列作为自增长字段的使用场景中,有时候会出现一个问题:即,将机器A上表的数据拷贝到另一个机器B上,而机器B上该表的序列值没有被扩大、仍然保持数据表拷贝过来之前的值,那么会出现“ORA-00001”错误提示。因为B机器上某个依赖序列新增、且该字段有唯一性约束时,生成得值在数据表中已经存在,这时会违反唯一性约束。


ORA-12154

ORA-12154: TNS: 无法解析指定的连接标识符

原因分析:

(1) 出现以上错误提示出现的原因之一,是在一台电脑上同时安装了oracle客户端和数据库服务,并且是先安装客户端,再安装数据库服务造成的,如果先安装数据库服务,再安装客户端就不会出现这种情况了;
(2) tnsnames.ora配置有误;
(3) 数据库链接字符串有误;

解决方法(之一) :
(1)配置Oracle服务端Net Manager,或者直接将Oracle客户端的tnsnames.ora拷贝到服务端对应目录;
(2)在path目录中,将client的bin目录放在ORACLE_HOME之前,且在使用PL/SQL Developer时,将其Connection的ORACLE_HOME配置为Client的主目录;


ORA-28002

ORA-28002: the password will expire within 7 days
原因分析:

    Oracle 11G 普通用户有个180天的缺省密码周期,用户在安装完数据库后未对口令过期策略进行调整,当快过期的时候即会出现此提示。

解决方法(之一) :
(1) 查看当前用户的profile;
SELECT username,PROFILE FROM dba_users;
(2) 查看其profile的有效期设置;
SELECT * FROM dba_profiles s WHERE s.profile=\’DEFAULT\’
AND resource_name=\’PASSWORD_LIFE_TIME\’;
(3) 修改密码有效期为“无限制“;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
(4) 修改后,还没有被提示ORA-28002警告的帐户不会再碰到同样的提示;已经被提示的帐户必须使用alter user USERNAME identified by NEWPASSWORD再改一次密码。


ORA-00119

Oracle数据库常见错误总结(一)_第8张图片

解决方法(之一) :
(1) 文本文件打开tnsnames.ora,找到ADDRESS;    
(2) 打开数据库安装时创建的初始化pfile文件,将其中的local_listener的value改为上述ADDRESS地址;
(3) 使用下述命令创建spfile: 
    startup pfile='D:\app\Mike\admin\orcl\pfile\init.ora.112620141540’;
    create spfile from pfile ='D:\app\Mike\admin\orcl\pfile\init.ora.112620141540’;
(4) 退出重新登录即可

BadImageFormatException. This will occur when running in 64 bit mode with the 32 bit Oracle client components installed

Stackoverflow给出的说法:

You’re using System.Data.OracleClient. This namespace has been deprecated and will be removed in a future version of .NET. Perhaps you are using a 32-bit version of that? It is also not part of the Oracle client, so whether you are using a 32-bit or 64-bit Oracle client is irrelevant.

http://stackoverflow.com/questions/24104210/badimageformatexception-this-will-occur-when-running-in-64-bit-mode-with-the-32 给出的解决方法,解决了Windows Server 2008 R2、64位Oracle Server、AnnyCPU编译模式的问题。

参考:http://blog.csdn.net/leshami/article/details/6396989。


ORA-32004

ORA-32004: 指定了废弃/过时的参数

Oracle数据库常见错误总结(一)_第9张图片

原因分析:
根据提示,可以看出是该版本的数据库在启动时(具体来说,是启动到nomount阶段检查参数时),发现有些参数设置已经过时,故出现ORA—32004错误(警告)。

解决办法:

由于该错误(警告)是因为 “参数设置已经过时”,故通过如下步骤解决:
(1) 启动到nomount阶段,查看alert日志:如D:\app\Mike\diag\rdbms\orcl\orcl\alert\ log.xml;
(2) 找到对应的提示,如
![这里写图片描述](https://img-blog.csdn.net/20160721100103062)
(3) 修改参数值、或解决错误

关于Oracle数据库常见错误这部分内容,会在后续工作中陆续更新。

Oracle数据库常见错误总结(一)_第10张图片

你可能感兴趣的:(Oracle&MySQL数据库)