Oracle 常见错误代码处理 08102-32001
目录
不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
java.sql.SQLException: 无效的列类型
java.sql.SQLException: 数字溢出
OracleOraDb11g_home1TNSListener服务启动后停止
ORA-08102: index key not found
ORA-14402:更新分区关键字列将导致分区的更改
ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
ORA-12899 实际值 2 最大值 1
ORA-28002: the password will expire within 7 days
ORA-28040: No matching authencation protocol
ORA-30553: The function is not deterministic
ORA-30926:无法在源表中获得一组稳定的行
ORA-32001: 已请求写入 SPFILE, 但是没有正在使用的 SPFILE
不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
1、访问 Oracle 的时候,突然报错 'Caused by: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK'
2、原因可能是因为 Oracle 驱动的版本与 Oralce 的版本不太兼容导致的,比如 Oracle 11g 到 19c 都是使用的 ojdbc8,但实际上不同的 Oracle 版本,对应的 ojdbc8 也有不同的版本。
3、解决办法:按着报错提示提供对应版本的 orai18n,如:
<!--Oracle 19c 版本驱动--><dependency><groupId>com.oracle.ojdbc</groupId><artifactId>ojdbc8</artifactId><version>19.3.0.0</version></dependency><!-- https://mvnrepository.com/artifact/com.oracle.database.nls/orai18n --><!-- 解决报错:java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK--><dependency><groupId>com.oracle.database.nls</groupId><artifactId>orai18n</artifactId><version>19.3.0.0</version></dependency>
java.sql.SQLException: 无效的列类型
1、使用 Spring 原生的 JdbcUtils 或者 JdbcTemplate 操作数据时,如果占位符参数的值是 List
数组等对象,就会报错:无效的列类型
2、比如配置了两个财政生效月份字段,此时传入后台的数据不是字符串,而是字符串数组,如 cz_date : ["1","2"],从而底层操作数据时就会报错:java.sql.SQLException: 无效的列类型
insert into BAS_PERSON_MONTH(per_id,biz_key,iden_no,per_name,m_pos_sala,m_grad_sala,m_nation_reg_sub,m_local_reg_sub,m_merit_pay,m_retiremen_fee,m_retirement_fee,start_date,end_date,m_gwjt,m_gjjt_qt,m_gwjtbt,m_dfjt_qt,cz_date)
values ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
java.sql.SQLException: 数字溢出
1、比如数据库中的字段是 number 类型,存储的是 20264142218,然后实体对象中是 int 类型,代码查询结果封装数据对象时就会报错。
2、因为 Java int 数据范围 [-2,147,483,648~2,147,483,647]
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-08102: index key not found
1、https://wangmaoxiong.blog.csdn.net/article/details/90702872#基于函数的索引。
ORA-14402:更新分区关键字列将导致分区的更改
1、Oracle 分区表创建之后,如果修改分区字段的值,默认就会报错:ORA-14402:更新分区关键字列将导致分区的更改
2、通常分区字段不需要修改,也不建议修改,如果一定要修改,则和 flashback 闪回数据一样,需要为表开启'行移动'功能。
--为指定表开启行移动功能
alter table tableName enable row movement;
--为指定表关闭行移动功能
alter table tableName disable row movement;
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-12899 实际值 2 最大值 1
1、ORA-12899: value too large for column "ELEMENT"."BAS_PERSON_IMP"."SEX_CODE" (actual: 2, maximum: 1)
2、这是因为存储内容超出了字段的长度 ,比如 sex_code varchar2(1),则插入 1或者2可以,而插入男或女就会报错,因为 Oracle 中一个汉字占两个长度。
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;
修改后设置立即生效,不需要重启数据库,此时密码永远不会过期。
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 版本的驱动即可。
这个错误引起的原因可能有多种情况,需要根据实际情况处理。
ORA-30553: The function is not deterministic
1、https://wangmaoxiong.blog.csdn.net/article/details/90702872#基于函数的索引。
ORA-30926:无法在源表中获得一组稳定的行
-- 用 bas_person_info_tmp0715U 表中的人员信息更新 bas_person_info 表中 2022年日常动态维护版本的数据
-- 区划、单位、人员类型、证件号相等的数据认为是同一个人
-- 如果 bas_person_info_tmp0715U 表中同一单位出现重复的人员(垃圾数据),则会报错:ORA-30926:无法在源表中获得一组稳定的行
MERGE INTO bas_person_info A
USING bas_person_info_tmp0715U B
ON (a.mof_div_code = b.mof_div_code and a.agency_code = b.agency_code and a.ui_code = b.ui_code and a.iden_no = b.iden_no and A.version = '2022rcdtwh' and A.is_deleted = 2)
WHEN MATCHED THENUPDATESET a.sex_id = b.sex_id,a.sex_code = b.sex_code,a.sex_name = b.sex_name,a.nation_id = b.nation_id,a.nat_id = b.nat_id,a.nat_code = b.nat_code,a.nat_name = b.nat_name;
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; |
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
Oracle 常见错误代码处理 08102-32001相关推荐
- Oracle错误04043原因,oracle常见错误代码说明备忘
1.ORA-01031:insufficient privileges 原因:该用户没有操作权限.一般建表空间,建用户点,必需得要DBA权限的数据库用户才行,一般用户没赋予其权限,则创建会失败. 2. ...
- Oracle常见操作和命令
在 Oracle 中,下面哪个命令可以修改用户的默认密码有效期为无限制?(单选) A. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90: ORACL ...
- Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法
转: Oracle 常见错误总结(如:ORA-XXXXX)及问题解决方法 ORA-00001: 违反唯一约束条件 ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 O ...
- 连接被远程计算机621,拨号上网常见错误代码提示及解决方法
错误代码提示及解决方法 1.错误 678 问题:线路故障问题,不能进行连接,连接被远程计算机关闭,远程计算机没有响应 原因:网线接触不好或其它线路故障. 解决:自行检查网线的连接是否出现接触不良的情况 ...
- Oracle 常见的33个等待事件
Oracle 常见的33个等待事件 一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指ORACLE正 ...
- 邮件系统常见错误代码解释 --邮件服务器端(MTA)错误代码解释
邮件系统常见错误代码解释 --邮件服务器端(MTA)错误代码解释 MTA(Mail Transfer Agent ):邮件传送代理,由「邮件服务器」扮演 MTA 角色,负责完成 MUA (邮件使用代理 ...
- oracle交流 提问,Oracle常见提问5(转)
Oracle常见提问5(转)[@more@] 241. POWER(M,N) 得到M的N幂. SELECT POWER(4,3) FROM DUAL; 242. ROUND(N,M) 将N舍入到小数点 ...
- 11、MySQL常见错误代码一览表
MySQL 出错时反馈的代码代表出错的原因,我们只有明白这些代码代表的意思,才能了解 MySQL 数据库的错误,找出原因,解决问题.下面介绍 MySQL 服务器和客户端中的错误代码.提示消息的生成方式 ...
- c语言常见错误代码释义,C语言常见错误代码释义解析.doc
C语言常见错误代码释义解析 C语言常见错误代码释义 错误代码及错误信息 错误释义error 1: Out of memory 内存溢出error 2: Identifier expected 缺标识符 ...
最新文章
- linux设置定时备份任务,Linux下Oracle设置定时任务备份数据库的教程
- pandas mysql主键_使用Autoincrement将Pandas Dataframe插入MySQL表自动生成主键
- angular 打印 lodop 引入css样式
- MySQL的if,case语句使用总结
- 通过案例学调优之--Oracle Cluster Table
- 将servlet数据传到html_Servlet详解(二)
- H5移动端页面设计心得分享
- JavaScript css-dom
- java url gbk编码转换_如何在一个utf-8编码的HTML中 在javascript中url跳转时把url中的汉字改为GBK编码...
- jdbc驱动类加载直接指定线程上下文加载器加载
- Paxos在大型系统中常见的应用场景
- 运行JAR文件显示没有主清单属性
- 第一次登录域控服务器的账号,windows域登录与SSO服务器整合
- 怎么用计算机名称共享打印机设置,如何共享打印机设置教程
- Windows Server 2008的介绍及其与Windows Server 2008 R2的区别
- 安装时总是显示“$(DllSelfRegisterEx)不能被注册” 的解决方法
- 关于个税汇算清缴,你所关心的问题都在这了
- Python | P站壁纸爬取
- 请仔细品味--俞敏洪励志演讲
- PHP 的__call()