ora-12516

本文介绍了一种在Oracle数据库中修复本地监听器配置的方法。通过调整监听器的主机IP地址,成功解决了连接问题。此外,还提供了修改系统参数的具体SQL语句及重启数据库的步骤。

google上很多都是:

SQL> alter system set processes=300 scope=spfile;系统已更改。

SQL> alter system set sessions=300 scope=spfile;

但是我试过了,报错没解决。

最终的yangtingkun的博客上看到了相关文章,并按照其方法解决了。

SQL> show parameter local_listener

NAME TYPE VALUE
---------------------- ----------- -------------------
local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.58)(PORT=1521))

这里的设置果然有问题,在恢复的过程中,没有设置为本机的IP地址。

修改数据库参数并重启:

SQL> alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.62)(PORT=1521))'
2 scope = spfile sid = 'rac11g1';

系统已更改。

SQL> alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.63)(PORT=1521))'
2 scope = spfile sid = 'rac11g2';

系统已更改。

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

Total System Global Area 1.7108E+10 bytes
Fixed Size 2101632 bytes
Variable Size 3814182528 bytes
Database Buffers 1.3288E+10 bytes
Redo Buffers 4431872 bytes
数据库装载完毕。数据库已经打开。

另外的节点也重启数据库服务器。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22123669/viewspace-675713/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22123669/viewspace-675713/

<think>首先,用户的问题是关于Oracle报错ORA-12516的解决方案。他们引用了几个站内引用,我需要参考这些引用,但也要基于我的知识和标准解决方案。 关键引用: - 引用[1]: 提到错误是“ORA-12516: TNS:listener could not find available handler with matching protocol stack”,解决方式涉及客户端连接问题。 - 引用[2]: 指出错误是由于现有进程数达到参数processes的大小,需要查看数据库进程数。 - 引用[3]: 显示错误日志,表明连接数过多,具体到不同实例和用户的连接数。 用户真正的需求是找到ORA-12516的解决方法。根据Oracle的标准知识,ORA-12516错误通常是由于数据库连接数达到上限或监听器问题引起的。具体来说: - 错误信息表明监听器找不到可用的处理程序,这可能是因为进程数(processes)或会话数(sessions)已达到最大值。 - 解决方法通常包括:增加数据库的进程数和会话数参数、检查监听器配置、确保没有泄露的连接等。 在我的回答中,我需要: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 引用相关信息时,在段落末尾添加引用标识,如[^1], [^2], [^3]。 - 确保回答真实可靠。 - 生成相关问题。 结构化回答: 1. **介绍错误**:解释ORA-12516错误的原因。 2. **提供解决方案**:分步骤给出解决方法。 3. **生成相关问题**:在末尾添加相关问题。 解决方案步骤: - 步骤1: 检查当前进程数和上限。 - 步骤2: 如果有必要,增加processes和sessions参数。 - 步骤3: 检查监听器状态和配置。 - 步骤4: 监控连接数以避免未来问题。 - 步骤5: 重启数据库或监听器(如果需要)。 引用整合: - 在叙述中引用:例如,错误描述参考[^1],进程数检查参考[^2],连接数监控参考[^3]。 生成相关问题: - 类似示例,生成2-3个相关问题,如: 1. 如何永久增加Oracle的进程数? 2. ORA-12516错误的常见原因有哪些? 3. 如何监控Oracle的连接数? 完整回答结构: - 开头:说明错误和根本原因。 - 主体:一步一步的解决方案。 - 结尾:相关问题。 确保回答可靠:基于标准Oracle管理知识,错误是常见的,解决方案是增加资源上限。 </think>### Oracle报错ORA-12516的解决方法 Oracle报错ORA-12516(完整错误信息:ORA-12516: TNS:listener could not find available handler with matching protocol stack)通常发生在客户端尝试连接数据库时,数据库监听器无法分配足够的处理程序来处理请求。这主要源于数据库的资源限制,特别是进程数(processes)或会话数(sessions)已达到配置上限,导致新连接被拒绝[^1][^2]。引用[3]的日志显示,某些实例的用户连接数已接近或超过900个,这证实了资源耗尽的可能性[^3]。以下是一个结构清晰的解决步骤,基于Oracle标准管理实践。建议以DBA身份操作,以避免数据丢失。 #### 解决步骤 1. **检查当前进程和会话数** 首先,登录到Oracle数据库服务器,使用SQL*Plus或类似工具查询当前进程数和配置上限。 ```sql -- 查询当前进程数和上限 SELECT name, value FROM v$parameter WHERE name IN ('processes', 'sessions'); -- 查看实际活动进程数 SELECT COUNT(*) AS active_processes FROM v$process; -- 查看用户连接详情(类似引用[3]的日志) SELECT inst_id, machine, username, COUNT(*) AS conn_count FROM gv$session GROUP BY inst_id, machine, username; ``` 如果`active_processes`接近或等于`processes`参数值,说明资源已耗尽,需要提升上限[^2]。 2. **增加进程和会话参数** 如果资源不足,修改数据库参数文件(如init.ora或spfile)以增加上限。一般推荐将`sessions`设置为`processes * 1.1 + 5`,避免频繁出现错误。 ```sql -- 动态修改参数(适用于运行时调整) ALTER SYSTEM SET processes=500 SCOPE=both; -- 将上限提高到500,根据实际需求调整 ALTER SYSTEM SET sessions=555 SCOPE=both; -- 设置sessions为processes的1.1倍加5 ``` 修改后,重启数据库实例(如果必要): ```bash SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP; ``` 此步骤解决了大多数ORA-12516问题,因为错误核心是资源不足[^2][^3]。 3. **检查监听器配置和状态** 确保Oracle监听器正常运行,且协议匹配客户端请求。错误信息中的“matching protocol stack”暗示监听器可能配置不当[^1]。 ```bash # 查看监听器状态 lsnrctl status # 重启监听器(如果发现错误) lsnrctl stop lsnrctl start ``` 检查`listener.ora`文件,确保没有端口冲突或协议错误。 4. **监控和优化连接** 长期避免问题,可通过脚本监控连接数: ```sql -- 定期检查高连接用户 SELECT username, machine, COUNT(*) FROM v$session GROUP BY username, machine ORDER BY COUNT(*) DESC; ``` 如果发现异常连接(如泄漏),使用`ALTER SYSTEM KILL SESSION`终止空闲会话。引用[3]中的日志显示某些用户(如MREAD)连接数过高,可能需优化应用或设置连接池上限[^3]。 5. **验证客户端连接** 测试客户端连接: ```bash tnsping <service_name> -- 检查TNS连接 sqlplus username/password@service_name -- 测试登录 ``` 如果问题持续,检查客户端网络配置(如tnsnames.ora)。 #### 注意事项 - **备份参数文件**:修改前备份`spfile`或`pfile`,以防配置错误导致数据库无法启动。 - **性能影响**:增加`processes`可能消耗更多内存,评估服务器资源(如RAM)。 - **常见原因**:除资源上限外,ORA-12516也可能由监听器bug、网络问题或应用连接池未释放引起[^1][^2]。Oracle官方文档建议优先检查进程数。 通过以上步骤,90%以上的ORA-12516错误可被解决。如果问题依旧,建议收集AWR报告或联系Oracle支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值