体系结构之 OracleNet 网络

  1. 三个重要文件
    1. 基于服务端的Listener.ora
    2. 基于客户端的Tnsnames.ora
    3. 基于服务端或客户端(两端)的Sqlnet.ora(可选)
    4. 注:Linux环境下,安装后默认没有此三类文件,需要通过工具或手工编辑进行建立。默认的存储位置:$ORACLE_HOME/network/admin
  2. Listener.ora
    1. 监听文件---在客户端上不起作用,在服务端上用来监听来自客户端的会话
    2. 监听能不能起来,和有没有Listener.ora没有关系,但是官方建议有。在默认没有Listener.ora文件的前提下,客户端也是可以连接到服务端的,因为Oracle默认的监听别名是LISTENER。
    3. 监听断开的情况下,已连接的会话不受影响,新建会话会出现ORA-12541的报错
    4. 创建的三种方式:(创建监听时必须把已启动的监听关闭 lsnrctl stop)
      1. NETMGR-----此工具中的两个文件夹,代表含义如下:
        1. Service Naming----对应的就是$ORACLE_HOME/network/admin/tnsnames.ora
        2. Listeners----对应的就是$ORACLE_HOME/network/admin/listener.ora
      2. NETCA
      3. 手工编辑
    5. 监听状态
      1. lsnrctl status ----查看监听状态
      2. lsnrctl start [LISTENER] 启动监听 lsnrctl start xxxx;
      3. lsnrctl stop [LISTNER] 关闭监听
      4. SQL> alter system register; 使实例立刻注册上
    6. 监听注册(实例注册)
      1. 动态监听注册
        1. Oracle默认是动态监听注册,60s轮询一次,在60s内动态完成注册。如果不想等待60s,则可以运行 alter system register 命令,则实例会立马注册成功。
        2. ORA报错
          1. ORA-012541: 无监听程序-----查看监听是否启动
          2. ORA-012514:监听程序当前无法识别连接描述符中的请求服务------第一想到的是实例有没有注册上
        3. 数据库默认的动态监听注册是往LISTENER上注册。但是通过修改参数 Local_listener,可以实现动态注册到不同的端口号监听中。
        4. alter system set local_listener=' ';-----即使将此参数设置为空,默认也会动态注册到LISTENER上。如果改成其他的端口,则就会往该端口上注册
        5. 总结:
          1. 默认情况下,LREG会将实例信息动态的注册到LISTENER监听上(默认端口1521);
          2. 如果有新的监听LSNR2(新端口号1888),要让LREG动态的将实例信息注册到LISTENER和LSNR2上,那么需要修改local_listener参数,把他们都添加进来。修改格式:SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=henry)(PORT=1521))','(ADDRESS=(PROTOCOL=tcp)(HOST=henry)(PORT=1888))' ;
          3. 如果所有的端口号都在LISTENER监听上(因为是默认的),所以可以将local_listener参数置空,这时在LISTENER上的所有端口,都将被动态注册实例信息。
      2. 静态监听注册
        1. 怎样辨别是动态注册还是静态注册?
          1. status= UNKONWN ----- 静态监听注册
          2. status= READY -----动态监听注册
        2. SID_name=‘大小写敏感’
        3. 在Listener.ora中添加一段代码就是静态监听注册

LSNR2 =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12c)(PORT = 1520))
  )
SID_LIST_LSNR2 =
  (SID_DESC =
  (GLOBAL_DBNAME = ergouzi(自定义))
  (ORACLE_HOME = /u01/app/oracle/product/12.2.0.1/db_1)
  (SID_NAME = OCP12C)
  )

      1. 动态注册和静态注册的区别:在数据库关闭后,动态注册是不能远程到数据库的,但静态注册可以远程到数据库,对数据库进行远程启动。
  • Tnsnames.ora
    1. 主要配置在客户端上,主要作用是用来提供名称解析。
    2. 格式:
      ERP= (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12c)(PORT = 1521))
        (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = ERP)
        )
        )

    3. Linux可以直接使用NETMGR命令进行图形化配置
    4. 连接方式
      1. EZ connect:sqlplus scott/tiger@192.168.59.135/PROD1
      2. SQL*PLUS工具:输入用户名和密码即可
      3. CMD窗口登录
      4. SQL Developer:Oracle自己的工具
      5. PL/SQL Developer :一个三方工具
  • Sqlnet.ora
    1. 作用:
      1. 指定客户端名称解析的顺序(NAMES.DIRECTORY_PATH)
      2. 认证方式的限制(SQLNET.AUTHENTICATION_SERVICES)
  • DB Link
    1. 用于查询不用数据库之间的数据,有公有和私有之分
    2. 创建语句(在PROD1上查询PROD2的数据,则可以在PROD1上创建DBLINK)
SQL> create database link link_henry connect to soctt identified by tiger using 'PROD2'; ---后面的USING 'PROD2',这个需要在本机查找Tnsnames.ora文件中的别名 PROD2
    1. DBLink 和Tnsname.ora都配置好了,启动监听,就可以执行语句进行不同数据库之间的数据查询。
原文地址:https://www.cnblogs.com/eniniemand/p/14098065.html