zoukankan      html  css  js  c++  java
  • oracle课堂笔记--第十八天

    Oracle NET

    1.客户端通过@ora10g的名字去tnsname.ora文件获取服务器的具体连接信息

    2.客户端通过tnsname.ora中的描述向服务器发出链接请求服务器端

    3.服务器的监听器接收到连接请求后,验证请求的服务的有效性

    4.服务器端产生一个服务进程和客户端进程建立连接

    查看会话建立过程:

    $ netstat -tlnp | grep 1521

    $ sqlplus sys/password@orcl as sysdba

    $ netstat -tnp | grep sqlplus

    $ kill -9 1234 杀死维护sqlplus的进程

    监听的配置

    配置文件:

    $ vi $ORACLE_HOME/network/admin/listener.ora

    通过netca添加新的监听服务Listener15210,端口使用15210

    $ vi listener.ora

    $ netstat -tln|grep 1521

    $ lsnrctl status listener15210

    通过netmgr配置高级选项

    通过lsnrctl命令来启动/停止/查看/重载监听器/服务

    lsnrctl start|stop|status|reload|service

    指定监听的名称:

    $ lsnrctl status listener15210    监听信息

    网络环境变化,需要检查listener.ora和/etc/hosts文件

    netca删除Listener15210

    实例的配置(数据库)

    静态注册和动态注册

    什么是静态注册

    就是监听器的配置文件中写明了监听哪个实例 需要配置SID_DESC字段

    定位实例的方式可以使用SID_NAME或者SERVICE_NAME来定位

    什么是动态注册

    就是监听器的配置文件中没写明监听哪个实例

    要通过PMON告知监听器要监听的具体实例

    PMON是将SERVER_NAME告诉给监听器 这个过程就是注册

    默认一分钟PMON注册一次 也就是说启动监听 还没注册时 是无法连接的

    添加3种方式,后面的删掉,用文档改写

    区分静态注册和动态注册

    lsnrctl status

    是 ready 就是动态

    是 unknow 就是静态

    静态注册listener.ora文件信息:

    $ vi listener.ora

    SID_LIST_LISTENER =

      (SID_LIST =

            (SID_DESC =

                    (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)

                    (SID_NAME =ora11g)

            )

      )

    $ lsnrctl reload

    .....

    Services Summary...

    Service "ora11g" has 1 instance(s).

      Instance "ora11g", status UNKNOWN, has 1 handler(s) for this service...

    状态总是显示未知的,当有请求时,监听器才去确认数据是否存在

    动态注册

    Oracle9i起实例使用动态服务注册来通知监听程序有关其数据库服务的信息。

    服务注册依赖PMON 进程向监听程序注册实例信息 注册间隔为1分钟左右

    手动注册命令 alter system register;

    无需在listener.ora 文件中设置任何信息 此文件可以不存在

    3种注册方式:

    本地默认端口监听     (监听和数据库在一台主机  不需改配置)1521

    本地非默认端口监听   (监听和数据库在一台主机,需改配置,知道端口在哪,端口不是1521

    远程监听       (不在一台主机上)

    本地非默认端口:

    netca创建listener15210,使用15210端口

    $ netstat -tlnp | grep 15210

    写入监听的别名:

    $ cd $ORACLE_HOME/network/admin

    $ vi tnsnames.ora

    listener15210 =

      (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 15210))

      )

      

    修改参数:

    SQL> ALTER SYSTEM SET LOCAL_LISTENER=listener15210;

    SQL> ALTER SYSTEM register;     立即注册(可选)

    服务信息已添加到新的监听中:

    $ lsnrctl status listener15210

    客户端指定新端口连接:

    $ sqlplus sys/password@192.168.0.1:1521/orcl as sysdba 报错

    $ sqlplus sys/password@192.168.0.1:15210/orcl as sysdba

    删除配置:

    SQL> ALTER SYSTEM SET LOCAL_LISTENER='';

    SQL> ALTER SYSTEM register;

    $ vi tnsnames.ora 删除listener15210别名

    netca删除15210端口的监听

    客户端配置

    轻松连接:

    $ sqlplus sys/password@192.168.0.1:1521/orcl as sysdba

    适用于临时性的连接

    本地命名:

    查看现有的主机连接字符串

    $ cd $ORACLE_HOME/network/admin

    $ vi tnsnames.ora    解析

    $ sqlplus sys/password@orcl as sysdba

    使用netca添加新的主机连接字符串orcl192

    $ sqlplus sys/password@orcl192 as sysdba

    SQL> select name from v$database;

    tnsping测试,不需要用户名和口令:

    $ tnsping 192.168.0.1:1521/orcl

    $ tnsping orcl192

    解析方法的顺序:

    $ vi sqlnet.ora

    netca可以修改

    恢复默认设置:

    SQL> alter system set local_listener='';

    SQL> alter sytem register;

    netca删除不需要的监听和连接配置

    共享服务器模式

    专有服务和共享服务模式

    专有模式

    每个用户进程和服务进程间通过监听器建立连接

    进程信息存放于PGA中,也就是说有多少个用户进程就有多少个PGA产生

    单单只有进程连接还不足以操作数据库,还需要产生的会话信息

    会话信息存储在UGA中,UGA在专有模式中存在于PGA

    因为进程和进程间是相互隔离的,所以会话信息也相对独立

    这就导致了服务进程只能获知当前用户进程的会话请求信息 只能为当前用户进程服务

    共享模式

    用户进程的请求被监听器接收,监听器不委派服务器进程,而是将调度器信息返回给客户端

    调度器将用户进程的请求放入请求队列

    多个服务进程中的一个服务进程从队列中获取用户进程的请求,并处理这个用户进程的请求

    服务进程处理完后将处理结果放入响应队列,每个调度器都有自己的响应队列

    响应队列的信息反馈给对应的调度器

    调度器再把服务进程处理的结果返回给用户进程

    共享模式中的用户进程的会话信息对每一个服务器进程来说都是可见的.

    因为共享模式的UGA信息存在于SGA中,所以此时一个用户进程的请求可以由多个服务进程来完成.

    共享服务器的配置 通过初始化参数dispatchers来配置

    可以通过DBCA来修改

    $ lsnrctl service

    SQL> show parameter disp

    SQL> show parameter shared_server

    专有模式和共享模式是可以兼容在一起使用的

    此时看用户如何选择

    tnsnames.ora中

    ORA10G =

      (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))

        (CONNECT_DATA =

          (SERVER = DEDICATED) # 不写这个值就是按服务器的模式来匹配

       # shared 指定使用共享方式连接

       # DEDICATED 指定使用专有模式连接

          (SERVICE_NAME = raw10g)

        )

      )

    测试三种模式

    ORCL_default =   默认

      (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))

        (CONNECT_DATA =

          (SERVICE_NAME = orcl)

        )

      )

    ORCL_dedicated =       管理员

      (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))

        (CONNECT_DATA =

          (SERVER = DEDICATED)

          (SERVICE_NAME = orcl)

        )

      )

    ORCL_shared =      共享

      (DESCRIPTION =

        (ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))

        (CONNECT_DATA =

          (SERVER = SHARED)

          (SERVICE_NAME = orcl)

        )

      )

    测试:

    $ sqlplus sys/password@orcl_default as sysdba

    $ sqlplus sys/password@orcl_dedicated as sysdba

    $ sqlplus sys/password@orcl_shared as sysdba

    SQL> select SID, SERVER, PROGRAM from v$session where USERNAME='SYS';

    SQL> select distinct sid from v$mystat;

    管理维护、大数据量导入、备份恢复等工作不适合用共享方式:

    SQL> shutdown immediate 共享连接下不能发布管理命令

    恢复原有设置:

    dbca修改为dedicated方式

    db link

    数据库A访问远程数据库B上面的表:

    在数据库A中,使用netca创建主机描述字符串orcl_dblink指向数据库B

    $ netca

    $ tnsping orcl_dblink

    在数据库A中创建数据库链接:

    SQL> create database link orcl_dblink_hr connect to hr identified by hr using 'orcl_dblink';

    using使用主机描述字符串orcl_dblink

    用户和口令都是数据库B上的

    db link的名字不要求和主机描述字符串一致

    访问数据库B中的表:

    SQL> select count(*) from hr.employees@orcl_dblink_hr;

    SQL> select count(*) from hr.employees, departments@orcl_dblink_hr;

  • 相关阅读:
    【Java EE 学习 81】【CXF框架】【CXF整合Spring】
    【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
    【Java EE 学习 80 上】【WebService】
    【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
    【Java EE 学习 79 上】【mybatis 基本使用方法】
    【Java EE 学习 78 下】【数据采集系统第十天】【数据采集系统完成】
    【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
    【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】
    【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】
    【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
  • 原文地址:https://www.cnblogs.com/Matilda/p/7323331.html
Copyright © 2011-2022 走看看