• Oracle网络原理及配置


    概念

    概念:Oracle网络服务在服务端是通过监听器的进程来实现的,在oracle中,最常见的连接方式是专用连接
    服务器进程与用户进程为一一对应的关系,一旦用户进程中断,其对应的服务器进程也被终止。

    监听:用户连接监听,监听知道数据库在什么位置,他们之间没有长连接,监听和数据库之间没有必然联系,但是相互之间可以找到,他们之间没有长连接,监听只做一件事情就是在建立连接的时候起作用,负责转发。

    建立连接的大致过程

    在这里插入图片描述

    1、客户端发起连接:通过在客户端提供用户名、密码、以及连接字符串等信息,建立与监听器的连接。连接字符串位于客户端的文件里面,文件名字是tnsnames.ora,根据安装的客户端不同,放置在不同的目录里面。
    监听把用户的连接请求转发给instance,实例会为这个连接启动一个Server Process, 同时会把Server Process的地址告诉监听,监听告诉客户端,然后客户端直接发起对Server Process的请求,同时把用户名和密码给Server Process,Server Process会验证,Server Process通过客户端输入的连接字符串,去到tnsnames.ora 里去找到host和端口,判断输入的端口和ip是否正确,如果正确则和监听建立连接。

    2、客户端一旦与监听器建立连接,则在客户端生成用户进程,同时监听器会判断客户端所请求的服务名是否是自己所管理的服务名。

    判断SERVICE_NAME是否正确:监听知道数据库在什么位置,监听会根据客户端输入的连接字符串信息找到tnsnames.ora文件里的SERVICE_NAME,检查SERVICE_NAME是否根自己所管理的服务名匹配(show parameter service),一旦匹配。建立成功连接,此时和监听没有任何关系。

    例:如果客户端传过来的连接字符串不包含服务名,报错
    如果请求的服务名不是自己管理的,报错并中断
    如果请求的服务名是自己管理的,监听器就在数据库服务器上创建服务器进程

    3、监听器在创建服务器进程以后,会将用户进程与服务器进程建立连接,之后,监听器退出与客户端的连接

    4、服务器进程根据用户进程提供的用户名和密码到数据字典里判断是否正确

    5、如果用户名和密码不匹配,报错,如果匹配,则分配PGA,并生成session

    netca配置监听

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    动态注册与静态注册

    我们前面在配置listener的时候,并没有涉及到服务名的问题,客户端将服务名传给监听器以后,监听器的服务名来自何处?

    1、动态注册
    数据库实例里的PMON进程,将当前实例的服务名注册到同一台服务器上的,默认的,并在1521端口上监听的监听器(就是名为LISTENER的监听器),当前实例的服务名由初始化参数service_name决定。

    SQL> show parameter service
    
    NAME				     TYPE
    ------------------------------------ --------------------------------
    VALUE
    ------------------------------
    service_names			     string
    jfdb
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    手工启用动态注册:

    show parameter local_listener;
    
    SQL> show parameter servrice_name;
    SQL> show parameter service
    
    NAME				     TYPE
    ------------------------------------ --------------------------------
    VALUE
    ------------------------------
    service_names			     string
    jfdb
    SQL> show parameter local_listener;
    
    NAME				     TYPE
    ------------------------------------ --------------------------------
    VALUE
    ------------------------------
    local_listener			     string
    (ADDRESS = (PROTOCOL =TCP)(HOS
    T =jfdb)(PORT = 1523))
    
    
    
    SQL> alter system set local_listener= '(ADDRESS = (PROTOCOL =TCP)(HOS
    T =jfdb)(PORT = 1523))';  2  
    
    System altered.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    修改了这个参数以后 很快服务名就注册过来了

    [oracle@jfdb admin]$ lsnrctl status 
    
    LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 08-AUG-2022 14:56:19
    
    Copyright (c) 1991, 2013, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=jfdb)(PORT=1523)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
    Start Date                08-AUG-2022 14:05:41
    Uptime                    0 days 0 hr. 50 min. 37 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/product/11.2.0/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/diag/tnslsnr/jfdb/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=jfdb)(PORT=1523)))
    Services Summary...
    Service "jfdb" has 1 instance(s).
      Instance "jfdb", status READY, has 1 handler(s) for this service...
    The command completed successfully
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    静态注册:静态注册在监听启动的时候,立刻就将服务名注册到监听里去。

    vim listener.ora
    SID_LIST_LISTENER=
      (SID_LIST=
        (SID_DESC=
          (GLOBAL_DBNAME=jfdb)
          (ORACLE_HOME=/u01/app/oracle/product/11.2.0)
          (SID_NAME=jfdb)
        )
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    重启监听
    lnsrctl stop
    lnsrctl start
    查看监听状态: status UNKNOWN是正常的 因为是手动注册的,所以数据库不知道有服务有没有注册到监听里去。
    lnsrctl status

    [oracle@jfdb admin]$ lsnrctl status 
    
    LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 08-AUG-2022 16:48:00
    
    Copyright (c) 1991, 2013, Oracle.  All rights reserved.
    
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=jfdb)(PORT=1523)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
    Start Date                08-AUG-2022 16:47:42
    Uptime                    0 days 0 hr. 0 min. 18 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/product/11.2.0/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/diag/tnslsnr/jfdb/listener/alert/log.xml
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=jfdb)(PORT=1523)))
    Services Summary...
    Service "jfdb" has 1 instance(s).
      Instance "jfdb", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    配置tnsnames.ora
    vim tnsnames.ora

    JFDB =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.13.129)(PORT = 1523))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = jfdb)
        )
      )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    通过sqlplus连接
    创建用户测试

    SQL> create user test identified by test;
    
    User created.
    
    SQL> alter user test identified by 123456;
    
    User altered.
    
    SQL> grant connect, resource to test;
    
    Grant succeeded.
    
    SQL> commit;
    
    Commit complete.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    [oracle@jfdb admin]$ sqlplus test/123456@jfdb
    
    SQL*Plus: Release 11.2.0.4.0 Production on Mon Aug 8 18:14:07 2022
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    监听的三大文件

    监听的所有文件的位于$ORACLE_HOME/network/admin/下
    listener.ora: 服务端文件、配置监听 位置
    tnsname.ora:配置文件是一个用于解析名称的客户端文件,客户端通过连接字符串解析主机名+端口+服务吗是否正确。
    sqlnet.ora: 配置访问白名单、黑名单。

    service_name

    服务名(service_name)是可以更改的,例:从其它环境克隆过来的数据,服务名不相等的需要更改,然后重启服务,以及监听。

    修改pdb名字

    sqlplus / as sysdba
    
    alter pluggable database SZPROD close;
    
    alter pluggable database SZPROD open restricted;
    
    SQL> select name, open_mode, restricted from v$pdbs;
    
    NAME                 OPEN_MODE  RES
    -------------------- ---------- ---
    PDB$SEED             READ ONLY  NO
    SZPROD               READ WRITE YES
    
    alter session set container=SZPROD;
    
    alter pluggable database rename global_name to SZUAT;
    
    alter pluggable database close immediate;
    
    alter pluggable database open;
    
    alter pluggable database SZUAT save state;
    
    alter session set container=SZUAT;
    
    exec dbms_service.create_service('ebs_SZUAT','ebs_SZUAT');
    
    exec dbms_service.delete_service('ebs_SZPROD');
    
    exec dbms_service.start_service('ebs_SZUAT');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    查看数据库的名字:

    
    数据库名:show parameter name
    
    实例名:show parameter instance
    
    服务名:show parameter service,其中服务名可以修改
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    vue之数据驱动
    Win11 安装wsl遇到的问题解决
    电视连续剧 ffmpeg 批量去掉片头片尾
    SpringBoot+Vue项目线上买菜系统
    【Java学习挑战】——数据类型、关键字、类型转换、常用运算符
    用Selenium定位到百度搜索页指定位置
    Jenkins在Linux环境下的安装与配置
    公司为什么要使用OKR,目的是什么?
    一文学会shell 脚本编写
    Python 基础30道测试题「答案」
  • 原文地址:https://blog.csdn.net/m0_49929446/article/details/126245192