Oracle 常见报错问题汇总

文章目录

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.ZHS16GBK

3、检查 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.orasqlnet.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.o
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值