协议适配器错误的问题

今天遭遇ORA-12560: TNS: 协议适配器错误的问题,经过一番努力问题已经解决,与大家共享。
造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:
1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,

启动oraclehome92TNSlistener服务。
2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务

面板,启动oracleserviceXXXX,XXXX就是你的database SID.
3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0将该环境变量ORACLE_SI

D设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建

,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下

输set oracle_sid=XXXX,XXXX就是你的database SID.
经过以上步骤,就可以解决问题。

22222222222222222222

我们知道oracle客户端连接时涉及用到的几个配置文件有:sqlnet.ora、tnsnames.ora、listener.ora。其中sqlnet.ora和tnsnames.ora是在客户端的配置文件,listener.ora则是在服务器端的监听配置文件。

想要顺利的连接上服务器端,首先要确保两者之间的网络通畅。其二在服务器上配置好监听程序。其三是客户端配置好相应的tnsnames.ora。

  在配置服务器端监听程序时要注意几点:

  1、在服务器上的/etc/hosts文件中需要有127.0.0.1  localhost 这一条.默认情况下是有的。若没有则在启动监听器是会报TNS-12537:TNS:connection closed的错误.同时最好添加上你的服务器IP  主机名。

  2、配置监听器时可以使用netca或者直接写配置文件listener.ora也行

# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.120)(PORT = 1521))
)
)

其中的HOST最好使用IP,主机名可能会发生改变——影响较多。

  客户端的配置主要的是tnsnames.ora这个文件

CENTOS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.120)(PORT = 1521))
)
(CONNECT_DATA =
(SID = centos)
(SERVER = DEDICATED)
)
)

其实也没什么东西

  对于sqlnet.ora这个文件中的NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)这个参数,其中EZCONNECT是oracle10G新加的,好像是用来快速连接的。使用主机名Easy的连接掉服务器。不用TNSNAMES的方式连接。

  所有的设置都弄好了,如果你还是发现在客户端(Windows)不能连接到服务器端(Linux),查看服务器上的防火墙对oracle的1521端口是否开放。不是很重要的练习用的机子可以直接将防火墙关闭。

  1) 永久性生效,重启后不会复原 
开启: chkconfig iptables on 
关闭: chkconfig iptables off 

2) 即时生效,重启后复原 
开启: service iptables start 
关闭: service iptables stop

  最后在说下在排错时用到的一些命令:lsnrctl (start、stop、status)、tnsping (IP/主机名)、netstat -anp (查看端口)、telnet等。

333333333333333333333333333333333333333

本机连接时候:connect /as sysdba时出现:

ERROR:ORA-12560:TNS:协议适配器错误

解决方法:经过检查,由于本机之前安装过第二个数据库test,今天删掉其之后,没有及时改变相应的SID导致此问题。

所以进入regedit修改HKEY_LOCAL_MACHINE/SOFTEWARE/ORACLE将环境变量oracle_sid设为XXX,XXX为数据库SID,本机的为orcl,改为orcl就可以 了。

查阅资料后,发现还有其他两种情况需要注意:

1.查看数据库配置文件listener.ora和tnsnames.ora中的host值是否正确指向本机.
2.查看注册表中的监听HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/oracl******lister下的imagePath是否有值,如果没有添加其值,指向你的oracle数据库,比如我的本机值为E:oracleproduct10.2.0db_1BINTNSLSNR
44444444444444444

Case:

Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.

C:Documents and Settingsuser1>lsnrctl

LSNRCTL for 32-bit Windows: Version 9.2.0.7.0 - Production on 27-8月 -2008 09:33
:43

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

欢迎来到LSNRCTL,请键入"help"以获得信息。

LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12541: TNS:无监听器
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听器
   32-bit Windows Error: 2: No such file or directory
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.55)(PORT=1521)))

TNS-12538: TNS:没有此协议适配器
TNS-12560: TNS: 协议适配器错误
TNS-00508: 无此类协议适配器

LSNRCTL> start
启动tnslsnr:请稍候...

TNSLSNR for 32-bit Windows: Version 9.2.0.7.0 - Production
系统参数文件为D:oracleora92 etworkadminlistener.ora
写入D:oracleora92 etworkloglistener.log的日志信息
监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.pipeEXTPROC1ipc)))
监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.55)(PORT=
1521)))
TNS-12538: TNS:没有此协议适配器
TNS-12560: TNS: 协议适配器错误
TNS-00508: 无此类协议适配器


监听程序未能启动。请参阅上面的错误消息...


---------------------------
服务
---------------------------
在 本地计算机 无法启动 OracleOraHome92TNSListener 服务。

错误 1067: 进程意外终止。

---------------------------
确定   
---------------------------

==============================================================

ORA-12560: TNS: 协议适配器错误的解决方法

造成ORA-12560: TNS: 协议适配器错误的问题的原因有个:

1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务。

2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务面板,启动oracleserviceXXXX,XXXX就是你的database SID.

3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0将该环境变量ORACLE_SID设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下输set oracle_sid=XXXX,XXXX就是你的database SID.

经过以上步骤,就可以解决问题。

=======================================
TNS: 协议适配器错误的问题的原因有三个:
1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务。
2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务面板,启动oracleserviceXXXX,XXXX就是你的database SID.
3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0将该环境变量ORACLE_SID设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下输set oracle_sid=XXXX,XXXX就是你的database SID.
经过以上步骤,就可以解决问题

1、ORA-12541:TNS:没有监听器
  原因:没有启动监听器或者监听器损坏。如果是前者,使用命令net start OracleOraHome81TNSListener(名字可能有出入)即可;如果是后者,则使用“Net8 Configuration

Assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路OK。在添加之前可能需要把所有的监听器先删除!)
2、ORA-12500:TNS:监听程序无法启动专用服务器进程或ORA-12560:TNS:协议适配器错误
  原因:ORACLE的数据库服务没有启动。使用命令net start ORACLESERVICEORADB(ORADB为数据库名字)即可。如果仍没有解决,请继续向下看。

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 OracleOraHome81TNSListener
net start ORACLESERVICEORADB
svrmgrl 一般情况下不用,不过有时少不了它的,具体步骤见第5步。
2、我的ora_shutdown.bat:
net stop OracleOraHome81TNSListener
net stop ORACLESERVICEORADB

  ORACLE_HOME=/u01/app/oracle/product/8.1.6 
  export ORACLE_HOME/ 包括Oracle软件的目录 / 
  LD_LIBRARY_PATH=/u01/app/oracle/product/8.1.6/lib; 
  export LD_LIBRARY_PATH 
  ORACLE_BASE=/u01/app/oracle 
  export ORACLE_BASE/ 包括Oracle软件的目录和管理软件的目录 / 
  ORACLE_SID=ORCL 
  export ORACLE_SID/ 缺省数据库的标识 / 
  ORACLE_TERM=vt100 
   export ORACLE_TERM 
  ORA_NLS33=/u01/app/oracle/product/8.1.6/ 
  ocommon/nls/admin/data 
  export ORA_NLS33 / 语言支持 / 
  PATH=$PATH: /u01/app/oracle/product/8.1.6/bin 
  export PATH


=============================================
ORA-12560 STARTING LISTENER ON NT - TROUBLESHOOTING
---------------------------------------------------

ORA-12560: TNS Protocol adapter error
Cause: A generic protocol adapter error occurred.
Action: Check addresses used for proper protocol specification. Before reporting this error, look at the error stack and check for lower level transport errors.For further details, turn on tracing and reexecute the operation. Turn off tracing when the operation is complete.

This is a high level error just reporting an error occurred in the actual transport layer. Look at the next error down the stack and process that.


1.- Starting Listener with TCP/IP Protocol 
    
    Problem:
    You start the TNS Listener from command line and the TCP/IP address fails with a TNS-12560.

    Solution:
    Check if Microsoft Winsock Proxy(WSP) Client is enabled on the Windows NT Server, if that is the case then go to windows Control Panel, click WSP icon and select the disable Proxy Client option.

    Explanation:
    The Winsock application may fail to bind to a specific port on a Proxy Server computer when the Winsock is running Proxy Client.

2.- TNS-12560 TNS-512 Starting the listener.

    Problem:
    You try to start up the listener and receive the following error stack:
    TNS-12542: TNS:address already in use
     TNS-12560: TNS Protocol adapter error
      TNS-00512: Address already in use
       32-bit Windows Error: 48: Unknown error

    Error: TNS 512
    Text:   Address already in use
    --------------------------------------------
    Cause: Specified listener address is already being used.
    Action: Start your listener with an unused address.

    Generally this problem may ocurr for a incorrect setting in the listener.ora. Some causes of this problems may be:
    
    a.- Some defined address in the listeners.ora is been used. Make sure other listeners are not running. Either listener.log and screen output appear the address with problem.
        
    b.- Just for 8i: in windows NT the algorithm to acquire 
        the address has change, please check the Note 69026.1: Oracle 8i and socket LISTEN operations.

   Explanation:
   The listener will try to acquire the address in exclusive mode, if this is been used then the process to get it will fail. 
    
3.- Starting the listener the errors ORA-12203,ORA-12560, NL-462 or NL-427 may be raised.

    Problem:
    You try to start up the listener and receive the following errors 
    ORA-12203,ORA-12560, NL-462 or NL-427.

    Solution:
    Recreate the listener.ora file.

    Explanation:
    Some corruption in the listener.ora may get unable to the tnslsnr to work adequatly.


4.- Failed to start service, TNS-12560, TNS-00530 when create new listener services

    Problem: 
    To recreate Oracle TNS listener service on Windows NT, you delete the service entry in registry. When using lsnrctl to start the listener, you get the following errors:

    LSNRCTL> start
    Starting tnslsnr: please wait...

    Failed to start service, error 3.

    TNS-00530: Protocol adapter error

    The Listener service is not recreated and the Listener would not start.
    You are using a valid listener.ora file and protocol adapters.


    Solution:
    After you delete the Listener service from registry, you have to reboot NT for it to take effect. Then you can use lsnrctl to start the Listener, which would re-create the listener service.


    Explanation:
    The Listener service is marked 'disabled', but it still exists after you delete the service from registry.

555555555555555555555555555555555

Oracle协议适配器错误解决办法

 

Oracle中新建了一个数据库,今天把它删了之后再登录SQL*PLUS就登不上去了,出现ORA-12560:TNS:协议适配器错误。

  ORA-12560: TNS: 协议适配器错误的解决方法

  造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:

  1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务。

  2.database instance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,打开服务面板,启动oracleserviceXXXX,XXXX就是你的database SID.

  3.注册表问题。regedit,然后进入HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0将该环境变量ORACLE_SID设置为XXXX,XXXX就是你的database SID.或者右几我的电脑,属性--高级--环境变量---系统变量--新建,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下输set oracle_sid=XXXX,XXXX就是你的database SID.

  经过以上步骤,就可以解决问题。

  =======================================

  1、ORA-12541:TNS:没有监听器

  原因:没有启动监听器或者监听器损坏。如果是前者,使用命令net start OracleOraHome81TNSListener(名字可能有出入)即可;如果是后者,则使用“Net8 Configuration

  Assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路OK。在添加之前可能需要把所有的监听器先删除!)

  2、ORA-12500:TNS:监听程序无法启动专用服务器进程或ORA-12560:TNS:协议适配器错误

  原因:ORACLE的数据库服务没有启动。使用命令net start ORACLESERVICEORADB(ORADB为数据库名字)即可。如果仍没有解决,请继续向下看。

  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 OracleOraHome81TNSListener

  net start ORACLESERVICEORADB

  svrmgrl 一般情况下不用,不过有时少不了它的,具体步骤见第5步。

  2、我的ora_shutdown.bat:

  net stop OracleOraHome81TNSListener

  net stop ORACLESERVICEORADB

  ORACLE_HOME=/u01/app/oracle/product/8.1.6

  export ORACLE_HOME/ 包括Oracle软件的目录 /

  LD_LIBRARY_PATH=/u01/app/oracle/product/8.1.6/lib;

  export LD_LIBRARY_PATH

  ORACLE_BASE=/u01/app/oracle

  export ORACLE_BASE/ 包括Oracle软件的目录和管理软件的目录 /

  ORACLE_SID=ORCL

  export ORACLE_SID/ 缺省数据库的标识 /

  ORACLE_TERM=vt100

  export ORACLE_TERM

  ORA_NLS33=/u01/app/oracle/product/8.1.6/

  ocommon/nls/admin/data

  export ORA_NLS33 / 语言支持 /

  PATH=$PATH: /u01/app/oracle/product/8.1.6/bin

  export PATH

666666666666666666666666

应该是ORACLE_SID导致的,你可以加上SID访问一下sqlplus "sys@lcam as sysdba",如果可以,你可以在环境变量加一个ORACLE_SID试试。添加方法,右键点我的电脑/属性/系统配置/环境变量/新建
 
追问
我使用了阁下的sqlplus "sys@lcam as sysdba" 的方法,确实连接正常了,但是我不明白,这是为什么呢?难道我之前使用set ORACLE_SID=lcam 没有起到作用么,但为什么没有起到作用呢?之前也是这么做的啊,请阁下不吝赐教
这样虽然能够联通,但是当我使用数据泵向外备份数据的时候,仍然会报协议适配器错误,在环境变量中设ORACLE_SID也没有起作用啊
 
追答
windows参数调用是%VAR%
你可以试试 set ORACLE_SID=“lcam”或者set ORACLE_SID=“LCAM”。
另外有个参数TNS_ADMIN=存放tnsnames.ora的路径。

得根据实际情况测试一下,你可以研究一下instantclient,几个参数设置好了,怎么访问都可以。

 
原文地址:https://www.cnblogs.com/qq3245792286/p/6223815.html