ORACLE数据库用cmd连接时总是说TNS:协议适配器错误,怎么办,listener服务开了自动停止

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE数据库用cmd连接时总是说TNS:协议适配器错误,怎么办,listener服务开了自动停止相关的知识,希望对你有一定的参考价值。

TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production on 04-7月 -2015 11:39:21

Copyright (c) 1991, 2010, Oracle. All rights reserved.

系统参数文件为D:\app\cjy\product\11.2.0\dbhome_1\network\admin\listener.ora
写入D:\app\cjy\product\11.2.0\dbhome_1\network\log\.log的日志信息
写入D:\app\cjy\product\11.2.0\dbhome_1\network\trace\.trc的跟踪信息
跟踪级别当前为0

NL-08014: 无法初始化可诊断性框架, 回退到旧网络跟踪/日志记录

NL-08002: 可诊断性上下文创建失败
以 pid=2460 开始
TNS-01151: 在 LISTENER.ORA 中缺少监听程序名称
NL-08014: 无法初始化可诊断性框架, 回退到旧网络跟踪/日志记录

NL-08002: 可诊断性上下文创建失败

用Oracle菜单里面的工具:Net Configuration Assistant

监听程序配置,删除监听,重新添加监听。

然后再用它:本地Net服务名配置,先删除,再增加。

就好了。。。。。

参考技术A 开了自动停止 参考技术B 服务:OracleServiceORCL启动了吗?追问

启动了

Oracle ORA-12541:TNS:无监听程序

Oracle ORA-12541:TNS:无监听程序


今天使用Oracle数据库,使用可视化连接工具连接测试环境的数据库时提示无监听程序,最后在老师帮助下终于搞定了!︿( ̄︶ ̄)︿

问题:

ORA-12541:TNS:无监听程序

解决方法:

  1. 检查监听程序是否能够正常启动,使用『windows+R』输入cmd,
    在命令行中输入lsnrctl start来检查监听是否正常运行,如果正常则会提示:
    TNS-01106: 使用名称LISTENER的监听程序已经启动

    技术分享图片

    如果没有运行,可以使用
    lsnrctl status 命令来查看服务状态,
    lsnrctl reload 来重启监听服务
    lsnrctl stop 来关闭监听服务
    lsnrctl start 来开启监听服务

    如果监听服务还是没有重启,并且提示:
    正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 64-bit Windows Error: 2: No such file or directory 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 64-bit Windows Error: 61: Unknown error
    那么以 管理员身份 运行cmd (CMD位置:C:Windowssystem32)
    在cmd里输入 以下命令来重启 监听服务;

    net start "OracleOraDb11g_home1TNSListener"
  2. 在命令行下使用命令 tnsping IP地址 来查看IP的监听服务是否正常(eg:tnsping 192.168.20.181)
    来检查tnsnames.ora服务配置是否正确

    技术分享图片

  3. 检查防火墙问题。
  4. 根源所在:listener.ora文件。(修改之前记得备份!!!)
# listener.ora Network Configuration File: D:Oracle11gproduct11.2.0dbhome_1
etworkadminlistener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:Oracle11gproduct11.2.0dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:Oracle11gproduct11.2.0dbhome_1inoraclr11.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = D:Oracle11g

Oracle相关服务设置

最后,由于Oracle的数据库服务太占用系统资源(电脑配置不行....)于是自己写了一个批处理来设置Oracle相关服务的启动方式(设置为手动)以及开启或者关闭Oracle的相关服务。
将以下代码保存为Oracle相关服务设置.bat 每次在用可视化工具连接Oracle时双击开启相关服务,使用完毕之后双击关闭相关服务。

技术分享图片

技术分享图片

@echo off
title Oracle 服务设置工具By Ryanjie
mode con lines=38 cols=88
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"


:main
color 2f
echo.---------------------------------------------------------------------------------------+
echo %date%   %time:~0,8%
::echo %date年~0,4%:%date月~5,2%:%date日~8,2% 
::echo %time%
echo.
echo   TODO:        Oracle 服务设置工具
echo.
echo   Author:      Ryanjie
echo.
echo   Function:    此批处理会自动设置、启动和停止Oracle服务
echo.
echo   WARNING:    如有360、电脑管家等安全软件提醒,请勾选信任允许和不再提醒!
echo.
pause
echo.
echo   Oracle相关服务(可根据自己电脑的服务名称进行更改,注意是『服务名称』不是『显示名称』)
echo                          『OracleOraDb11g_home1ClrAgent』
echo                          『OracleOraDb11g_home1TNSListener』
echo                          『OracleServiceORCL』
echo                          『Oracle ORCL VSS Writer Service』
echo                          『OracleDBConsoleorcl』
echo                          『OracleJobSchedulerORCL』
echo                          『OracleMTSRecoveryService』
echo   
echo
echo.---------------------------------------------------------------------------------------+
echo.
echo 请选择使用:
echo.
echo     1. 设置Oracle相关服务为手动启动(即在下面输入1)
echo.
echo     2. 启动Oracle相关服务(即在下面输入2)
echo.
echo     3. 停止Oracle相关服务(即在下面输入3)
echo.
echo.---------------------------------------------------------------------------------------+
if exist "%SystemRoot%System32choice.exe" goto Win7Choice
set /p choice=请输入数字并按回车键确认:
echo.
if %choice%==1 goto sc
if %choice%==2 goto start
if %choice%==3 goto stop
"set choice="
echo 您输入有误,请重新选择。
ping 127.0.1 -n "2">nul
cls
goto main


:Win7Choice
choice /c 123 /n /m "请输入相应数字:"
if errorlevel 3 goto stop
if errorlevel 2 goto start
if errorlevel 1 goto sc
cls
goto main


:sc
cls
color 2f
echo.---------------------------------------------------------------------------------------+
echo.
sc config "OracleOraDb11g_home1ClrAgent" start= demand
sc config "OracleOraDb11g_home1TNSListener" start= demand
sc config "OracleServiceORCL" start= demand
sc config "Oracle ORCL VSS Writer Service" start= demand
sc config "OracleDBConsoleorcl" start= demand
sc config "OracleJobSchedulerORCL" start= demand
sc config "OracleMTSRecoveryService" start= demand
echo.---------------------------------------------------------------------------------------+
echo.
echo %date%   %time:~0,8%
::echo %date年~0,4%:%date月~5,2%:%date日~8,2% 
::echo %time%
echo.
echo 恭喜您,Oracle相关服务
echo.                          『OracleOraDb11g_home1ClrAgent』
echo.                          『OracleOraDb11g_home1TNSListener』
echo.                          『OracleServiceORCL』
echo.                          『Oracle ORCL VSS Writer Service』
echo.                          『OracleDBConsoleorcl』
echo.                          『OracleJobSchedulerORCL』
echo.                          『OracleMTSRecoveryService』
echo. 
echo.    已成功设置为手动启动!
echo. 
echo.---------------------------------------------------------------------------------------+
goto end


:start
cls
color 2f 
echo.---------------------------------------------------------------------------------------+
echo.
::下面四个服务按照个人需求进行开启                                                                                              
net start "OracleOraDb11g_home1ClrAgent"
net start "OracleOraDb11g_home1TNSListener"
net start "OracleServiceORCL"
::net start "Oracle ORCL VSS Writer Service"
::net start "OracleDBConsoleorcl"
::net start "OracleJobSchedulerORCL"
::net start "OracleMTSRecoveryService"  
echo.---------------------------------------------------------------------------------------+
echo.
echo %date%   %time:~0,8%
::echo %date年~0,4%:%date月~5,2%:%date日~8,2% 
::echo %time%
echo.
echo 恭喜您,Oracle相关服务
echo.                          『OracleOraDb11g_home1ClrAgent』
echo.                          『OracleOraDb11g_home1TNSListener』
echo.                          『OracleServiceORCL』
echo. 
echo.  
echo.    已成功启动!
echo. 
echo.---------------------------------------------------------------------------------------+
goto end


:stop
cls
color 2f
echo.---------------------------------------------------------------------------------------+
echo.
net stop "OracleOraDb11g_home1ClrAgent"
net stop "OracleOraDb11g_home1TNSListener"
net stop "OracleServiceORCL" 
::下面四个服务如果在上面已经打开,则删除前面的"rem"即可
net stop "Oracle ORCL VSS Writer Service"
net stop "OracleDBConsoleorcl"
net stop "OracleJobSchedulerORCL"
net stop "OracleMTSRecoveryService"  
echo.---------------------------------------------------------------------------------------+
echo.
echo %date%   %time:~0,8%
::echo %date年~0,4%:%date月~5,2%:%date日~8,2% 
::echo %time%
echo.
echo 恭喜您,Oracle相关服务
echo.                          『OracleOraDb11g_home1ClrAgent』
echo.                          『OracleOraDb11g_home1TNSListener』
echo.                          『OracleServiceORCL』
echo.  
echo.    已成功关闭!
echo. 
echo.---------------------------------------------------------------------------------------+
goto end


:end
echo 请按任意键退出。
@Pause>nul

『』『』

以上是关于ORACLE数据库用cmd连接时总是说TNS:协议适配器错误,怎么办,listener服务开了自动停止的主要内容,如果未能解决你的问题,请参考以下文章

oracle用cmd货plsql登录oracle实例提示“ORA :12170”TNS:连接超时

经典问题:ORA-12170:TNS:连接超时!求解决办法。

cmd中登录Oracle 显示ORA-12560: TNS: 协议适配器错误

用C#链接Oracle Database总是出错(ORA-12154: TNS: 无法解析指定的连接标识符)

pl/sql developer 登陆时 出现"ORA-12154: TNS:无法解析指定的连接标 ”!我在cmd里就能连接上。

oracle远程连接报ORA-12541:TNS:无监听程序