ORA-12516 TNS 监听程序无法找到匹配协议栈的可用句柄
Oracle 客户端连接服务器常见问题

Oracle 客户端连接服务器常见问题之今天安装软件一直在测试链接不能通过,出现ORA-12154: TNS: could not resolve service name,后来才发现是tnsnames.ora中有误。
查找网上的资料,记录下来。
要排除客户端与服务器端的连接问题,首先检查客户端配置是否正确(客户端配置必须与数据库服务器端监听配置一致),再根据错误提示解决。
下面列出几种常见的连接问题:1、ORA-12541: TNS:没有监听器显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确。
启动监听器:$ lsnrctl start或C:\lsnrctl start2、ORA-12500: TNS:监听程序无法启动专用服务器进程对于Windows而言,没有启动Oracle实例服务。
启动实例服务:C:\oradim –startup -sid myoracle3、ORA-12535: TNS:操作超时出现这个问题的原因很多,但主要跟网络有关。
解决这个问题,首先检查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙是否阻挡了连接。
4、ORA-12154: TNS:无法处理服务名检查输入的服务名与配置的服务名是否一致。
另外注意生成的本地服务名文件(Windows下如D:\oracle\ora92\network\admin\tnsnames.ora,Linux/Unix下$ORACLE_HOME/network/admin/tnsnames.ora)里每项服务的首行服务名称前不能有空格。
5、ORA-12514: TNS:监听进程不能解析在连接描述符中给出的 SERVICE_NAME打开Net Manager,选中服务名称,检查服务标识栏里的服务名输入是否正确。
该服务名必须与服务器端监听器配置的全局数据库名一致。
6、Windows下启动监听服务提示找不到路径用命令或在服务窗口中启动监听提示找不到路径,或监听服务启动异常。
oracle常见错误及代码

1、ORA-12541:TNS:没有监听器原因:没有启动监听器或者监听器损坏。
若是前者,使用命令net start OracleOraH ome10gTNSListener(名字可能有出入)即可;如果是后者,则使用“Net Configuration Assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路O K。
在添加之前可能需要把所有的监听器先删!)2、ORA-12500:TNS:监听程序无法启动专用服务器进程或ORA-12560:TNS:协议适配器错误原因:ORACLE的数据库服务没有启动。
使用命令net start ORACLESERVICEORA DB(ORADB为数据库名字)即可。
如果仍没有解决,请继续向下看。
3、如果数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步:1)ORADIM -DELETE -SID oradb 删除数据库服务项2)ORADIM -NEW -SID oradb 新增数据库服务项注:这个过程中如果出错,就重启计算机!4、ORA-12154:TNS:能解析服务名原因:ORACLE的网络服务名没有正确配置。
请使用“Net8 Configuration Assistan t”工具向导之“本地网络服务名配置”配置TNS即可。
如果仍没有解决,请继续向下看。
5、ORA-1034 :TNS:ORACLE不可用原因:ORACLE的数据库服务正确启动,但是数据库没有打开!使用命令:1)svrmgrl 启动服务管理器2)connect internal 以internal身份登陆3)startup 打开数据库6、ORA-12560:TNS:协议适配器错误(顽固性的)原因:未知。
解决:必杀技--打开“Windows任务管理器”,杀死ORACLE.exe及ORADIM.exe进程,书写自己的ora_startup.bat,执行之!PS:1、ora_startup.bat:net start OracleOraHome81TNSListenernet start ORACLESERVICEORADBsvrmgrl 一般情况下不用,不过有时少不了它的,具体步骤见第5步。
讲解Oracle数据库TNS常见错误的解决方法

讲解Oracle数据库TNS常见错误的解决方法育龙网WWW.CHINA-B.C0M 2009年08月13日来源:互联网育龙网核心提示: 1、ORA-12541:TNS:没有监听器原因:没有启动监听器或者监听器损坏。
若是前者,使用命令net start OracleOraHome10gTNSListener即可;1、ORA-12541:TNS:没有监听器因:没有启动监听器或者监听器损坏。
若是前者,使用命令net start OracleOraHome10gTNSListener即可;如果是后者,则使用“Net Configuration Assistant”工具向导之“监听程序配置”增加一个监听器即可2、ORA-12500:TNS:监听程序无法启动专用进程或ORA-12560:TNS:协议适配器错误因:ORACLE的服务没有启动。
使用命令net start ORACLESERVICEORADB即可。
如果仍没有解决,请继续向下看。
3、如果数据库服务启动失败,则很有可能是其项值损坏,最好的做法是以下两步:1)ORADIM -DELETE -SID oradb 删除数据库服务项2)ORADIM -NEW -SID oradb 新增数据库服务项注:这个过程中如果出错,就重启计算机!4、ORA-12154:TNS:能解析服务名因:ORACLE的网络服务名没有正确配置。
请使用“Net8 Configuration Assistant”工具向导之“本地网络服务名配置”配置TNS即可。
如果仍没有解决,请继续向下看。
5、ORA-1034 :TNS:ORACLE不可用因:ORACLE的数据库服务正确启动,但是数据库没有打开!使用命令:1)svrmgrl 启动服务管理器2)connect internal 以internal身份登陆3)startup 打开数据库6、ORA-12560:TNS:协议适配器错误因:未知。
解决:必杀技打开“Windows任务管理器”,杀死ORACLE.exe及ORADIM.exe进程,书写自己的ora_startup.bat,执行之!PS:1、ora_startup.bat:net start OracleOraHome81TNSListenernet start ORACLESERVICEORADBsvrmgrl 一般情况下不用,不过有时少不了它的,具体步骤见第5步。
ORA-12516 解决方法

起初,我也没有太在意,的确是因为这两天公司内部网络不太正常,ping物理开发库延时比较严重,偶有timed out现象,就一直以为是网络的问题了。直到中午的时候,同事说网络基本正常了,用PL/SQL Developer客户端工具连数据库的时候报出Ora-12516的错误,这才引起了我的注意!
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
logmnr_max_persistent_sessions integer 1
sessions integer 60
shared_server_sessions integer
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
这样,问题得到了基本的解决。
事后,又出现了一些不痛不痒的问题。
这不,年后简单记录下发生在这个春节前的种种问题,及解决问题的方法:
① 会话数不够用,导致Ora-12516的错误。解决方法,加大process初始化参数,或者通知修改应用程序中的连接数;
② 通过在数据库端配置profile来控制每个会话的活动时间,过期由数据库自动断开会话;
logmnr_max_persistent_sessions integer 1
sessions integer 60
shared_server_sessions integer
ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务_监听程序不支持服务

ORA-12514:TNS:监听程序当前⽆法识别连接描述符中请求的服务_监听程序不⽀持服务今天⼤黄蜂同学重启虚拟机之后再链接数据库就报了这个错,先查看了⼀下监听的状态C:> lsnrctl status... ...服务摘要..服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...命令执⾏成功监听中的服务并没有数据库实例orcl,检查了⼀下listener.ora⽂件,配置并没有问题,怀疑是数据库启动时出了问题,导致监听并没有找到数据库服务,为了连上数据库,在listener.ora⽂件中强制添加orcl的监听SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)(PROGRAM = extproc)(ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll"))# 以下是添加部分(SID_DESC =(GLOBAL_DBNAME = ORCL)(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)(SID_NAME = ORCL)))然后重启监听,让监听可以识别orcl服务C:> lsnrctl stop... ...C:> lsnrctl start... ...服务 "ORCL" 包含 1 个实例。
实例 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...命令执⾏成功然后连接Oracle数据库,尝试重启数据库C:> sqlplus sys/sys@127.0.0.1/orcl as sysdba... ...SQL> shutdown immediate;ORA-01034 - Oracle not availableORA-27101 - shared memory realm does not exist⽹上⼤部分说是ORACL_HOME或ORACLE_SID问题,可惜并不适⽤,后找到⼀篇说查看⽇志,⽇志路径位于ORACLE_HOME\database\ORADIM.LOG,⽇志中找到数据库启动时的报错信息如下:Tue Jun 21 15:10:17 2016D:\app\Administrator\product\11.2.0\dbhome_1\bin\oradim.exe -startup -sid orcl -usrpwd * -log oradim.log -nocheck 0Tue Jun 21 15:10:33 2016ORA-00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together继续查询报错信息ORA-00847,看起来是数据库系统参数设置的问题,先把pfile导出看⼀下SQL> create pfile from spfile;创建了之后宝宝傻眼了,不在ORACLE_HOME/dbs⾥啊!后来经查才知原来Windows下pfile的默认⽣成路径和linux下不⼀样,位于$ORACLE_BASE\admin\db_name\pfile然后打开pfile注释掉MEMORY_TARGET参数的设置...# memory_target=898629632...然后从pfile启动数据库,根据pfile⽣成spfileSQL> startup pfile='D:\app\Administrator\admin\orcl\pfile\init.ora.115201614250';SQL> create spfile from pfile='D:\app\Administrator\admin\orcl\pfile\init.ora.115201614250';然后便可以重启数据库了,最后将listener.ora还原,重启服务器,再查看监听状态就可以看到orcl服务正常了C:> lsnrctl status... ...服务摘要..服务 "CLRExtProc" 包含 1 个实例。
oracle数据库常见错误

3
Oracle 常见错误
5 、 ORA - 1034 : TNS : ORACLE 不可用 原因: ORACLE 的数据库服务正确启动,但是数据库没有打开! 使用命令: 1 ) svrmgrl 启动服务管理器 2 ) connect internal 以 internal 身份登陆 3 ) startup 打开数据库 6 、 ORA - 12560 : TNS :协议适配器错误(顽固性的) 原因:未知。 解决:打开“ Windows 任务管理器”,杀死 ORACLE.exe 及 ORADIM.exe 进程,书写自己的 ora_startup.bat 并执行。
Oracle SQL 开发基础
—— Orace 数据库基础
1
Oracle 常见错误
1 、 ORA - 12541 : TNS :没有监听器
原因:没有启动监听器或者监听器损坏。如果是前者,使用命令
net start OracleOraHome81TNSListener (名字可能有出入)即可 ;如果是后者,则使用“ Net8 Configuration Assistant” 工具向 导之“监听程序配置”增加一个监听器即可(基本不用写任何信息 ,一路 OK 。在添加之前可能需要把所有的监听器先删除!) 2 、 ORA - 12500 : TNS :监听程序无法启动专用服务器进程 或 ORA - 12560 : TNS :协议适配器错误
5
Oracle 常见错误
8 、 ORA-01652:unable to extend temp segment by num in tablespace name
原因: ORACLE 临时段表空间不足,因为 ORACLE 总是尽量分配连续空间,一但没有足够的可 分配空间或者分配不连续就会出现上述的现象。 解决方法:由于 ORACLE 将表空间作为逻辑结构 - 单元,而表空间的物理结构是数据文件, 数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就 必须增加数据文件。先查看一下指定表空间的可用空间,使用视图 SYS.DBA_FREE_SPACE ,视图中 每条记录代表可用空间的碎片大小: SQL>;Select file_id,block_id,blocks,bytes from sys.dba_free_space where tablespace_na me=’’; 返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查 看一下缺省的表空间参数: SQL>;SELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPA CES WHERE TABLESPACE_NAME=name; 通过下面的 SQL 命令修改临时段表空间的缺省存储值: SQL>;ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY); 适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小 来解决这个问题: SQL>;ALTER USER username TEMPORARY TABLESPACE new_tablespace_name; 使用 ALTER TABLESPACE 命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空 间脱机,但要注意,一旦添加了数据文件,就不能再删除它,若要删除,就要删除表空间。
处理Oracle监听程序当前无法识别连接描述符中请求的服务异常(ORA-12514)
处理Oracle监听程序当前⽆法识别连接描述符中请求的服务异常(ORA-12514)最近⼏天刚学习oracle11g,安装完成之后直接使⽤,今天⽤PLSQL链接突然报错,报错代码为:ORA-12514:监听程序当前⽆法识别连接描述符中请求的服务。
⽹上查了这种异常的解决办法,特在此记录。
出现该问题⼀般有两种情况。
第⼀种是在你安装完之后未配置监听(在此我暂时忘记安装完之后有没有配置监听);第⼆种是之前配置了监听但是系统未写⼊到listener.ora⽂件中(在此我暂未搞明⽩什么时候写⼊),所以只需要在该⽂件中写⼊配置参数就可以了。
解决办法:1、打开listener.ora⽂件找到listener.ora⽂件的存放位置并打开。
我本机⽂件⽬录在D:\app\iLife1988\product\11.2.0\dbhome_1\NETWORK/ADMIN下。
该⽂件须根据⾃⼰安装⽬录的实际情况找。
(注:Oracle10g与11g的⽬录好像不太⼀样)。
⽂件内容如下图:从上图中我们可以看出我已经配置过监听了,但是报错是由于Oracle的地址没有写到SID_DESC中,在此我们将此写⼊就可以了。
2、修改listener.ora⽂件将以下内容追加到该⽂件的SID_LIST节点下(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = D:\app\iLife1988\product\11.2.0\dbhome_1)(SID_NAME = orcl))注:标红的部分根据⾃⼰机器安装⽬录修改3、我在此本机修改完毕后,总是提⽰我不能保存,提⽰说该⽂件已在别的地⽅打开。
于是我另存⼀份,然后直接将原来的⽂件给覆盖掉。
修改完成之后如下图所⽰:4、重启监听服务。
OK搞定!!以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
ORA-12505:TNS:监听程序当前无法识别连接描述符中所给出的SID等错误解决方法
ORA-12505:TNS:监听程序当前⽆法识别连接描述符中所给出的SID等错误解决⽅法程序连接orarle报ORA-12505错误⼀、异常{ORA-12505, TNS:listener does not currently know of SID given in connect descriptorThe Connection descriptor used by the client was:10.190.121.95:1521:sxzhdb}⼆、查询{ORA-12505:TNS: 监听程序当前⽆法识别连接描述符中所给出的 SIDSID:是⼀个数据库的唯⼀标识符!是建⽴⼀个数据库时系统⾃动赋予的⼀个初始ID,SID主要⽤于在⼀些DBA操作以及与操作系统交互,从操作系统的⾓度访问实例名,必须通过ORACLE_SID,且它在注册表中也是存在的.ORACLE_SID就是Oracle System Identifier.在Oracle系统中,ORACLE_SID以环境变量的形式出现,当Oracle实例启动时,操作系统上fork 的进程必须通过这个SID将实例与其他实例区分开来,这就是SID的作⽤。
}三、修改{将原来的:jdbc:oracle:thin:@10.190.121.95:1521:sxzhdb改为:jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.190.121.95)(PORT=1521)) (LOAD_BALANCE=yes))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=sxzhdb)))后,程序连接数据库OK。
------最后将:url简化为:jdbc:oracle:thin:@(description=(address=(protocol=tcp)(port=1521)(host=10.190.121.95))(connect_data= (service_name=sxzhdb)))----其中address的三个属性protocol,port,host顺序可以变化,⼤⼩写均可以。
ORA-12516:
ORA-12516: TNS:监听程序找不到符合协议堆栈要求的可⽤处理程错误解决⽅案今天在测试的时候使⽤PL/SQL DEVELOPER 连接数据的时候出现了错误,ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可⽤处理程错误解决⽅案如下:--⾸先检查process和session的使⽤情况,在sqlplus⾥⾯查看。
以sys最⾼权限登录,执⾏如下语句:SQL> show parameter processesNAME TYPE VALUE------------------------------------ ----------- ------------------------------aq_tm_processes integer 0db_writer_processes integer 6gcs_server_processes integer 0job_queue_processes integer 0log_archive_max_processes integer 2processes integer 150SQL> select count(*) from v$process;COUNT(*)----------147--明显process已经⼏乎达到了顶峰。
SQL> show parameter sessionNAME TYPE VALUE------------------------------------ ----------- ------------------------------java_max_sessionspace_size integer 0java_soft_sessionspace_limit integer 0license_max_sessions integer 0license_sessions_warning integer 0logmnr_max_persistent_sessions integer 1session_cached_cursors integer 20session_max_open_files integer 10sessions integer 160shared_server_sessions integerSQL>SQL> select count(*) from v$session;COUNT(*)----------153--同样⼏乎达到顶峰。
Oracle数据库监听配置与报错解决方法
Oracle数据库监听配置与报错解决方法作者:范美卉张俊萌来源:《电脑知识与技术》2023年第24期关键词:监听日志;Oracle数据库;监听器中图分类号:TP311 文献标识码:A文章编号:1009-3044(2023)24-0073-030 引言想要使用Oracle数据库,首先需要用户与数据库建立连接,而怎么在两者之间建立连接,Oracle使用了一个叫网络服务的概念,从而客户端或者中间层的应用服务器与数据库服务器能建立连接,并能在两者之间传递数据。
在客户端,网络服务作为后台运行的进程,在数据库服务器端,网络服务则通过一个叫“监听器”的组件接收来自客户端的连接请求。
监听器(LIS⁃TENER)是位于服务器端的、独立运行的一个后台进程,运行在服务器端,但独立于数据库服务器单独运行,在数据库没有启动的时候,监听器也能独立运行。
1 Oracle 数据库监听配置Oracle监听负责监听客户端传入的连接请求,同时也负责调整服务器的连接负荷。
客户端试图连接数据库服务器时,监听器将接收到客户端的请求并将其传递给服务器进行处理。
一旦客户端与服务器建立连接,它们之后将直接进行通信,而不再需要监听器的介入,监听器将保持空闲状态。
dbca建库后一般会有默认配置好的监听,默认服务端口是1521,通常一个库一个监听就足够,但如果需要处理大量并发请求数,就可能需要配置多个监听,非默认监听的端口号设置成大于1024,不同监听之间服务名和端口号不能一样[1]。
配置监听器有两种方法。
1.1 通过图形界面工具Net Manager如图1所示,选中图中的Oracle Net配置下的本地树形目录中的监听程序项,再点击左侧绿色的“+”按钮添加监听程序,点击监听程序目录,新加的监听器名称默认为LISTENER。
选中该名称,窗口右侧栏的下拉选项中含有四个选项:一般参数、监听位置、数据库服务、其他服务,选中“监听位置”,点击添加地址按钮。
在出现的网络地址栏的协议下拉选项中选中“TCP/IP”,主机文本框中输入主机名称或IP地址(如果主机即用作服务端也作为客户端,输入两项之一均有效;如果主机作为服务端并需要通过网络连接,建议输入IP地址),端口文本框中输入数字端口,默认是1521,也可以自定义任意有效数字端口[2]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用PL/SQL Developer 数据库远程客户端连接程序连接数据库:
错误信息:
ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄.
TNS-12516 TNS:listener could not find available handler with matching protocol stack
导致原因可能为:
1.一般是由于数据库的当前会话数不满足造成的,相关的参数有两个:processes和sessions
(1)首先查看当前这两个参数的值
sql>conn / as sysdba
sql>select count(*) from v$session; 从这里可以看出当前的session数
sql>show parameter processes; 从输出的信息可以看到当前数据库中参数processes 的值
sql>show parameter sessions; 从输出的信息可以看到当前数据库中参数sessions
的值
这二者的关系是:sessions=(1.1*processes+5)
(2)修改这两个参数
alter system set processes=300 scope=spfile;
alter system set sessions=335 scope=spfile;
(3)重新启动数据库服务,使这两个参数生效。
(4)如果数据库服务无法正常启动,则可能是solaris10系统参数seminfo_semmns设置的偏小,因为每个process会占用一个semmns,semmns调整后需要重新启动操作系统。
semmns的计算公式为:SEMMNS>processes+instance_processes+system processes=数据库参数processes的
值instance_processes=5(smon,pmon,dbwr,lgwr,arch)
2.可能是tnsnames.ora文件中的配置的"SERVICE_NAME ="和对应值(数据库名称)中间多了个空格,需要去掉之间的空格,好像有没有空格没有影响,已验证(可能有时候是这样引发ORA-12516)
3.如果做以上操作仍无法排除ORA-12516 ,需要做最后尝试:单独重启启动databasenameSeverice (databasename:是要连接目标数据库而引发ORA-12516 错误的目标数据库名称)
已尝试:有效
(4) listener.log日志太大引发的,listener.log日志记录了通过listener处理的网络请求信息,它包含客户端请求的时间,连接方式(专用或共享),连接程序,网络协议,主机名,网络端口号等信息,listener.log的文件内容没有太大意义,可以不让listener 写日志。
操作时:#在listener.ora文件最后加入一行:logging_listener=off。