文章目录
- Oracle 常见报错问题汇总
-
- 一、序言
- 二、Oracle 常见报错问题汇总
-
- 1. 报错:ORA-00020: maximum number of processes (30) exceeded
- 2. 报错:ORA-01017: invalid username/password; logon denied
- 3. 报错:ORA-01031: insufficient privileges
- 4. 报错:"ORA-01034: ORACLE not available" 和 "ORA-27101: shared memory realm does not exist"
- 5. 报错:“ORA-00119: invalid specification for system parameter LOCAL_LISTENER” 和 “ORA-00132: syntax error or unresolved network name 'LISTENER_ORCL'”
- 6. 报错:TNS-03505: 无法解析名称
- 7. 报错:ORA-12154: TNS: 无法解析指定的连接标识符
- 8. 报错:ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME
- 9. 报错:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- 10. 报错:ORA-12518: TNS: 监听程序无法分发客户机连接
- 11. 报错:ORA-12541: TNS: 无监听程序
- 12. 报错:ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理程序
- 13. 报错:ORA-12523: TNS: 监听程序无法找到适用于客户机连接的例程
- 14. 报错:ORA-12560: TNS: 协议适配器错误
- 15. 报错:启动监听服务失败(无法成功启动监听服务,弹框提示内容:“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”)
- 16. 报错:ORA-32002: cannot create SPFILE already being used by the instance
- 附录
Oracle 常见报错问题汇总
一、序言
Oracle 报错问题的常规检查方向:
0、检查
输入
检查输入是否正确。例如:用户名和密码是否正确、命令是否正确、命令格式是否正确、是否选择了正确的数据库、数据库的连接方式是否正确、监听服务是否支持当前选择的数据库连接方式等。
1、检查
服务
检查服务是否有启动。
(备注:数据库服务 OracleServiceXXX 是一定要启动的,监听服务 OracleOraDb11g_home1TNSListener 是在有远程访问需求时才要启动。)2、检查
环境变量
Path=D:\databases\oracle\oracle_11g\app\administrator\product\11.2.0\dbhome_1\bin;
TNS_ADMIN=D:\databases\oracle\oracle_client\instantclient_21_9\network\admin
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK3、检查
Oracle 服务端3个重要文件的配置
。重点检查listener.ora
文件。检查 Oracle 服务端安装目录下的 NETWORK/ADMIN 子目录(如:D:\databases\oracle\oracle_11g\app\administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN)里的3个文件(listener.ora、tnsnames.ora 和 sqlnet.ora)的配置是否正确。重点检查 listener.ora 文件。
4、检查
Oracle 客户端3个重要文件的配置
。重点检查tnsnames.ora
和sqlnet.ora
文件。检查 Oracle 客户端目录下的 network\admin 子目录(如:D:\databases\oracle\oracle_client\instantclient_21_9\network\admin)里的3个文件(listener.ora、tnsnames.ora 和 sqlnet.ora)的配置是否正确。重点检查 tnsnames.ora和sqlnet.ora 文件。
二、Oracle 常见报错问题汇总
1. 报错:ORA-00020: maximum number of processes (30) exceeded
场景还原:
在CMD窗口使用sqlplus命令
set ORACLE_SID=remoteorcl sqlplus /nolog connect / as sysdba
示例:
C:\Users\administrator>set ORACLE_SID=remoteorcl C:\Users\administrator>sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 21 20:43:42 2023 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> SQL> connect / as sysdba ERROR: ORA-00020: maximum number of processes (30) exceeded SQL>
原因分析:
数据库连接数用满,即当前的连接数超出了最大的连接数。在本例中出现这个报错是因为设置的processes数值太小了,只有30,实际运行的processes超过了30。(备注:processes默认值为150)
排查连接数的相关语句:
0. 设置ORACLE_SID,用于指定连接哪个数据库 set ORACLE_SID=remoteorcl 1. 以超级管理员身份登录 sqlplus /nolog connect / as sysdba (备注:也可以直接使用 “sqlplus / as sysdba” 这条命令) 2. 查询当前的连接数 select count(0) from v$process; 3. 查询最大的连接数(默认值为150) select value from v$parameter where name = 'processes'; (备注:也可以使用 “show parameter processes” 查询最大的连接数)
解决方案:
修改数据库最大连接数,操作如下:步骤1:重启数据库服务:OracleServiceXXX 方式1:通过“服务”界面进行操作,重启数据库服务 打开“服务”界面,找到数据库服务OracleServiceXXX,点击右键,选择“重新启动”(或者先选择“停止”,在选择“启动”)。 方式2:通过管理员身份打开控制台执行相关命令,重启数据库服务 使用管理员身份打开CMD控制台,输入下面命令重启: 停止数据库服务:net stop OracleServiceXXX 启动数据库服务:net start OracleServiceXXX 备注:重启数据库服务OracleServiceXXX的目的是临时解决“ORA-00020: maximum number of processes (30) exceeded”报错导致无法连接登录Oracle数据库的问题(重启数据库服务之后,发现可以连接登录Oracle数据库,再次查询当前连接数,会发现当前连接数变小了)。只有成功连接登录Oracle数据库之后,才能修改最大的连接数。 步骤2:设置ORACLE_SID,然后以超级管理员身份登录 set ORACLE_SID=remoteorcl sqlplus /nolog connect / as sysdba 步骤3:设置最大的连接数,将processes设置为150(也可以设置得再大一点,比如1000,2000等) alter system set processes = 150 scope = spfile; 步骤4:重启数据库,使修改生效。命令如下: shutdown immediate startup
备注:关于步骤4,修改最大的连接数processes之后,一定要 重启数据库 或者 重启数据库服务OracleServiceXXX 才能使修改生效。
(1)如果采用 重启数据库 的方式,则在当前的CMD控制台不需要重新连接数据库,就可以直接查询到修改生效后的最大连接数。
(2)如果是采用 重启数据库服务OracleServiceXXX 的方式,则在当前的CMD控制台需要重新连接Oracle数据库(即执行connect / as sysdba 命令连接数据库),才能查询到修改生效后的最大连接数。示例:
步骤1:重启数据库服务:OracleServiceXXX
方式1:下面是“通过 ‘服务’ 界面操作重启数据库服务”的示例:
方式2:下面是“通过管理员身份打开控制台执行相关命令重启数据库服务”的示例:
C:\WINDOWS\system32> net stop OracleServiceRemoteOrcl OracleServiceREMOTEORCL 服务正在停止........ OracleServiceREMOTEORCL 服务已成功停止。 C:\WINDOWS\system32> net start OracleServiceRemoteOrcl OracleServiceREMOTEORCL 服务正在启动 ....... OracleServiceREMOTEORCL 服务已经启动成功。 C:\WINDOWS\system32>
步骤2~4:“设置ORACLE_SID,然后以超级管理员身份登录” -> “设置最大的连接数” -> “重启数据库,使修改生效”
下面是“修改增加数据库最大连接数”的示例:
C:\Users\administrator>set ORACLE_SID=remoteorcl C:\Users\administrator>sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on 星期三 3月 22 12:53:11 2023 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> connect / as sysdba 已连接。 SQL> alter system set processes = 150 scope = spfile; 系统已更改。 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 3390558208 bytes Fixed Size 2180464 bytes Variable Size 1862273680 bytes Database Buffers 1509949440 bytes Redo Buffers 16154624 bytes 数据库装载完毕。 数据库已经打开。 SQL>
2. 报错:ORA-01017: invalid username/password; logon denied
场景还原: sqlplus system/******@connect_identifier_remote_orcl
原因分析:用户或密码错误。本次是密码错误。
解决方案:sqlplus system/*********@connect_identifier_remote_orcl
3. 报错:ORA-01031: insufficient privileges
场景还原:
C:\Users\administrator>set ORACLE_SID=orcl C:\Users\administrator>sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on 星期一 3月 13 23:04:51 2023 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> conn / as sysdba; ERROR: ORA-01031: insufficient privileges 警告: 您不再连接到 ORACLE。
原因分析: sqlnet.ora 文件中默认有“SQLNET.AUTHENTICATION_SERVICES= (NTS)”的配置,如果缺少就会出现上面的报错。
解决方案: 在 sqlnet.ora 文件中补充上“SQLNET.AUTHENTICATION_SERVICES= (NTS)”配置,如下:
sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS)
4. 报错:“ORA-01034: ORACLE not available” 和 “ORA-27101: shared memory realm does not exist”
场景还原:
背景:服务端没有三个文件(listener.ora、tnsnames.ora 和 sqlnet.ora),客户端有一个listener.ora文件。
操作:重启了OracleServiceORCL服务(数据库服务),然后在CMD控制台执行“sqlplus system/*********@localhost:1521/orcl”命令,出现了“ORA-01034: ORACLE not available” 和 “ORA-27101: shared memory realm does not exist” 报错。C:\Users\administrator>sqlplus system/*********@localhost:1521/orcl SQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 14 18:04:39 2023 Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist 进程 ID: 0 会话 ID: 0 序列号: 0
特别说明: 其他数据库(如全局数据库名为REMOTE_ORCL的数据库)重启数据库服务(如OracleServiceREMOTEORCL服务),然后执行“sqlplus system/*********@localhost:1521/remote_orcl”命令,可以正常登录访问。 只有ORCL数据库不行,且ORCL的init.ora.xxxxxx文件(这是Oracle最后一次成功启动时备份的启动文件)中比其他文件多了“local_listener=LISTENER_ORCL”。如下: 在 D:\databases\oracle\oracle_11g\app\administrator\admin\orcl\pfile 目录下有一个init.ora.29202320536文件,这是Oracle最后一次成功启动时备份的启动文件。在这个文件中有这样一段配置(这一段在其他创建的数据库中没有,其他数据库) ########################################### # Network Registration ########################################### local_listener=LISTENER_ORCL
原因分析:
可能原因分析:非正常关闭数据库(在没有关闭数据库的情况下直接关机)
解决方案:
在CMD控制台(执行 lsnrctl start 命令启动监听服务OracleOraDb11g_home1TNSListener,需要使用管理员身份打开CMD)的常用命令:lsnrctl start set ORACLE_SID=orcl sqlplus /nolog
进入SQL控制台后的常用命令:
conn sys/********* as sysdba; [create spfile from pfile='D:\databases\oracle\oracle_11g\app\administrator\admin\orcl\pfile\init.