您的位置:首页 > 数据库 > Oracle

Linux下oracle数据库连接问题

2016-06-07 18:10 429 查看
早阵子在centos下装好了oracle数据库 参考这篇 ,但是连接的时候出了问题

问题描述:

linux主机监听程序已经启动 如下信息

[root@template10 ~]# lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 07-6月 -2016 17:54:27
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=template10)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for Linux: Version 11.2.0.1.0 - Production
启动日期                  07-6月 -2016 17:51:21
正常运行时间              0 天 0 小时 3 分 5 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          /data/app/oracle/product/11.2.0/network/admin/listener.ora
监听程序日志文件          /data/app/oracle/diag/tnslsnr/template10/listener/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
服务摘要..
服务 "orcl11g" 包含 1 个实例。
实例 "orcl11g", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
[root@template10 ~]# netstat -apn |grep 1521
tcp        0      0 :::1521                     :::*                        LISTEN      2203/tnslsnr
tcp        0      0 ::ffff:127.0.0.1:1521       ::ffff:127.0.0.1:64758      TIME_WAIT   -
tcp        0      0 ::ffff:127.0.0.1:1521       ::ffff:127.0.0.1:64737      TIME_WAIT   -
[root@template10 ~]# /etc/init.d/iptables stop


客户端:

C:\Users\Administrator>telnet 112.xx.xx.xx 1521

正在连接112.xx.xx.xx…无法打开到主机的连接。 在端口 1521: 连接失败

注:telnet win7下默认不可用需要开启

能ping通 112.xx.xxx.xx

112.xx.xx.xx 为服务器IP 地址栏访问时nginx主页

连接时 ORA-12541: TNS: 无监听程序

晚点研究

如果有童靴遇到过解决了还望告知 不甚感激!

连接centos下oracle数据库

远程连接linux下oracle数据库

linux下数据库允许远程连接

linux下oracle数据库监听开启防火墙关闭但无法连接提示 ORA-12541: TNS: 无监听程序

连接远程linux服务器下oracle数据库 ORA-12541: TNS: 无监听程序

以上是换了又换的搜索关键字

百度到

问题在于listener.ora文件 admin 用户没有读权限

修改了listener.ora文件 权限 问题依旧

又有说listener.ora文件 host 改为计算机名 改了以后 问题依旧

还是得从问题根源入手

百度到Oracle三个配置文件 listener.ora 、sqlnet.ora 、tnsnames.ora 区别

1. sqlnet.ora—– 作用类似于linux 或者其他unix 的nsswitch.conf 文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。

例如我们客户端输入

sqlplus sys/oracle@orcl

假如我的sqlnet.ora 是下面这个样子

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)

那么,客户端就会首先在tnsnames.ora 文件中找orcl 的记录. 如果没有相应的记录则尝试把orcl 当作一个主机名,通过网络的途径去解析它的 ip 地址然后去连接这个ip 上GLOBAL_DBNAME=orcl 这个实例,当然我这里orcl 并不是一个主机名

如果我是这个样子

NAMES.DIRECTORY_PATH= (TNSNAMES)

那么客户端就只会从tnsnames.ora 查找orcl 的记录, 括号中还有其他选项,如LDAP 等并不常用。

刚刚服务器上登陆的是莫名其妙

ORA-01031: insufficient privileges


之前一直是好的。这期间只改了admin下的两个配置文件。而且改之前是备份了的。恢复备份之后报这个错。检查了权限问题。

[oracle@template10 root]$ ll
ls: 无法打开目录.: 权限不够
[oracle@template10 root]$ cd ~
[oracle@template10 ~]$ ll
总用量 4
drwxrwxrwx 2 oracle dba 4096 6月   6 15:13 response
[oracle@template10 ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 6月 7 22:14:21 2016
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
SQL> connect sys as sysdba
输入口令:
已连接到空闲例程。
SQL>


难道是因为不在oracle用户的目录下执行的连接?? 不应该啊,再试了下不管在哪个目录切换到oracle用户都可以连接了 期间只是重启了两次服务器 可能是改了listener.ora么

参考这篇

Tnsnames.ora中对应service_name ,SQLPLUS>;show parameter service_name; 进行查看

改成了

[root@template10 admin]# vim tnsnames.ora
# tnsnames.ora Network Configuration File: /data/app/oracle/product/11.2.0/network/admin/t
nsnames.ora
# Generated by Oracle configuration tools.

#LISTENER_ORCL =
#  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

orcl=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TPC)(HOST=template10)(PORT=1521)(KEY=EXTPROC1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=orcl11g.us.oracle.com)
)
)


template10 是我改的主机名

想不通的是linux服务器防火墙都关了。联通云门户里面安全组规则也开放了1521端口。Windows下telent 连接

无法打开到主机的连接。 在端口 1521: 连接失败 1521端口无法访问

这是为什么呢?或许解决了这个问题,问题就解决了!

今天终于解决这个问题了和昨天猜想的一样!

联通云门户里开放1521端口还需要在路由上配置转发!这是关键的地方!其实早应该想到的!究其原因还是因为对云主机的不熟悉。不管怎样当看到下面这个场景还是很激动的!毕竟难忘的经历折腾了好久。



最后贴一下服务器上的配置。 template10 是改了后的主机名 为什么改名是因为云主机的主机名是一样的。百度到说无监听是因为listener.ora 文件中Host值不为主机名。那个0.0.0.0:1521和127.0.0.1:1521有影响的文章。好像都是转的同一篇的。具体也不知道是不是真的有影响。

如何修改linux主机名顺便说一下

[root@template10 admin]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=template10  改成你想要的名字


还要改host文件。一开始我也不知道linux的host文件在哪里。可能很多初学者都不知道。值得说一下 linux下的host文件位置 /etc/hosts

[root@template10 admin]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  template10
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
~


template10 加上。reboot 重启一下 hostname 查看主机名

[root@template10 admin]# hostname
template10


改名结束

listener.ora 文件

[root@template10 admin]# cd /data/app/oracle/product/11.2.0/network/admin/
[root@template10 admin]# vim listener.ora
ADR_BASE_LISTENER = /data/app/oracle

SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=orcl11g)
(ORACLE_HOME=/data/app/oracle/product/11.2.0)
(GLOBAL_DBNAME = orcl11g)
)
)

LISTENER =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=template10)(PORT=1521))
)
~


tnsnames.ora 文件

[root@template10 admin]# vim tnsnames.ora
6n
# tnsnames.ora Network Configuration File: /data/app/oracle/product/11.2.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

#LISTENER_ORCL =
#  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

orcl=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TPC)(HOST=template10)(PORT=1521)(KEY=EXTPROC1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=orcl11g.us.oracle.com)
)
)

orcl11g=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TPC)(HOST=template10)(PORT=1521)(KEY=EXTPROC1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=orcl11g)
)
)
~
~


sqlnet.ora 文件

[root@template10 admin]# vim sqlnet.ora
# sqlnet.ora Network Configuration File: /data/app/oracle/product/11.2.0/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

#NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
#sqlnet.authentication_services=(NONE)
#SQLNET.AUTHENTICATION_SERVICES=(ALL) #这里说什么linux下要设置成ALL 或者不设置
#REMOTE_LOGIN_PASSWORDFILE=(exclusive)

ADR_BASE = /data/app/oracle


ps昨天发现有某网站赤裸裸抄袭我这篇还没完成的博客阅读量还很大。汗颜!有些错误信息我会更正后更新博客。希望早期不成熟的经历过程不要误导他人。博主也是本着乐于分享的精神仅供参考,希望有帮助到遇到类似问题的童鞋,不要像我一样瞎折腾,能少走弯路!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 oracle centos