我尝试使用Oracle Toad在笔记本电脑上连接到数据库,但我一直遇到此错误:
ORA-12170:TNS:发生连接超时
我一直有这个错误的原因是什么?
昨天我访问了同一个数据库,并且能够访问它。
答案 0 :(得分:9)
[收集评论中的答案]
问题是Oracle服务在IP地址上运行,主机配置了另一个IP地址。
要查看Oracle服务的IP地址,请发出lsnrctl status
命令并检查报告的地址(在本例中为127.0.0.1,localhost):
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
要查看主机IP地址,请发出ipconfig
(在Windows下)或ifconfig
(在linux下)命令。
然而,在我的安装中,Oracle服务不起作用如果在localhost地址上设置,我必须设置真正的主机IP地址(例如 192.168.10.X )。
为避免将来出现此问题,请不要使用DHCP分配主机的IP地址,而应使用静态IP地址。
答案 1 :(得分:2)
这是因为SID冲突。例如,在Oracle12cBase \ app \ product \ 12.1.0 \ dbhome_1 \ NETWORK \ ADMIN \ tnsnames.ora文件中,ORCL的连接描述如下:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
并且,您尝试使用相同的SID但不同的IP,用户名/密码使用连接字符串进行连接,如下所示:
sqlplus username/password@192.168.130.52:1521 / orcl
要解决此问题,请在tnsnames.ora文件中进行更改:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.130.52)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
答案 2 :(得分:1)
检查防火墙,以允许客户端与服务器建立连接。 通过允许域网络或创建规则。
答案 3 :(得分:1)
问题,因为连接建立或与客户端的通信未能在指定的时间间隔内完成。这可能是网络或系统延迟的结果。
答案 4 :(得分:0)
open sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.INBOUND_CONNECT_TIMEOUT=360
SQLNET.RECV_TIMEOUT=10
SQLNET.SEND_TIMEOUT=10
http://docs.oracle.com/cd/B19306_01/network.102/b14213/sqlnet.htm
答案 5 :(得分:0)
我在连接ORCLPDB(可插拔数据库)的“hr”用户时遇到了同样的错误。
首先,通过在Windows命令提示符下键入命令lsnrctl status
来获取主机名和端口号。就我而言,它是127.0.0.1,端口号为1521
其次,输入以下命令,其中包含您的主机名和端口号:
sqlplus username/password@HostName:Port Number/PluggableDatabaseName.
例如:
sqlplus hr/hr@127.0.0.1:1521/ORCLPDB.
答案 6 :(得分:0)
疑难解答步骤(文件编号730066.1)
连接超时错误ORA-3135和ORA-3136 当连接到数据库的尝试未在以下时间允许的时间段内完成其连接和身份验证阶段时,可能会发出连接超时错误: SQLNET.INBOUND_CONNECT_TIMEOUT 和/或 INBOUND_CONNECT_TIMEOUT _ 服务器端参数。
从Oracle 10.2开始,这些参数的默认值为60秒,在以前的版本中为0,表示没有超时。
超时时,客户端程序将收到ORA-3135(或可能是TNS-3135)错误:
ORA-3135连接丢失联系
并且数据库将在其alert.log中记录ORA-3136错误:
... 2008年5月10日星期六02:21:38 警告:入站连接超时(ORA-3136)......
当数据库会话处于身份验证阶段时,它将发出一系列SQL语句。在完全解析,执行和提取所有这些内容之前,身份验证不会完成。此列表中的一些SQL语句,例如在10.2上是:
select value$ from props$ where name = 'GLOBAL_DB_NAME'
select privilege#,level from sysauth$ connect by grantee#=prior privilege#
and privilege#>0 start with grantee#=:1 and privilege#>0
select SYS_CONTEXT('USERENV', 'SERVER_HOST'), SYS_CONTEXT('USERENV', 'DB_UNIQUE_NAME'),
SYS_CONTEXT('USERENV', 'INSTANCE_NAME'), SYS_CONTEXT('USERENV', 'SERVICE_NAME'),
INSTANCE_NUMBER, STARTUP_TIME, SYS_CONTEXT('USERENV', 'DB_DOMAIN')
from v$instance where INSTANCE_NAME=SYS_CONTEXT('USERENV', 'INSTANCE_NAME')
select privilege# from sysauth$ where (grantee#=:1 or grantee#=1) and privilege#>0
ALTER SESSION SET NLS_LANGUAGE= 'AMERICAN' NLS_TERRITORY= 'AMERICA' NLS_CURRENCY= '$'
NLS_ISO_CURRENCY= 'AMERICA' NLS_NUMERIC_CHARACTERS= '.,' NLS_CALENDAR= 'GREGORIAN'
NLS_DATE_FORMAT= 'DD-MON-RR' NLS_DATE_LANGUAGE= 'AMERICAN' NLS_SORT= 'BINARY' TIME_ZONE= '+02:00'
NLS_COMP= 'BINARY' NLS_DUAL_CURRENCY= '$' NLS_TIME_FORMAT= 'HH.MI.SSXFF AM' NLS_TIMESTAMP_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM' NLS_TIME_TZ_FORMAT= 'HH.MI.SSXFF AM TZR' NLS_TIMESTAMP_TZ_FORMAT=
'DD-MON-RR HH.MI.SSXFF AM TZR'
注意:上面的SQL列表不完整,并不代表身份验证SQL的顺序。从发布到发布也可能存在差异。
上述SQL语句需要像Oracle数据库中的所有SQL一样进行解析,执行和提取。因此,在这些阶段遇到的任何问题都会出现挂起或严重的低速性能,可能会导致超时。
认证会话将看到此类挂起的症状等待: •cursor:pin S在X上等待 •latch:行缓存对象 •行缓存锁定 其他类型的等待事件是可能的;此列表可能不完整。
此处的问题是阻止身份验证会话等待获取由数据库内的另一个会话持有的共享资源。该阻塞会话本身在长时间运行的活动(或其自己的挂起)中被占用,这阻止了它及时释放认证会话所需的共享资源。这导致超时最终报告给身份验证会话。
在这种情况下,我们需要找出阻止进程持有身份验证会话所需的共享资源,以便查看正在发生的事情。
在这种情况下使用的典型诊断如下:
$ sqlplus -prelim '/ as sysdba' oradebug setmypid oradebug unlimit oradebug dump systemstate 266 ...wait 90 seconds oradebug dump systemstate 266 ...wait 90 seconds oradebug dump systemstate 266 quit
可导致身份验证的问题示例挂起
未发布的Bug 7039896变通方法参数 _enable_shared_pool_durations = false参见注释7039896.8
避免此问题的其他方法
在某些情况下,通过在实例启动后很快将这些语句固定在共享池中并且它们是新加载的,可以避免Authentication SQL出现问题。您可以使用以下artcile来建议: 文档726780.1如何使用DBMS_SHARED_POOL.KEEP在共享池中固定光标
固定会阻止它们因不活动和老化而被冲洗掉,因此会阻止它们在将来需要重新加载,即需要重新解析并且容易受到身份验证挂起问题的影响。
答案 7 :(得分:0)
除了oci.dll之外,还有一些.jar文件。这给了我安装Java的想法。然后一切正常。
答案 8 :(得分:-1)
我尝试更改tnsnames.ora文件,将服务器的IP地址代替了localhost或回送地址,但没有用。防火墙阻止了请求。请配置您的防火墙或将其关闭(不建议使用),它将起作用。