V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
black11black
V2EX  ›  问与答

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

  •  
  •   black11black · Dec 31, 2020 · 2028 views
    This topic created in 1947 days ago, the information mentioned may be changed or developed.

    如题,有一台 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/[email protected]:1521/orcl
    
    ERROR:
    ORA-12514: TNS:listener does not currently know of service requested in connect
    descriptor
    

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

    17 replies    2021-01-10 15:53:20 +08:00
    gefranks
        1
    gefranks  
       Dec 31, 2020
    打开 Net Manager 看看 profile 里面是否允许了 hostname 方式的连接
    black11black
        2
    black11black  
    OP
       Dec 31, 2020
    @gefranks

    修改后提示、

    db@dbpc:~$ sqlplus scott/[email protected]: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
        3
    gefranks  
       Dec 31, 2020
    请确认你 oracle instance 正常工作的.你这个提示看上去 instance 工作不正常
    为啥用这么老的版本, 这版本早就淘汰了
    gefranks
        4
    gefranks  
       Dec 31, 2020
    还有你 listener 为啥要用 sudo 起?哪个用户装的用那个用户起吧
    black11black
        5
    black11black  
    OP
       Dec 31, 2020
    @gefranks 感谢回复,初学 oracle 不太清楚概念,instance 是指数据库的工作实例吗?

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

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

    另外老哥是否知道 Oracle 在 windows 和 linux 中性能表现是否有区别?我如果想把目前基于 mysql 的生产服务迁移到 oracle 中,应该在 windowsserver 上搭建还是 linux 上搭建。搜索了一下,几乎没有这方面的资料。
    gefranks
        8
    gefranks  
       Jan 1, 2021   ❤️ 1
    oracle db 我记得是没有在 debian 系上认证过, 在甲骨文的时候我也没做过在我们的应用在 debian 系上的认证.
    区别肯定有,我接触的客户他们的数据库系统绝大多数都是跑在 linux 上的, windows 上的非常少
    gefranks
        9
    gefranks  
       Jan 1, 2021
    oracle linux 的话坑应该是最少的.
    terryhyx
        10
    terryhyx  
       Jan 1, 2021
    官方认证过的 Linux 应该就 RHEL OEL SLES
    确认你的 instance 是叫 orcl 吗?
    listener.org 用静态注册 试试看
    black11black
        11
    black11black  
    OP
       Jan 7, 2021
    @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
        12
    black11black  
    OP
       Jan 7, 2021
    已经解决,问题产生由于两个原因,其一是安装 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
        13
    gefranks  
       Jan 7, 2021
    为啥 lisenter 要放在 loopback?
    据我的经验在 win 上装好 listener 起来就好了(如果没自己创建 listner 就有个默认的), 要用起来其他没啥要改的配置啊。
    black11black
        14
    black11black  
    OP
       Jan 7, 2021
    @gefranks 很神秘
    black11black
        15
    black11black  
    OP
       Jan 10, 2021 via Android
    @gefranks 大佬,我在 oracle linux 安装又遇到无法访问。调试时运行 sqlplus lsnrctl 等提示无命令,这是正常的吗?

    这次是官方镜像 oracle linux 7.7 版,安装 19c 。安装过程挺顺利的,按照程序的检查提示,在默认系统中增大 swap,修改系统参数,以及安装几个库之后就很无痛的装上了。localhost:5500/em 可以访问,但 sqlplus 之类的就访问不了
    gefranks
        16
    gefranks  
       Jan 10, 2021
    @black11black 请问你 ORACLE_HOME 是否设置了? ORACLE_SID 设了么, sqlplus, lsnrctl 所在的 bin 目录是否加入到了 PATH 里面?
    gefranks
        17
    gefranks  
       Jan 10, 2021
    @gefranks 不过我自己一般是设好上面的 ORACLE_HOME 和 ORACLE_SID 后直接去 bin 目录下面执行 lsnrctl 和 sqlplus 的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2556 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 12:42 · PVG 20:42 · LAX 05:42 · JFK 08:42
    ♥ Do have faith in what you're doing.