Oracle 绑定后无法通过指定 IP 访问,求教

2020-12-31 20:06:08 +08:00
 black11black

如题,有一台 linux 机器上要装 oracle,折腾半天了。

现在服务已经安装成功,并且正常启动。

使用如下命令启动成功:

sudo lsnrctl start
sqlplus /nolog
conn / as sysdba
startup

并且在这种访问模式下能够成功获取到数据

SQL> select * from scott.dept;

    DEPTNO DNAME	  LOC
---------- -------------- -------------
	10 ACCOUNTING	  NEW YORK
	20 RESEARCH	  DALLAS
	30 SALES	  CHICAGO
	40 OPERATIONS	  BOSTON

于是把服务绑定到局域网 IP,想要从另一台机器上登录,修改了 listener.ora

# Generated by Oracle configuration tools.

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

ADR_BASE_LISTENER = /home/rogear/tools/oracle11g

和 tnsnames.ora

# tnsnames.ora Network Configuration File: /home/rogear/tools/oracle11g/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

然后重启数据库和监听程序。

这时候使用登录命令会得到提示:

sqlplus scott/123456@192.168.1.100:1521/orcl

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

请问可能是什么原因造成的? 当前可以确保网络是连同的,确实能访问到 192.168.1.100:1521 上的程序,但是登录失败,怎么回事呢

1377 次点击
所在节点    问与答
17 条回复
gefranks
2020-12-31 20:32:43 +08:00
打开 Net Manager 看看 profile 里面是否允许了 hostname 方式的连接
black11black
2020-12-31 20:59:56 +08:00
@gefranks

修改后提示、

db@dbpc:~$ sqlplus scott/123456@192.168.1.100:1521/orcl

SQL*Plus: Release 11.2.0.4.0 Production on Thu Dec 31 12:58:42 2020

Copyright (c) 1982, 2013, Oracle. All rights reserved.

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0


Enter user-name:
gefranks
2020-12-31 21:22:55 +08:00
请确认你 oracle instance 正常工作的.你这个提示看上去 instance 工作不正常
为啥用这么老的版本, 这版本早就淘汰了
gefranks
2020-12-31 21:24:58 +08:00
还有你 listener 为啥要用 sudo 起?哪个用户装的用那个用户起吧
black11black
2020-12-31 23:08:30 +08:00
@gefranks 感谢回复,初学 oracle 不太清楚概念,instance 是指数据库的工作实例吗?

我目前的数据库是可以用 sqlplus (不带任何参数)的方式连接的,并且能正常工作。

用这个版本是网上查了一下很多人推荐这个,就没用最新的,确实很多坑
gefranks
2020-12-31 23:25:42 +08:00
是的,就是数据库的工作实例.参考这个看下
https://support.esri.com/en/technical-article/000008516
请检查$ORACLE_HOME, $ORACLE_SID 环境变量是否设置
black11black
2020-12-31 23:53:59 +08:00
@gefranks 环境变量设置是正确的,很神秘。我用 ubuntu 是因为一直以来用的都是 debian 系,但是外网搜索了一下似乎 oracle 对 debian 系非常不友好,我确实在安装过程中遇到很多编译坑,我想直接放弃 ubuntu,尝试一下 oracle linux+最新版 oracle 的这样配置了,不知道能否坑少一点。

另外老哥是否知道 Oracle 在 windows 和 linux 中性能表现是否有区别?我如果想把目前基于 mysql 的生产服务迁移到 oracle 中,应该在 windowsserver 上搭建还是 linux 上搭建。搜索了一下,几乎没有这方面的资料。
gefranks
2021-01-01 00:58:21 +08:00
oracle db 我记得是没有在 debian 系上认证过, 在甲骨文的时候我也没做过在我们的应用在 debian 系上的认证.
区别肯定有,我接触的客户他们的数据库系统绝大多数都是跑在 linux 上的, windows 上的非常少
gefranks
2021-01-01 00:59:10 +08:00
oracle linux 的话坑应该是最少的.
terryhyx
2021-01-01 11:09:13 +08:00
官方认证过的 Linux 应该就 RHEL OEL SLES
确认你的 instance 是叫 orcl 吗?
listener.org 用静态注册 试试看
black11black
2021-01-07 04:37:51 +08:00
@gefranks
@terryhyx
带佬,我又遇到问题了。这次新搞了一台 windows 机器,裸机新系统,想测试一下 oracle19c 使用上和 11g 有没有什么区别。

我在官网下载并安装后又遇到不能连接的问题,而且表现比较奇怪。

安装过程中我选择了服务器类-->典型安装。这个是依照 11g 时的经验安装的,但是后来查了一下安装教学似乎都推荐用桌面类,我也是没搞懂为什么。

安装成功后,powershell 执行 sqlplus /nolog,而后 conn / as sysdba , 成功
在菜单里直接启动 sqlplus 命令行程序,输入用户名 system,密码 123456 , 成功 (但是无法连接到 scott.dept 表,不知道是否新版本里这个库被删除了)

使用 navicat 连接 127.0.0.1:1521,失败,提示 ORA-12541:TNS:无监听程序
使用 tcping 检查 1521 端口,端口是关闭的
使用其他程序占用 1521 端口,可以占用该端口
检查 services.msc 服务,OracleOraDB19Home1TNSListener 正在运行
使用 Net Configuration Assistant,配置新的监听程序,提示不能占用 1521 端口,因为 1521 端口已在使用中。

搞不太懂什么状况,一会说又一会说没有
black11black
2021-01-07 07:47:39 +08:00
已经解决,问题产生由于两个原因,其一是安装 oracle 的时候默认监听没有放在本地回环而是监听了局域网 IP,导致端口既被占用又闲置。

但修改 IP 后仍无法访问,还需要配置 listener.ora ,新增

(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\Users\HW\Downloads\WINDOWS.X64_193000_db_home)
(SID_NAME = ORCL)
)

这些内容才能正常监听,不是很清楚为什么默认设置没有调好,还要自己加配置
gefranks
2021-01-07 12:32:47 +08:00
为啥 lisenter 要放在 loopback?
据我的经验在 win 上装好 listener 起来就好了(如果没自己创建 listner 就有个默认的), 要用起来其他没啥要改的配置啊。
black11black
2021-01-07 17:27:30 +08:00
@gefranks 很神秘
black11black
2021-01-10 15:35:33 +08:00
@gefranks 大佬,我在 oracle linux 安装又遇到无法访问。调试时运行 sqlplus lsnrctl 等提示无命令,这是正常的吗?

这次是官方镜像 oracle linux 7.7 版,安装 19c 。安装过程挺顺利的,按照程序的检查提示,在默认系统中增大 swap,修改系统参数,以及安装几个库之后就很无痛的装上了。localhost:5500/em 可以访问,但 sqlplus 之类的就访问不了
gefranks
2021-01-10 15:51:57 +08:00
@black11black 请问你 ORACLE_HOME 是否设置了? ORACLE_SID 设了么, sqlplus, lsnrctl 所在的 bin 目录是否加入到了 PATH 里面?
gefranks
2021-01-10 15:53:20 +08:00
@gefranks 不过我自己一般是设好上面的 ORACLE_HOME 和 ORACLE_SID 后直接去 bin 目录下面执行 lsnrctl 和 sqlplus 的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/740755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX