目录

ORA-28040: No matching authencation  protocol

OracleOraDb11g_home1TNSListener服务启动后停止

ORA-28002: the password will expire within 7 days

IMP-00010: 不是有效的导出文件, 标头验证失败

ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务

ORA-01452: 无法 CREATE UNIQUE INDEX; 找到重复的关键字

ORA-01466: 无法读取数据 - 表定义已更改

ORA-32001: 已请求写入 SPFILE, 但是没有正在使用的 SPFILE

ORA-00959: 表空间 'xxx' 不存在

ORA-01031: 建表提示权限不足

ORA-01950: 对表空间 'WANG' 无权限

java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字

ORA-00904 "xxx": 标识符无效

ORA-00913: 值过多

ORA-01438: 值大于为此列指定的允许精度

ORA-00947: 没有足够的值

ORA-00909: 参数个数无效

ORA-01476: 除数为 0

ORA-00972:标识符过长


ORA-28040: No matching authencation  protocol

1、问题复现:Spring boot 应用启动时候正常,但是页面访问后台接口,程序再访问数据库时,控制台报错如下:没有匹配的身份验证协议

Caused by: java. sql. SQLExceptiona ORA-28040: No matching authentication  protocol
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java 112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java: 331)
....

2、产生原因:当时环境是:Java jdk 1.8 + Spring boot ,在开发环境时是 Oracle 11g,此时运行正常,后面到测试环境换成  Oracle 12C,就发生上面的错误,经过检查发现原来是 .jar 文件里面打了两个不同版本的 Oracle 驱动。

3、解决方式:直接用压缩工具打开 .jar 文件,然后手动删除多余的 ojdbc14-x.x.x.jar 文件,只留下  ojdbc8 版本的驱动即可。

这个错误引起的原因可能有多种情况,需要根据实际情况处理。

OracleOraDb11g_home1TNSListener服务启动后停止

1、问题复现:有时候连接 Oralce 的时候发现连接不上,然后打开 "services.msc" 服务面板发现 xxxxTNSListener 监听服务没有启动,当手动启动监听服务的时候,它弹框提示:“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”

2、产生原因:Oracle 数据库通常都会提供远程访问,比如小张电脑上安装了 Oralce 数据库,小李、小刘就可以直接访问小张的Oracle。Oracle 开启远程访问,需要在配置文件中设置本机 ip 地址,这样其它人才能通过 IP 访问,然而当 IP 在某些情况下发生变化时,比如切换了网络,或者是动态 IP 等情况,Oracle 监听器监听的 IP 与计算机实际 IP 就会不一致,然后就会发生上面的错误。

3、解决方式:找到 Oracle 数据库安装目录下的 listener.ora 文件,比如 C:\app\Think\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora。然后修改其中监听的 IP 为 Oralce 安装的计算机 IP 地址,比如下面的 192.168.3.195。最后再次启动监听服务即可正常。

# listener.ora Network Configuration File: C:\app\Think\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = C:\app\Think\product\11.2.0\dbhome_1)(PROGRAM = extproc)(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Think\product\11.2.0\dbhome_1\bin\oraclr11.dll")))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.195)(PORT = 1521))))ADR_BASE_LISTENER = C:\app\Think

DESCRIPTION_LIST 下面默认只有 localhost,只允许本机访问,如果需要被远程访问,则复制一个 DESCRIPTION,然后修改 HOST 为本机 IP 即可。

ORA-28002: the password will expire within 7 days

1、问题复现:有时候当登陆 oracle 的数据时候,提示 "ORA-28002: the password will expire within 7 days" 密码将在 7 天内过期。

2、产生原因:这是因为 Oracle 数据库默认对账户的密码有过期时间限制,比如 180 天,当快达到期限时就会有此提示。

3、解决方式一:修改账户密码,先使用具有管理员权限的账户登陆,然后对即将过期的密码账户进行修改:

alter user 用户名 identified by "新密码"; --修改用户密码

4、解决方式二:将密码设为永不过期,对于生产上的 web 程序使用的数据库账户密码,通常并不希望它变动,此时直接将密码设置成永不过期即可。

 -- 1、通过 dba_users 视图,查询用户名(username)、用户资源配置文件名(profile)-- 用户名 对应的 profile 通常都为 DEFAULT,包括 管理员用户也是
select username,profile from dba_users; -- 2、通过 dba_profiles 视图,查询 profile='DEFAULT' 且资源名为 "PASSWORD_LIFE_TIME" 的资源配置信息
-- PASSWORD_LIFE_TIME 表示密码有效期,结果中的 limit 表示此配置文件对此资源的限制,比如多少天.
select s.profile,s.resource_name,s.resource_type,s.limit from dba_profiles s where s.profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME'; -- 3、更改配置文件默认限制密码生命时间不受限制,即密码永不过期
alter profile default limit password_life_time unlimited;

修改后设置立即生效,不需要重启数据库,此时密码永远不会过期。

IMP-00010: 不是有效的导出文件, 标头验证失败

1、问题复现

1、开发时,同事发来一个 portalet2.dmp 文件,我需要将它导入到远程的 Oracle 服务器上,远程 Oracle 服务器版本为: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production,

我本地安装的 oracle 数据库版本为 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production,我在本地使用 PL/SQL 工具连接远程的 Oracle 服务器,然后新建用户,并为它授权:

create user portalet2 identified by 1;
grant dba to portalet2;

2、然后在本地的 cmd 中使用如下 imp 命令向远程 Oracle 服务器导入数据:

imp portalet2/1@192.168.2.240:1521/orcl file=C:/wmx/document/platform_2.0/PTV2/DB/build20200429/portalet2.dmp FULL=Y

3、然后报错如下(打开一看,发现它是 Oracle 19C 版本):

Import: Release 11.2.0.1.0 - Production on 星期三 5月 27 14:47:59 2020
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
IMP-00010: 不是有效的导出文件, 标头验证失败
IMP-00000: 未成功终止导入

2、产生原因

1、当导出使用的是 exp 命令,然后 imp 命令导入报错如上时,这是因为导入导出时的 oracle 版本不一致导致的。

3、解决办法

3.1、直接用编辑器打开待导入的 dmp 文件,然后修改头部第一行的版本号,网上有人说是将此版本号修改为将要导入的目标数据库的版本号,如本人这里是 12c,当改成 V12.02.00 时,imp 命令导入仍然报同样的错,而当我改成本机 oracle 数据库版本号时就成功了,即 V11.02.00,我怀疑是因为 imp 命令是本机 Oracle 下安装的。

3.2、查看本机 Oracle 版本:select * from v$version;   --也可以使用 sqlplus 连接查看。

ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务

1、使用 PL/sql 工具连接 Oracle 数据库的时候,报错提示如下:

2、首先检查 oracle 服务是否已经启动,启动后继续下面的操作。

3、找到 oracle 安装目录 (如 C:\app\Think\admin\orcl\pfile) 下的 init.ora.xxx 的文件,用编辑器打开找到 local_listener 行

4、找到 oracle 安装目录(如 C:\app\Think\product\11.2.0\dbhome_1\NETWORK\ADMIN)下的 tnsnames.ora 文件,打开并复制其中的 LISTENER_ORCL 的值,如 (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

5、最后粘贴到 init.ora.xxx 文件中的 local_listener 中,如:local_listener="(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))"

6、最后进入 cmd 中执行以下命令(pfile的值就是上面的 init.ora.xxx文件):

cmd 中执行:sqlplus

cmd 中执行,连接到空闲例程:sys/system as sysdba     

执行 sql,pfile 启动:startup pfile='C:\app\Think\admin\orcl\pfile\init.ora.1123201992052'

7、出现数据库装载完成,数据库已经打开的提示,那么就可以正常的登录了!

ORA-01452: 无法 CREATE UNIQUE INDEX; 找到重复的关键字

1、产生原因:创建唯一索引时,如果表中已经存在数据,并有数据违反了唯一约束,那么创建索引的时候会出现此错误。

2、解决方法:找到唯一唯一约束的重复数据,处理掉。

ORA-01466: 无法读取数据 - 表定义已更改

1、问题复现:flashback  闪回表中被删除的数据的时候,突然报错:ORA-01466:无法读取数据-表定义已更改

2、产生原因:如果删除表中的数据后,对表做了 ddl 操作(如增减字段,变更字段的长度,truncate 等),则不能再闪回该表,连查询该表在之前某个时刻的数据都会报错提示。

3、解决办法:无有效办法。

ORA-32001: 已请求写入 SPFILE, 但是没有正在使用的 SPFILE

1、当设置 Oracle 最大连接数的时候,如果出现如下错误,则可以参考本示例进行解决。

ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE
       ORA-32001: 已请求写入 SPFILE, 但是没有正在使用的 SPFILE

2、Oracle 有两钟启动方式:pfile 与 spfile,正常默认情况下是 spfile,而我有一次是 Oracle 数据库出了些问题,开机之后 Oracle 无法自动启动,手动启动也报错,无奈之下,只能使用 pfile 方式启动。

而修改 Oracle 最大连接数 Oracle 必须是 spfile 方式启动。

3、执行 Sql 命令:show parameter spfile,查询 Oracle 是以 spfile 还是 pfile 启动,如果 value 对应有值,则表示是 spfile 启动,否则就是 pfile 启动。

SQL> show parameter spfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      

4、如果是 pfile 启动的,则可以使用 sqlPlus 登陆进去,然后使用如下 sql 语句从 pfile 复制属性配置文件到 spfile:

SQL> create spfile from pfile;       -- 复制 pfile 属性配置文件并为 spfile 新建, 如果失败,则可以手动指定  pfile 的启动文件,如:create spfile from pfile='C:\app\Think\admin\orcl\pfile\init.ora.1123201992052';

文件已创建。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

5、最后可以再次使用 show parameter spfile 命令查询启动方式。

6、扩展信息:

pfile 方式启动对应的属性文件路径形如:C:\app\Think\admin\orcl\pfile\init.ora.1123201992052'                                      //路径与名称以实际安装路径为准

spfile 方式启动对应的属性文件路径形如:C:\app\Think\product\11.2.0\dbhome_1\database\SPFILEORCL.ORA           //路径以实际安装路径为准

属性文件中是一些 Oracle 的属性配置信息,比如 Oracle 最大允许连接数的配置信息就在 SPFILEORCL.ORA 中。

完整操作演示:https://gitee.com/wangmx1993/my-document/blob/master/sql/Oracle 修改最大连接数.sql

ORA-00959: 表空间 'xxx' 不存在

1、如下所示,system 管理员登录后,新建了一个表空间,然后创建一个用户,居然报错"表空间不存在",折腾了好久,后面解决办法是:重启一下 OracleServiceORCL 服务然后再操作就好了。

QL*Plus: Release 12.1.0.2.0 Production on 星期六 1月 9 16:27:43 2021Copyright (c) 1982, 2014, Oracle.  All rights reserved.请输入用户名:  system
输入口令:
上次成功登录时间: 星期六 1月  09 2021 16:27:26 +08:00连接到:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> create tablespace wang datafile 'E:\app\tablespace\wang.dbf' size 1024M autoextend on next 500M;表空间已创建。SQL> create user c##scott identified by scott default tablespace wang;
create user c##scott identified by scott default tablespace wang
*
第 1 行出现错误:
ORA-65048: 在可插入数据库 PDBORCL 中处理当前 DDL 语句时出错
ORA-00959: 表空间 'WANG' 不存在

ORA-01031: 建表提示权限不足

1、环境:Oracle 12c,先使用 system 管理员新建了一个表空间 "wang",然后新建了一个用户 "c##scott",给他授予了 connect,resource 权限。然后使用新用户 c##scott 登录,建表时居然报错:ORA-01031: 权限不足

2、使用 select * from session_privs; 明明可以查到 c##scott 用户是有  create table 权限的,可 CREATE TABLE 时居然报错了。

3、解决办法:重新使用 system 管理员对 c##scott 新用户分配建表权限:grant create table to c##scott; //然后就正常了。

ORA-01950: 对表空间 'WANG' 无权限

1、环境:Oracle 12c,先使用 system 管理员新建了一个表空间 "wang",然后新建了一个用户 "c##scott",给他授予了 connect,resource 权限。然后使用新用户 c##scott 登录,建表时正常,当往表中插入数据时就报错了:ORA-01950: 对表空间 'WANG' 无权限

2、解决办法:用管理员为新用户指定表空间配额不限:alter user c##scott quota unlimited on wang; //c##scott 是用户明,wang 是表空间名称

java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字

1、ORA-01722: 无效数字 发生的最大可能是增删改查操作时,数据库表的列是数值类型,然而 sql 中的值却是非数值类型,比如字符串,日期等等。

2、如下所示 deptno 是 number 类型,语句1、语句2正常,语句3执行失败。

insert into dept (deptno, dname, loc)  values (77,'云计算中心','长沙麓谷');
insert into dept (deptno, dname, loc)  values ('88','云计算中心','长沙麓谷');
insert into dept (deptno, dname, loc)  values ('kk','云计算中心','长沙麓谷');

ORA-00904 "xxx": 标识符无效

1、ORA-00904 "XXX": 标识符无效,最大可能是做增删改查时,sql 语句中的 "xxx" 列名并不在表中。

2、解决办法是:要么修改表结构,要么修改 sql 语句。

ORA-00913: 值过多

-- 被插入的字段是 3 个,而插入的值有 4 个,就会报错:ORA-00913: 值过多
insert into dept(deptno, dname, loc)select 70, t2.dname, t2.loc, '1' from dept t2 where t2.deptno = 50;

ORA-01438: 值大于为此列指定的允许精度

NUMBER(p,s)

1、既可以存储浮点数,也可以存储整数。p 表示数字的最大位数(如果是小数,则包括整数部分和小数部分, p 默认是 38 位)。

2、s 是指 小数位数,小数位不能大于总数位。

3、整数部分不允许大于 p -s,否则报错:ORA-01438: 值大于为此列指定的允许精度

Number(p) 声明一个整数,相当于Number(p, 0)

ORA-00947: 没有足够的值

-- 被插入的字段是 3 个,而插入的值只有 2 个,就会报错: ORA-00947: 没有足够的值
insert into dept (deptno, dname, loc) select 70, t2.dname from dept t2 where t2.deptno = 50;

ORA-00909: 参数个数无效

-- 如下所示,第二个 nvl 函数缺少第二个参数,所以会报错:ORA-00909: 参数个数无效
SELECT T.*,nvl(sal,0) + nvl(comm) FROM emp t;-- 如下所示,第二个 length 函数缺少参数,所以会报错:ORA-00909: 参数个数无效
SELECT length('hello') ,length()FROM dual;

ORA-01476: 除数为 0

-- 如果 comm 的值等于0,则报错:ORA-01476: 除数为 0
SELECT t.sal /t.comm FROM emp t;
-- 优化方式如下:如果 comm 等于0,则让它等于1,否则如果 comm 为null,则让它等于1
SELECT t.*, t.sal/decode(t.comm,0,1,nvl(t.comm,1)) FROM emp t;

ORA-00972:标识符过长

1、Oracle 12C 版本开始开始支持创建的表名、列名、约束名、索引名称、视图名、视图列名等等的长度大于30个字符,最大128个字符。

2、Oracle 12C以前的低版本是不允许超过30 个字符的,否则报错。

3、比如从高版本导出库时,如果指定了转出的版本,则超过 30个字符串的表、视图、约束、索引等等都会失败。

ORA-39373: cannot export TABLE:"CS_ELEMENT"."GFM_TB_CHANGE_ELEMENT_DATA_CACHE" to version 11.2.0.1.0 due to long identifiers
ORA-39373: cannot export VIEW:"CS_ELEMENT"."REPORT_V_BUDGET_MESSAGE_431081000" to version 11.2.0.1.0 due to long identifiers
ORA-39373: cannot export INDEX:"CS_ELEMENT"."IDX_BAS_CALC_INFO_INSERT_SP_MULTI_1" to version 11.2.0.1.0 due to long identifiers
ORA-39373: cannot export CONSTRAINT:"CS_ELEMENT"."UK_AGENCY_CODE_MOF_DIV_CODE_IS_DELETED" to version 11.2.0.1.0 due to long identifiers

Oracle 常见错误代码处理 1相关推荐

  1. Oracle 常见错误代码处理 08102-32001

    目录 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK java.sql.SQLException: 无效的列类型 java.sql.SQLException: 数字溢出 ...

  2. Oracle错误04043原因,oracle常见错误代码说明备忘

    1.ORA-01031:insufficient privileges 原因:该用户没有操作权限.一般建表空间,建用户点,必需得要DBA权限的数据库用户才行,一般用户没赋予其权限,则创建会失败. 2. ...

  3. Oracle常见操作和命令

    在 Oracle 中,下面哪个命令可以修改用户的默认密码有效期为无限制?(单选) A. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90: ORACL ...

  4. Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法

    转: Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法 ORA-00001: 违反唯一约束条件 ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 O ...

  5. 连接被远程计算机621,拨号上网常见错误代码提示及解决方法

    错误代码提示及解决方法 1.错误 678 问题:线路故障问题,不能进行连接,连接被远程计算机关闭,远程计算机没有响应 原因:网线接触不好或其它线路故障. 解决:自行检查网线的连接是否出现接触不良的情况 ...

  6. Oracle 常见的33个等待事件

    Oracle 常见的33个等待事件 一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指ORACLE正 ...

  7. 邮件系统常见错误代码解释 --邮件服务器端(MTA)错误代码解释

    邮件系统常见错误代码解释 --邮件服务器端(MTA)错误代码解释 MTA(Mail Transfer Agent ):邮件传送代理,由「邮件服务器」扮演 MTA 角色,负责完成 MUA (邮件使用代理 ...

  8. oracle交流 提问,Oracle常见提问5(转)

    Oracle常见提问5(转)[@more@] 241. POWER(M,N) 得到M的N幂. SELECT POWER(4,3) FROM DUAL; 242. ROUND(N,M) 将N舍入到小数点 ...

  9. 11、MySQL常见错误代码一览表

    MySQL 出错时反馈的代码代表出错的原因,我们只有明白这些代码代表的意思,才能了解 MySQL 数据库的错误,找出原因,解决问题.下面介绍 MySQL 服务器和客户端中的错误代码.提示消息的生成方式 ...

  10. c语言常见错误代码释义,C语言常见错误代码释义解析.doc

    C语言常见错误代码释义解析 C语言常见错误代码释义 错误代码及错误信息 错误释义error 1: Out of memory 内存溢出error 2: Identifier expected 缺标识符 ...

最新文章

  1. XML和JSON数据格式对比
  2. 梯度下降法的个人理解随笔
  3. 小学计算机笔记,小学信息技术教师读书笔记
  4. CF#303C Minimum Modular 数学分析
  5. vmware搭建ubuntu虚拟机(包含安装搜狗输入法和apt,dpkg的使用教程)
  6. HDU 2476 String painter (区间DP)
  7. 支持向量机(Support Vector Machines,SVM)
  8. 【并查集+dp】Team
  9. Dynamics CRM2011 通过DeveloperToolkit在VS中部署遇到的问题
  10. IOS-简单WebView的使用
  11. 拼多多九鼎:信息披露无瑕疵 “注水”的是竞争对手
  12. 互联网轻量级框架SSM-查缺补漏第九天
  13. 拓端tecdat|Python之LDA主题模型算法应用
  14. 解决vmrc的连接已断开,正在尝试重新连接
  15. 如何在csdn写博客
  16. matlab做拉普拉斯反演,拉普拉斯变换性质和反演.ppt
  17. Hive---DDL
  18. 氨基苯酚/多巴胺仿生修饰碳纳米管/α-氧化铝/ CNTs-Ag纳米复合材料
  19. Spring 基本配置
  20. Cesium实践(4)——空间数据加载

热门文章

  1. Android进阶2之oauth认证中UC无法跳转的问题
  2. C#2.0 泛型学习(入门)
  3. evolving checkers players [Fogel and Chellapilla, 2002]
  4. 寻找发帖水王java_编程之美–寻找发帖水王 | Acm之家
  5. win7上安装mysql数据库_mysql-windows系统安装mysql数据库
  6. python时间序列如何拟合曲线_以“datetime”格式拟合时间序列的曲线?
  7. 拓端tecdat|Python在线零售数据关联规则挖掘Apriori算法数据可视化
  8. 拓端tecdat|基于出租车GPS轨迹数据的研究:出租车行程的数据分析
  9. 拓端tecdat|R语言最优聚类数目k改进kmean聚类算法
  10. 有必要买吗_婴儿床有必要买吗 婴儿床有用吗